diff --git a/app/build.gradle b/app/build.gradle
index 8bf6add..3838ce1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,7 +4,7 @@ android {
compileSdkVersion 28
defaultConfig {
applicationId "org.emulator.forty.eight"
- minSdkVersion 19
+ minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
diff --git a/app/src/main/java/org/emulator/forty/eight/MainActivity.java b/app/src/main/java/org/emulator/forty/eight/MainActivity.java
index 182e8cd..f5ce242 100644
--- a/app/src/main/java/org/emulator/forty/eight/MainActivity.java
+++ b/app/src/main/java/org/emulator/forty/eight/MainActivity.java
@@ -66,7 +66,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
public static final int INTENT_OBJECT_SAVE = 4;
public static final int INTENT_SETTINGS = 5;
public static final int INTENT_PORT2LOAD = 6;
- public static final int INTENT_PICK_KML_FILE = 7;
+ public static final int INTENT_PICK_KML_FOLDER = 7;
+ public static final int INTENT_PICK_KML_FILE = 8;
public static MainActivity mainActivity;
@@ -556,12 +557,28 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == lastIndex) {
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+// Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+// //intent.setType("file/*");
+// //intent.setType("*/*");
+// intent.setType("application/vnd.google-earth.kml+xml");
+// intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
+// startActivityForResult(intent, INTENT_PICK_KML_FILE);
+ //Intent intent = new Intent(Intent.ACTION_PICK);
+ //Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
+ //Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Files.);
//intent.setType("file/*");
//intent.setType("*/*");
- intent.setType("application/vnd.google-earth.kml+xml");
- intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
- startActivityForResult(intent, INTENT_PICK_KML_FILE);
+
+// Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+// intent.addCategory(Intent.CATEGORY_OPENABLE);
+// intent.setType("application/vnd.google-earth.kml+xml");
+// intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
+// startActivityForResult(intent, INTENT_PICK_KML_FILE);
+
+ //https://github.com/googlesamples/android-DirectorySelection
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
+ startActivityForResult(intent, INTENT_PICK_KML_FOLDER);
+
} else {
String kmlScriptFilename = kmlScripts.get(which).filename;
newFileFromKML(kmlScriptFilename);
@@ -820,8 +837,19 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
}
case INTENT_SETTINGS:
break;
- case INTENT_PICK_KML_FILE:
- Log.d(TAG, "onActivityResult INTENT_OBJECT_SAVE " + url);
+// case INTENT_PICK_KML_FILE:
+// Log.d(TAG, "onActivityResult INTENT_PICK_KML_FILE " + url);
+// String filePath = Utils.getFilePath(this, url);
+// newFileFromKML(filePath);
+// break;
+ case INTENT_PICK_KML_FOLDER:
+ Log.d(TAG, "onActivityResult INTENT_PICK_KML_FOLDER " + url);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putBoolean("settings_kml_default", false);
+ editor.putString("settings_kml_folder", url);
+ editor.apply();
+ makeUriPersistableReadOnly(data, uri);
+
String filePath = Utils.getFilePath(this, url);
newFileFromKML(filePath);
break;
@@ -847,6 +875,12 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);
}
+ private void makeUriPersistableReadOnly(Intent data, Uri uri) {
+ //grantUriPermission(getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ getContentResolver().takePersistableUriPermission(uri, takeFlags);
+ }
+
private int onFileOpen(String url) {
int result = NativeLib.onFileOpen(url);
@@ -1065,7 +1099,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
private void updateFromPreferences(String key, boolean isDynamic) {
int isDynamicValue = isDynamic ? 1 : 0;
if(key == null) {
- String[] settingKeys = { "settings_realspeed", "settings_grayscale", "settings_port1", "settings_port2" };
+ String[] settingKeys = { "settings_realspeed", "settings_grayscale", "settings_kml", "settings_port1", "settings_port2" };
for (String settingKey : settingKeys) {
updateFromPreferences(settingKey, false);
}
@@ -1077,6 +1111,27 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
case "settings_grayscale":
NativeLib.setConfiguration(key, isDynamicValue, sharedPreferences.getBoolean(key, false) ? 1 : 0, 0, null);
break;
+
+ case "settings_allow_rotation":
+ //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
+ settingUpdateAllowRotation();
+ break;
+ case "settings_fill_screen":
+ mainScreenView.setFillScreen(sharedPreferences.getBoolean("settings_fill_screen", false));
+ break;
+
+ case "settings_kml":
+ case "settings_kml_default":
+ case "settings_kml_folder":
+ boolean useDefaultKMLFolder = sharedPreferences.getBoolean("settings_kml_default", true);
+ if(!useDefaultKMLFolder) {
+ String kmlFolderURL = sharedPreferences.getString("settings_kml_folder", "");
+ // https://github.com/googlesamples/android-DirectorySelection
+ // https://stackoverflow.com/questions/44185477/intent-action-open-document-tree-doesnt-seem-to-return-a-real-path-to-drive/44185706
+ // https://stackoverflow.com/questions/26744842/how-to-use-the-new-sd-card-access-api-presented-for-android-5-0-lollipop
+ }
+ break;
+
case "settings_port1":
case "settings_port1en":
case "settings_port1wr":
@@ -1094,14 +1149,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
sharedPreferences.getBoolean("settings_port2wr", false) ? 1 : 0,
sharedPreferences.getString("settings_port2load", ""));
break;
-
- case "settings_allow_rotation":
- //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
- settingUpdateAllowRotation();
- break;
- case "settings_fill_screen":
- mainScreenView.setFillScreen(sharedPreferences.getBoolean("settings_fill_screen", false));
- break;
}
}
}
diff --git a/app/src/main/java/org/emulator/forty/eight/SettingsActivity.java b/app/src/main/java/org/emulator/forty/eight/SettingsActivity.java
index e1f8512..0378e29 100644
--- a/app/src/main/java/org/emulator/forty/eight/SettingsActivity.java
+++ b/app/src/main/java/org/emulator/forty/eight/SettingsActivity.java
@@ -267,6 +267,49 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
preferenceAlwaysdisplog.setOnPreferenceChangeListener(onPreferenceChangeListenerAlwaysdisplog);
onPreferenceChangeListenerAlwaysdisplog.onPreferenceChange(preferenceAlwaysdisplog, sharedPreferences.getBoolean(preferenceAlwaysdisplog.getKey(), false));
+
+ // KML settings
+
+ final Preference preferenceKMLDefault = findPreference("settings_kml_default");
+ final Preference preferenceKMLFolder = findPreference("settings_kml_folder");
+
+ Preference.OnPreferenceChangeListener onPreferenceChangeListenerKMLDefault = new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object value) {
+ Boolean booleanValue = (Boolean)value;
+ String stringValue = value.toString();
+ preference.setSummary(stringValue);
+ preferenceKMLFolder.setEnabled(booleanValue);
+ return true;
+ }
+ };
+ preferenceKMLDefault.setOnPreferenceChangeListener(onPreferenceChangeListenerKMLDefault);
+ onPreferenceChangeListenerKMLDefault.onPreferenceChange(preferenceKMLDefault, sharedPreferences.getBoolean(preferenceKMLDefault.getKey(), true));
+
+ Preference.OnPreferenceChangeListener onPreferenceChangeListenerKMLFolder = new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object value) {
+ String stringValue = value.toString();
+ String displayName = stringValue;
+ try {
+ displayName = Utils.getFileName(getActivity(), stringValue);
+ } catch(Exception e) {
+ }
+ preference.setSummary(displayName);
+ return true;
+ }
+ };
+ preferenceKMLFolder.setOnPreferenceChangeListener(onPreferenceChangeListenerKMLFolder);
+ onPreferenceChangeListenerKMLFolder.onPreferenceChange(preferenceKMLFolder, sharedPreferences.getString(preferenceKMLFolder.getKey(), ""));
+ preferenceKMLFolder.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
+ startActivityForResult(intent, MainActivity.INTENT_PICK_KML_FOLDER);
+ return true;
+ }
+ });
+
// Ports 1 & 2 settings
final Preference preferencePort1en = findPreference("settings_port1en");
@@ -377,8 +420,15 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
String url = uri.toString();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("settings_port2load", url);
- editor.commit();
+ editor.apply();
makeUriPersistable(data, uri);
+ } else if(requestCode == MainActivity.INTENT_PICK_KML_FOLDER) {
+ Uri uri = data.getData();
+ String url = uri.toString();
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString("settings_kml_folder", url);
+ editor.apply();
+ makeUriPersistableReadOnly(data, uri);
}
}
super.onActivityResult(requestCode, resultCode, data);
@@ -389,4 +439,9 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);
}
+ private void makeUriPersistableReadOnly(Intent data, Uri uri) {
+ //grantUriPermission(getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ getContentResolver().takePersistableUriPermission(uri, takeFlags);
+ }
}
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
index 8b7cfe9..dfbe188 100644
--- a/app/src/main/res/xml/pref_general.xml
+++ b/app/src/main/res/xml/pref_general.xml
@@ -36,7 +36,26 @@
android:key="settings_fill_screen"
android:title="Fill screen"
android:defaultValue="false" />
+
+
+
+
+
+
+
+