From 0f9f4a70eb471facc3ed67400631a7550cd16fd6 Mon Sep 17 00:00:00 2001 From: Aaron Culliney Date: Thu, 17 Sep 2015 22:22:40 -0700 Subject: [PATCH] For devices without /sdcard mounted, fall back to alt keyboards supplied in APK --- .../deadc0de/apple2ix/Apple2DisksMenu.java | 6 ++++ .../apple2ix/Apple2KeyboardSettingsMenu.java | 33 ++++++++++--------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2DisksMenu.java b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2DisksMenu.java index 31ce8775..84ad6805 100644 --- a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2DisksMenu.java +++ b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2DisksMenu.java @@ -133,6 +133,12 @@ public class Apple2DisksMenu implements Apple2MenuView { for (String disk : disks) { Apple2DisksMenu.copyFile(activity, "disks", disk, sDataDir + File.separator + "disks"); } + + String[] keyboards = activity.getAssets().list("keyboards"); + for (String kbd : keyboards) { + Apple2DisksMenu.copyFile(activity, "keyboards", kbd, sDataDir + File.separator + "keyboards"); + } + } catch (IOException e) { Log.e(TAG, "problem copying resources : " + e); throw new RuntimeException("This should not happen"); diff --git a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2KeyboardSettingsMenu.java b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2KeyboardSettingsMenu.java index 4a5d4ae7..f9f859cd 100644 --- a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2KeyboardSettingsMenu.java +++ b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2KeyboardSettingsMenu.java @@ -11,6 +11,7 @@ package org.deadc0de.apple2ix; +import android.util.Log; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; @@ -24,7 +25,7 @@ import org.deadc0de.apple2ix.basic.R; public class Apple2KeyboardSettingsMenu extends Apple2AbstractMenu { - private final static String TAG = "Apple2KeyboardSettingsMenu"; + private final static String TAG = "KeyboardSettingsMenu"; // These settings must match native side public final static int MOUSETEXT_BEGIN = 0x80; @@ -225,12 +226,9 @@ public class Apple2KeyboardSettingsMenu extends Apple2AbstractMenu { @Override public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) { - File keyboardDir = Apple2DisksMenu.getExternalStorageDirectory(); - if (keyboardDir == null) { - keyboardDir = new File(Apple2DisksMenu.getDataDir(activity) + File.separator + "keyboards"); - } + File extKeyboardDir = Apple2DisksMenu.getExternalStorageDirectory(); - final File[] files = keyboardDir.listFiles(new FilenameFilter() { + FilenameFilter kbdJsonFilter = new FilenameFilter() { public boolean accept(File dir, String name) { File file = new File(dir, name); if (file.isDirectory()) { @@ -249,25 +247,30 @@ public class Apple2KeyboardSettingsMenu extends Apple2AbstractMenu { String suffix = name.substring(nameLen - extLen, nameLen); return (suffix.equalsIgnoreCase(extension)); } - }); + }; - // This appears to happen in cases where the external files directory String is valid, but is not actually mounted - // We could probably check for more media "states" in the setup above ... but this defensive coding probably should - // remain here after any refactoring =) + File[] files = extKeyboardDir.listFiles(kbdJsonFilter); if (files == null) { - return; + // read keyboard data from /data/data/... + File keyboardDir = new File(Apple2DisksMenu.getDataDir(activity) + File.separator + "keyboards"); + files = keyboardDir.listFiles(kbdJsonFilter); + if (files == null) { + Log.e(TAG, "OOPS, could not read keyboard data directory"); + return; + } } Arrays.sort(files); - String[] titles = new String[files.length]; + final File[] allFiles = files; + String[] titles = new String[allFiles.length]; int idx = 0; - for (File file : files) { + for (File file : allFiles) { titles[idx] = file.getName(); ++idx; } - final String keyboardDirName = keyboardDir.getPath(); + final String keyboardDirName = extKeyboardDir.getPath(); _alertDialogHandleSelection(activity, keyboardDirName, titles, new IPreferenceLoadSave() { @Override @@ -278,7 +281,7 @@ public class Apple2KeyboardSettingsMenu extends Apple2AbstractMenu { @Override public void saveInt(int value) { Apple2Preferences.KEYBOARD_ALT.saveInt(activity, value); - String path = files[value].getPath(); + String path = allFiles[value].getPath(); Apple2Preferences.KEYBOARD_ALT_PATH.saveString(activity, path); } });