This commit is contained in:
dgis 2018-12-18 19:29:06 +00:00
parent 76ccb7c9c4
commit 95dcba492c
5 changed files with 325 additions and 225 deletions

View file

@ -13,7 +13,7 @@ NOT WORKING
- Serial Ports (Wire or Ir) - Serial Ports (Wire or Ir)
TODO TODO
- Change settings per settings - Autosave
- Support 8bits images - Support 8bits images
- Put the KML title in the header of the menu in the drawer - Put the KML title in the header of the menu in the drawer
- Bug: No refresh with the clock - Bug: No refresh with the clock
@ -29,3 +29,4 @@ DONE
- Choose KML/Change KML/NewDocument - Choose KML/Change KML/NewDocument
- Load/Save object - Load/Save object
- Permission issues when reopening document after an OS restart - Permission issues when reopening document after an OS restart
- Change settings per settings

View file

@ -65,12 +65,13 @@ BOOL SetCurrentDirectory(LPCTSTR path)
HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPVOID lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, LPVOID hTemplateFile) HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPVOID lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, LPVOID hTemplateFile)
{ {
BOOL forceNormalFile = FALSE;
if(_tcscmp(lpFileName, szPort2Filename) == 0) { if(_tcscmp(lpFileName, szPort2Filename) == 0) {
// Special case for Port2 filename // Special case for Port2 filename
//TODO forceNormalFile = TRUE;
} }
if(szCurrentDirectorySet || _tcsncmp(lpFileName, assetsPrefix, assetsPrefixLength / sizeof(TCHAR)) == 0) { if(!forceNormalFile && (szCurrentDirectorySet || _tcsncmp(lpFileName, assetsPrefix, assetsPrefixLength / sizeof(TCHAR)) == 0)) {
TCHAR szFileName[MAX_PATH]; TCHAR szFileName[MAX_PATH];
AAsset * asset = NULL; AAsset * asset = NULL;
szFileName[0] = _T('\0'); szFileName[0] = _T('\0');
@ -190,7 +191,7 @@ DWORD GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh) {
*lpFileSizeHigh = 0; *lpFileSizeHigh = 0;
if(hFile->handleType == HANDLE_TYPE_FILE) { if(hFile->handleType == HANDLE_TYPE_FILE) {
off_t currentPosition = lseek(hFile->fileDescriptor, 0, SEEK_CUR); off_t currentPosition = lseek(hFile->fileDescriptor, 0, SEEK_CUR);
off_t fileLength = lseek(hFile->fileDescriptor, 0, SEEK_END) + 1; off_t fileLength = lseek(hFile->fileDescriptor, 0, SEEK_END); // + 1;
lseek(hFile->fileDescriptor, currentPosition, SEEK_SET); lseek(hFile->fileDescriptor, currentPosition, SEEK_SET);
return fileLength; return fileLength;
} else if(hFile->handleType == HANDLE_TYPE_FILE_ASSET) { } else if(hFile->handleType == HANDLE_TYPE_FILE_ASSET) {
@ -211,7 +212,7 @@ HANDLE CreateFileMapping(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttrib
handle->handleType = HANDLE_TYPE_FILE_MAPPING_ASSET; handle->handleType = HANDLE_TYPE_FILE_MAPPING_ASSET;
handle->fileAsset = hFile->fileAsset; handle->fileAsset = hFile->fileAsset;
} }
handle->fileMappingSize = (dwMaximumSizeHigh << 32) & dwMaximumSizeLow; handle->fileMappingSize = (dwMaximumSizeHigh << 32) | dwMaximumSizeLow;
handle->fileMappingAddress = NULL; handle->fileMappingAddress = NULL;
return handle; return handle;
} }

View file

@ -1,15 +1,22 @@
package com.regis.cosnier.emu48; package com.regis.cosnier.emu48;
import android.Manifest; import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import android.view.MotionEvent; import android.view.MotionEvent;
@ -45,7 +52,15 @@ import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener { implements NavigationView.OnNavigationItemSelectedListener {
private static final int INTENT_SETTINGS = 1; public static final int INTENT_GETOPENFILENAME = 1;
public static final int INTENT_GETSAVEFILENAME = 2;
public static final int INTENT_OBJECT_LOAD = 3;
public static final int INTENT_OBJECT_SAVE = 4;
public static final int INTENT_SETTINGS = 5;
public static final int INTENT_PORT2LOAD = 6;
public static MainActivity mainActivity;
private static final String TAG = "MainActivity"; private static final String TAG = "MainActivity";
private MainScreenView mainScreenView; private MainScreenView mainScreenView;
SharedPreferences sharedPreferences; SharedPreferences sharedPreferences;
@ -80,6 +95,8 @@ public class MainActivity extends AppCompatActivity
mainActivity = this;
ViewGroup mainScreenContainer = (ViewGroup)findViewById(R.id.main_screen_container); ViewGroup mainScreenContainer = (ViewGroup)findViewById(R.id.main_screen_container);
mainScreenView = new MainScreenView(this); //, currentProject); mainScreenView = new MainScreenView(this); //, currentProject);
@ -101,7 +118,7 @@ public class MainActivity extends AppCompatActivity
toolbar.setVisibility(View.GONE); toolbar.setVisibility(View.GONE);
mainScreenContainer.addView(mainScreenView, 0); mainScreenContainer.addView(mainScreenView, 0);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
updateFromPreferences(null, false); updateFromPreferences(null, false);
sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override @Override
@ -332,11 +349,6 @@ public class MainActivity extends AppCompatActivity
}).show(); }).show();
} }
public static int INTENT_GETOPENFILENAME = 1;
public static int INTENT_GETSAVEFILENAME = 2;
public static int INTENT_OBJECT_LOAD = 3;
public static int INTENT_OBJECT_SAVE = 4;
private void OnFileOpen() { private void OnFileOpen() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE); intent.addCategory(Intent.CATEGORY_OPENABLE);
@ -379,21 +391,40 @@ public class MainActivity extends AppCompatActivity
startActivityForResult(new Intent(this, SettingsActivity.class), INTENT_SETTINGS); startActivityForResult(new Intent(this, SettingsActivity.class), INTENT_SETTINGS);
} }
private void OnObjectLoad() { private void openDocument() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE); intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*"); intent.setType("*/*");
// //Intent.setType("application/*|text/*"); // //Intent.setType("application/*|text/*");
// String[] mimeTypes = { // String[] mimeTypes = {
// "text/plain", // "text/plain",
// "application/pdf", // "application/pdf",
// "application/zip" // "application/zip"
// }; // };
// intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes); // intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
intent.putExtra(Intent.EXTRA_TITLE, "emu48-object.hp"); intent.putExtra(Intent.EXTRA_TITLE, "emu48-object.hp");
startActivityForResult(intent, INTENT_OBJECT_LOAD); startActivityForResult(intent, INTENT_OBJECT_LOAD);
}
//NativeLib.onObjectLoad(); private void OnObjectLoad() {
if(sharedPreferences.getBoolean("settings_objectloadwarning", false)) {
DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
openDocument();
}
}
};
new AlertDialog.Builder(this)
.setMessage("Warning: Trying to load an object while the emulator is busy\n" +
"will certainly result in a memory lost. Before loading an object\n" +
"you should be sure that the calculator is in idle state.\n" +
"Do you want to see this warning next time you try to load an object?")
.setPositiveButton(android.R.string.yes, onClickListener)
.setNegativeButton(android.R.string.no, onClickListener)
.show();
} else
openDocument();
} }
private void OnObjectSave() { private void OnObjectSave() {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
@ -401,9 +432,6 @@ public class MainActivity extends AppCompatActivity
intent.setType("*/*"); intent.setType("*/*");
intent.putExtra(Intent.EXTRA_TITLE, "emu48-object.hp"); intent.putExtra(Intent.EXTRA_TITLE, "emu48-object.hp");
startActivityForResult(intent, INTENT_OBJECT_SAVE); startActivityForResult(intent, INTENT_OBJECT_SAVE);
//NativeLib.onObjectSave();
} }
private void OnViewCopy() { private void OnViewCopy() {
NativeLib.onViewCopy(); NativeLib.onViewCopy();
@ -498,6 +526,8 @@ public class MainActivity extends AppCompatActivity
String url = uri.toString(); String url = uri.toString();
NativeLib.onObjectSave(url); NativeLib.onObjectSave(url);
} else if(requestCode == INTENT_SETTINGS) {
} }
} }
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
@ -519,7 +549,7 @@ public class MainActivity extends AppCompatActivity
if(sharedPreferences.getBoolean("settings_alwaysdisplog", true)) { if(sharedPreferences.getBoolean("settings_alwaysdisplog", true)) {
String kmlLog = NativeLib.getKMLLog(); String kmlLog = NativeLib.getKMLLog();
new AlertDialog.Builder(this) new AlertDialog.Builder(this)
.setTitle("Pick a calculator") .setTitle("KML Script Compilation Result")
.setMessage(kmlLog) .setMessage(kmlLog)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
@ -554,7 +584,6 @@ public class MainActivity extends AppCompatActivity
if(key == null) { if(key == null) {
// boolean settingsAutosave = sharedPreferences.getBoolean("settings_autosave", false); // boolean settingsAutosave = sharedPreferences.getBoolean("settings_autosave", false);
// boolean settingsAutosaveonexit = sharedPreferences.getBoolean("settings_autosaveonexit", false); // boolean settingsAutosaveonexit = sharedPreferences.getBoolean("settings_autosaveonexit", false);
// boolean settingsObjectloadwarning = sharedPreferences.getBoolean("settings_objectloadwarning", false);
String[] settingKeys = { "settings_realspeed", "settings_grayscale", "settings_alwaysdisplog", "settings_port1", "settings_port2" }; String[] settingKeys = { "settings_realspeed", "settings_grayscale", "settings_alwaysdisplog", "settings_port1", "settings_port2" };
for (String settingKey : settingKeys) { for (String settingKey : settingKeys) {
updateFromPreferences(settingKey, false); updateFromPreferences(settingKey, false);

View file

@ -1,10 +1,12 @@
package com.regis.cosnier.emu48; package com.regis.cosnier.emu48;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.preference.ListPreference; import android.preference.ListPreference;
@ -12,8 +14,10 @@ import android.preference.Preference;
import android.preference.PreferenceActivity; import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log;
import android.view.MenuItem; import android.view.MenuItem;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.core.app.NavUtils; import androidx.core.app.NavUtils;
@ -30,6 +34,38 @@ import androidx.core.app.NavUtils;
*/ */
public class SettingsActivity extends AppCompatPreferenceActivity { public class SettingsActivity extends AppCompatPreferenceActivity {
private static final String TAG = "SettingsActivity";
private static SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
// Show the Up button in the action bar.
actionBar.setDisplayHomeAsUpEnabled(true);
}
getFragmentManager().beginTransaction().replace(android.R.id.content, new GeneralPreferenceFragment()).commit();
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
if (!super.onMenuItemSelected(featureId, item)) {
NavUtils.navigateUpFromSameTask(this);
}
return true;
}
return super.onMenuItemSelected(featureId, item);
}
/** /**
* A preference value change listener that updates the preference's summary * A preference value change listener that updates the preference's summary
* to reflect its new value. * to reflect its new value.
@ -69,91 +105,48 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
} }
/** // /**
* Binds a preference's summary to its value. More specifically, when the // * Binds a preference's summary to its value. More specifically, when the
* preference's value is changed, its summary (line of text below the // * preference's value is changed, its summary (line of text below the
* preference title) is updated to reflect the value. The summary is also // * preference title) is updated to reflect the value. The summary is also
* immediately updated upon calling this method. The exact display format is // * immediately updated upon calling this method. The exact display format is
* dependent on the type of preference. // * dependent on the type of preference.
* // *
* @see #sBindPreferenceSummaryToValueListener // * @see #sBindPreferenceSummaryToValueListener
*/ // */
private static void bindPreferenceSummaryToStringValue(Preference preference) { // private static void bindPreferenceSummaryToStringValue(Preference preference) {
// Set the listener to watch for value changes. // preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); // sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, sharedPreferences.getString(preference.getKey(), ""));
// }
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(preference.getContext()); //
// /**
// Trigger the listener immediately with the preference's // * Binds a preference's summary to its value. More specifically, when the
// current value. // * preference's value is changed, its summary (line of text below the
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, sharedPreferences.getString(preference.getKey(), "")); // * preference title) is updated to reflect the value. The summary is also
} // * immediately updated upon calling this method. The exact display format is
// * dependent on the type of preference.
/** // *
* Binds a preference's summary to its value. More specifically, when the // * @see #sBindPreferenceSummaryToValueListener
* preference's value is changed, its summary (line of text below the // */
* preference title) is updated to reflect the value. The summary is also // private static void bindPreferenceSummaryToIntValue(Preference preference) {
* immediately updated upon calling this method. The exact display format is // preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
* dependent on the type of preference. // sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, sharedPreferences.getInt(preference.getKey(), 0));
* // }
* @see #sBindPreferenceSummaryToValueListener //
*/ // /**
private static void bindPreferenceSummaryToIntValue(Preference preference) { // * Binds a preference's summary to its value. More specifically, when the
// Set the listener to watch for value changes. // * preference's value is changed, its summary (line of text below the
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); // * preference title) is updated to reflect the value. The summary is also
// * immediately updated upon calling this method. The exact display format is
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(preference.getContext()); // * dependent on the type of preference.
// *
// Trigger the listener immediately with the preference's // * @see #sBindPreferenceSummaryToValueListener
// current value. // */
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, sharedPreferences.getInt(preference.getKey(), 0)); // private static void bindPreferenceSummaryToBoolValue(Preference preference) {
} // // Set the listener to watch for value changes.
// preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
/** // sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, sharedPreferences.getBoolean(preference.getKey(), false));
* Binds a preference's summary to its value. More specifically, when the // }
* preference's value is changed, its summary (line of text below the
* preference title) is updated to reflect the value. The summary is also
* immediately updated upon calling this method. The exact display format is
* dependent on the type of preference.
*
* @see #sBindPreferenceSummaryToValueListener
*/
private static void bindPreferenceSummaryToBoolValue(Preference preference) {
// Set the listener to watch for value changes.
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(preference.getContext());
// Trigger the listener immediately with the preference's
// current value.
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, sharedPreferences.getBoolean(preference.getKey(), false));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
// Show the Up button in the action bar.
actionBar.setDisplayHomeAsUpEnabled(true);
}
getFragmentManager().beginTransaction().replace(android.R.id.content, new GeneralPreferenceFragment()).commit();
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
if (!super.onMenuItemSelected(featureId, item)) {
NavUtils.navigateUpFromSameTask(this);
}
return true;
}
return super.onMenuItemSelected(featureId, item);
}
/** /**
* {@inheritDoc} * {@inheritDoc}
@ -196,33 +189,164 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
addPreferencesFromResource(R.xml.pref_general); addPreferencesFromResource(R.xml.pref_general);
setHasOptionsMenu(true); setHasOptionsMenu(true);
// Bind the summaries of EditText/List/Dialog/Ringtone preferences
// to their values. When their values change, their summaries are
// updated to reflect the new value, per the Android Design
// guidelines.
// bindPreferenceSummaryToStringValue(findPreference("settings_input"));
// bindPreferenceSummaryToIntValue(findPreference("settings_audio_input"));
bindPreferenceSummaryToBoolValue(findPreference("settings_realspeed")); // General settings
bindPreferenceSummaryToBoolValue(findPreference("settings_grayscale"));
// bindPreferenceSummaryToBoolValue(findPreference("settings_alwaysontop"));
// bindPreferenceSummaryToBoolValue(findPreference("settings_actfollowsmouse"));
// bindPreferenceSummaryToBoolValue(findPreference("settings_singleinstance"));
bindPreferenceSummaryToBoolValue(findPreference("settings_autosave"));
bindPreferenceSummaryToBoolValue(findPreference("settings_autosaveonexit"));
bindPreferenceSummaryToBoolValue(findPreference("settings_objectloadwarning"));
bindPreferenceSummaryToBoolValue(findPreference("settings_alwaysdisplog"));
bindPreferenceSummaryToBoolValue(findPreference("settings_port1en"));
bindPreferenceSummaryToBoolValue(findPreference("settings_port1wr"));
bindPreferenceSummaryToBoolValue(findPreference("settings_port2en"));
bindPreferenceSummaryToBoolValue(findPreference("settings_port2wr"));
boolean disablePortPreferences = (NativeLib.getIsPortExtensionPossible() == 0); Preference preferenceRealspeed = findPreference("settings_realspeed");
//TODO not working Preference.OnPreferenceChangeListener onPreferenceChangeListenerRealspeed = new Preference.OnPreferenceChangeListener() {
findPreference("settings_port1en").setShouldDisableView(disablePortPreferences); @Override
findPreference("settings_port1wr").setShouldDisableView(disablePortPreferences); public boolean onPreferenceChange(Preference preference, Object value) {
findPreference("settings_port2en").setShouldDisableView(disablePortPreferences); String stringValue = value.toString();
findPreference("settings_port2wr").setShouldDisableView(disablePortPreferences); preference.setSummary(stringValue);
return true;
}
};
preferenceRealspeed.setOnPreferenceChangeListener(onPreferenceChangeListenerRealspeed);
onPreferenceChangeListenerRealspeed.onPreferenceChange(preferenceRealspeed, sharedPreferences.getBoolean(preferenceRealspeed.getKey(), false));
Preference preferenceGrayscale = findPreference("settings_grayscale");
Preference.OnPreferenceChangeListener onPreferenceChangeListenerGrayscale = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
preference.setSummary(stringValue);
return true;
}
};
preferenceGrayscale.setOnPreferenceChangeListener(onPreferenceChangeListenerGrayscale);
onPreferenceChangeListenerGrayscale.onPreferenceChange(preferenceGrayscale, sharedPreferences.getBoolean(preferenceGrayscale.getKey(), false));
Preference preferenceAutosave = findPreference("settings_autosave");
Preference.OnPreferenceChangeListener onPreferenceChangeListenerAutosave = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
preference.setSummary(stringValue);
return true;
}
};
preferenceAutosave.setOnPreferenceChangeListener(onPreferenceChangeListenerAutosave);
onPreferenceChangeListenerAutosave.onPreferenceChange(preferenceAutosave, sharedPreferences.getBoolean(preferenceAutosave.getKey(), false));
Preference preferenceAutosaveonexit = findPreference("settings_autosaveonexit");
Preference.OnPreferenceChangeListener onPreferenceChangeListenerAutosaveonexit = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
preference.setSummary(stringValue);
return true;
}
};
preferenceAutosaveonexit.setOnPreferenceChangeListener(onPreferenceChangeListenerAutosaveonexit);
onPreferenceChangeListenerAutosaveonexit.onPreferenceChange(preferenceAutosaveonexit, sharedPreferences.getBoolean(preferenceAutosaveonexit.getKey(), false));
Preference preferenceObjectloadwarning = findPreference("settings_objectloadwarning");
Preference.OnPreferenceChangeListener onPreferenceChangeListenerObjectloadwarning = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
preference.setSummary(stringValue);
return true;
}
};
preferenceObjectloadwarning.setOnPreferenceChangeListener(onPreferenceChangeListenerObjectloadwarning);
onPreferenceChangeListenerObjectloadwarning.onPreferenceChange(preferenceObjectloadwarning, sharedPreferences.getBoolean(preferenceObjectloadwarning.getKey(), false));
Preference preferenceAlwaysdisplog = findPreference("settings_alwaysdisplog");
Preference.OnPreferenceChangeListener onPreferenceChangeListenerAlwaysdisplog = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
preference.setSummary(stringValue);
return true;
}
};
preferenceAlwaysdisplog.setOnPreferenceChangeListener(onPreferenceChangeListenerAlwaysdisplog);
onPreferenceChangeListenerAlwaysdisplog.onPreferenceChange(preferenceAlwaysdisplog, sharedPreferences.getBoolean(preferenceAlwaysdisplog.getKey(), false));
// Ports 1 & 2 settings
final Preference preferencePort1en = findPreference("settings_port1en");
final Preference preferencePort1wr = findPreference("settings_port1wr");
final Preference preferencePort2en = findPreference("settings_port2en");
final Preference preferencePort2wr = findPreference("settings_port2wr");
final Preference preferencePort2load = findPreference("settings_port2load");
final boolean enablePortPreferences = !(NativeLib.getIsPortExtensionPossible() == 0);
Preference.OnPreferenceChangeListener onPreferenceChangeListenerPort1en = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
Boolean booleanValue = (Boolean)value;
String stringValue = value.toString();
preference.setSummary(stringValue);
preferencePort1en.setEnabled(enablePortPreferences);
preferencePort1wr.setEnabled(enablePortPreferences && booleanValue.booleanValue());
return true;
}
};
preferencePort1en.setOnPreferenceChangeListener(onPreferenceChangeListenerPort1en);
onPreferenceChangeListenerPort1en.onPreferenceChange(preferencePort1en, sharedPreferences.getBoolean(preferencePort1en.getKey(), false));
Preference.OnPreferenceChangeListener onPreferenceChangeListenerPort1wr = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
preference.setSummary(stringValue);
return true;
}
};
preferencePort1wr.setOnPreferenceChangeListener(onPreferenceChangeListenerPort1wr);
onPreferenceChangeListenerPort1wr.onPreferenceChange(preferencePort1wr, sharedPreferences.getBoolean(preferencePort1wr.getKey(), false));
Preference.OnPreferenceChangeListener onPreferenceChangeListenerPort2en = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
Boolean booleanValue = (Boolean)value;
String stringValue = value.toString();
preference.setSummary(stringValue);
preferencePort2en.setEnabled(enablePortPreferences);
preferencePort2wr.setEnabled(enablePortPreferences && booleanValue.booleanValue());
preferencePort2load.setEnabled(enablePortPreferences && booleanValue.booleanValue());
return true;
}
};
preferencePort2en.setOnPreferenceChangeListener(onPreferenceChangeListenerPort2en);
onPreferenceChangeListenerPort2en.onPreferenceChange(preferencePort2en, sharedPreferences.getBoolean(preferencePort2en.getKey(), false));
Preference.OnPreferenceChangeListener onPreferenceChangeListenerPort2wr = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
preference.setSummary(stringValue);
return true;
}
};
preferencePort2wr.setOnPreferenceChangeListener(onPreferenceChangeListenerPort2wr);
onPreferenceChangeListenerPort2wr.onPreferenceChange(preferencePort2wr, sharedPreferences.getBoolean(preferencePort2wr.getKey(), false));
Preference.OnPreferenceChangeListener onPreferenceChangeListenerPort2load = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
preference.setSummary(stringValue);
return true;
}
};
preferencePort2load.setOnPreferenceChangeListener(onPreferenceChangeListenerPort2load);
onPreferenceChangeListenerPort2load.onPreferenceChange(preferencePort2load, sharedPreferences.getString(preferencePort2load.getKey(), ""));
preferencePort2load.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
//intent.setType("YOUR FILETYPE"); //not needed, but maybe usefull
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_TITLE, "shared.bin");
getActivity().startActivityForResult(intent, MainActivity.INTENT_PORT2LOAD);
return true;
}
});
} }
@Override @Override
@ -235,4 +359,26 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
} }
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if(resultCode == Activity.RESULT_OK) {
if(requestCode == MainActivity.INTENT_PORT2LOAD) {
Uri uri = data.getData();
//Log.d(TAG, "onActivityResult INTENT_PORT2LOAD " + uri.toString());
String url = uri.toString();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("settings_port2load", url);
editor.commit();
makeUriPersistable(data, uri);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
private void makeUriPersistable(Intent data, Uri uri) {
//grantUriPermission(getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);
}
} }

View file

@ -1,90 +1,6 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<!--<ListPreference-->
<!--android:key="settings_input"-->
<!--android:defaultValue="0"-->
<!--android:title="@string/settings_input_title"-->
<!--android:entries="@array/settings_input_list_titles"-->
<!--android:entryValues="@array/settings_input_list_values"-->
<!--android:negativeButtonText="@null"-->
<!--android:positiveButtonText="@null"-->
<!--/>-->
<!--<ListPreference-->
<!--android:key="settings_audio_engine"-->
<!--android:defaultValue="0"-->
<!--android:title="@string/settings_audio_engine_title"-->
<!--android:entries="@array/settings_audio_engine_list_titles"-->
<!--android:entryValues="@array/settings_audio_engine_list_values"-->
<!--android:negativeButtonText="@null"-->
<!--android:positiveButtonText="@null"-->
<!--/>-->
<!--<com.regis.cosnier.emu48.AudioDeviceSpinnerPreference-->
<!--android:key="settings_audio_input"-->
<!--android:defaultValue="0"-->
<!--android:title="@string/settings_audio_input_title"-->
<!--android:dialogMessage="@string/settings_audio_input_title_dialog"-->
<!--/>-->
<!--<ListPreference-->
<!--android:key="settings_sample_rate"-->
<!--android:defaultValue="48000"-->
<!--android:title="@string/settings_sample_rate_title"-->
<!--android:entries="@array/settings_sample_rate_list_titles"-->
<!--android:entryValues="@array/settings_sample_rate_list_values"-->
<!--android:negativeButtonText="@null"-->
<!--android:positiveButtonText="@null"-->
<!--/>-->
<!--<ListPreference-->
<!--android:key="settings_fft_size"-->
<!--android:defaultValue="1024"-->
<!--android:title="@string/settings_fft_size_title"-->
<!--android:entries="@array/settings_fft_size_list_titles"-->
<!--android:entryValues="@array/settings_fft_size_list_values"-->
<!--android:negativeButtonText="@null"-->
<!--android:positiveButtonText="@null"-->
<!--/>-->
<!--<com.regis.cosnier.emu48.SeekBarPreference-->
<!--android:key="settings_volume_scale"-->
<!--android:title="@string/settings_volume_scale_title"-->
<!--android:dialogMessage="@string/settings_volume_scale_title"-->
<!--android:defaultValue="0"-->
<!--app:suffix="@string/settings_volume_scale_suffix"-->
<!--app:suffixes="@string/settings_volume_scale_suffixes"-->
<!--app:min="-1000"-->
<!--android:max="1000"-->
<!--/>-->
<!--<com.regis.cosnier.emu48.SeekBarPreference-->
<!--android:key="settings_tempo"-->
<!--android:title="settings_tempo_title"-->
<!--android:dialogMessage="settings_tempo_title"-->
<!--android:defaultValue="96"-->
<!--app:min="20"-->
<!--android:max="200"-->
<!--/>-->
<!--<com.regis.cosnier.emu48.SeekBarPreference-->
<!--android:key="settings_intensity_minimum"-->
<!--android:title="@string/settings_intensity_minimum_title"-->
<!--android:dialogMessage="@string/settings_intensity_minimum_title"-->
<!--android:defaultValue="20"-->
<!--app:min="1"-->
<!--android:max="90"-->
<!--/>-->
<!--<com.regis.cosnier.emu48.SeekBarPreference-->
<!--android:key="settings_translation"-->
<!--android:title="@string/settings_translation_title"-->
<!--android:dialogMessage="@string/settings_translation_title"-->
<!--android:defaultValue="0"-->
<!--app:min="-60"-->
<!--android:max="60"-->
<!--/>-->
<!-- General --> <!-- General -->
<PreferenceCategory app:title="General"> <PreferenceCategory app:title="General">
<SwitchPreference <SwitchPreference
@ -138,21 +54,28 @@
<SwitchPreference <SwitchPreference
android:key="settings_port1en" android:key="settings_port1en"
android:title="Port 1 is Plugged" android:title="Port 1 is Plugged"
android:defaultValue="false" /> android:defaultValue="false"
/>
<SwitchPreference <SwitchPreference
android:key="settings_port1wr" android:key="settings_port1wr"
android:title="Port 1 is Writeable" android:title="Port 1 is Writeable"
android:defaultValue="false" /> android:defaultValue="false"
/>
<SwitchPreference <SwitchPreference
android:key="settings_port2en" android:key="settings_port2en"
android:title="Port 2 is Plugged" android:title="Port 2 is Plugged"
android:defaultValue="false" /> android:defaultValue="false"
/>
<SwitchPreference <SwitchPreference
android:key="settings_port2wr" android:key="settings_port2wr"
android:title="Port 2 is Writeable" android:title="Port 2 is Writeable"
android:defaultValue="false" /> android:defaultValue="false"
<!--"Port 2 File :",IDC_STATIC,14,47,37,8--> />
<!--"...",IDC_PORT2LOAD,227,45,10,12--> <Preference
android:key="settings_port2load"
android:title="Port 2 File"
android:summary=""
/>
</PreferenceCategory> </PreferenceCategory>
<!-- Peripheral --> <!-- Peripheral -->