286 lines
11 KiB
Java
286 lines
11 KiB
Java
package androidx.preference;
|
|
|
|
import android.content.Context;
|
|
import android.content.SharedPreferences;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Build;
|
|
import android.text.TextUtils;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.core.content.ContextCompat;
|
|
public class PreferenceManager {
|
|
public static final String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
|
|
private static final int STORAGE_DEFAULT = 0;
|
|
private static final int STORAGE_DEVICE_PROTECTED = 1;
|
|
private Context mContext;
|
|
@Nullable
|
|
private SharedPreferences.Editor mEditor;
|
|
private long mNextId = 0;
|
|
private boolean mNoCommit;
|
|
private OnDisplayPreferenceDialogListener mOnDisplayPreferenceDialogListener;
|
|
private OnNavigateToScreenListener mOnNavigateToScreenListener;
|
|
private OnPreferenceTreeClickListener mOnPreferenceTreeClickListener;
|
|
private PreferenceComparisonCallback mPreferenceComparisonCallback;
|
|
@Nullable
|
|
private PreferenceDataStore mPreferenceDataStore;
|
|
private PreferenceScreen mPreferenceScreen;
|
|
@Nullable
|
|
private SharedPreferences mSharedPreferences;
|
|
private int mSharedPreferencesMode;
|
|
private String mSharedPreferencesName;
|
|
private int mStorage = 0;
|
|
|
|
public interface OnDisplayPreferenceDialogListener {
|
|
void onDisplayPreferenceDialog(Preference preference);
|
|
}
|
|
|
|
public interface OnNavigateToScreenListener {
|
|
void onNavigateToScreen(PreferenceScreen preferenceScreen);
|
|
}
|
|
|
|
public interface OnPreferenceTreeClickListener {
|
|
boolean onPreferenceTreeClick(Preference preference);
|
|
}
|
|
|
|
public static abstract class PreferenceComparisonCallback {
|
|
public abstract boolean arePreferenceContentsTheSame(Preference preference, Preference preference2);
|
|
|
|
public abstract boolean arePreferenceItemsTheSame(Preference preference, Preference preference2);
|
|
}
|
|
|
|
public static class SimplePreferenceComparisonCallback extends PreferenceComparisonCallback {
|
|
@Override // androidx.preference.PreferenceManager.PreferenceComparisonCallback
|
|
public boolean arePreferenceContentsTheSame(Preference preference, Preference preference2) {
|
|
if (preference.getClass() != preference2.getClass()) {
|
|
return false;
|
|
}
|
|
if ((preference == preference2 && preference.wasDetached()) || !TextUtils.equals(preference.getTitle(), preference2.getTitle()) || !TextUtils.equals(preference.getSummary(), preference2.getSummary())) {
|
|
return false;
|
|
}
|
|
Drawable icon = preference.getIcon();
|
|
Drawable icon2 = preference2.getIcon();
|
|
if ((icon != icon2 && (icon == null || !icon.equals(icon2))) || preference.isEnabled() != preference2.isEnabled() || preference.isSelectable() != preference2.isSelectable()) {
|
|
return false;
|
|
}
|
|
if (!(preference instanceof TwoStatePreference) || ((TwoStatePreference) preference).isChecked() == ((TwoStatePreference) preference2).isChecked()) {
|
|
return !(preference instanceof DropDownPreference) || preference == preference2;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override // androidx.preference.PreferenceManager.PreferenceComparisonCallback
|
|
public boolean arePreferenceItemsTheSame(Preference preference, Preference preference2) {
|
|
return preference.getId() == preference2.getId();
|
|
}
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public PreferenceManager(Context context) {
|
|
this.mContext = context;
|
|
setSharedPreferencesName(getDefaultSharedPreferencesName(context));
|
|
}
|
|
|
|
public static SharedPreferences getDefaultSharedPreferences(Context context) {
|
|
return context.getSharedPreferences(getDefaultSharedPreferencesName(context), getDefaultSharedPreferencesMode());
|
|
}
|
|
|
|
private static int getDefaultSharedPreferencesMode() {
|
|
return 0;
|
|
}
|
|
|
|
private static String getDefaultSharedPreferencesName(Context context) {
|
|
return context.getPackageName() + "_preferences";
|
|
}
|
|
|
|
public static void setDefaultValues(Context context, int i, boolean z2) {
|
|
setDefaultValues(context, getDefaultSharedPreferencesName(context), getDefaultSharedPreferencesMode(), i, z2);
|
|
}
|
|
|
|
public static void setDefaultValues(Context context, String str, int i, int i2, boolean z2) {
|
|
SharedPreferences sharedPreferences = context.getSharedPreferences(KEY_HAS_SET_DEFAULT_VALUES, 0);
|
|
if (z2 || !sharedPreferences.getBoolean(KEY_HAS_SET_DEFAULT_VALUES, false)) {
|
|
PreferenceManager preferenceManager = new PreferenceManager(context);
|
|
preferenceManager.setSharedPreferencesName(str);
|
|
preferenceManager.setSharedPreferencesMode(i);
|
|
preferenceManager.inflateFromResource(context, i2, null);
|
|
sharedPreferences.edit().putBoolean(KEY_HAS_SET_DEFAULT_VALUES, true).apply();
|
|
}
|
|
}
|
|
|
|
private void setNoCommit(boolean z2) {
|
|
SharedPreferences.Editor editor;
|
|
if (!z2 && (editor = this.mEditor) != null) {
|
|
editor.apply();
|
|
}
|
|
this.mNoCommit = z2;
|
|
}
|
|
|
|
public PreferenceScreen createPreferenceScreen(Context context) {
|
|
PreferenceScreen preferenceScreen = new PreferenceScreen(context, null);
|
|
preferenceScreen.onAttachedToHierarchy(this);
|
|
return preferenceScreen;
|
|
}
|
|
|
|
@Nullable
|
|
public <T extends Preference> T findPreference(@NonNull CharSequence charSequence) {
|
|
PreferenceScreen preferenceScreen = this.mPreferenceScreen;
|
|
if (preferenceScreen == null) {
|
|
return null;
|
|
}
|
|
return (T) preferenceScreen.findPreference(charSequence);
|
|
}
|
|
|
|
public Context getContext() {
|
|
return this.mContext;
|
|
}
|
|
|
|
public SharedPreferences.Editor getEditor() {
|
|
if (this.mPreferenceDataStore != null) {
|
|
return null;
|
|
}
|
|
if (!this.mNoCommit) {
|
|
return getSharedPreferences().edit();
|
|
}
|
|
if (this.mEditor == null) {
|
|
this.mEditor = getSharedPreferences().edit();
|
|
}
|
|
return this.mEditor;
|
|
}
|
|
|
|
public long getNextId() {
|
|
long j;
|
|
synchronized (this) {
|
|
j = this.mNextId;
|
|
this.mNextId = 1 + j;
|
|
}
|
|
return j;
|
|
}
|
|
|
|
public OnDisplayPreferenceDialogListener getOnDisplayPreferenceDialogListener() {
|
|
return this.mOnDisplayPreferenceDialogListener;
|
|
}
|
|
|
|
public OnNavigateToScreenListener getOnNavigateToScreenListener() {
|
|
return this.mOnNavigateToScreenListener;
|
|
}
|
|
|
|
public OnPreferenceTreeClickListener getOnPreferenceTreeClickListener() {
|
|
return this.mOnPreferenceTreeClickListener;
|
|
}
|
|
|
|
public PreferenceComparisonCallback getPreferenceComparisonCallback() {
|
|
return this.mPreferenceComparisonCallback;
|
|
}
|
|
|
|
@Nullable
|
|
public PreferenceDataStore getPreferenceDataStore() {
|
|
return this.mPreferenceDataStore;
|
|
}
|
|
|
|
public PreferenceScreen getPreferenceScreen() {
|
|
return this.mPreferenceScreen;
|
|
}
|
|
|
|
public SharedPreferences getSharedPreferences() {
|
|
if (getPreferenceDataStore() != null) {
|
|
return null;
|
|
}
|
|
if (this.mSharedPreferences == null) {
|
|
this.mSharedPreferences = (this.mStorage != 1 ? this.mContext : ContextCompat.createDeviceProtectedStorageContext(this.mContext)).getSharedPreferences(this.mSharedPreferencesName, this.mSharedPreferencesMode);
|
|
}
|
|
return this.mSharedPreferences;
|
|
}
|
|
|
|
public int getSharedPreferencesMode() {
|
|
return this.mSharedPreferencesMode;
|
|
}
|
|
|
|
public String getSharedPreferencesName() {
|
|
return this.mSharedPreferencesName;
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public PreferenceScreen inflateFromResource(Context context, int i, PreferenceScreen preferenceScreen) {
|
|
setNoCommit(true);
|
|
PreferenceScreen preferenceScreen2 = (PreferenceScreen) new PreferenceInflater(context, this).inflate(i, preferenceScreen);
|
|
preferenceScreen2.onAttachedToHierarchy(this);
|
|
setNoCommit(false);
|
|
return preferenceScreen2;
|
|
}
|
|
|
|
public boolean isStorageDefault() {
|
|
return Build.VERSION.SDK_INT < 24 || this.mStorage == 0;
|
|
}
|
|
|
|
public boolean isStorageDeviceProtected() {
|
|
return Build.VERSION.SDK_INT >= 24 && this.mStorage == 1;
|
|
}
|
|
|
|
public void setOnDisplayPreferenceDialogListener(OnDisplayPreferenceDialogListener onDisplayPreferenceDialogListener) {
|
|
this.mOnDisplayPreferenceDialogListener = onDisplayPreferenceDialogListener;
|
|
}
|
|
|
|
public void setOnNavigateToScreenListener(OnNavigateToScreenListener onNavigateToScreenListener) {
|
|
this.mOnNavigateToScreenListener = onNavigateToScreenListener;
|
|
}
|
|
|
|
public void setOnPreferenceTreeClickListener(OnPreferenceTreeClickListener onPreferenceTreeClickListener) {
|
|
this.mOnPreferenceTreeClickListener = onPreferenceTreeClickListener;
|
|
}
|
|
|
|
public void setPreferenceComparisonCallback(PreferenceComparisonCallback preferenceComparisonCallback) {
|
|
this.mPreferenceComparisonCallback = preferenceComparisonCallback;
|
|
}
|
|
|
|
public void setPreferenceDataStore(PreferenceDataStore preferenceDataStore) {
|
|
this.mPreferenceDataStore = preferenceDataStore;
|
|
}
|
|
|
|
public boolean setPreferences(PreferenceScreen preferenceScreen) {
|
|
PreferenceScreen preferenceScreen2 = this.mPreferenceScreen;
|
|
if (preferenceScreen == preferenceScreen2) {
|
|
return false;
|
|
}
|
|
if (preferenceScreen2 != null) {
|
|
preferenceScreen2.onDetached();
|
|
}
|
|
this.mPreferenceScreen = preferenceScreen;
|
|
return true;
|
|
}
|
|
|
|
public void setSharedPreferencesMode(int i) {
|
|
this.mSharedPreferencesMode = i;
|
|
this.mSharedPreferences = null;
|
|
}
|
|
|
|
public void setSharedPreferencesName(String str) {
|
|
this.mSharedPreferencesName = str;
|
|
this.mSharedPreferences = null;
|
|
}
|
|
|
|
public void setStorageDefault() {
|
|
if (Build.VERSION.SDK_INT >= 24) {
|
|
this.mStorage = 0;
|
|
this.mSharedPreferences = null;
|
|
}
|
|
}
|
|
|
|
public void setStorageDeviceProtected() {
|
|
if (Build.VERSION.SDK_INT >= 24) {
|
|
this.mStorage = 1;
|
|
this.mSharedPreferences = null;
|
|
}
|
|
}
|
|
|
|
public boolean shouldCommit() {
|
|
return !this.mNoCommit;
|
|
}
|
|
|
|
public void showDialog(Preference preference) {
|
|
OnDisplayPreferenceDialogListener onDisplayPreferenceDialogListener = this.mOnDisplayPreferenceDialogListener;
|
|
if (onDisplayPreferenceDialogListener != null) {
|
|
onDisplayPreferenceDialogListener.onDisplayPreferenceDialog(preference);
|
|
}
|
|
}
|
|
}
|