aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/org/kelar/inputmethod/dictionarypack/CommonPreferences.java4
-rw-r--r--java/src/org/kelar/inputmethod/keyboard/KeyboardTheme.java4
-rw-r--r--java/src/org/kelar/inputmethod/keyboard/MainKeyboardView.java4
-rw-r--r--java/src/org/kelar/inputmethod/keyboard/emoji/EmojiPalettesView.java4
-rw-r--r--java/src/org/kelar/inputmethod/latin/BackupAgent.java4
-rw-r--r--java/src/org/kelar/inputmethod/latin/BinaryDictionaryGetter.java3
-rw-r--r--java/src/org/kelar/inputmethod/latin/LatinIME.java4
-rw-r--r--java/src/org/kelar/inputmethod/latin/RichInputMethodManager.java4
-rw-r--r--java/src/org/kelar/inputmethod/latin/SystemBroadcastReceiver.java4
-rw-r--r--java/src/org/kelar/inputmethod/latin/accounts/AccountsChangedReceiver.java4
-rw-r--r--java/src/org/kelar/inputmethod/latin/settings/AdvancedSettingsFragment.java5
-rw-r--r--java/src/org/kelar/inputmethod/latin/settings/CustomInputStyleSettingsFragment.java3
-rw-r--r--java/src/org/kelar/inputmethod/latin/settings/Settings.java4
-rw-r--r--java/src/org/kelar/inputmethod/latin/settings/SubScreenFragment.java9
-rw-r--r--java/src/org/kelar/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java4
-rw-r--r--java/src/org/kelar/inputmethod/latin/utils/ImportantNoticeUtils.java2
-rw-r--r--java/src/org/kelar/inputmethod/latin/utils/PreferenceUtils.java77
17 files changed, 116 insertions, 27 deletions
diff --git a/java/src/org/kelar/inputmethod/dictionarypack/CommonPreferences.java b/java/src/org/kelar/inputmethod/dictionarypack/CommonPreferences.java
index e4676b186..a82a8f07b 100644
--- a/java/src/org/kelar/inputmethod/dictionarypack/CommonPreferences.java
+++ b/java/src/org/kelar/inputmethod/dictionarypack/CommonPreferences.java
@@ -19,11 +19,13 @@ package org.kelar.inputmethod.dictionarypack;
import android.content.Context;
import android.content.SharedPreferences;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
+
public final class CommonPreferences {
private static final String COMMON_PREFERENCES_NAME = "LatinImeDictPrefs";
public static SharedPreferences getCommonPreferences(final Context context) {
- return context.getSharedPreferences(COMMON_PREFERENCES_NAME, 0);
+ return PreferenceUtils.getSharedPreferences(context, COMMON_PREFERENCES_NAME);
}
public static void enable(final SharedPreferences pref, final String id) {
diff --git a/java/src/org/kelar/inputmethod/keyboard/KeyboardTheme.java b/java/src/org/kelar/inputmethod/keyboard/KeyboardTheme.java
index e3a14fc25..2c75fbe01 100644
--- a/java/src/org/kelar/inputmethod/keyboard/KeyboardTheme.java
+++ b/java/src/org/kelar/inputmethod/keyboard/KeyboardTheme.java
@@ -20,11 +20,11 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Build.VERSION_CODES;
-import android.preference.PreferenceManager;
import android.util.Log;
import org.kelar.inputmethod.compat.BuildCompatUtils;
import org.kelar.inputmethod.latin.R;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import java.util.ArrayList;
import java.util.Arrays;
@@ -167,7 +167,7 @@ public final class KeyboardTheme implements Comparable<KeyboardTheme> {
}
public static KeyboardTheme getKeyboardTheme(final Context context) {
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ final SharedPreferences prefs = PreferenceUtils.getDefaultSharedPreferences(context);
final KeyboardTheme[] availableThemeArray = getAvailableThemeArray(context);
return getKeyboardTheme(prefs, BuildCompatUtils.EFFECTIVE_SDK_INT, availableThemeArray);
}
diff --git a/java/src/org/kelar/inputmethod/keyboard/MainKeyboardView.java b/java/src/org/kelar/inputmethod/keyboard/MainKeyboardView.java
index 48878e3ea..65542aefd 100644
--- a/java/src/org/kelar/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/org/kelar/inputmethod/keyboard/MainKeyboardView.java
@@ -27,7 +27,6 @@ import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Typeface;
-import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
@@ -57,6 +56,7 @@ import org.kelar.inputmethod.latin.common.Constants;
import org.kelar.inputmethod.latin.common.CoordinateUtils;
import org.kelar.inputmethod.latin.settings.DebugSettings;
import org.kelar.inputmethod.latin.utils.LanguageOnSpacebarUtils;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import org.kelar.inputmethod.latin.utils.TypefaceUtils;
import java.util.WeakHashMap;
@@ -197,7 +197,7 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
PointerTracker.init(mainKeyboardViewAttr, mTimerHandler, this /* DrawingProxy */);
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ final SharedPreferences prefs = PreferenceUtils.getDefaultSharedPreferences(context);
final boolean forceNonDistinctMultitouch = prefs.getBoolean(
DebugSettings.PREF_FORCE_NON_DISTINCT_MULTITOUCH, false);
final boolean hasDistinctMultitouch = context.getPackageManager()
diff --git a/java/src/org/kelar/inputmethod/keyboard/emoji/EmojiPalettesView.java b/java/src/org/kelar/inputmethod/keyboard/emoji/EmojiPalettesView.java
index 08c6b4c18..3ac31fb07 100644
--- a/java/src/org/kelar/inputmethod/keyboard/emoji/EmojiPalettesView.java
+++ b/java/src/org/kelar/inputmethod/keyboard/emoji/EmojiPalettesView.java
@@ -22,7 +22,6 @@ import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
-import android.preference.PreferenceManager;
import androidx.viewpager.widget.ViewPager;
import android.util.AttributeSet;
import android.util.Pair;
@@ -49,6 +48,7 @@ import org.kelar.inputmethod.latin.AudioAndHapticFeedbackManager;
import org.kelar.inputmethod.latin.R;
import org.kelar.inputmethod.latin.RichInputMethodSubtype;
import org.kelar.inputmethod.latin.common.Constants;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import org.kelar.inputmethod.latin.utils.ResourceUtils;
/**
@@ -116,7 +116,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
final KeyboardLayoutSet layoutSet = builder.build();
final TypedArray emojiPalettesViewAttr = context.obtainStyledAttributes(attrs,
R.styleable.EmojiPalettesView, defStyle, R.style.EmojiPalettesView);
- mEmojiCategory = new EmojiCategory(PreferenceManager.getDefaultSharedPreferences(context),
+ mEmojiCategory = new EmojiCategory(PreferenceUtils.getDefaultSharedPreferences(context),
res, layoutSet, emojiPalettesViewAttr);
mCategoryIndicatorEnabled = emojiPalettesViewAttr.getBoolean(
R.styleable.EmojiPalettesView_categoryIndicatorEnabled, false);
diff --git a/java/src/org/kelar/inputmethod/latin/BackupAgent.java b/java/src/org/kelar/inputmethod/latin/BackupAgent.java
index 267014683..a1442a663 100644
--- a/java/src/org/kelar/inputmethod/latin/BackupAgent.java
+++ b/java/src/org/kelar/inputmethod/latin/BackupAgent.java
@@ -23,6 +23,7 @@ import android.content.SharedPreferences;
import android.os.ParcelFileDescriptor;
import org.kelar.inputmethod.latin.settings.LocalSettingsConstants;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import java.io.IOException;
@@ -46,8 +47,7 @@ public final class BackupAgent extends BackupAgentHelper {
super.onRestore(data, appVersionCode, newState);
// Remove the preferences that we don't want restored.
- final SharedPreferences.Editor prefEditor = getSharedPreferences(
- getPackageName() + PREF_SUFFIX, MODE_PRIVATE).edit();
+ final SharedPreferences.Editor prefEditor = PreferenceUtils.getDefaultSharedPreferences(this).edit();
for (final String key : LocalSettingsConstants.PREFS_TO_SKIP_RESTORING) {
prefEditor.remove(key);
}
diff --git a/java/src/org/kelar/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/org/kelar/inputmethod/latin/BinaryDictionaryGetter.java
index 75d2d5d4e..71aa1950f 100644
--- a/java/src/org/kelar/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/org/kelar/inputmethod/latin/BinaryDictionaryGetter.java
@@ -27,6 +27,7 @@ import org.kelar.inputmethod.latin.makedict.DictionaryHeader;
import org.kelar.inputmethod.latin.makedict.UnsupportedFormatException;
import org.kelar.inputmethod.latin.utils.BinaryDictionaryUtils;
import org.kelar.inputmethod.latin.utils.DictionaryInfoUtils;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import java.io.File;
import java.io.IOException;
@@ -117,7 +118,7 @@ final public class BinaryDictionaryGetter {
final SharedPreferences mDictPreferences;
public DictPackSettings(final Context context) {
mDictPreferences = null == context ? null
- : context.getSharedPreferences(COMMON_PREFERENCES_NAME,
+ : PreferenceUtils.getSharedPreferences(context, COMMON_PREFERENCES_NAME,
Context.MODE_MULTI_PROCESS);
}
public boolean isWordListActive(final String dictId) {
diff --git a/java/src/org/kelar/inputmethod/latin/LatinIME.java b/java/src/org/kelar/inputmethod/latin/LatinIME.java
index 5529c2bf5..8022bc7e0 100644
--- a/java/src/org/kelar/inputmethod/latin/LatinIME.java
+++ b/java/src/org/kelar/inputmethod/latin/LatinIME.java
@@ -38,7 +38,6 @@ import android.os.Build;
import android.os.Debug;
import android.os.IBinder;
import android.os.Message;
-import android.preference.PreferenceManager;
import android.text.InputType;
import android.util.Log;
import android.util.PrintWriterPrinter;
@@ -96,6 +95,7 @@ import org.kelar.inputmethod.latin.utils.ImportantNoticeUtils;
import org.kelar.inputmethod.latin.utils.IntentUtils;
import org.kelar.inputmethod.latin.utils.JniUtils;
import org.kelar.inputmethod.latin.utils.LeakGuardHandlerWrapper;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import org.kelar.inputmethod.latin.utils.StatsUtils;
import org.kelar.inputmethod.latin.utils.StatsUtilsManager;
import org.kelar.inputmethod.latin.utils.SubtypeLocaleUtils;
@@ -596,7 +596,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
@Override
public void onCreate() {
Settings.init(this);
- DebugFlags.init(PreferenceManager.getDefaultSharedPreferences(this));
+ DebugFlags.init(PreferenceUtils.getDefaultSharedPreferences(this));
RichInputMethodManager.init(this);
mRichImm = RichInputMethodManager.getInstance();
AudioAndHapticFeedbackManager.init(this);
diff --git a/java/src/org/kelar/inputmethod/latin/RichInputMethodManager.java b/java/src/org/kelar/inputmethod/latin/RichInputMethodManager.java
index f364ce982..526c008eb 100644
--- a/java/src/org/kelar/inputmethod/latin/RichInputMethodManager.java
+++ b/java/src/org/kelar/inputmethod/latin/RichInputMethodManager.java
@@ -24,7 +24,6 @@ import android.inputmethodservice.InputMethodService;
import android.os.AsyncTask;
import android.os.Build;
import android.os.IBinder;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
@@ -36,6 +35,7 @@ import org.kelar.inputmethod.compat.InputMethodSubtypeCompatUtils;
import org.kelar.inputmethod.latin.settings.Settings;
import org.kelar.inputmethod.latin.utils.AdditionalSubtypeUtils;
import org.kelar.inputmethod.latin.utils.LanguageOnSpacebarUtils;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import org.kelar.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.Collections;
@@ -111,7 +111,7 @@ public class RichInputMethodManager {
}
public InputMethodSubtype[] getAdditionalSubtypes() {
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
+ final SharedPreferences prefs = PreferenceUtils.getDefaultSharedPreferences(mContext);
final String prefAdditionalSubtypes = Settings.readPrefAdditionalSubtypes(
prefs, mContext.getResources());
return AdditionalSubtypeUtils.createAdditionalSubtypesArray(prefAdditionalSubtypes);
diff --git a/java/src/org/kelar/inputmethod/latin/SystemBroadcastReceiver.java b/java/src/org/kelar/inputmethod/latin/SystemBroadcastReceiver.java
index 78c016353..905c5718c 100644
--- a/java/src/org/kelar/inputmethod/latin/SystemBroadcastReceiver.java
+++ b/java/src/org/kelar/inputmethod/latin/SystemBroadcastReceiver.java
@@ -26,7 +26,6 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Process;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
@@ -36,6 +35,7 @@ import org.kelar.inputmethod.dictionarypack.DownloadManagerWrapper;
import org.kelar.inputmethod.keyboard.KeyboardLayoutSet;
import org.kelar.inputmethod.latin.settings.Settings;
import org.kelar.inputmethod.latin.setup.SetupActivity;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import org.kelar.inputmethod.latin.utils.UncachedInputMethodManagerUtils;
/**
@@ -148,7 +148,7 @@ public final class SystemBroadcastReceiver extends BroadcastReceiver {
if (Log.isLoggable(TAG, Log.INFO)) {
Log.i(TAG, "toggleAppIcon() : FLAG_SYSTEM = " + isSystemApp);
}
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ final SharedPreferences prefs = PreferenceUtils.getDefaultSharedPreferences(context);
context.getPackageManager().setComponentEnabledSetting(
new ComponentName(context, SetupActivity.class),
Settings.readShowSetupWizardIcon(prefs, context)
diff --git a/java/src/org/kelar/inputmethod/latin/accounts/AccountsChangedReceiver.java b/java/src/org/kelar/inputmethod/latin/accounts/AccountsChangedReceiver.java
index e6ca1f606..8ab4c3c23 100644
--- a/java/src/org/kelar/inputmethod/latin/accounts/AccountsChangedReceiver.java
+++ b/java/src/org/kelar/inputmethod/latin/accounts/AccountsChangedReceiver.java
@@ -21,12 +21,12 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
import org.kelar.inputmethod.annotations.UsedForTesting;
import org.kelar.inputmethod.latin.settings.LocalSettingsConstants;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
/**
* {@link BroadcastReceiver} for {@link AccountManager#LOGIN_ACCOUNTS_CHANGED_ACTION}.
@@ -45,7 +45,7 @@ public class AccountsChangedReceiver extends BroadcastReceiver {
// that wasn't being backed up and restored, however the preference fragments
// currently only deal with the default shared preferences which is why
// separating this out into a different file is not trivial currently.
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ final SharedPreferences prefs = PreferenceUtils.getDefaultSharedPreferences(context);
final String currentAccount = prefs.getString(
LocalSettingsConstants.PREF_ACCOUNT_NAME, null);
removeUnknownAccountFromPreference(prefs, getAccountsForLogin(context), currentAccount);
diff --git a/java/src/org/kelar/inputmethod/latin/settings/AdvancedSettingsFragment.java b/java/src/org/kelar/inputmethod/latin/settings/AdvancedSettingsFragment.java
index 9f3df399e..fd487cb91 100644
--- a/java/src/org/kelar/inputmethod/latin/settings/AdvancedSettingsFragment.java
+++ b/java/src/org/kelar/inputmethod/latin/settings/AdvancedSettingsFragment.java
@@ -26,6 +26,7 @@ import android.preference.ListPreference;
import org.kelar.inputmethod.latin.AudioAndHapticFeedbackManager;
import org.kelar.inputmethod.latin.R;
import org.kelar.inputmethod.latin.SystemBroadcastReceiver;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
/**
* "Advanced" settings sub screen.
@@ -52,7 +53,7 @@ public final class AdvancedSettingsFragment extends SubScreenFragment {
// initialization method of these classes here. See {@link LatinIME#onCreate()}.
AudioAndHapticFeedbackManager.init(context);
- final SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
+ final SharedPreferences prefs = PreferenceUtils.getDefaultSharedPreferences(context);
if (!Settings.isInternal(prefs)) {
removePreference(Settings.SCREEN_DEBUG);
@@ -95,7 +96,7 @@ public final class AdvancedSettingsFragment extends SubScreenFragment {
@Override
public void onResume() {
super.onResume();
- final SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
+ final SharedPreferences prefs = PreferenceUtils.getDefaultSharedPreferences(getActivity());
updateListPreferenceSummaryToCurrentValue(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY);
}
diff --git a/java/src/org/kelar/inputmethod/latin/settings/CustomInputStyleSettingsFragment.java b/java/src/org/kelar/inputmethod/latin/settings/CustomInputStyleSettingsFragment.java
index 2e83719f2..dbaff67b8 100644
--- a/java/src/org/kelar/inputmethod/latin/settings/CustomInputStyleSettingsFragment.java
+++ b/java/src/org/kelar/inputmethod/latin/settings/CustomInputStyleSettingsFragment.java
@@ -43,6 +43,7 @@ import org.kelar.inputmethod.latin.RichInputMethodManager;
import org.kelar.inputmethod.latin.utils.AdditionalSubtypeUtils;
import org.kelar.inputmethod.latin.utils.DialogUtils;
import org.kelar.inputmethod.latin.utils.IntentUtils;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import org.kelar.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.ArrayList;
@@ -95,7 +96,7 @@ public final class CustomInputStyleSettingsFragment extends PreferenceFragment
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mPrefs = getPreferenceManager().getSharedPreferences();
+ mPrefs = PreferenceUtils.getDefaultSharedPreferences(getActivity());
RichInputMethodManager.init(getActivity());
mRichImm = RichInputMethodManager.getInstance();
addPreferencesFromResource(R.xml.additional_subtype_settings);
diff --git a/java/src/org/kelar/inputmethod/latin/settings/Settings.java b/java/src/org/kelar/inputmethod/latin/settings/Settings.java
index c16caddb2..62f87c9f7 100644
--- a/java/src/org/kelar/inputmethod/latin/settings/Settings.java
+++ b/java/src/org/kelar/inputmethod/latin/settings/Settings.java
@@ -22,7 +22,6 @@ import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
-import android.preference.PreferenceManager;
import android.util.Log;
import org.kelar.inputmethod.compat.BuildCompatUtils;
@@ -31,6 +30,7 @@ import org.kelar.inputmethod.latin.InputAttributes;
import org.kelar.inputmethod.latin.R;
import org.kelar.inputmethod.latin.common.StringUtils;
import org.kelar.inputmethod.latin.utils.AdditionalSubtypeUtils;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import org.kelar.inputmethod.latin.utils.ResourceUtils;
import org.kelar.inputmethod.latin.utils.RunInLocale;
import org.kelar.inputmethod.latin.utils.StatsUtils;
@@ -143,7 +143,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
private void onCreate(final Context context) {
mContext = context;
mRes = context.getResources();
- mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
+ mPrefs = PreferenceUtils.getDefaultSharedPreferences(context);
mPrefs.registerOnSharedPreferenceChangeListener(this);
upgradeAutocorrectionSettings(mPrefs, mRes);
}
diff --git a/java/src/org/kelar/inputmethod/latin/settings/SubScreenFragment.java b/java/src/org/kelar/inputmethod/latin/settings/SubScreenFragment.java
index 08c9bd441..9e3edabda 100644
--- a/java/src/org/kelar/inputmethod/latin/settings/SubScreenFragment.java
+++ b/java/src/org/kelar/inputmethod/latin/settings/SubScreenFragment.java
@@ -21,6 +21,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.res.Resources;
+import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
@@ -28,6 +29,9 @@ import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.util.Log;
+import org.kelar.inputmethod.compat.BuildCompatUtils;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
+
/**
* A base abstract class for a {@link PreferenceFragment} that implements a nested
* {@link PreferenceScreen} of the main preference screen.
@@ -77,7 +81,7 @@ public abstract class SubScreenFragment extends PreferenceFragment
}
final SharedPreferences getSharedPreferences() {
- return getPreferenceManager().getSharedPreferences();
+ return PreferenceUtils.getDefaultSharedPreferences(getActivity());
}
/**
@@ -100,6 +104,9 @@ public abstract class SubScreenFragment extends PreferenceFragment
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (BuildCompatUtils.EFFECTIVE_SDK_INT >= Build.VERSION_CODES.N) {
+ super.getPreferenceManager().setStorageDeviceProtected();
+ }
mSharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
diff --git a/java/src/org/kelar/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/org/kelar/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index fb53b92d7..fe644850f 100644
--- a/java/src/org/kelar/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/org/kelar/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -18,7 +18,6 @@ package org.kelar.inputmethod.latin.spellcheck;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
import android.service.textservice.SpellCheckerService;
import android.text.InputType;
import android.view.inputmethod.EditorInfo;
@@ -37,6 +36,7 @@ import org.kelar.inputmethod.latin.SuggestedWords;
import org.kelar.inputmethod.latin.common.ComposedData;
import org.kelar.inputmethod.latin.settings.SettingsValuesForSuggestion;
import org.kelar.inputmethod.latin.utils.AdditionalSubtypeUtils;
+import org.kelar.inputmethod.latin.utils.PreferenceUtils;
import org.kelar.inputmethod.latin.utils.ScriptUtils;
import org.kelar.inputmethod.latin.utils.SuggestionResults;
@@ -95,7 +95,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
super.onCreate();
mRecommendedThreshold = Float.parseFloat(
getString(R.string.spellchecker_recommended_threshold_value));
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ final SharedPreferences prefs = PreferenceUtils.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
onSharedPreferenceChanged(prefs, PREF_USE_CONTACTS_KEY);
}
diff --git a/java/src/org/kelar/inputmethod/latin/utils/ImportantNoticeUtils.java b/java/src/org/kelar/inputmethod/latin/utils/ImportantNoticeUtils.java
index d006cd3d5..d552fc241 100644
--- a/java/src/org/kelar/inputmethod/latin/utils/ImportantNoticeUtils.java
+++ b/java/src/org/kelar/inputmethod/latin/utils/ImportantNoticeUtils.java
@@ -71,7 +71,7 @@ public final class ImportantNoticeUtils {
@UsedForTesting
static SharedPreferences getImportantNoticePreferences(final Context context) {
- return context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
+ return PreferenceUtils.getSharedPreferences(context, PREFERENCE_NAME);
}
@UsedForTesting
diff --git a/java/src/org/kelar/inputmethod/latin/utils/PreferenceUtils.java b/java/src/org/kelar/inputmethod/latin/utils/PreferenceUtils.java
new file mode 100644
index 000000000..e0060051b
--- /dev/null
+++ b/java/src/org/kelar/inputmethod/latin/utils/PreferenceUtils.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2024 Amin Bandali <bandali@kelar.org>
+ *
+ * This file is part of Kelar Keyboard.
+ *
+ * Kelar Keyboard is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * Kelar Keyboard is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Kelar Keyboard. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+
+package org.kelar.inputmethod.latin.utils;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.util.Log;
+
+import org.kelar.inputmethod.compat.BuildCompatUtils;
+import org.kelar.inputmethod.latin.BuildConfig;
+
+public class PreferenceUtils {
+ static final String TAG = PreferenceUtils.class.getSimpleName();
+ private static final int DOES_NOT_EXIST = -1;
+ private static final String PREF_MOVEDTODPS_SUFFIX = "_movedtodps";
+
+ public static SharedPreferences getSharedPreferences(Context context, String name, int mode) {
+ Context storageContext = context;
+ if (BuildCompatUtils.EFFECTIVE_SDK_INT >= Build.VERSION_CODES.N) {
+ final Context deviceContext;
+ if (context.isDeviceProtectedStorage()) {
+ deviceContext = context;
+ } else {
+ deviceContext = context.createDeviceProtectedStorageContext();
+ }
+ final String pref_name = name + PREF_MOVEDTODPS_SUFFIX;
+ if (deviceContext.getSharedPreferences(name, mode)
+ .getInt(pref_name, DOES_NOT_EXIST) == DOES_NOT_EXIST) {
+ if (deviceContext.moveSharedPreferencesFrom(context, name)) {
+ deviceContext.getSharedPreferences(name, mode)
+ .edit()
+ .putInt(pref_name, BuildConfig.VERSION_CODE)
+ .apply();
+ } else {
+ Log.w(TAG, String.format("Failed to migrate shared preferences %s.", name));
+ }
+ }
+ storageContext = deviceContext;
+ }
+ return storageContext.getSharedPreferences(name, mode);
+ }
+
+ public static SharedPreferences getSharedPreferences(Context context, String name) {
+ return getSharedPreferences(context, name, getDefaultSharedPreferencesMode());
+ }
+
+ public static SharedPreferences getDefaultSharedPreferences(Context context) {
+ return getSharedPreferences(context, getDefaultSharedPreferencesName(context));
+ }
+
+ private static String getDefaultSharedPreferencesName(Context context) {
+ return context.getPackageName() + "_preferences";
+ }
+
+ private static int getDefaultSharedPreferencesMode() {
+ return Context.MODE_PRIVATE;
+ }
+}