From f8891c02255d7e7fba5f47ac6fdf56013a1d0a44 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Mon, 14 May 2018 17:26:17 +0200 Subject: [PATCH] Apply a hack to detect programmatic changes to SwitchPreference --- .../me/impy/aegis/ui/PreferencesFragment.java | 4 +- .../ui/preferences/SwitchPreference.java | 48 +++++++++++++++++++ app/src/main/res/xml/preferences.xml | 2 +- 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/me/impy/aegis/ui/preferences/SwitchPreference.java diff --git a/app/src/main/java/me/impy/aegis/ui/PreferencesFragment.java b/app/src/main/java/me/impy/aegis/ui/PreferencesFragment.java index ac68ca00..47d153e9 100644 --- a/app/src/main/java/me/impy/aegis/ui/PreferencesFragment.java +++ b/app/src/main/java/me/impy/aegis/ui/PreferencesFragment.java @@ -10,7 +10,6 @@ import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.PreferenceFragment; -import android.preference.SwitchPreference; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.Window; @@ -40,6 +39,7 @@ import me.impy.aegis.importers.AegisImporter; import me.impy.aegis.importers.DatabaseImporter; import me.impy.aegis.importers.DatabaseImporterException; import me.impy.aegis.ui.dialogs.PasswordDialogFragment; +import me.impy.aegis.ui.preferences.SwitchPreference; import me.impy.aegis.util.ByteInputStream; public class PreferencesFragment extends PreferenceFragment implements PasswordDialogFragment.Listener { @@ -413,7 +413,7 @@ public class PreferencesFragment extends PreferenceFragment implements PasswordD private void updateEncryptionPreference() { boolean encrypted = _db.getFile().isEncrypted(); - _encryptionPreference.setChecked(encrypted); + _encryptionPreference.setChecked(encrypted, true); _slotsPreference.setEnabled(encrypted); } } diff --git a/app/src/main/java/me/impy/aegis/ui/preferences/SwitchPreference.java b/app/src/main/java/me/impy/aegis/ui/preferences/SwitchPreference.java new file mode 100644 index 00000000..18530b0d --- /dev/null +++ b/app/src/main/java/me/impy/aegis/ui/preferences/SwitchPreference.java @@ -0,0 +1,48 @@ +package me.impy.aegis.ui.preferences; + +import android.content.Context; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.util.AttributeSet; + +public class SwitchPreference extends android.preference.SwitchPreference { + private OnPreferenceChangeListener _listener; + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public SwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SwitchPreference(Context context) { + super(context); + } + + @Override + public void setOnPreferenceChangeListener(OnPreferenceChangeListener listener) { + super.setOnPreferenceChangeListener(listener); + _listener = listener; + } + + @Override + public void setChecked(boolean checked) { + setChecked(true, false); + } + + public void setChecked(boolean checked, boolean silent) { + if (silent) { + super.setOnPreferenceChangeListener(null); + } + super.setChecked(checked); + if (silent) { + super.setOnPreferenceChangeListener(_listener); + } + } +} diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 0dd28003..147afc61 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -31,7 +31,7 @@ android:inputType="number" android:defaultValue="30" android:dialogTitle="Set number of seconds of inactivity before Aegis locks the database"/> -