diff options
| -rw-r--r-- | AndroidManifest.xml | 2 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/EmojiGridView.java | 13 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/SettingsActivity.java | 14 |
3 files changed, 22 insertions, 7 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 5b2a120..e840c65 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -8,7 +8,7 @@ </intent-filter> <meta-data android:name="android.view.im" android:resource="@xml/method"/> </service> - <activity android:name="juloo.keyboard2.SettingsActivity" android:icon="@drawable/ic_launcher" android:label="@string/settings_activity_label" android:theme="@style/android:Theme.DeviceDefault" android:exported="true"> + <activity android:name="juloo.keyboard2.SettingsActivity" android:icon="@drawable/ic_launcher" android:label="@string/settings_activity_label" android:theme="@style/android:Theme.DeviceDefault" android:exported="true" android:directBootAware="true"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> diff --git a/srcs/juloo.keyboard2/EmojiGridView.java b/srcs/juloo.keyboard2/EmojiGridView.java index 581200c..749ce3e 100644 --- a/srcs/juloo.keyboard2/EmojiGridView.java +++ b/srcs/juloo.keyboard2/EmojiGridView.java @@ -83,7 +83,9 @@ public class EmojiGridView extends GridView private void saveLastUsed() { - SharedPreferences.Editor edit = emojiSharedPreferences().edit(); + SharedPreferences.Editor edit; + try { edit = emojiSharedPreferences().edit(); } + catch (Exception _e) { return; } HashSet<String> set = new HashSet<String>(); for (Emoji emoji : _lastUsed.keySet()) set.add(String.valueOf(_lastUsed.get(emoji)) + "-" + emoji.name()); @@ -93,15 +95,18 @@ public class EmojiGridView extends GridView private void loadLastUsed() { - SharedPreferences prefs = emojiSharedPreferences(); - Set<String> lastUseSet = prefs.getStringSet(LAST_USE_PREF, null); _lastUsed = new HashMap<Emoji, Integer>(); + SharedPreferences prefs; + // Storage might not be available (eg. the device is locked), avoid + // crashing. + try { prefs = emojiSharedPreferences(); } + catch (Exception _e) { return; } + Set<String> lastUseSet = prefs.getStringSet(LAST_USE_PREF, null); if (lastUseSet != null) for (String emojiData : lastUseSet) { String[] data = emojiData.split("-", 2); Emoji emoji; - if (data.length != 2) continue ; emoji = Emoji.getEmojiByName(data[1]); diff --git a/srcs/juloo.keyboard2/SettingsActivity.java b/srcs/juloo.keyboard2/SettingsActivity.java index c6454a7..04fe501 100644 --- a/srcs/juloo.keyboard2/SettingsActivity.java +++ b/srcs/juloo.keyboard2/SettingsActivity.java @@ -14,9 +14,13 @@ public class SettingsActivity extends PreferenceActivity { detectSystemTheme(); super.onCreate(savedInstanceState); + SharedPreferences prefs; + // The preferences can't be read when in direct-boot mode. Avoid crashing + // and don't allow changing the settings. + try { prefs = PreferenceManager.getDefaultSharedPreferences(this); } + catch (Exception _e) { fallbackEncrypted(); return; } addPreferencesFromResource(R.xml.settings); - PreferenceManager.getDefaultSharedPreferences(this) - .registerOnSharedPreferenceChangeListener(this.new OnPreferencesChange()); + prefs.registerOnSharedPreferenceChangeListener(this.new OnPreferencesChange()); } /** The default theme is [Theme.DeviceDefault], which is dark. Detect if the @@ -31,6 +35,12 @@ public class SettingsActivity extends PreferenceActivity } } + void fallbackEncrypted() + { + // Can't communicate with the user here. + finish(); + } + /** See DirectBootAwarePreferences. */ class OnPreferencesChange implements SharedPreferences.OnSharedPreferenceChangeListener { |
