mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Fix database settings
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
package com.kunzisoft.keepass.settings
|
package com.kunzisoft.keepass.settings
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import com.kunzisoft.keepass.activities.DatabaseRetrieval
|
import com.kunzisoft.keepass.activities.DatabaseRetrieval
|
||||||
@@ -13,15 +15,23 @@ import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
|||||||
abstract class DatabasePreferenceFragment : PreferenceFragmentCompat(), DatabaseRetrieval {
|
abstract class DatabasePreferenceFragment : PreferenceFragmentCompat(), DatabaseRetrieval {
|
||||||
|
|
||||||
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
|
private var mDatabase: Database? = null
|
||||||
|
|
||||||
override fun onViewCreated(view: View,
|
override fun onCreateView(
|
||||||
savedInstanceState: Bundle?) {
|
inflater: LayoutInflater,
|
||||||
super.onViewCreated(view, savedInstanceState)
|
container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
mDatabaseViewModel.database.observe(viewLifecycleOwner) { database ->
|
mDatabaseViewModel.database.observe(viewLifecycleOwner) { database ->
|
||||||
view.resetAppTimeoutWhenViewFocusedOrChanged(requireContext(), database)
|
mDatabase = database
|
||||||
onDatabaseRetrieved(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(
|
override fun onDatabaseActionFinished(
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import android.os.Bundle
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.activityViewModels
|
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceCategory
|
import androidx.preference.PreferenceCategory
|
||||||
import androidx.preference.SwitchPreference
|
import androidx.preference.SwitchPreference
|
||||||
@@ -42,7 +41,6 @@ import com.kunzisoft.keepass.settings.preference.*
|
|||||||
import com.kunzisoft.keepass.settings.preferencedialogfragment.*
|
import com.kunzisoft.keepass.settings.preferencedialogfragment.*
|
||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
import com.kunzisoft.keepass.utils.MenuUtil
|
import com.kunzisoft.keepass.utils.MenuUtil
|
||||||
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
|
||||||
|
|
||||||
class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
||||||
|
|
||||||
@@ -50,6 +48,8 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
private var mDatabaseReadOnly: Boolean = false
|
private var mDatabaseReadOnly: Boolean = false
|
||||||
private var mDatabaseAutoSaveEnabled: Boolean = true
|
private var mDatabaseAutoSaveEnabled: Boolean = true
|
||||||
|
|
||||||
|
private var mScreen: Screen? = null
|
||||||
|
|
||||||
private var dbNamePref: InputTextPreference? = null
|
private var dbNamePref: InputTextPreference? = null
|
||||||
private var dbDescriptionPref: InputTextPreference? = null
|
private var dbDescriptionPref: InputTextPreference? = null
|
||||||
private var dbDefaultUsername: InputTextPreference? = null
|
private var dbDefaultUsername: InputTextPreference? = null
|
||||||
@@ -65,181 +65,201 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
private var mMemoryPref: InputKdfSizePreference? = null
|
private var mMemoryPref: InputKdfSizePreference? = null
|
||||||
private var mParallelismPref: InputKdfNumberPreference? = null
|
private var mParallelismPref: InputKdfNumberPreference? = null
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: Database?) {
|
|
||||||
mDatabase = database
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
setHasOptionsMenu(true)
|
setHasOptionsMenu(true)
|
||||||
|
|
||||||
mDatabaseReadOnly = mDatabase?.isReadOnly == true
|
// TODO Read only
|
||||||
|| ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, arguments)
|
mDatabaseReadOnly = mDatabaseReadOnly || ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, arguments)
|
||||||
|
|
||||||
|
mScreen = screen
|
||||||
|
val database = mDatabase
|
||||||
// Load the preferences from an XML resource
|
// Load the preferences from an XML resource
|
||||||
when (screen) {
|
when (screen) {
|
||||||
Screen.DATABASE -> {
|
Screen.DATABASE -> {
|
||||||
onCreateDatabasePreference(rootKey)
|
setPreferencesFromResource(R.xml.preferences_database, rootKey)
|
||||||
|
if (database?.loaded == true)
|
||||||
|
onCreateDatabasePreference(database)
|
||||||
}
|
}
|
||||||
Screen.DATABASE_SECURITY -> {
|
Screen.DATABASE_SECURITY -> {
|
||||||
onCreateDatabaseSecurityPreference(rootKey)
|
setPreferencesFromResource(R.xml.preferences_database_security, rootKey)
|
||||||
|
if (database?.loaded == true)
|
||||||
|
onCreateDatabaseSecurityPreference(database)
|
||||||
}
|
}
|
||||||
Screen.DATABASE_MASTER_KEY -> {
|
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?) {
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
setPreferencesFromResource(R.xml.preferences_database, rootKey)
|
mDatabase = database
|
||||||
|
mDatabaseReadOnly = mDatabaseReadOnly || database?.isReadOnly == true
|
||||||
|
|
||||||
mDatabase?.let { database ->
|
mDatabase?.let {
|
||||||
if (database.loaded) {
|
if (it.loaded) {
|
||||||
|
when (mScreen) {
|
||||||
val dbGeneralPrefCategory: PreferenceCategory? = findPreference(getString(R.string.database_category_general_key))
|
Screen.DATABASE -> {
|
||||||
|
onCreateDatabasePreference(it)
|
||||||
// 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 {
|
Screen.DATABASE_SECURITY -> {
|
||||||
dbCustomColorPref?.isEnabled = false
|
onCreateDatabaseSecurityPreference(it)
|
||||||
// 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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Change the recycle bin group
|
Screen.DATABASE_MASTER_KEY -> {
|
||||||
recycleBinGroupPref?.setOnPreferenceClickListener {
|
onCreateDatabaseMasterKeyPreference(it)
|
||||||
|
|
||||||
true
|
|
||||||
}
|
}
|
||||||
// Recycle Bin group
|
else -> {
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 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 {
|
} else {
|
||||||
Log.e(javaClass.name, "Database isn't ready")
|
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 {
|
recycleBinGroupPref?.apply {
|
||||||
if (mDatabase?.isRecycleBinEnabled == true) {
|
if (database?.isRecycleBinEnabled == true) {
|
||||||
summary = mDatabase?.recycleBin?.toString()
|
summary = database.recycleBin?.toString()
|
||||||
isEnabled = true
|
isEnabled = true
|
||||||
} else {
|
} else {
|
||||||
summary = null
|
summary = null
|
||||||
@@ -248,10 +268,10 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun refreshTemplatesGroup() {
|
private fun refreshTemplatesGroup(database: Database?) {
|
||||||
templatesGroupPref?.apply {
|
templatesGroupPref?.apply {
|
||||||
if (mDatabase?.isTemplatesEnabled == true) {
|
if (database?.isTemplatesEnabled == true) {
|
||||||
summary = mDatabase?.templatesGroup?.toString()
|
summary = database.templatesGroup?.toString()
|
||||||
isEnabled = true
|
isEnabled = true
|
||||||
} else {
|
} else {
|
||||||
summary = null
|
summary = null
|
||||||
@@ -260,60 +280,44 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onCreateDatabaseSecurityPreference(rootKey: String?) {
|
private fun onCreateDatabaseSecurityPreference(database: Database) {
|
||||||
setPreferencesFromResource(R.xml.preferences_database_security, rootKey)
|
// Encryption Algorithm
|
||||||
|
mEncryptionAlgorithmPref = findPreference<DialogListExplanationPreference>(getString(R.string.encryption_algorithm_key))?.apply {
|
||||||
|
summary = database.getEncryptionAlgorithmName()
|
||||||
|
}
|
||||||
|
|
||||||
mDatabase?.let { database ->
|
// Key derivation function
|
||||||
if (database.loaded) {
|
mKeyDerivationPref = findPreference<DialogListExplanationPreference>(getString(R.string.key_derivation_function_key))?.apply {
|
||||||
// Encryption Algorithm
|
summary = database.getKeyDerivationName()
|
||||||
mEncryptionAlgorithmPref = findPreference<DialogListExplanationPreference>(getString(R.string.encryption_algorithm_key))?.apply {
|
}
|
||||||
summary = database.getEncryptionAlgorithmName()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Key derivation function
|
// Round encryption
|
||||||
mKeyDerivationPref = findPreference<DialogListExplanationPreference>(getString(R.string.key_derivation_function_key))?.apply {
|
mRoundPref = findPreference<InputKdfNumberPreference>(getString(R.string.transform_rounds_key))?.apply {
|
||||||
summary = database.getKeyDerivationName()
|
summary = database.numberKeyEncryptionRounds.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Round encryption
|
// Memory Usage
|
||||||
mRoundPref = findPreference<InputKdfNumberPreference>(getString(R.string.transform_rounds_key))?.apply {
|
mMemoryPref = findPreference<InputKdfSizePreference>(getString(R.string.memory_usage_key))?.apply {
|
||||||
summary = database.numberKeyEncryptionRounds.toString()
|
summary = database.memoryUsage.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Memory Usage
|
// Parallelism
|
||||||
mMemoryPref = findPreference<InputKdfSizePreference>(getString(R.string.memory_usage_key))?.apply {
|
mParallelismPref = findPreference<InputKdfNumberPreference>(getString(R.string.parallelism_key))?.apply {
|
||||||
summary = database.memoryUsage.toString()
|
summary = database.parallelism.toString()
|
||||||
}
|
|
||||||
|
|
||||||
// Parallelism
|
|
||||||
mParallelismPref = findPreference<InputKdfNumberPreference>(getString(R.string.parallelism_key))?.apply {
|
|
||||||
summary = database.parallelism.toString()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.e(javaClass.name, "Database isn't ready")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onCreateDatabaseMasterKeyPreference(rootKey: String?) {
|
private fun onCreateDatabaseMasterKeyPreference(database: Database) {
|
||||||
setPreferencesFromResource(R.xml.preferences_database_master_key, rootKey)
|
findPreference<Preference>(getString(R.string.settings_database_change_credentials_key))?.apply {
|
||||||
|
isEnabled = if (!mDatabaseReadOnly) {
|
||||||
mDatabase?.let { database ->
|
onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||||
if (database.loaded) {
|
AssignMasterKeyDialogFragment.getInstance(database.allowNoMasterKey)
|
||||||
findPreference<Preference>(getString(R.string.settings_database_change_credentials_key))?.apply {
|
.show(parentFragmentManager, "passwordDialog")
|
||||||
isEnabled = if (!mDatabaseReadOnly) {
|
false
|
||||||
onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
|
||||||
AssignMasterKeyDialogFragment.getInstance(database.allowNoMasterKey)
|
|
||||||
.show(parentFragmentManager, "passwordDialog")
|
|
||||||
false
|
|
||||||
}
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
true
|
||||||
} else {
|
} else {
|
||||||
Log.e(javaClass.name, "Database isn't ready")
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -339,8 +343,9 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onProgressDialogThreadResult(actionTask: String,
|
override fun onDatabaseActionFinished(database: Database,
|
||||||
result: ActionRunnable.Result) {
|
actionTask: String,
|
||||||
|
result: ActionRunnable.Result) {
|
||||||
result.data?.let { data ->
|
result.data?.let { data ->
|
||||||
if (data.containsKey(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
|
if (data.containsKey(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
|
||||||
&& data.containsKey(DatabaseTaskNotificationService.NEW_ELEMENT_KEY)) {
|
&& data.containsKey(DatabaseTaskNotificationService.NEW_ELEMENT_KEY)) {
|
||||||
@@ -357,7 +362,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newName
|
newName
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.name = oldName
|
database.name = oldName
|
||||||
oldName
|
oldName
|
||||||
}
|
}
|
||||||
dbNamePref?.summary = nameToShow
|
dbNamePref?.summary = nameToShow
|
||||||
@@ -369,7 +374,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newDescription
|
newDescription
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.description = oldDescription
|
database.description = oldDescription
|
||||||
oldDescription
|
oldDescription
|
||||||
}
|
}
|
||||||
dbDescriptionPref?.summary = descriptionToShow
|
dbDescriptionPref?.summary = descriptionToShow
|
||||||
@@ -421,7 +426,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
oldRecycleBin
|
oldRecycleBin
|
||||||
}
|
}
|
||||||
mDatabase?.setRecycleBin(recycleBinToShow)
|
mDatabase?.setRecycleBin(recycleBinToShow)
|
||||||
refreshRecycleBinGroup()
|
refreshRecycleBinGroup(database)
|
||||||
}
|
}
|
||||||
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_TEMPLATES_GROUP_TASK -> {
|
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_TEMPLATES_GROUP_TASK -> {
|
||||||
val oldTemplatesGroup = data.getParcelable<Group?>(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
|
val oldTemplatesGroup = data.getParcelable<Group?>(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
|
||||||
@@ -433,7 +438,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
oldTemplatesGroup
|
oldTemplatesGroup
|
||||||
}
|
}
|
||||||
mDatabase?.setTemplatesGroup(templatesGroupToShow)
|
mDatabase?.setTemplatesGroup(templatesGroupToShow)
|
||||||
refreshTemplatesGroup()
|
refreshTemplatesGroup(database)
|
||||||
}
|
}
|
||||||
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_MAX_HISTORY_ITEMS_TASK -> {
|
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_MAX_HISTORY_ITEMS_TASK -> {
|
||||||
val oldMaxHistoryItems = data.getInt(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
|
val oldMaxHistoryItems = data.getInt(DatabaseTaskNotificationService.OLD_ELEMENT_KEY)
|
||||||
@@ -569,10 +574,10 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
dialogFragment = DatabaseTemplatesGroupPreferenceDialogFragmentCompat.newInstance(preference.key)
|
dialogFragment = DatabaseTemplatesGroupPreferenceDialogFragmentCompat.newInstance(preference.key)
|
||||||
}
|
}
|
||||||
getString(R.string.max_history_items_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) -> {
|
getString(R.string.max_history_size_key) -> {
|
||||||
dialogFragment = MaxHistorySizePreferenceDialogFragmentCompat.newInstance(preference.key)
|
dialogFragment = DatabaseMaxHistorySizePreferenceDialogFragmentCompat.newInstance(preference.key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Security
|
// Security
|
||||||
@@ -588,13 +593,13 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
dialogFragment = keyDerivationDialogFragment
|
dialogFragment = keyDerivationDialogFragment
|
||||||
}
|
}
|
||||||
getString(R.string.transform_rounds_key) -> {
|
getString(R.string.transform_rounds_key) -> {
|
||||||
dialogFragment = RoundsPreferenceDialogFragmentCompat.newInstance(preference.key)
|
dialogFragment = DatabaseRoundsPreferenceDialogFragmentCompat.newInstance(preference.key)
|
||||||
}
|
}
|
||||||
getString(R.string.memory_usage_key) -> {
|
getString(R.string.memory_usage_key) -> {
|
||||||
dialogFragment = MemoryUsagePreferenceDialogFragmentCompat.newInstance(preference.key)
|
dialogFragment = DatabaseMemoryUsagePreferenceDialogFragmentCompat.newInstance(preference.key)
|
||||||
}
|
}
|
||||||
getString(R.string.parallelism_key) -> {
|
getString(R.string.parallelism_key) -> {
|
||||||
dialogFragment = ParallelismPreferenceDialogFragmentCompat.newInstance(preference.key)
|
dialogFragment = DatabaseParallelismPreferenceDialogFragmentCompat.newInstance(preference.key)
|
||||||
}
|
}
|
||||||
else -> otherDialogFragment = true
|
else -> otherDialogFragment = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import androidx.preference.SwitchPreference
|
|||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.activities.dialogs.UnderDevelopmentFeatureDialogFragment
|
import com.kunzisoft.keepass.activities.dialogs.UnderDevelopmentFeatureDialogFragment
|
||||||
import com.kunzisoft.keepass.activities.helpers.ReadOnlyHelper
|
import com.kunzisoft.keepass.activities.helpers.ReadOnlyHelper
|
||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
|
||||||
|
|
||||||
// TODO Move database fragment in sub class
|
// TODO Move database fragment in sub class
|
||||||
abstract class NestedSettingsFragment : DatabasePreferenceFragment() {
|
abstract class NestedSettingsFragment : DatabasePreferenceFragment() {
|
||||||
@@ -48,9 +47,6 @@ abstract class NestedSettingsFragment : DatabasePreferenceFragment() {
|
|||||||
|
|
||||||
abstract fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?)
|
abstract fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?)
|
||||||
|
|
||||||
open fun onProgressDialogThreadResult(actionTask: String,
|
|
||||||
result: ActionRunnable.Result) {}
|
|
||||||
|
|
||||||
protected fun preferenceInDevelopment(preferenceInDev: Preference) {
|
protected fun preferenceInDevelopment(preferenceInDev: Preference) {
|
||||||
preferenceInDev.setOnPreferenceClickListener { preference ->
|
preferenceInDev.setOnPreferenceClickListener { preference ->
|
||||||
try { // don't check if we can
|
try { // don't check if we can
|
||||||
|
|||||||
@@ -134,10 +134,10 @@ open class SettingsActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
// Call result in fragment
|
// TODO Call result in fragment by viewmodel
|
||||||
(supportFragmentManager
|
(supportFragmentManager
|
||||||
.findFragmentByTag(TAG_NESTED) as NestedSettingsFragment?)
|
.findFragmentByTag(TAG_NESTED) as NestedSettingsFragment?)
|
||||||
?.onProgressDialogThreadResult(actionTask, result)
|
?.onDatabaseActionFinished(database, actionTask, result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
coordinatorLayout?.showActionErrorIfNeeded(result)
|
coordinatorLayout?.showActionErrorIfNeeded(result)
|
||||||
@@ -219,6 +219,7 @@ open class SettingsActivity
|
|||||||
* To keep the current screen when activity is reloaded
|
* To keep the current screen when activity is reloaded
|
||||||
*/
|
*/
|
||||||
fun keepCurrentScreen() {
|
fun keepCurrentScreen() {
|
||||||
|
// TODO Nested screen
|
||||||
(supportFragmentManager.findFragmentByTag(TAG_NESTED) as? NestedSettingsFragment?)
|
(supportFragmentManager.findFragmentByTag(TAG_NESTED) as? NestedSettingsFragment?)
|
||||||
?.getScreen()?.let { fragmentKey ->
|
?.getScreen()?.let { fragmentKey ->
|
||||||
intent.putExtra(FRAGMENT_ARG, fragmentKey.name)
|
intent.putExtra(FRAGMENT_ARG, fragmentKey.name)
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
|
|||||||
var onColorSelectedListener: ((enable: Boolean, color: Int) -> Unit)? = null
|
var onColorSelectedListener: ((enable: Boolean, color: Int) -> Unit)? = null
|
||||||
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
|
super.onCreateDialog(savedInstanceState)
|
||||||
|
|
||||||
val alertDialogBuilder = AlertDialog.Builder(requireActivity())
|
val alertDialogBuilder = AlertDialog.Builder(requireActivity())
|
||||||
|
|
||||||
@@ -56,17 +57,6 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
|
|||||||
val fragmentManager = childFragmentManager
|
val fragmentManager = childFragmentManager
|
||||||
chromaColorFragment = fragmentManager.findFragmentByTag(TAG_FRAGMENT_COLORS) as ChromaColorFragment?
|
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) {
|
if (chromaColorFragment == null) {
|
||||||
chromaColorFragment = newInstance(arguments)
|
chromaColorFragment = newInstance(arguments)
|
||||||
fragmentManager.beginTransaction().apply {
|
fragmentManager.beginTransaction().apply {
|
||||||
@@ -76,22 +66,6 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
|
|||||||
}
|
}
|
||||||
|
|
||||||
alertDialogBuilder.setPositiveButton(android.R.string.ok) { _, _ ->
|
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)
|
onDialogClosed(true)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
@@ -112,8 +86,38 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
|
|||||||
return dialog
|
return dialog
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
// Nothing here
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.view.View
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm
|
import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm
|
||||||
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
||||||
|
|
||||||
@@ -31,6 +32,8 @@ class DatabaseDataCompressionPreferenceDialogFragmentCompat
|
|||||||
: DatabaseSavePreferenceDialogFragmentCompat(),
|
: DatabaseSavePreferenceDialogFragmentCompat(),
|
||||||
ListRadioItemAdapter.RadioItemSelectedCallback<CompressionAlgorithm> {
|
ListRadioItemAdapter.RadioItemSelectedCallback<CompressionAlgorithm> {
|
||||||
|
|
||||||
|
private var mRecyclerView: RecyclerView? = null
|
||||||
|
private var mCompressionAdapter: ListRadioItemAdapter<CompressionAlgorithm>? = null
|
||||||
private var compressionSelected: CompressionAlgorithm? = null
|
private var compressionSelected: CompressionAlgorithm? = null
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
@@ -38,25 +41,31 @@ class DatabaseDataCompressionPreferenceDialogFragmentCompat
|
|||||||
|
|
||||||
setExplanationText(R.string.database_data_compression_summary)
|
setExplanationText(R.string.database_data_compression_summary)
|
||||||
|
|
||||||
val recyclerView = view.findViewById<RecyclerView>(R.id.pref_dialog_list)
|
mRecyclerView = view.findViewById(R.id.pref_dialog_list)
|
||||||
recyclerView.layoutManager = LinearLayoutManager(context)
|
mRecyclerView?.layoutManager = LinearLayoutManager(context)
|
||||||
|
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
val compressionAdapter = ListRadioItemAdapter<CompressionAlgorithm>(activity)
|
mCompressionAdapter = ListRadioItemAdapter<CompressionAlgorithm>(activity)
|
||||||
compressionAdapter.setRadioItemSelectedCallback(this)
|
mCompressionAdapter?.setRadioItemSelectedCallback(this)
|
||||||
recyclerView.adapter = compressionAdapter
|
|
||||||
|
|
||||||
mDatabase?.let { database ->
|
|
||||||
compressionSelected = database.compressionAlgorithm
|
|
||||||
compressionAdapter.setItems(database.availableCompressionAlgorithms, compressionSelected)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
if (compressionSelected != null) {
|
if (compressionSelected != null) {
|
||||||
val newCompression = compressionSelected
|
val newCompression = compressionSelected
|
||||||
val oldCompression = database.compressionAlgorithm
|
val oldCompression = database.compressionAlgorithm
|
||||||
|
|||||||
@@ -20,18 +20,18 @@
|
|||||||
package com.kunzisoft.keepass.settings.preferencedialogfragment
|
package com.kunzisoft.keepass.settings.preferencedialogfragment
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
|
|
||||||
class DatabaseDefaultUsernamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseDefaultUsernamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
super.onBindDialogView(view)
|
super.onDatabaseRetrieved(database)
|
||||||
|
inputText = database?.defaultUsername?: ""
|
||||||
inputText = mDatabase?.defaultUsername?: ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
|
||||||
mDatabase?.let { database ->
|
super.onDialogClosed(database, positiveResult)
|
||||||
|
database?.let {
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
val newDefaultUsername = inputText
|
val newDefaultUsername = inputText
|
||||||
val oldDefaultUsername = database.defaultUsername
|
val oldDefaultUsername = database.defaultUsername
|
||||||
|
|||||||
@@ -20,18 +20,18 @@
|
|||||||
package com.kunzisoft.keepass.settings.preferencedialogfragment
|
package com.kunzisoft.keepass.settings.preferencedialogfragment
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
|
|
||||||
class DatabaseDescriptionPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseDescriptionPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
super.onBindDialogView(view)
|
super.onDatabaseRetrieved(database)
|
||||||
|
inputText = database?.description ?: ""
|
||||||
inputText = mDatabase?.description ?: ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
|
||||||
mDatabase?.let { database ->
|
super.onDialogClosed(database, positiveResult)
|
||||||
|
database?.let {
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
val newDescription = inputText
|
val newDescription = inputText
|
||||||
val oldDescription = database.description
|
val oldDescription = database.description
|
||||||
|
|||||||
@@ -25,12 +25,15 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
|
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
||||||
|
|
||||||
class DatabaseEncryptionAlgorithmPreferenceDialogFragmentCompat
|
class DatabaseEncryptionAlgorithmPreferenceDialogFragmentCompat
|
||||||
: DatabaseSavePreferenceDialogFragmentCompat(),
|
: DatabaseSavePreferenceDialogFragmentCompat(),
|
||||||
ListRadioItemAdapter.RadioItemSelectedCallback<EncryptionAlgorithm> {
|
ListRadioItemAdapter.RadioItemSelectedCallback<EncryptionAlgorithm> {
|
||||||
|
|
||||||
|
private var mRecyclerView: RecyclerView? = null
|
||||||
|
private var mEncryptionAlgorithmAdapter: ListRadioItemAdapter<EncryptionAlgorithm>? = null
|
||||||
private var algorithmSelected: EncryptionAlgorithm? = null
|
private var algorithmSelected: EncryptionAlgorithm? = null
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
@@ -38,25 +41,28 @@ class DatabaseEncryptionAlgorithmPreferenceDialogFragmentCompat
|
|||||||
|
|
||||||
setExplanationText(R.string.encryption_explanation)
|
setExplanationText(R.string.encryption_explanation)
|
||||||
|
|
||||||
val recyclerView = view.findViewById<RecyclerView>(R.id.pref_dialog_list)
|
mRecyclerView = view.findViewById(R.id.pref_dialog_list)
|
||||||
recyclerView.layoutManager = LinearLayoutManager(context)
|
mRecyclerView?.layoutManager = LinearLayoutManager(context)
|
||||||
|
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
val encryptionAlgorithmAdapter = ListRadioItemAdapter<EncryptionAlgorithm>(activity)
|
mEncryptionAlgorithmAdapter = ListRadioItemAdapter(activity)
|
||||||
encryptionAlgorithmAdapter.setRadioItemSelectedCallback(this)
|
mEncryptionAlgorithmAdapter?.setRadioItemSelectedCallback(this)
|
||||||
recyclerView.adapter = encryptionAlgorithmAdapter
|
mRecyclerView?.adapter = mEncryptionAlgorithmAdapter
|
||||||
|
|
||||||
mDatabase?.let { database ->
|
|
||||||
algorithmSelected = database.encryptionAlgorithm
|
|
||||||
encryptionAlgorithmAdapter.setItems(database.availableEncryptionAlgorithms, algorithmSelected)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
if (algorithmSelected != null) {
|
if (algorithmSelected != null) {
|
||||||
val newAlgorithm = algorithmSelected
|
val newAlgorithm = algorithmSelected
|
||||||
val oldAlgorithm = database.encryptionAlgorithm
|
val oldAlgorithm = database.encryptionAlgorithm
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.database.crypto.kdf.KdfEngine
|
import com.kunzisoft.keepass.database.crypto.kdf.KdfEngine
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
||||||
|
|
||||||
class DatabaseKeyDerivationPreferenceDialogFragmentCompat
|
class DatabaseKeyDerivationPreferenceDialogFragmentCompat
|
||||||
@@ -33,6 +34,7 @@ class DatabaseKeyDerivationPreferenceDialogFragmentCompat
|
|||||||
ListRadioItemAdapter.RadioItemSelectedCallback<KdfEngine> {
|
ListRadioItemAdapter.RadioItemSelectedCallback<KdfEngine> {
|
||||||
|
|
||||||
private var kdfEngineSelected: KdfEngine? = null
|
private var kdfEngineSelected: KdfEngine? = null
|
||||||
|
private var mKdfAdapter: ListRadioItemAdapter<KdfEngine>? = null
|
||||||
private var roundPreference: Preference? = null
|
private var roundPreference: Preference? = null
|
||||||
private var memoryPreference: Preference? = null
|
private var memoryPreference: Preference? = null
|
||||||
private var parallelismPreference: Preference? = null
|
private var parallelismPreference: Preference? = null
|
||||||
@@ -46,20 +48,24 @@ class DatabaseKeyDerivationPreferenceDialogFragmentCompat
|
|||||||
recyclerView.layoutManager = LinearLayoutManager(context)
|
recyclerView.layoutManager = LinearLayoutManager(context)
|
||||||
|
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
val kdfAdapter = ListRadioItemAdapter<KdfEngine>(activity)
|
mKdfAdapter = ListRadioItemAdapter(activity)
|
||||||
kdfAdapter.setRadioItemSelectedCallback(this)
|
mKdfAdapter?.setRadioItemSelectedCallback(this)
|
||||||
recyclerView.adapter = kdfAdapter
|
recyclerView.adapter = mKdfAdapter
|
||||||
|
|
||||||
mDatabase?.let { database ->
|
|
||||||
kdfEngineSelected = database.kdfEngine
|
|
||||||
kdfAdapter.setItems(database.availableKdfEngines, kdfEngineSelected)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
if (database.allowKdfModification) {
|
if (database.allowKdfModification) {
|
||||||
val newKdfEngine = kdfEngineSelected
|
val newKdfEngine = kdfEngineSelected
|
||||||
val oldKdfEngine = database.kdfEngine
|
val oldKdfEngine = database.kdfEngine
|
||||||
|
|||||||
@@ -22,14 +22,18 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
|
|
||||||
class MaxHistoryItemsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseMaxHistoryItemsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
super.onBindDialogView(view)
|
super.onBindDialogView(view)
|
||||||
|
|
||||||
setExplanationText(R.string.max_history_items_summary)
|
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()
|
inputText = maxItemsDatabase.toString()
|
||||||
setSwitchAction({ isChecked ->
|
setSwitchAction({ isChecked ->
|
||||||
inputText = if (!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) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
var maxHistoryItems: Int = try {
|
var maxHistoryItems: Int = try {
|
||||||
inputText.toInt()
|
inputText.toInt()
|
||||||
} catch (e: NumberFormatException) {
|
} catch (e: NumberFormatException) {
|
||||||
@@ -70,8 +75,8 @@ class MaxHistoryItemsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDial
|
|||||||
const val DEFAULT_MAX_HISTORY_ITEMS = 10
|
const val DEFAULT_MAX_HISTORY_ITEMS = 10
|
||||||
const val NONE_MAX_HISTORY_ITEMS = -1
|
const val NONE_MAX_HISTORY_ITEMS = -1
|
||||||
|
|
||||||
fun newInstance(key: String): MaxHistoryItemsPreferenceDialogFragmentCompat {
|
fun newInstance(key: String): DatabaseMaxHistoryItemsPreferenceDialogFragmentCompat {
|
||||||
val fragment = MaxHistoryItemsPreferenceDialogFragmentCompat()
|
val fragment = DatabaseMaxHistoryItemsPreferenceDialogFragmentCompat()
|
||||||
val bundle = Bundle(1)
|
val bundle = Bundle(1)
|
||||||
bundle.putString(ARG_KEY, key)
|
bundle.putString(ARG_KEY, key)
|
||||||
fragment.arguments = bundle
|
fragment.arguments = bundle
|
||||||
@@ -22,19 +22,23 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.utils.DataByte
|
import com.kunzisoft.keepass.utils.DataByte
|
||||||
|
|
||||||
class MaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseMaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
private var dataByte = DataByte(2L, DataByte.ByteFormat.MEBIBYTE)
|
private var dataByte = DataByte(2L, DataByte.ByteFormat.MEBIBYTE)
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
super.onBindDialogView(view)
|
super.onBindDialogView(view)
|
||||||
|
|
||||||
setExplanationText(R.string.max_history_size_summary)
|
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)
|
dataByte = DataByte(maxItemsDatabase, DataByte.ByteFormat.BYTE)
|
||||||
.toBetterByteFormat()
|
.toBetterByteFormat()
|
||||||
inputText = dataByte.number.toString()
|
inputText = dataByte.number.toString()
|
||||||
if (dataByte.number >= 0) {
|
if (dataByte.number >= 0) {
|
||||||
setUnitText(dataByte.format.stringId)
|
setUnitText(dataByte.format.stringId)
|
||||||
@@ -54,13 +58,13 @@ class MaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialo
|
|||||||
}
|
}
|
||||||
showInputText(isChecked)
|
showInputText(isChecked)
|
||||||
}, maxItemsDatabase > INFINITE_MAX_HISTORY_SIZE)
|
}, maxItemsDatabase > INFINITE_MAX_HISTORY_SIZE)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
|
||||||
|
super.onDialogClosed(database, positiveResult)
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
val maxHistorySize: Long = try {
|
val maxHistorySize: Long = try {
|
||||||
inputText.toLong()
|
inputText.toLong()
|
||||||
} catch (e: NumberFormatException) {
|
} 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 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)
|
private val DEFAULT_MAX_HISTORY_SIZE_DATA_BYTE = DataByte(6L, DataByte.ByteFormat.MEBIBYTE)
|
||||||
|
|
||||||
fun newInstance(key: String): MaxHistorySizePreferenceDialogFragmentCompat {
|
fun newInstance(key: String): DatabaseMaxHistorySizePreferenceDialogFragmentCompat {
|
||||||
val fragment = MaxHistorySizePreferenceDialogFragmentCompat()
|
val fragment = DatabaseMaxHistorySizePreferenceDialogFragmentCompat()
|
||||||
val bundle = Bundle(1)
|
val bundle = Bundle(1)
|
||||||
bundle.putString(ARG_KEY, key)
|
bundle.putString(ARG_KEY, key)
|
||||||
fragment.arguments = bundle
|
fragment.arguments = bundle
|
||||||
@@ -22,27 +22,32 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.utils.DataByte
|
import com.kunzisoft.keepass.utils.DataByte
|
||||||
|
|
||||||
class MemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseMemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
private var dataByte = DataByte(MIN_MEMORY_USAGE, DataByte.ByteFormat.BYTE)
|
private var dataByte = DataByte(MIN_MEMORY_USAGE, DataByte.ByteFormat.BYTE)
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
super.onBindDialogView(view)
|
super.onBindDialogView(view)
|
||||||
|
|
||||||
setExplanationText(R.string.memory_usage_explanation)
|
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) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
var newMemoryUsage: Long = try {
|
var newMemoryUsage: Long = try {
|
||||||
inputText.toLong()
|
inputText.toLong()
|
||||||
} catch (e: NumberFormatException) {
|
} catch (e: NumberFormatException) {
|
||||||
@@ -70,8 +75,8 @@ class MemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFr
|
|||||||
|
|
||||||
const val MIN_MEMORY_USAGE = 1L
|
const val MIN_MEMORY_USAGE = 1L
|
||||||
|
|
||||||
fun newInstance(key: String): MemoryUsagePreferenceDialogFragmentCompat {
|
fun newInstance(key: String): DatabaseMemoryUsagePreferenceDialogFragmentCompat {
|
||||||
val fragment = MemoryUsagePreferenceDialogFragmentCompat()
|
val fragment = DatabaseMemoryUsagePreferenceDialogFragmentCompat()
|
||||||
val bundle = Bundle(1)
|
val bundle = Bundle(1)
|
||||||
bundle.putString(ARG_KEY, key)
|
bundle.putString(ARG_KEY, key)
|
||||||
fragment.arguments = bundle
|
fragment.arguments = bundle
|
||||||
@@ -20,19 +20,19 @@
|
|||||||
package com.kunzisoft.keepass.settings.preferencedialogfragment
|
package com.kunzisoft.keepass.settings.preferencedialogfragment
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
|
|
||||||
class DatabaseNamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseNamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
super.onBindDialogView(view)
|
super.onDatabaseRetrieved(database)
|
||||||
|
inputText = database?.name ?: ""
|
||||||
inputText = mDatabase?.name ?: ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
|
||||||
|
super.onDialogClosed(database, positiveResult)
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
val newName = inputText
|
val newName = inputText
|
||||||
val oldName = database.name
|
val oldName = database.name
|
||||||
database.name = newName
|
database.name = newName
|
||||||
|
|||||||
@@ -22,19 +22,23 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
|
|
||||||
class ParallelismPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseParallelismPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
super.onBindDialogView(view)
|
super.onBindDialogView(view)
|
||||||
|
|
||||||
setExplanationText(R.string.parallelism_explanation)
|
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) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
val parallelism: Long = try {
|
val parallelism: Long = try {
|
||||||
inputText.toLong()
|
inputText.toLong()
|
||||||
} catch (e: NumberFormatException) {
|
} catch (e: NumberFormatException) {
|
||||||
@@ -53,8 +57,8 @@ class ParallelismPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFr
|
|||||||
|
|
||||||
const val MIN_PARALLELISM = 1L
|
const val MIN_PARALLELISM = 1L
|
||||||
|
|
||||||
fun newInstance(key: String): ParallelismPreferenceDialogFragmentCompat {
|
fun newInstance(key: String): DatabaseParallelismPreferenceDialogFragmentCompat {
|
||||||
val fragment = ParallelismPreferenceDialogFragmentCompat()
|
val fragment = DatabaseParallelismPreferenceDialogFragmentCompat()
|
||||||
val bundle = Bundle(1)
|
val bundle = Bundle(1)
|
||||||
bundle.putString(ARG_KEY, key)
|
bundle.putString(ARG_KEY, key)
|
||||||
fragment.arguments = bundle
|
fragment.arguments = bundle
|
||||||
@@ -24,6 +24,7 @@ import android.view.View
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.database.element.Group
|
import com.kunzisoft.keepass.database.element.Group
|
||||||
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
||||||
|
|
||||||
@@ -31,6 +32,7 @@ class DatabaseRecycleBinGroupPreferenceDialogFragmentCompat
|
|||||||
: DatabaseSavePreferenceDialogFragmentCompat(),
|
: DatabaseSavePreferenceDialogFragmentCompat(),
|
||||||
ListRadioItemAdapter.RadioItemSelectedCallback<Group> {
|
ListRadioItemAdapter.RadioItemSelectedCallback<Group> {
|
||||||
|
|
||||||
|
private var mGroupsAdapter: ListRadioItemAdapter<Group>? = null
|
||||||
private var mGroupRecycleBin: Group? = null
|
private var mGroupRecycleBin: Group? = null
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
@@ -40,14 +42,17 @@ class DatabaseRecycleBinGroupPreferenceDialogFragmentCompat
|
|||||||
recyclerView.layoutManager = LinearLayoutManager(context)
|
recyclerView.layoutManager = LinearLayoutManager(context)
|
||||||
|
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
val groupsAdapter = ListRadioItemAdapter<Group>(activity)
|
mGroupsAdapter = ListRadioItemAdapter(activity)
|
||||||
groupsAdapter.setRadioItemSelectedCallback(this)
|
mGroupsAdapter?.setRadioItemSelectedCallback(this)
|
||||||
recyclerView.adapter = groupsAdapter
|
recyclerView.adapter = mGroupsAdapter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mDatabase?.let { database ->
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
mGroupRecycleBin = database.recycleBin
|
super.onDatabaseRetrieved(database)
|
||||||
groupsAdapter.setItems(database.getAllGroupsWithoutRoot(), mGroupRecycleBin)
|
database?.let {
|
||||||
}
|
mGroupRecycleBin = database.recycleBin
|
||||||
|
mGroupsAdapter?.setItems(database.getAllGroupsWithoutRoot(), mGroupRecycleBin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,9 +60,10 @@ class DatabaseRecycleBinGroupPreferenceDialogFragmentCompat
|
|||||||
mGroupRecycleBin = item
|
mGroupRecycleBin = item
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
|
||||||
|
super.onDialogClosed(database, positiveResult)
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
if (database.allowConfigurableRecycleBin) {
|
if (database.allowConfigurableRecycleBin) {
|
||||||
val oldGroup = database.recycleBin
|
val oldGroup = database.recycleBin
|
||||||
val newGroup = mGroupRecycleBin
|
val newGroup = mGroupRecycleBin
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import android.os.Bundle
|
|||||||
import android.text.SpannableStringBuilder
|
import android.text.SpannableStringBuilder
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
|
|
||||||
class DatabaseRemoveUnlinkedDataPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseRemoveUnlinkedDataPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
@@ -36,8 +37,9 @@ class DatabaseRemoveUnlinkedDataPreferenceDialogFragmentCompat : DatabaseSavePre
|
|||||||
}.toString()
|
}.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
|
||||||
mDatabase?.let { _ ->
|
super.onDialogClosed(database, positiveResult)
|
||||||
|
database?.let {
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
removeUnlinkedData()
|
removeUnlinkedData()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,19 +23,23 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
|
|
||||||
class RoundsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseRoundsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
super.onBindDialogView(view)
|
super.onBindDialogView(view)
|
||||||
|
|
||||||
explanationText = getString(R.string.rounds_explanation)
|
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) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
var rounds: Long = try {
|
var rounds: Long = try {
|
||||||
inputText.toLong()
|
inputText.toLong()
|
||||||
} catch (e: NumberFormatException) {
|
} catch (e: NumberFormatException) {
|
||||||
@@ -63,8 +67,8 @@ class RoundsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmen
|
|||||||
|
|
||||||
const val MIN_ITERATIONS = 1L
|
const val MIN_ITERATIONS = 1L
|
||||||
|
|
||||||
fun newInstance(key: String): RoundsPreferenceDialogFragmentCompat {
|
fun newInstance(key: String): DatabaseRoundsPreferenceDialogFragmentCompat {
|
||||||
val fragment = RoundsPreferenceDialogFragmentCompat()
|
val fragment = DatabaseRoundsPreferenceDialogFragmentCompat()
|
||||||
val bundle = Bundle(1)
|
val bundle = Bundle(1)
|
||||||
bundle.putString(ARG_KEY, key)
|
bundle.putString(ARG_KEY, key)
|
||||||
fragment.arguments = bundle
|
fragment.arguments = bundle
|
||||||
@@ -21,7 +21,6 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import com.kunzisoft.keepass.activities.DatabaseRetrieval
|
import com.kunzisoft.keepass.activities.DatabaseRetrieval
|
||||||
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
|
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
|
||||||
@@ -38,31 +37,43 @@ abstract class DatabaseSavePreferenceDialogFragmentCompat
|
|||||||
|
|
||||||
private var mDatabaseAutoSaveEnable = true
|
private var mDatabaseAutoSaveEnable = true
|
||||||
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
protected var mDatabase: Database? = null
|
private var mDatabase: Database? = null
|
||||||
|
|
||||||
override fun onAttach(context: Context) {
|
override fun onAttach(context: Context) {
|
||||||
super.onAttach(context)
|
super.onAttach(context)
|
||||||
this.mDatabaseAutoSaveEnable = PreferencesUtil.isAutoSaveDatabaseEnabled(context)
|
this.mDatabaseAutoSaveEnable = PreferencesUtil.isAutoSaveDatabaseEnabled(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
mDatabaseViewModel.database.observe(this) { database ->
|
||||||
mDatabaseViewModel.database.observe(viewLifecycleOwner) { database ->
|
|
||||||
onDatabaseRetrieved(database)
|
onDatabaseRetrieved(database)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
onDatabaseRetrieved(mDatabase)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: Database?) {
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
this.mDatabase = 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(
|
override fun onDatabaseActionFinished(
|
||||||
database: Database,
|
database: Database,
|
||||||
actionTask: String,
|
actionTask: String,
|
||||||
result: ActionRunnable.Result
|
result: ActionRunnable.Result
|
||||||
) {
|
) {
|
||||||
// Optional
|
// Not used
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun saveColor(oldColor: String,
|
protected fun saveColor(oldColor: String,
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.view.View
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.database.element.Group
|
import com.kunzisoft.keepass.database.element.Group
|
||||||
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
import com.kunzisoft.keepass.settings.preferencedialogfragment.adapter.ListRadioItemAdapter
|
||||||
|
|
||||||
@@ -31,6 +32,7 @@ class DatabaseTemplatesGroupPreferenceDialogFragmentCompat
|
|||||||
: DatabaseSavePreferenceDialogFragmentCompat(),
|
: DatabaseSavePreferenceDialogFragmentCompat(),
|
||||||
ListRadioItemAdapter.RadioItemSelectedCallback<Group> {
|
ListRadioItemAdapter.RadioItemSelectedCallback<Group> {
|
||||||
|
|
||||||
|
private var mGroupsAdapter: ListRadioItemAdapter<Group>? = null
|
||||||
private var mGroupTemplates: Group? = null
|
private var mGroupTemplates: Group? = null
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
@@ -40,14 +42,17 @@ class DatabaseTemplatesGroupPreferenceDialogFragmentCompat
|
|||||||
recyclerView.layoutManager = LinearLayoutManager(context)
|
recyclerView.layoutManager = LinearLayoutManager(context)
|
||||||
|
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
val groupsAdapter = ListRadioItemAdapter<Group>(activity)
|
mGroupsAdapter = ListRadioItemAdapter(activity)
|
||||||
groupsAdapter.setRadioItemSelectedCallback(this)
|
mGroupsAdapter?.setRadioItemSelectedCallback(this)
|
||||||
recyclerView.adapter = groupsAdapter
|
recyclerView.adapter = mGroupsAdapter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mDatabase?.let { database ->
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
mGroupTemplates = database.templatesGroup
|
super.onDatabaseRetrieved(database)
|
||||||
groupsAdapter.setItems(database.getAllGroupsWithoutRoot(), mGroupTemplates)
|
database?.let {
|
||||||
}
|
mGroupTemplates = database.templatesGroup
|
||||||
|
mGroupsAdapter?.setItems(database.getAllGroupsWithoutRoot(), mGroupTemplates)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,9 +60,10 @@ class DatabaseTemplatesGroupPreferenceDialogFragmentCompat
|
|||||||
mGroupTemplates = item
|
mGroupTemplates = item
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(database: Database?, positiveResult: Boolean) {
|
||||||
|
super.onDialogClosed(database, positiveResult)
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
mDatabase?.let { database ->
|
database?.let {
|
||||||
if (database.allowConfigurableTemplatesGroup) {
|
if (database.allowConfigurableTemplatesGroup) {
|
||||||
val oldGroup = database.templatesGroup
|
val oldGroup = database.templatesGroup
|
||||||
val newGroup = mGroupTemplates
|
val newGroup = mGroupTemplates
|
||||||
|
|||||||
Reference in New Issue
Block a user