Upgrade Preference library

This commit is contained in:
J-Jamet
2019-09-12 12:39:27 +02:00
parent fa26d2f938
commit 52a6b3e046
3 changed files with 57 additions and 67 deletions

View File

@@ -84,8 +84,8 @@ def room_version = "2.1.0"
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.preference:preference:1.0.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

View File

@@ -45,35 +45,35 @@ class MainPreferenceFragment : PreferenceFragmentCompat() {
setPreferencesFromResource(R.xml.preferences, rootKey)
// add listeners for non-default actions
findPreference(getString(R.string.settings_app_key)).apply {
findPreference<Preference>(getString(R.string.settings_app_key))?.apply {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
mCallback?.onNestedPreferenceSelected(NestedSettingsFragment.Screen.APPLICATION)
false
}
}
findPreference(getString(R.string.settings_form_filling_key)).apply {
findPreference<Preference>(getString(R.string.settings_form_filling_key))?.apply {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
mCallback?.onNestedPreferenceSelected(NestedSettingsFragment.Screen.FORM_FILLING)
false
}
}
findPreference(getString(R.string.settings_advanced_unlock_key)).apply {
findPreference<Preference>(getString(R.string.settings_advanced_unlock_key))?.apply {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
mCallback?.onNestedPreferenceSelected(NestedSettingsFragment.Screen.ADVANCED_UNLOCK)
false
}
}
findPreference(getString(R.string.settings_appearance_key)).apply {
findPreference<Preference>(getString(R.string.settings_appearance_key))?.apply {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
mCallback?.onNestedPreferenceSelected(NestedSettingsFragment.Screen.APPEARANCE)
false
}
}
findPreference(getString(R.string.settings_database_key)).apply {
findPreference<Preference>(getString(R.string.settings_database_key))?.apply {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
mCallback?.onNestedPreferenceSelected(NestedSettingsFragment.Screen.DATABASE)
false
@@ -83,7 +83,7 @@ class MainPreferenceFragment : PreferenceFragmentCompat() {
}
}
findPreference(getString(R.string.settings_database_change_credentials_key)).apply {
findPreference<Preference>(getString(R.string.settings_database_change_credentials_key))?.apply {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
fragmentManager?.let { fragmentManager ->
AssignMasterKeyDialogFragment().show(fragmentManager, "passwordDialog")

View File

@@ -27,16 +27,13 @@ import android.os.Build
import android.os.Bundle
import android.provider.Settings
import androidx.annotation.RequiresApi
import androidx.preference.SwitchPreference
import androidx.fragment.app.DialogFragment
import androidx.appcompat.app.AlertDialog
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat
import android.util.Log
import android.view.autofill.AutofillManager
import android.widget.Toast
import androidx.biometric.BiometricManager
import androidx.preference.*
import com.kunzisoft.keepass.BuildConfig
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.dialogs.KeyboardExplanationDialogFragment
@@ -51,6 +48,10 @@ import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.education.Education
import com.kunzisoft.keepass.biometric.BiometricUnlockDatabaseHelper
import com.kunzisoft.keepass.icons.IconPackChooser
import com.kunzisoft.keepass.settings.preference.DialogListExplanationPreference
import com.kunzisoft.keepass.settings.preference.IconPackListPreference
import com.kunzisoft.keepass.settings.preference.InputNumberPreference
import com.kunzisoft.keepass.settings.preference.InputTextPreference
import com.kunzisoft.keepass.settings.preferencedialogfragment.*
class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener {
@@ -118,16 +119,14 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
activity?.let { activity ->
allowCopyPassword()
val keyFile = findPreference(getString(R.string.keyfile_key))
keyFile.setOnPreferenceChangeListener { _, newValue ->
findPreference<Preference>(getString(R.string.keyfile_key))?.setOnPreferenceChangeListener { _, newValue ->
if (!(newValue as Boolean)) {
FileDatabaseHistoryAction.getInstance(activity.applicationContext).deleteAllKeyFiles()
}
true
}
val recentHistory = findPreference(getString(R.string.recentfile_key))
recentHistory.setOnPreferenceChangeListener { _, newValue ->
findPreference<Preference>(getString(R.string.recentfile_key))?.setOnPreferenceChangeListener { _, newValue ->
if (!(newValue as Boolean)) {
FileDatabaseHistoryAction.getInstance(activity.applicationContext).deleteAll()
}
@@ -140,12 +139,12 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
setPreferencesFromResource(R.xml.preferences_form_filling, rootKey)
activity?.let { activity ->
val autoFillEnablePreference = findPreference(getString(R.string.settings_autofill_enable_key)) as SwitchPreference
val autoFillEnablePreference: SwitchPreference? = findPreference<SwitchPreference>(getString(R.string.settings_autofill_enable_key))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val autofillManager = activity.getSystemService(AutofillManager::class.java)
if (autofillManager != null && autofillManager.hasEnabledAutofillServices())
autoFillEnablePreference.isChecked = autofillManager.hasEnabledAutofillServices()
autoFillEnablePreference.onPreferenceClickListener = object : Preference.OnPreferenceClickListener {
autoFillEnablePreference?.isChecked = autofillManager.hasEnabledAutofillServices()
autoFillEnablePreference?.onPreferenceClickListener = object : Preference.OnPreferenceClickListener {
@RequiresApi(api = Build.VERSION_CODES.O)
override fun onPreferenceClick(preference: Preference): Boolean {
if ((preference as SwitchPreference).isChecked) {
@@ -187,7 +186,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
}
}
} else {
autoFillEnablePreference.setOnPreferenceClickListener { preference ->
autoFillEnablePreference?.setOnPreferenceClickListener { preference ->
(preference as SwitchPreference).isChecked = false
val fragmentManager = fragmentManager!!
UnavailableFeatureDialogFragment.getInstance(Build.VERSION_CODES.O)
@@ -197,16 +196,14 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
}
}
val keyboardPreference = findPreference(getString(R.string.magic_keyboard_key))
keyboardPreference.setOnPreferenceClickListener {
findPreference<Preference>(getString(R.string.magic_keyboard_key))?.setOnPreferenceClickListener {
if (fragmentManager != null) {
KeyboardExplanationDialogFragment().show(fragmentManager!!, "keyboardExplanationDialog")
}
false
}
val keyboardSubPreference = findPreference(getString(R.string.magic_keyboard_preference_key))
keyboardSubPreference.setOnPreferenceClickListener {
findPreference<Preference>(getString(R.string.magic_keyboard_preference_key))?.setOnPreferenceClickListener {
startActivity(Intent(context, MagikIMESettings::class.java))
false
}
@@ -219,7 +216,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
setPreferencesFromResource(R.xml.preferences_advanced_unlock, rootKey)
activity?.let { activity ->
val biometricUnlockEnablePreference = findPreference(getString(R.string.biometric_unlock_enable_key)) as SwitchPreference
val biometricUnlockEnablePreference: SwitchPreference? = findPreference<SwitchPreference>(getString(R.string.biometric_unlock_enable_key))
// < M solve verifyError exception
var biometricUnlockSupported = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -229,22 +226,24 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
}
if (!biometricUnlockSupported) {
// False if under Marshmallow
biometricUnlockEnablePreference.isChecked = false
biometricUnlockEnablePreference.setOnPreferenceClickListener { preference ->
fragmentManager?.let { fragmentManager ->
(preference as SwitchPreference).isChecked = false
UnavailableFeatureDialogFragment.getInstance(Build.VERSION_CODES.M)
.show(fragmentManager, "unavailableFeatureDialog")
biometricUnlockEnablePreference?.apply {
isChecked = false
setOnPreferenceClickListener { preference ->
fragmentManager?.let { fragmentManager ->
(preference as SwitchPreference).isChecked = false
UnavailableFeatureDialogFragment.getInstance(Build.VERSION_CODES.M)
.show(fragmentManager, "unavailableFeatureDialog")
}
false
}
false
}
}
val deleteKeysFingerprints = findPreference(getString(R.string.biometric_delete_all_key_key))
val deleteKeysFingerprints: Preference? = findPreference<Preference>(getString(R.string.biometric_delete_all_key_key))
if (!biometricUnlockSupported) {
deleteKeysFingerprints.isEnabled = false
deleteKeysFingerprints?.isEnabled = false
} else {
deleteKeysFingerprints.setOnPreferenceClickListener {
deleteKeysFingerprints?.setOnPreferenceClickListener {
context?.let { context ->
AlertDialog.Builder(context)
.setMessage(resources.getString(R.string.biometric_delete_all_key_warning))
@@ -279,8 +278,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
setPreferencesFromResource(R.xml.preferences_appearance, rootKey)
activity?.let { activity ->
val stylePreference = findPreference(getString(R.string.setting_style_key))
stylePreference.setOnPreferenceChangeListener { _, newValue ->
findPreference<ListPreference>(getString(R.string.setting_style_key))?.setOnPreferenceChangeListener { _, newValue ->
var styleEnabled = true
val styleIdString = newValue as String
if (BuildConfig.CLOSED_STORE || !Education.isEducationScreenReclickedPerformed(context!!))
@@ -299,8 +297,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
styleEnabled
}
val iconPackPreference = findPreference(getString(R.string.setting_icon_pack_choose_key))
iconPackPreference.setOnPreferenceChangeListener { _, newValue ->
findPreference<IconPackListPreference>(getString(R.string.setting_icon_pack_choose_key))?.setOnPreferenceChangeListener { _, newValue ->
var iconPackEnabled = true
val iconPackId = newValue as String
if (BuildConfig.CLOSED_STORE || !Education.isEducationScreenReclickedPerformed(context!!))
@@ -318,8 +315,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
iconPackEnabled
}
val resetEducationScreens = findPreference(getString(R.string.reset_education_screens_key))
resetEducationScreens.setOnPreferenceClickListener {
findPreference<Preference>(getString(R.string.reset_education_screens_key))?.setOnPreferenceClickListener {
// To allow only one toast
if (count == 0) {
val sharedPreferences = Education.getEducationSharedPreferences(context!!)
@@ -341,58 +337,52 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
if (database.loaded) {
val dbGeneralPrefCategory = findPreference(getString(R.string.database_general_key)) as PreferenceCategory
val dbGeneralPrefCategory: PreferenceCategory? = findPreference<PreferenceCategory>(getString(R.string.database_general_key))
// Db name
val dbNamePref = findPreference(getString(R.string.database_name_key))
val dbNamePref: InputTextPreference? = findPreference<InputTextPreference>(getString(R.string.database_name_key))
if (database.containsName()) {
dbNamePref.summary = database.name
dbNamePref?.summary = database.name
} else {
dbGeneralPrefCategory.removePreference(dbNamePref)
dbGeneralPrefCategory?.removePreference(dbNamePref)
}
// Db description
val dbDescriptionPref = findPreference(getString(R.string.database_description_key))
val dbDescriptionPref: InputTextPreference? = findPreference<InputTextPreference>(getString(R.string.database_description_key))
if (database.containsDescription()) {
dbDescriptionPref.summary = database.description
dbDescriptionPref?.summary = database.description
} else {
dbGeneralPrefCategory.removePreference(dbDescriptionPref)
dbGeneralPrefCategory?.removePreference(dbDescriptionPref)
}
// Recycle bin
val recycleBinPref = findPreference(getString(R.string.recycle_bin_key)) as SwitchPreference
val recycleBinPref: SwitchPreference? = findPreference<SwitchPreference>(getString(R.string.recycle_bin_key))
// TODO Recycle
dbGeneralPrefCategory.removePreference(recycleBinPref) // To delete
dbGeneralPrefCategory?.removePreference(recycleBinPref) // To delete
if (database.isRecycleBinAvailable) {
recycleBinPref.isChecked = database.isRecycleBinEnabled
recycleBinPref.isEnabled = false
recycleBinPref?.isChecked = database.isRecycleBinEnabled
recycleBinPref?.isEnabled = false
} else {
dbGeneralPrefCategory.removePreference(recycleBinPref)
dbGeneralPrefCategory?.removePreference(recycleBinPref)
}
// Version
val dbVersionPref = findPreference(getString(R.string.database_version_key))
dbVersionPref.summary = database.getVersion()
findPreference<Preference>(getString(R.string.database_version_key))?.summary = database.getVersion()
// Encryption Algorithm
val algorithmPref = findPreference(getString(R.string.encryption_algorithm_key))
algorithmPref.summary = database.getEncryptionAlgorithmName(resources)
findPreference<DialogListExplanationPreference>(getString(R.string.encryption_algorithm_key))?.summary = database.getEncryptionAlgorithmName(resources)
// Key derivation function
val kdfPref = findPreference(getString(R.string.key_derivation_function_key))
kdfPref.summary = database.getKeyDerivationName(resources)
findPreference<DialogListExplanationPreference>(getString(R.string.key_derivation_function_key))?.summary = database.getKeyDerivationName(resources)
// Round encryption
roundPref = findPreference(getString(R.string.transform_rounds_key))
roundPref?.summary = database.numberKeyEncryptionRoundsAsString
findPreference<InputNumberPreference>(getString(R.string.transform_rounds_key))?.summary = database.numberKeyEncryptionRoundsAsString
// Memory Usage
memoryPref = findPreference(getString(R.string.memory_usage_key))
memoryPref?.summary = database.memoryUsageAsString
findPreference<InputNumberPreference>(getString(R.string.memory_usage_key))?.summary = database.memoryUsageAsString
// Parallelism
parallelismPref = findPreference(getString(R.string.parallelism_key))
parallelismPref?.summary = database.parallelismAsString
findPreference<InputNumberPreference>(getString(R.string.parallelism_key))?.summary = database.parallelismAsString
} else {
Log.e(javaClass.name, "Database isn't ready")
@@ -400,8 +390,8 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
}
private fun allowCopyPassword() {
val copyPasswordPreference = findPreference(getString(R.string.allow_copy_password_key)) as SwitchPreference
copyPasswordPreference.setOnPreferenceChangeListener { _, newValue ->
val copyPasswordPreference: SwitchPreference? = findPreference<SwitchPreference>(getString(R.string.allow_copy_password_key))
copyPasswordPreference?.setOnPreferenceChangeListener { _, newValue ->
if (newValue as Boolean && context != null) {
val message = getString(R.string.allow_copy_password_warning) +
"\n\n" +