diff options
author | 2024-12-17 18:14:16 -0500 | |
---|---|---|
committer | 2025-01-11 14:17:39 -0500 | |
commit | e343c131a443ec365583b9b26e8c86cb7a069e39 (patch) | |
tree | 675b89e5396bdf3a1b7cbbe53b45f79c59c6035c /java/src/org/kelar | |
parent | 135abaa2a4ade7faed400454db8dd797af019c59 (diff) | |
download | latinime-e343c131a443ec365583b9b26e8c86cb7a069e39.tar.gz latinime-e343c131a443ec365583b9b26e8c86cb7a069e39.tar.xz latinime-e343c131a443ec365583b9b26e8c86cb7a069e39.zip |
Support Direct Boot mode
Diffstat (limited to 'java/src/org/kelar')
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; + } +} |