Fix database preferences

This commit is contained in:
J-Jamet
2019-09-13 22:20:56 +02:00
parent ca89bba768
commit 83f0eb9a33
2 changed files with 41 additions and 39 deletions

View File

@@ -53,18 +53,17 @@ import com.kunzisoft.keepass.settings.preference.IconPackListPreference
import com.kunzisoft.keepass.settings.preference.InputNumberPreference import com.kunzisoft.keepass.settings.preference.InputNumberPreference
import com.kunzisoft.keepass.settings.preference.InputTextPreference import com.kunzisoft.keepass.settings.preference.InputTextPreference
import com.kunzisoft.keepass.settings.preferencedialogfragment.* import com.kunzisoft.keepass.settings.preferencedialogfragment.*
import com.kunzisoft.keepass.utils.UriUtil
class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener { class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener {
private var database: Database = Database.getInstance() private var mDatabase: Database = Database.getInstance()
private var databaseReadOnly: Boolean = false private var mDatabaseReadOnly: Boolean = false
private var count = 0 private var mCount = 0
private var roundPref: Preference? = null private var mRoundPref: InputNumberPreference? = null
private var memoryPref: Preference? = null private var mMemoryPref: InputNumberPreference? = null
private var parallelismPref: Preference? = null private var mParallelismPref: InputNumberPreference? = null
enum class Screen { enum class Screen {
APPLICATION, FORM_FILLING, ADVANCED_UNLOCK, DATABASE, APPEARANCE APPLICATION, FORM_FILLING, ADVANCED_UNLOCK, DATABASE, APPEARANCE
@@ -75,7 +74,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
activity?.let { activity -> activity?.let { activity ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
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 (autoFillEnablePreference != null) { if (autoFillEnablePreference != null) {
val autofillManager = activity.getSystemService(AutofillManager::class.java) val autofillManager = activity.getSystemService(AutofillManager::class.java)
autoFillEnablePreference.isChecked = autofillManager != null autoFillEnablePreference.isChecked = autofillManager != null
@@ -91,7 +90,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
if (arguments != null) if (arguments != null)
key = arguments!!.getInt(TAG_KEY) key = arguments!!.getInt(TAG_KEY)
databaseReadOnly = database.isReadOnly mDatabaseReadOnly = mDatabase.isReadOnly
|| ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, arguments) || ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, arguments)
// Load the preferences from an XML resource // Load the preferences from an XML resource
@@ -319,7 +318,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
findPreference<Preference>(getString(R.string.reset_education_screens_key))?.setOnPreferenceClickListener { findPreference<Preference>(getString(R.string.reset_education_screens_key))?.setOnPreferenceClickListener {
// To allow only one toast // To allow only one toast
if (count == 0) { if (mCount == 0) {
val sharedPreferences = Education.getEducationSharedPreferences(context!!) val sharedPreferences = Education.getEducationSharedPreferences(context!!)
val editor = sharedPreferences.edit() val editor = sharedPreferences.edit()
for (resourceId in Education.educationResourcesKeys) { for (resourceId in Education.educationResourcesKeys) {
@@ -328,7 +327,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
editor.apply() editor.apply()
Toast.makeText(context, R.string.reset_education_screens_text, Toast.LENGTH_SHORT).show() Toast.makeText(context, R.string.reset_education_screens_text, Toast.LENGTH_SHORT).show()
} }
count++ mCount++
false false
} }
} }
@@ -337,22 +336,22 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
private fun onCreateDatabasePreference(rootKey: String?) { private fun onCreateDatabasePreference(rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_database, rootKey) setPreferencesFromResource(R.xml.preferences_database, rootKey)
if (database.loaded) { if (mDatabase.loaded) {
val dbGeneralPrefCategory: PreferenceCategory? = findPreference<PreferenceCategory>(getString(R.string.database_general_key)) val dbGeneralPrefCategory: PreferenceCategory? = findPreference<PreferenceCategory>(getString(R.string.database_general_key))
// Db name // Db name
val dbNamePref: InputTextPreference? = findPreference<InputTextPreference>(getString(R.string.database_name_key)) val dbNamePref: InputTextPreference? = findPreference<InputTextPreference>(getString(R.string.database_name_key))
if (database.containsName()) { if (mDatabase.containsName()) {
dbNamePref?.summary = database.name dbNamePref?.summary = mDatabase.name
} else { } else {
dbGeneralPrefCategory?.removePreference(dbNamePref) dbGeneralPrefCategory?.removePreference(dbNamePref)
} }
// Db description // Db description
val dbDescriptionPref: InputTextPreference? = findPreference<InputTextPreference>(getString(R.string.database_description_key)) val dbDescriptionPref: InputTextPreference? = findPreference<InputTextPreference>(getString(R.string.database_description_key))
if (database.containsDescription()) { if (mDatabase.containsDescription()) {
dbDescriptionPref?.summary = database.description dbDescriptionPref?.summary = mDatabase.description
} else { } else {
dbGeneralPrefCategory?.removePreference(dbDescriptionPref) dbGeneralPrefCategory?.removePreference(dbDescriptionPref)
} }
@@ -361,30 +360,36 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
val recycleBinPref: SwitchPreference? = findPreference<SwitchPreference>(getString(R.string.recycle_bin_key)) val recycleBinPref: SwitchPreference? = findPreference<SwitchPreference>(getString(R.string.recycle_bin_key))
// TODO Recycle // TODO Recycle
dbGeneralPrefCategory?.removePreference(recycleBinPref) // To delete dbGeneralPrefCategory?.removePreference(recycleBinPref) // To delete
if (database.isRecycleBinAvailable) { if (mDatabase.isRecycleBinAvailable) {
recycleBinPref?.isChecked = database.isRecycleBinEnabled recycleBinPref?.isChecked = mDatabase.isRecycleBinEnabled
recycleBinPref?.isEnabled = false recycleBinPref?.isEnabled = false
} else { } else {
dbGeneralPrefCategory?.removePreference(recycleBinPref) dbGeneralPrefCategory?.removePreference(recycleBinPref)
} }
// Version // Version
findPreference<Preference>(getString(R.string.database_version_key))?.summary = database.getVersion() findPreference<Preference>(getString(R.string.database_version_key))
?.summary = mDatabase.getVersion()
// Encryption Algorithm // Encryption Algorithm
findPreference<DialogListExplanationPreference>(getString(R.string.encryption_algorithm_key))?.summary = database.getEncryptionAlgorithmName(resources) findPreference<DialogListExplanationPreference>(getString(R.string.encryption_algorithm_key))
?.summary = mDatabase.getEncryptionAlgorithmName(resources)
// Key derivation function // Key derivation function
findPreference<DialogListExplanationPreference>(getString(R.string.key_derivation_function_key))?.summary = database.getKeyDerivationName(resources) findPreference<DialogListExplanationPreference>(getString(R.string.key_derivation_function_key))
?.summary = mDatabase.getKeyDerivationName(resources)
// Round encryption // Round encryption
findPreference<InputNumberPreference>(getString(R.string.transform_rounds_key))?.summary = database.numberKeyEncryptionRoundsAsString mRoundPref = findPreference<InputNumberPreference>(getString(R.string.transform_rounds_key))
mRoundPref?.summary = mDatabase.numberKeyEncryptionRoundsAsString
// Memory Usage // Memory Usage
findPreference<InputNumberPreference>(getString(R.string.memory_usage_key))?.summary = database.memoryUsageAsString mMemoryPref = findPreference<InputNumberPreference>(getString(R.string.memory_usage_key))
mMemoryPref?.summary = mDatabase.memoryUsageAsString
// Parallelism // Parallelism
findPreference<InputNumberPreference>(getString(R.string.parallelism_key))?.summary = database.parallelismAsString mParallelismPref = findPreference<InputNumberPreference>(getString(R.string.parallelism_key))
mParallelismPref?.summary = mDatabase.parallelismAsString
} else { } else {
Log.e(javaClass.name, "Database isn't ready") Log.e(javaClass.name, "Database isn't ready")
@@ -435,7 +440,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
override fun onStop() { override fun onStop() {
super.onStop() super.onStop()
activity?.let { activity -> activity?.let { activity ->
if (count == 10) { if (mCount == 10) {
Education.getEducationSharedPreferences(activity).edit() Education.getEducationSharedPreferences(activity).edit()
.putBoolean(getString(R.string.education_screen_reclicked_key), true).apply() .putBoolean(getString(R.string.education_screen_reclicked_key), true).apply()
} }
@@ -462,12 +467,9 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
preference.key == getString(R.string.key_derivation_function_key) -> { preference.key == getString(R.string.key_derivation_function_key) -> {
val keyDerivationDialogFragment = DatabaseKeyDerivationPreferenceDialogFragmentCompat.newInstance(preference.key) val keyDerivationDialogFragment = DatabaseKeyDerivationPreferenceDialogFragmentCompat.newInstance(preference.key)
// Add other prefs to manage // Add other prefs to manage
if (roundPref != null) keyDerivationDialogFragment.setRoundPreference(mRoundPref)
keyDerivationDialogFragment.setRoundPreference(roundPref!!) keyDerivationDialogFragment.setMemoryPreference(mMemoryPref)
if (memoryPref != null) keyDerivationDialogFragment.setParallelismPreference(mParallelismPref)
keyDerivationDialogFragment.setMemoryPreference(memoryPref!!)
if (parallelismPref != null)
keyDerivationDialogFragment.setParallelismPreference(parallelismPref!!)
dialogFragment = keyDerivationDialogFragment dialogFragment = keyDerivationDialogFragment
} }
preference.key == getString(R.string.transform_rounds_key) -> { preference.key == getString(R.string.transform_rounds_key) -> {
@@ -482,7 +484,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
else -> otherDialogFragment = true else -> otherDialogFragment = true
} }
if (dialogFragment != null && !databaseReadOnly) { if (dialogFragment != null && !mDatabaseReadOnly) {
dialogFragment.setTargetFragment(this, 0) dialogFragment.setTargetFragment(this, 0)
dialogFragment.show(fragmentManager, null) dialogFragment.show(fragmentManager, null)
} }
@@ -495,7 +497,7 @@ class NestedSettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferen
} }
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
ReadOnlyHelper.onSaveInstanceState(outState, databaseReadOnly) ReadOnlyHelper.onSaveInstanceState(outState, mDatabaseReadOnly)
super.onSaveInstanceState(outState) super.onSaveInstanceState(outState)
} }

View File

@@ -62,26 +62,26 @@ class DatabaseKeyDerivationPreferenceDialogFragmentCompat
override fun onDialogClosed(positiveResult: Boolean) { override fun onDialogClosed(positiveResult: Boolean) {
if (database != null && positiveResult && database!!.allowKdfModification()) { if (database != null && positiveResult && database!!.allowKdfModification()) {
if (kdfEngineSelected != null) { if (kdfEngineSelected != null) {
val newKdfEngine = kdfEngineSelected val newKdfEngine = kdfEngineSelected!!
val oldKdfEngine = database!!.kdfEngine val oldKdfEngine = database!!.kdfEngine
database?.assignKdfEngine(newKdfEngine!!) database?.assignKdfEngine(newKdfEngine)
actionInUIThreadAfterSaveDatabase = AfterDescriptionSave(newKdfEngine!!, oldKdfEngine) actionInUIThreadAfterSaveDatabase = AfterDescriptionSave(newKdfEngine, oldKdfEngine)
} }
} }
super.onDialogClosed(positiveResult) super.onDialogClosed(positiveResult)
} }
fun setRoundPreference(preference: Preference) { fun setRoundPreference(preference: Preference?) {
this.roundPreference = preference this.roundPreference = preference
} }
fun setMemoryPreference(preference: Preference) { fun setMemoryPreference(preference: Preference?) {
this.memoryPreference = preference this.memoryPreference = preference
} }
fun setParallelismPreference(preference: Preference) { fun setParallelismPreference(preference: Preference?) {
this.parallelismPreference = preference this.parallelismPreference = preference
} }