Fix database settings

This commit is contained in:
J-Jamet
2021-08-04 12:11:24 +02:00
parent 7a2536c559
commit fa5ae17621
20 changed files with 456 additions and 372 deletions

View File

@@ -1,7 +1,9 @@
package com.kunzisoft.keepass.settings
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.preference.PreferenceFragmentCompat
import com.kunzisoft.keepass.activities.DatabaseRetrieval
@@ -13,15 +15,23 @@ import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
abstract class DatabasePreferenceFragment : PreferenceFragmentCompat(), DatabaseRetrieval {
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
private var mDatabase: Database? = null
override fun onViewCreated(view: View,
savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
mDatabaseViewModel.database.observe(viewLifecycleOwner) { database ->
view.resetAppTimeoutWhenViewFocusedOrChanged(requireContext(), database)
mDatabase = database
onDatabaseRetrieved(database)
}
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.resetAppTimeoutWhenViewFocusedOrChanged(requireContext(), mDatabase)
}
override fun onDatabaseActionFinished(

View File

@@ -24,7 +24,6 @@ import android.os.Bundle
import android.util.Log
import android.view.*
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.activityViewModels
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.SwitchPreference
@@ -42,7 +41,6 @@ import com.kunzisoft.keepass.settings.preference.*
import com.kunzisoft.keepass.settings.preferencedialogfragment.*
import com.kunzisoft.keepass.tasks.ActionRunnable
import com.kunzisoft.keepass.utils.MenuUtil
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
@@ -50,6 +48,8 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
private var mDatabaseReadOnly: Boolean = false
private var mDatabaseAutoSaveEnabled: Boolean = true
private var mScreen: Screen? = null
private var dbNamePref: InputTextPreference? = null
private var dbDescriptionPref: InputTextPreference? = null
private var dbDefaultUsername: InputTextPreference? = null
@@ -65,181 +65,201 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
private var mMemoryPref: InputKdfSizePreference? = null
private var mParallelismPref: InputKdfNumberPreference? = null
override fun onDatabaseRetrieved(database: Database?) {
mDatabase = database
}
override fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?) {
setHasOptionsMenu(true)
mDatabaseReadOnly = mDatabase?.isReadOnly == true
|| ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, arguments)
// TODO Read only
mDatabaseReadOnly = mDatabaseReadOnly || ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, arguments)
mScreen = screen
val database = mDatabase
// Load the preferences from an XML resource
when (screen) {
Screen.DATABASE -> {
onCreateDatabasePreference(rootKey)
setPreferencesFromResource(R.xml.preferences_database, rootKey)
if (database?.loaded == true)
onCreateDatabasePreference(database)
}
Screen.DATABASE_SECURITY -> {
onCreateDatabaseSecurityPreference(rootKey)
setPreferencesFromResource(R.xml.preferences_database_security, rootKey)
if (database?.loaded == true)
onCreateDatabaseSecurityPreference(database)
}
Screen.DATABASE_MASTER_KEY -> {
onCreateDatabaseMasterKeyPreference(rootKey)
setPreferencesFromResource(R.xml.preferences_database_master_key, rootKey)
if (database?.loaded == true)
onCreateDatabaseMasterKeyPreference(database)
}
else -> {
}
else -> {}
}
}
private fun onCreateDatabasePreference(rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_database, rootKey)
override fun onDatabaseRetrieved(database: Database?) {
mDatabase = database
mDatabaseReadOnly = mDatabaseReadOnly || database?.isReadOnly == true
mDatabase?.let { database ->
if (database.loaded) {
val dbGeneralPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_general_key))
// Database name
dbNamePref = findPreference(getString(R.string.database_name_key))
if (database.allowName) {
dbNamePref?.summary = database.name
} else {
dbGeneralPrefCategory?.removePreference(dbNamePref)
}
// Database description
dbDescriptionPref = findPreference(getString(R.string.database_description_key))
if (database.allowDescription) {
dbDescriptionPref?.summary = database.description
} else {
dbGeneralPrefCategory?.removePreference(dbDescriptionPref)
}
// Database default username
dbDefaultUsername = findPreference(getString(R.string.database_default_username_key))
if (database.allowDefaultUsername) {
dbDefaultUsername?.summary = database.defaultUsername
} else {
dbDefaultUsername?.isEnabled = false
// TODO dbGeneralPrefCategory?.removePreference(dbDefaultUsername)
}
// Database custom color
dbCustomColorPref = findPreference(getString(R.string.database_custom_color_key))
if (database.allowCustomColor) {
dbCustomColorPref?.apply {
try {
color = Color.parseColor(database.customColor)
summary = database.customColor
} catch (e: Exception) {
color = DialogColorPreference.DISABLE_COLOR
summary = ""
}
mDatabase?.let {
if (it.loaded) {
when (mScreen) {
Screen.DATABASE -> {
onCreateDatabasePreference(it)
}
} else {
dbCustomColorPref?.isEnabled = false
// TODO dbGeneralPrefCategory?.removePreference(dbCustomColorPref)
}
// Version
findPreference<Preference>(getString(R.string.database_version_key))
?.summary = database.version
val dbCompressionPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_data_key))
// Database compression
dbDataCompressionPref = findPreference(getString(R.string.database_data_compression_key))
if (database.allowDataCompression) {
dbDataCompressionPref?.summary = (database.compressionAlgorithm
?: CompressionAlgorithm.None).getName(resources)
} else {
dbCompressionPrefCategory?.isVisible = false
}
val dbRecycleBinPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_recycle_bin_key))
recycleBinGroupPref = findPreference(getString(R.string.recycle_bin_group_key))
// Recycle bin
if (database.allowConfigurableRecycleBin) {
val recycleBinEnablePref: SwitchPreference? = findPreference(getString(R.string.recycle_bin_enable_key))
recycleBinEnablePref?.apply {
isChecked = database.isRecycleBinEnabled
isEnabled = if (!mDatabaseReadOnly) {
setOnPreferenceChangeListener { _, newValue ->
val recycleBinEnabled = newValue as Boolean
database.enableRecycleBin(recycleBinEnabled, resources)
refreshRecycleBinGroup()
// Save the database if not in readonly mode
saveDatabase(mDatabaseAutoSaveEnabled)
true
}
true
} else {
false
}
Screen.DATABASE_SECURITY -> {
onCreateDatabaseSecurityPreference(it)
}
// Change the recycle bin group
recycleBinGroupPref?.setOnPreferenceClickListener {
true
Screen.DATABASE_MASTER_KEY -> {
onCreateDatabaseMasterKeyPreference(it)
}
// Recycle Bin group
refreshRecycleBinGroup()
} else {
recycleBinGroupPref?.onPreferenceClickListener = null
dbRecycleBinPrefCategory?.isVisible = false
}
// Templates
val templatesGroupPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_templates_key))
templatesGroupPref = findPreference(getString(R.string.templates_group_uuid_key))
if (database.allowConfigurableTemplatesGroup) {
val templatesEnablePref: SwitchPreference? = findPreference(getString(R.string.templates_group_enable_key))
templatesEnablePref?.apply {
isChecked = database.isTemplatesEnabled
isEnabled = if (!mDatabaseReadOnly) {
setOnPreferenceChangeListener { _, newValue ->
val templatesEnabled = newValue as Boolean
database.enableTemplates(templatesEnabled, resources)
refreshTemplatesGroup()
// Save the database if not in readonly mode
saveDatabase(mDatabaseAutoSaveEnabled)
true
}
true
} else {
false
}
else -> {
}
// Recycle Bin group
refreshTemplatesGroup()
} else {
templatesGroupPrefCategory?.isVisible = false
}
// History
findPreference<PreferenceCategory>(getString(R.string.database_category_history_key))
?.isVisible = database.manageHistory == true
// Max history items
dbMaxHistoryItemsPref = findPreference<InputNumberPreference>(getString(R.string.max_history_items_key))?.apply {
summary = database.historyMaxItems.toString()
}
// Max history size
dbMaxHistorySizePref = findPreference<InputNumberPreference>(getString(R.string.max_history_size_key))?.apply {
summary = database.historyMaxSize.toString()
}
} else {
Log.e(javaClass.name, "Database isn't ready")
}
}
}
private fun refreshRecycleBinGroup() {
private fun onCreateDatabasePreference(database: Database) {
val dbGeneralPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_general_key))
// Database name
dbNamePref = findPreference(getString(R.string.database_name_key))
if (database.allowName) {
dbNamePref?.summary = database.name
} else {
dbGeneralPrefCategory?.removePreference(dbNamePref)
}
// Database description
dbDescriptionPref = findPreference(getString(R.string.database_description_key))
if (database.allowDescription) {
dbDescriptionPref?.summary = database.description
} else {
dbGeneralPrefCategory?.removePreference(dbDescriptionPref)
}
// Database default username
dbDefaultUsername = findPreference(getString(R.string.database_default_username_key))
if (database.allowDefaultUsername) {
dbDefaultUsername?.summary = database.defaultUsername
} else {
dbDefaultUsername?.isEnabled = false
// TODO dbGeneralPrefCategory?.removePreference(dbDefaultUsername)
}
// Database custom color
dbCustomColorPref = findPreference(getString(R.string.database_custom_color_key))
if (database.allowCustomColor) {
dbCustomColorPref?.apply {
try {
color = Color.parseColor(database.customColor)
summary = database.customColor
} catch (e: Exception) {
color = DialogColorPreference.DISABLE_COLOR
summary = ""
}
}
} else {
dbCustomColorPref?.isEnabled = false
// TODO dbGeneralPrefCategory?.removePreference(dbCustomColorPref)
}
// Version
findPreference<Preference>(getString(R.string.database_version_key))
?.summary = database.version
val dbCompressionPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_data_key))
// Database compression
dbDataCompressionPref = findPreference(getString(R.string.database_data_compression_key))
if (database.allowDataCompression) {
dbDataCompressionPref?.summary = (database.compressionAlgorithm
?: CompressionAlgorithm.None).getName(resources)
} else {
dbCompressionPrefCategory?.isVisible = false
}
val dbRecycleBinPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_recycle_bin_key))
recycleBinGroupPref = findPreference(getString(R.string.recycle_bin_group_key))
// Recycle bin
if (database.allowConfigurableRecycleBin) {
val recycleBinEnablePref: SwitchPreference? = findPreference(getString(R.string.recycle_bin_enable_key))
recycleBinEnablePref?.apply {
isChecked = database.isRecycleBinEnabled
isEnabled = if (!mDatabaseReadOnly) {
setOnPreferenceChangeListener { _, newValue ->
val recycleBinEnabled = newValue as Boolean
database.enableRecycleBin(recycleBinEnabled, resources)
refreshRecycleBinGroup(database)
// Save the database if not in readonly mode
saveDatabase(mDatabaseAutoSaveEnabled)
true
}
true
} else {
false
}
}
// Change the recycle bin group
recycleBinGroupPref?.setOnPreferenceClickListener {
true
}
// Recycle Bin group
refreshRecycleBinGroup(database)
} else {
recycleBinGroupPref?.onPreferenceClickListener = null
dbRecycleBinPrefCategory?.isVisible = false
}
// Templates
val templatesGroupPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_templates_key))
templatesGroupPref = findPreference(getString(R.string.templates_group_uuid_key))
if (database.allowConfigurableTemplatesGroup) {
val templatesEnablePref: SwitchPreference? = findPreference(getString(R.string.templates_group_enable_key))
templatesEnablePref?.apply {
isChecked = database.isTemplatesEnabled
isEnabled = if (!mDatabaseReadOnly) {
setOnPreferenceChangeListener { _, newValue ->
val templatesEnabled = newValue as Boolean
database.enableTemplates(templatesEnabled, resources)
refreshTemplatesGroup(database)
// Save the database if not in readonly mode
saveDatabase(mDatabaseAutoSaveEnabled)
true
}
true
} else {
false
}
}
// Recycle Bin group
refreshTemplatesGroup(database)
} else {
templatesGroupPrefCategory?.isVisible = false
}
// History
findPreference<PreferenceCategory>(getString(R.string.database_category_history_key))
?.isVisible = database.manageHistory == true
// Max history items
dbMaxHistoryItemsPref = findPreference<InputNumberPreference>(getString(R.string.max_history_items_key))?.apply {
summary = database.historyMaxItems.toString()
}
// Max history size
dbMaxHistorySizePref = findPreference<InputNumberPreference>(getString(R.string.max_history_size_key))?.apply {
summary = database.historyMaxSize.toString()
}
}
private fun refreshRecycleBinGroup(database: Database?) {
recycleBinGroupPref?.apply {
if (mDatabase?.isRecycleBinEnabled == true) {
summary = mDatabase?.recycleBin?.toString()
if (database?.isRecycleBinEnabled == true) {
summary = database.recycleBin?.toString()
isEnabled = true
} else {
summary = null
@@ -248,10 +268,10 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
}
}
private fun refreshTemplatesGroup() {
private fun refreshTemplatesGroup(database: Database?) {
templatesGroupPref?.apply {
if (mDatabase?.isTemplatesEnabled == true) {
summary = mDatabase?.templatesGroup?.toString()
if (database?.isTemplatesEnabled == true) {
summary = database.templatesGroup?.toString()
isEnabled = true
} else {
summary = null
@@ -260,60 +280,44 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
}
}
private fun onCreateDatabaseSecurityPreference(rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_database_security, rootKey)
private fun onCreateDatabaseSecurityPreference(database: Database) {
// Encryption Algorithm
mEncryptionAlgorithmPref = findPreference<DialogListExplanationPreference>(getString(R.string.encryption_algorithm_key))?.apply {
summary = database.getEncryptionAlgorithmName()
}
mDatabase?.let { database ->
if (database.loaded) {
// Encryption Algorithm
mEncryptionAlgorithmPref = findPreference<DialogListExplanationPreference>(getString(R.string.encryption_algorithm_key))?.apply {
summary = database.getEncryptionAlgorithmName()
}
// Key derivation function
mKeyDerivationPref = findPreference<DialogListExplanationPreference>(getString(R.string.key_derivation_function_key))?.apply {
summary = database.getKeyDerivationName()
}
// Key derivation function
mKeyDerivationPref = findPreference<DialogListExplanationPreference>(getString(R.string.key_derivation_function_key))?.apply {
summary = database.getKeyDerivationName()
}
// Round encryption
mRoundPref = findPreference<InputKdfNumberPreference>(getString(R.string.transform_rounds_key))?.apply {
summary = database.numberKeyEncryptionRounds.toString()
}
// Round encryption
mRoundPref = findPreference<InputKdfNumberPreference>(getString(R.string.transform_rounds_key))?.apply {
summary = database.numberKeyEncryptionRounds.toString()
}
// Memory Usage
mMemoryPref = findPreference<InputKdfSizePreference>(getString(R.string.memory_usage_key))?.apply {
summary = database.memoryUsage.toString()
}
// Memory Usage
mMemoryPref = findPreference<InputKdfSizePreference>(getString(R.string.memory_usage_key))?.apply {
summary = database.memoryUsage.toString()
}
// Parallelism
mParallelismPref = findPreference<InputKdfNumberPreference>(getString(R.string.parallelism_key))?.apply {
summary = database.parallelism.toString()
}
} else {
Log.e(javaClass.name, "Database isn't ready")
}
// Parallelism
mParallelismPref = findPreference<InputKdfNumberPreference>(getString(R.string.parallelism_key))?.apply {
summary = database.parallelism.toString()
}
}
private fun onCreateDatabaseMasterKeyPreference(rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_database_master_key, rootKey)
mDatabase?.let { database ->
if (database.loaded) {
findPreference<Preference>(getString(R.string.settings_database_change_credentials_key))?.apply {
isEnabled = if (!mDatabaseReadOnly) {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
AssignMasterKeyDialogFragment.getInstance(database.allowNoMasterKey)
.show(parentFragmentManager, "passwordDialog")
false
}
true
} else {
false
}
private fun onCreateDatabaseMasterKeyPreference(database: Database) {
findPreference<Preference>(getString(R.string.settings_database_change_credentials_key))?.apply {
isEnabled = if (!mDatabaseReadOnly) {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
AssignMasterKeyDialogFragment.getInstance(database.allowNoMasterKey)
.show(parentFragmentManager, "passwordDialog")
false
}
true
} else {
Log.e(javaClass.name, "Database isn't ready")
false
}
}
}
@@ -339,8 +343,9 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
return view
}
override fun onProgressDialogThreadResult(actionTask: String,
result: ActionRunnable.Result) {
override fun onDatabaseActionFinished(database: Database,
actionTask: String,
result: ActionRunnable.Result) {
result.data?.let { data ->
if (data.containsKey(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
&& data.containsKey(DatabaseTaskNotificationService.NEW_ELEMENT_KEY)) {
@@ -357,7 +362,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
if (result.isSuccess) {
newName
} else {
mDatabase?.name = oldName
database.name = oldName
oldName
}
dbNamePref?.summary = nameToShow
@@ -369,7 +374,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
if (result.isSuccess) {
newDescription
} else {
mDatabase?.description = oldDescription
database.description = oldDescription
oldDescription
}
dbDescriptionPref?.summary = descriptionToShow
@@ -421,7 +426,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
oldRecycleBin
}
mDatabase?.setRecycleBin(recycleBinToShow)
refreshRecycleBinGroup()
refreshRecycleBinGroup(database)
}
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_TEMPLATES_GROUP_TASK -> {
val oldTemplatesGroup = data.getParcelable<Group?>(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
@@ -433,7 +438,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
oldTemplatesGroup
}
mDatabase?.setTemplatesGroup(templatesGroupToShow)
refreshTemplatesGroup()
refreshTemplatesGroup(database)
}
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_MAX_HISTORY_ITEMS_TASK -> {
val oldMaxHistoryItems = data.getInt(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
@@ -569,10 +574,10 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
dialogFragment = DatabaseTemplatesGroupPreferenceDialogFragmentCompat.newInstance(preference.key)
}
getString(R.string.max_history_items_key) -> {
dialogFragment = MaxHistoryItemsPreferenceDialogFragmentCompat.newInstance(preference.key)
dialogFragment = DatabaseMaxHistoryItemsPreferenceDialogFragmentCompat.newInstance(preference.key)
}
getString(R.string.max_history_size_key) -> {
dialogFragment = MaxHistorySizePreferenceDialogFragmentCompat.newInstance(preference.key)
dialogFragment = DatabaseMaxHistorySizePreferenceDialogFragmentCompat.newInstance(preference.key)
}
// Security
@@ -588,13 +593,13 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
dialogFragment = keyDerivationDialogFragment
}
getString(R.string.transform_rounds_key) -> {
dialogFragment = RoundsPreferenceDialogFragmentCompat.newInstance(preference.key)
dialogFragment = DatabaseRoundsPreferenceDialogFragmentCompat.newInstance(preference.key)
}
getString(R.string.memory_usage_key) -> {
dialogFragment = MemoryUsagePreferenceDialogFragmentCompat.newInstance(preference.key)
dialogFragment = DatabaseMemoryUsagePreferenceDialogFragmentCompat.newInstance(preference.key)
}
getString(R.string.parallelism_key) -> {
dialogFragment = ParallelismPreferenceDialogFragmentCompat.newInstance(preference.key)
dialogFragment = DatabaseParallelismPreferenceDialogFragmentCompat.newInstance(preference.key)
}
else -> otherDialogFragment = true
}

View File

@@ -26,7 +26,6 @@ import androidx.preference.SwitchPreference
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.dialogs.UnderDevelopmentFeatureDialogFragment
import com.kunzisoft.keepass.activities.helpers.ReadOnlyHelper
import com.kunzisoft.keepass.tasks.ActionRunnable
// TODO Move database fragment in sub class
abstract class NestedSettingsFragment : DatabasePreferenceFragment() {
@@ -48,9 +47,6 @@ abstract class NestedSettingsFragment : DatabasePreferenceFragment() {
abstract fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?)
open fun onProgressDialogThreadResult(actionTask: String,
result: ActionRunnable.Result) {}
protected fun preferenceInDevelopment(preferenceInDev: Preference) {
preferenceInDev.setOnPreferenceClickListener { preference ->
try { // don't check if we can

View File

@@ -134,10 +134,10 @@ open class SettingsActivity
}
}
else -> {
// Call result in fragment
// TODO Call result in fragment by viewmodel
(supportFragmentManager
.findFragmentByTag(TAG_NESTED) as NestedSettingsFragment?)
?.onProgressDialogThreadResult(actionTask, result)
?.onDatabaseActionFinished(database, actionTask, result)
}
}
coordinatorLayout?.showActionErrorIfNeeded(result)
@@ -219,6 +219,7 @@ open class SettingsActivity
* To keep the current screen when activity is reloaded
*/
fun keepCurrentScreen() {
// TODO Nested screen
(supportFragmentManager.findFragmentByTag(TAG_NESTED) as? NestedSettingsFragment?)
?.getScreen()?.let { fragmentKey ->
intent.putExtra(FRAGMENT_ARG, fragmentKey.name)

View File

@@ -47,6 +47,7 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
var onColorSelectedListener: ((enable: Boolean, color: Int) -> Unit)? = null
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
super.onCreateDialog(savedInstanceState)
val alertDialogBuilder = AlertDialog.Builder(requireActivity())
@@ -56,17 +57,6 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
val fragmentManager = childFragmentManager
chromaColorFragment = fragmentManager.findFragmentByTag(TAG_FRAGMENT_COLORS) as ChromaColorFragment?
mDatabase?.let { database ->
val initColor = try {
enableSwitchView.isChecked = true
Color.parseColor(database.customColor)
} catch (e: Exception) {
enableSwitchView.isChecked = false
DEFAULT_COLOR
}
arguments?.putInt(ARG_INITIAL_COLOR, initColor)
}
if (chromaColorFragment == null) {
chromaColorFragment = newInstance(arguments)
fragmentManager.beginTransaction().apply {
@@ -76,22 +66,6 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
}
alertDialogBuilder.setPositiveButton(android.R.string.ok) { _, _ ->
val currentColor = chromaColorFragment!!.currentColor
val customColorEnable = enableSwitchView.isChecked
onColorSelectedListener?.invoke(customColorEnable, currentColor)
mDatabase?.let { database ->
val newColor = if (customColorEnable) {
ChromaUtil.getFormattedColorString(currentColor, false)
} else {
""
}
val oldColor = database.customColor
database.customColor = newColor
saveColor(oldColor, newColor)
}
onDialogClosed(true)
dismiss()
}
@@ -112,8 +86,38 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
return dialog
}
override fun onDialogClosed(positiveResult: Boolean) {
// Nothing here
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
database?.let {
val initColor = try {
enableSwitchView.isChecked = true
Color.parseColor(it.customColor)
} catch (e: Exception) {
enableSwitchView.isChecked = false
DEFAULT_COLOR
}
arguments?.putInt(ARG_INITIAL_COLOR, initColor)
}
}
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
val currentColor = chromaColorFragment!!.currentColor
val customColorEnable = enableSwitchView.isChecked
onColorSelectedListener?.invoke(customColorEnable, currentColor)
database?.let {
val newColor = if (customColorEnable) {
ChromaUtil.getFormattedColorString(currentColor, false)
} else {
""
}
val oldColor = database.customColor
database.customColor = newColor
saveColor(oldColor, newColor)
}
}
}
/**

View File

@@ -24,6 +24,7 @@ import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
@@ -31,6 +32,8 @@ class DatabaseDataCompressionPreferenceDialogFragmentCompat
: DatabaseSavePreferenceDialogFragmentCompat(),
ListRadioItemAdapter.RadioItemSelectedCallback<CompressionAlgorithm> {
private var mRecyclerView: RecyclerView? = null
private var mCompressionAdapter: ListRadioItemAdapter<CompressionAlgorithm>? = null
private var compressionSelected: CompressionAlgorithm? = null
override fun onBindDialogView(view: View) {
@@ -38,25 +41,31 @@ class DatabaseDataCompressionPreferenceDialogFragmentCompat
setExplanationText(R.string.database_data_compression_summary)
val recyclerView = view.findViewById<RecyclerView>(R.id.pref_dialog_list)
recyclerView.layoutManager = LinearLayoutManager(context)
mRecyclerView = view.findViewById(R.id.pref_dialog_list)
mRecyclerView?.layoutManager = LinearLayoutManager(context)
activity?.let { activity ->
val compressionAdapter = ListRadioItemAdapter<CompressionAlgorithm>(activity)
compressionAdapter.setRadioItemSelectedCallback(this)
recyclerView.adapter = compressionAdapter
mDatabase?.let { database ->
compressionSelected = database.compressionAlgorithm
compressionAdapter.setItems(database.availableCompressionAlgorithms, compressionSelected)
}
mCompressionAdapter = ListRadioItemAdapter<CompressionAlgorithm>(activity)
mCompressionAdapter?.setRadioItemSelectedCallback(this)
}
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
setExplanationText(R.string.database_data_compression_summary)
mRecyclerView?.adapter = mCompressionAdapter
database?.let {
compressionSelected = it.compressionAlgorithm
mCompressionAdapter?.setItems(it.availableCompressionAlgorithms, compressionSelected)
}
}
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
if (compressionSelected != null) {
val newCompression = compressionSelected
val oldCompression = database.compressionAlgorithm

View File

@@ -20,18 +20,18 @@
package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.database.element.Database
class DatabaseDefaultUsernamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
inputText = mDatabase?.defaultUsername?: ""
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
inputText = database?.defaultUsername?: ""
}
override fun onDialogClosed(positiveResult: Boolean) {
mDatabase?.let { database ->
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
database?.let {
if (positiveResult) {
val newDefaultUsername = inputText
val oldDefaultUsername = database.defaultUsername

View File

@@ -20,18 +20,18 @@
package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.database.element.Database
class DatabaseDescriptionPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
inputText = mDatabase?.description ?: ""
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
inputText = database?.description ?: ""
}
override fun onDialogClosed(positiveResult: Boolean) {
mDatabase?.let { database ->
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
database?.let {
if (positiveResult) {
val newDescription = inputText
val oldDescription = database.description

View File

@@ -25,12 +25,15 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
class DatabaseEncryptionAlgorithmPreferenceDialogFragmentCompat
: DatabaseSavePreferenceDialogFragmentCompat(),
ListRadioItemAdapter.RadioItemSelectedCallback<EncryptionAlgorithm> {
private var mRecyclerView: RecyclerView? = null
private var mEncryptionAlgorithmAdapter: ListRadioItemAdapter<EncryptionAlgorithm>? = null
private var algorithmSelected: EncryptionAlgorithm? = null
override fun onBindDialogView(view: View) {
@@ -38,25 +41,28 @@ class DatabaseEncryptionAlgorithmPreferenceDialogFragmentCompat
setExplanationText(R.string.encryption_explanation)
val recyclerView = view.findViewById<RecyclerView>(R.id.pref_dialog_list)
recyclerView.layoutManager = LinearLayoutManager(context)
mRecyclerView = view.findViewById(R.id.pref_dialog_list)
mRecyclerView?.layoutManager = LinearLayoutManager(context)
activity?.let { activity ->
val encryptionAlgorithmAdapter = ListRadioItemAdapter<EncryptionAlgorithm>(activity)
encryptionAlgorithmAdapter.setRadioItemSelectedCallback(this)
recyclerView.adapter = encryptionAlgorithmAdapter
mDatabase?.let { database ->
algorithmSelected = database.encryptionAlgorithm
encryptionAlgorithmAdapter.setItems(database.availableEncryptionAlgorithms, algorithmSelected)
}
mEncryptionAlgorithmAdapter = ListRadioItemAdapter(activity)
mEncryptionAlgorithmAdapter?.setRadioItemSelectedCallback(this)
mRecyclerView?.adapter = mEncryptionAlgorithmAdapter
}
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
database?.let {
algorithmSelected = database.encryptionAlgorithm
mEncryptionAlgorithmAdapter?.setItems(database.availableEncryptionAlgorithms, algorithmSelected)
}
}
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
if (algorithmSelected != null) {
val newAlgorithm = algorithmSelected
val oldAlgorithm = database.encryptionAlgorithm

View File

@@ -26,6 +26,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.crypto.kdf.KdfEngine
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
class DatabaseKeyDerivationPreferenceDialogFragmentCompat
@@ -33,6 +34,7 @@ class DatabaseKeyDerivationPreferenceDialogFragmentCompat
ListRadioItemAdapter.RadioItemSelectedCallback<KdfEngine> {
private var kdfEngineSelected: KdfEngine? = null
private var mKdfAdapter: ListRadioItemAdapter<KdfEngine>? = null
private var roundPreference: Preference? = null
private var memoryPreference: Preference? = null
private var parallelismPreference: Preference? = null
@@ -46,20 +48,24 @@ class DatabaseKeyDerivationPreferenceDialogFragmentCompat
recyclerView.layoutManager = LinearLayoutManager(context)
activity?.let { activity ->
val kdfAdapter = ListRadioItemAdapter<KdfEngine>(activity)
kdfAdapter.setRadioItemSelectedCallback(this)
recyclerView.adapter = kdfAdapter
mDatabase?.let { database ->
kdfEngineSelected = database.kdfEngine
kdfAdapter.setItems(database.availableKdfEngines, kdfEngineSelected)
}
mKdfAdapter = ListRadioItemAdapter(activity)
mKdfAdapter?.setRadioItemSelectedCallback(this)
recyclerView.adapter = mKdfAdapter
}
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
database?.let {
kdfEngineSelected = database.kdfEngine
mKdfAdapter?.setItems(database.availableKdfEngines, kdfEngineSelected)
}
}
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
if (database.allowKdfModification) {
val newKdfEngine = kdfEngineSelected
val oldKdfEngine = database.kdfEngine

View File

@@ -22,14 +22,18 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
class MaxHistoryItemsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
class DatabaseMaxHistoryItemsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
setExplanationText(R.string.max_history_items_summary)
mDatabase?.historyMaxItems?.let { maxItemsDatabase ->
}
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
database?.historyMaxItems?.let { maxItemsDatabase ->
inputText = maxItemsDatabase.toString()
setSwitchAction({ isChecked ->
inputText = if (!isChecked) {
@@ -42,9 +46,10 @@ class MaxHistoryItemsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDial
}
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
var maxHistoryItems: Int = try {
inputText.toInt()
} catch (e: NumberFormatException) {
@@ -70,8 +75,8 @@ class MaxHistoryItemsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDial
const val DEFAULT_MAX_HISTORY_ITEMS = 10
const val NONE_MAX_HISTORY_ITEMS = -1
fun newInstance(key: String): MaxHistoryItemsPreferenceDialogFragmentCompat {
val fragment = MaxHistoryItemsPreferenceDialogFragmentCompat()
fun newInstance(key: String): DatabaseMaxHistoryItemsPreferenceDialogFragmentCompat {
val fragment = DatabaseMaxHistoryItemsPreferenceDialogFragmentCompat()
val bundle = Bundle(1)
bundle.putString(ARG_KEY, key)
fragment.arguments = bundle

View File

@@ -22,19 +22,23 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.utils.DataByte
class MaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
class DatabaseMaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
private var dataByte = DataByte(2L, DataByte.ByteFormat.MEBIBYTE)
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
setExplanationText(R.string.max_history_size_summary)
mDatabase?.historyMaxSize?.let { maxItemsDatabase ->
}
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
database?.historyMaxSize?.let { maxItemsDatabase ->
dataByte = DataByte(maxItemsDatabase, DataByte.ByteFormat.BYTE)
.toBetterByteFormat()
.toBetterByteFormat()
inputText = dataByte.number.toString()
if (dataByte.number >= 0) {
setUnitText(dataByte.format.stringId)
@@ -54,13 +58,13 @@ class MaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialo
}
showInputText(isChecked)
}, maxItemsDatabase > INFINITE_MAX_HISTORY_SIZE)
}
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
val maxHistorySize: Long = try {
inputText.toLong()
} catch (e: NumberFormatException) {
@@ -92,8 +96,8 @@ class MaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialo
private val INFINITE_MAX_HISTORY_SIZE_DATA_BYTE = DataByte(INFINITE_MAX_HISTORY_SIZE, DataByte.ByteFormat.MEBIBYTE)
private val DEFAULT_MAX_HISTORY_SIZE_DATA_BYTE = DataByte(6L, DataByte.ByteFormat.MEBIBYTE)
fun newInstance(key: String): MaxHistorySizePreferenceDialogFragmentCompat {
val fragment = MaxHistorySizePreferenceDialogFragmentCompat()
fun newInstance(key: String): DatabaseMaxHistorySizePreferenceDialogFragmentCompat {
val fragment = DatabaseMaxHistorySizePreferenceDialogFragmentCompat()
val bundle = Bundle(1)
bundle.putString(ARG_KEY, key)
fragment.arguments = bundle

View File

@@ -22,27 +22,32 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.utils.DataByte
class MemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
class DatabaseMemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
private var dataByte = DataByte(MIN_MEMORY_USAGE, DataByte.ByteFormat.BYTE)
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
setExplanationText(R.string.memory_usage_explanation)
val memoryBytes = mDatabase?.memoryUsage ?: MIN_MEMORY_USAGE
dataByte = DataByte(memoryBytes, DataByte.ByteFormat.BYTE)
.toBetterByteFormat()
inputText = dataByte.number.toString()
setUnitText(dataByte.format.stringId)
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
database?.let {
val memoryBytes = database.memoryUsage
dataByte = DataByte(memoryBytes, DataByte.ByteFormat.BYTE)
.toBetterByteFormat()
inputText = dataByte.number.toString()
setUnitText(dataByte.format.stringId)
}
}
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
var newMemoryUsage: Long = try {
inputText.toLong()
} catch (e: NumberFormatException) {
@@ -70,8 +75,8 @@ class MemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFr
const val MIN_MEMORY_USAGE = 1L
fun newInstance(key: String): MemoryUsagePreferenceDialogFragmentCompat {
val fragment = MemoryUsagePreferenceDialogFragmentCompat()
fun newInstance(key: String): DatabaseMemoryUsagePreferenceDialogFragmentCompat {
val fragment = DatabaseMemoryUsagePreferenceDialogFragmentCompat()
val bundle = Bundle(1)
bundle.putString(ARG_KEY, key)
fragment.arguments = bundle

View File

@@ -20,19 +20,19 @@
package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.database.element.Database
class DatabaseNamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
inputText = mDatabase?.name ?: ""
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
inputText = database?.name ?: ""
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
val newName = inputText
val oldName = database.name
database.name = newName

View File

@@ -22,19 +22,23 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
class ParallelismPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
class DatabaseParallelismPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
setExplanationText(R.string.parallelism_explanation)
inputText = mDatabase?.parallelism?.toString() ?: MIN_PARALLELISM.toString()
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
inputText = database?.parallelism?.toString() ?: MIN_PARALLELISM.toString()
}
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
val parallelism: Long = try {
inputText.toLong()
} catch (e: NumberFormatException) {
@@ -53,8 +57,8 @@ class ParallelismPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFr
const val MIN_PARALLELISM = 1L
fun newInstance(key: String): ParallelismPreferenceDialogFragmentCompat {
val fragment = ParallelismPreferenceDialogFragmentCompat()
fun newInstance(key: String): DatabaseParallelismPreferenceDialogFragmentCompat {
val fragment = DatabaseParallelismPreferenceDialogFragmentCompat()
val bundle = Bundle(1)
bundle.putString(ARG_KEY, key)
fragment.arguments = bundle

View File

@@ -24,6 +24,7 @@ import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.element.Group
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
@@ -31,6 +32,7 @@ class DatabaseRecycleBinGroupPreferenceDialogFragmentCompat
: DatabaseSavePreferenceDialogFragmentCompat(),
ListRadioItemAdapter.RadioItemSelectedCallback<Group> {
private var mGroupsAdapter: ListRadioItemAdapter<Group>? = null
private var mGroupRecycleBin: Group? = null
override fun onBindDialogView(view: View) {
@@ -40,14 +42,17 @@ class DatabaseRecycleBinGroupPreferenceDialogFragmentCompat
recyclerView.layoutManager = LinearLayoutManager(context)
activity?.let { activity ->
val groupsAdapter = ListRadioItemAdapter<Group>(activity)
groupsAdapter.setRadioItemSelectedCallback(this)
recyclerView.adapter = groupsAdapter
mGroupsAdapter = ListRadioItemAdapter(activity)
mGroupsAdapter?.setRadioItemSelectedCallback(this)
recyclerView.adapter = mGroupsAdapter
}
}
mDatabase?.let { database ->
mGroupRecycleBin = database.recycleBin
groupsAdapter.setItems(database.getAllGroupsWithoutRoot(), mGroupRecycleBin)
}
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
database?.let {
mGroupRecycleBin = database.recycleBin
mGroupsAdapter?.setItems(database.getAllGroupsWithoutRoot(), mGroupRecycleBin)
}
}
@@ -55,9 +60,10 @@ class DatabaseRecycleBinGroupPreferenceDialogFragmentCompat
mGroupRecycleBin = item
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
if (database.allowConfigurableRecycleBin) {
val oldGroup = database.recycleBin
val newGroup = mGroupRecycleBin

View File

@@ -23,6 +23,7 @@ import android.os.Bundle
import android.text.SpannableStringBuilder
import android.view.View
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
class DatabaseRemoveUnlinkedDataPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
@@ -36,8 +37,9 @@ class DatabaseRemoveUnlinkedDataPreferenceDialogFragmentCompat : DatabaseSavePre
}.toString()
}
override fun onDialogClosed(positiveResult: Boolean) {
mDatabase?.let { _ ->
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
database?.let {
if (positiveResult) {
removeUnlinkedData()
}

View File

@@ -23,19 +23,23 @@ import android.os.Bundle
import android.view.View
import android.widget.Toast
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
class RoundsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
class DatabaseRoundsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
explanationText = getString(R.string.rounds_explanation)
inputText = mDatabase?.numberKeyEncryptionRounds?.toString() ?: MIN_ITERATIONS.toString()
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
inputText = database?.numberKeyEncryptionRounds?.toString() ?: MIN_ITERATIONS.toString()
}
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
var rounds: Long = try {
inputText.toLong()
} catch (e: NumberFormatException) {
@@ -63,8 +67,8 @@ class RoundsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmen
const val MIN_ITERATIONS = 1L
fun newInstance(key: String): RoundsPreferenceDialogFragmentCompat {
val fragment = RoundsPreferenceDialogFragmentCompat()
fun newInstance(key: String): DatabaseRoundsPreferenceDialogFragmentCompat {
val fragment = DatabaseRoundsPreferenceDialogFragmentCompat()
val bundle = Bundle(1)
bundle.putString(ARG_KEY, key)
fragment.arguments = bundle

View File

@@ -21,7 +21,6 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.content.Context
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import com.kunzisoft.keepass.activities.DatabaseRetrieval
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
@@ -38,31 +37,43 @@ abstract class DatabaseSavePreferenceDialogFragmentCompat
private var mDatabaseAutoSaveEnable = true
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
protected var mDatabase: Database? = null
private var mDatabase: Database? = null
override fun onAttach(context: Context) {
super.onAttach(context)
this.mDatabaseAutoSaveEnable = PreferencesUtil.isAutoSaveDatabaseEnabled(context)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mDatabaseViewModel.database.observe(viewLifecycleOwner) { database ->
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mDatabaseViewModel.database.observe(this) { database ->
onDatabaseRetrieved(database)
}
}
override fun onResume() {
super.onResume()
onDatabaseRetrieved(mDatabase)
}
override fun onDatabaseRetrieved(database: Database?) {
this.mDatabase = database
}
override fun onDialogClosed(positiveResult: Boolean) {
onDialogClosed(mDatabase, positiveResult)
}
open fun onDialogClosed(database: Database?, positiveResult: Boolean) {
// To inherit to save element in database
}
override fun onDatabaseActionFinished(
database: Database,
actionTask: String,
result: ActionRunnable.Result
) {
// Optional
// Not used
}
protected fun saveColor(oldColor: String,

View File

@@ -24,6 +24,7 @@ import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.element.Group
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
@@ -31,6 +32,7 @@ class DatabaseTemplatesGroupPreferenceDialogFragmentCompat
: DatabaseSavePreferenceDialogFragmentCompat(),
ListRadioItemAdapter.RadioItemSelectedCallback<Group> {
private var mGroupsAdapter: ListRadioItemAdapter<Group>? = null
private var mGroupTemplates: Group? = null
override fun onBindDialogView(view: View) {
@@ -40,14 +42,17 @@ class DatabaseTemplatesGroupPreferenceDialogFragmentCompat
recyclerView.layoutManager = LinearLayoutManager(context)
activity?.let { activity ->
val groupsAdapter = ListRadioItemAdapter<Group>(activity)
groupsAdapter.setRadioItemSelectedCallback(this)
recyclerView.adapter = groupsAdapter
mGroupsAdapter = ListRadioItemAdapter(activity)
mGroupsAdapter?.setRadioItemSelectedCallback(this)
recyclerView.adapter = mGroupsAdapter
}
}
mDatabase?.let { database ->
mGroupTemplates = database.templatesGroup
groupsAdapter.setItems(database.getAllGroupsWithoutRoot(), mGroupTemplates)
}
override fun onDatabaseRetrieved(database: Database?) {
super.onDatabaseRetrieved(database)
database?.let {
mGroupTemplates = database.templatesGroup
mGroupsAdapter?.setItems(database.getAllGroupsWithoutRoot(), mGroupTemplates)
}
}
@@ -55,9 +60,10 @@ class DatabaseTemplatesGroupPreferenceDialogFragmentCompat
mGroupTemplates = item
}
override fun onDialogClosed(positiveResult: Boolean) {
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
super.onDialogClosed(database, positiveResult)
if (positiveResult) {
mDatabase?.let { database ->
database?.let {
if (database.allowConfigurableTemplatesGroup) {
val oldGroup = database.templatesGroup
val newGroup = mGroupTemplates