mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
fix: Refactoring database as flow
This commit is contained in:
@@ -5,6 +5,7 @@ import android.view.View
|
|||||||
import android.view.WindowManager.LayoutParams.FLAG_SECURE
|
import android.view.WindowManager.LayoutParams.FLAG_SECURE
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.kunzisoft.keepass.activities.legacy.DatabaseRetrieval
|
import com.kunzisoft.keepass.activities.legacy.DatabaseRetrieval
|
||||||
import com.kunzisoft.keepass.activities.legacy.resetAppTimeoutWhenViewTouchedOrFocused
|
import com.kunzisoft.keepass.activities.legacy.resetAppTimeoutWhenViewTouchedOrFocused
|
||||||
import com.kunzisoft.keepass.database.ContextualDatabase
|
import com.kunzisoft.keepass.database.ContextualDatabase
|
||||||
@@ -12,19 +13,25 @@ import com.kunzisoft.keepass.settings.PreferencesUtil
|
|||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||||
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
abstract class DatabaseDialogFragment : DialogFragment(), DatabaseRetrieval {
|
abstract class DatabaseDialogFragment : DialogFragment(), DatabaseRetrieval {
|
||||||
|
|
||||||
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
private var mDatabase: ContextualDatabase? = null
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
mDatabaseViewModel.database.observe(this) { database ->
|
lifecycleScope.launch {
|
||||||
this.mDatabase = database
|
// Initialize the parameters
|
||||||
resetAppTimeoutOnTouchOrFocus()
|
mDatabaseViewModel.uiState.collect { uiState ->
|
||||||
onDatabaseRetrieved(database)
|
when (uiState) {
|
||||||
|
is DatabaseViewModel.UIState.Loading -> {}
|
||||||
|
is DatabaseViewModel.UIState.OnDatabaseRetrieved -> {
|
||||||
|
resetAppTimeoutOnTouchOrFocus()
|
||||||
|
onDatabaseRetrieved(uiState.database)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mDatabaseViewModel.actionFinished.observe(this) { result ->
|
mDatabaseViewModel.actionFinished.observe(this) { result ->
|
||||||
@@ -67,7 +74,7 @@ abstract class DatabaseDialogFragment : DialogFragment(), DatabaseRetrieval {
|
|||||||
fun resetAppTimeout() {
|
fun resetAppTimeout() {
|
||||||
context?.let {
|
context?.let {
|
||||||
TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(it,
|
TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(it,
|
||||||
mDatabase?.loaded ?: false)
|
mDatabaseViewModel.database?.loaded ?: false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +87,7 @@ abstract class DatabaseDialogFragment : DialogFragment(), DatabaseRetrieval {
|
|||||||
context?.let {
|
context?.let {
|
||||||
dialog?.window?.decorView?.resetAppTimeoutWhenViewTouchedOrFocused(
|
dialog?.window?.decorView?.resetAppTimeoutWhenViewTouchedOrFocused(
|
||||||
it,
|
it,
|
||||||
mDatabase?.loaded
|
mDatabaseViewModel.database?.loaded
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,25 +4,31 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.kunzisoft.keepass.activities.legacy.DatabaseRetrieval
|
import com.kunzisoft.keepass.activities.legacy.DatabaseRetrieval
|
||||||
import com.kunzisoft.keepass.activities.legacy.resetAppTimeoutWhenViewTouchedOrFocused
|
import com.kunzisoft.keepass.activities.legacy.resetAppTimeoutWhenViewTouchedOrFocused
|
||||||
import com.kunzisoft.keepass.database.ContextualDatabase
|
import com.kunzisoft.keepass.database.ContextualDatabase
|
||||||
import com.kunzisoft.keepass.database.element.binary.BinaryData
|
import com.kunzisoft.keepass.database.element.binary.BinaryData
|
||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
abstract class DatabaseFragment : Fragment(), DatabaseRetrieval {
|
abstract class DatabaseFragment : Fragment(), DatabaseRetrieval {
|
||||||
|
|
||||||
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
protected var mDatabase: ContextualDatabase? = null
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
mDatabaseViewModel.database.observe(viewLifecycleOwner) { database ->
|
lifecycleScope.launch {
|
||||||
if (mDatabase == null || mDatabase != database) {
|
// Initialize the parameters
|
||||||
this.mDatabase = database
|
mDatabaseViewModel.uiState.collect { uiState ->
|
||||||
onDatabaseRetrieved(database)
|
when (uiState) {
|
||||||
|
is DatabaseViewModel.UIState.Loading -> {}
|
||||||
|
is DatabaseViewModel.UIState.OnDatabaseRetrieved -> {
|
||||||
|
onDatabaseRetrieved(uiState.database)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,7 +39,10 @@ abstract class DatabaseFragment : Fragment(), DatabaseRetrieval {
|
|||||||
|
|
||||||
protected fun resetAppTimeoutWhenViewFocusedOrChanged(view: View?) {
|
protected fun resetAppTimeoutWhenViewFocusedOrChanged(view: View?) {
|
||||||
context?.let {
|
context?.let {
|
||||||
view?.resetAppTimeoutWhenViewTouchedOrFocused(it, mDatabase?.loaded)
|
view?.resetAppTimeoutWhenViewTouchedOrFocused(
|
||||||
|
context = it,
|
||||||
|
databaseLoaded = mDatabaseViewModel.database?.loaded
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,6 +55,6 @@ abstract class DatabaseFragment : Fragment(), DatabaseRetrieval {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun buildNewBinaryAttachment(): BinaryData? {
|
protected fun buildNewBinaryAttachment(): BinaryData? {
|
||||||
return mDatabase?.buildNewBinaryAttachment()
|
return mDatabaseViewModel.database?.buildNewBinaryAttachment()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,6 +47,7 @@ import com.kunzisoft.keepass.database.element.node.Type
|
|||||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
import com.kunzisoft.keepass.utils.KeyboardUtil.hideKeyboard
|
import com.kunzisoft.keepass.utils.KeyboardUtil.hideKeyboard
|
||||||
|
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
||||||
import com.kunzisoft.keepass.viewmodels.GroupViewModel
|
import com.kunzisoft.keepass.viewmodels.GroupViewModel
|
||||||
import java.util.LinkedList
|
import java.util.LinkedList
|
||||||
|
|
||||||
@@ -60,6 +61,7 @@ class GroupFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
|
|||||||
private var mLayoutManager: LinearLayoutManager? = null
|
private var mLayoutManager: LinearLayoutManager? = null
|
||||||
private var mAdapter: NodesAdapter? = null
|
private var mAdapter: NodesAdapter? = null
|
||||||
|
|
||||||
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
private val mGroupViewModel: GroupViewModel by activityViewModels()
|
private val mGroupViewModel: GroupViewModel by activityViewModels()
|
||||||
|
|
||||||
private var mCurrentGroup: Group? = null
|
private var mCurrentGroup: Group? = null
|
||||||
@@ -103,7 +105,7 @@ class GroupFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
|
|||||||
PreferencesUtil.getListSort(context),
|
PreferencesUtil.getListSort(context),
|
||||||
PreferencesUtil.getAscendingSort(context),
|
PreferencesUtil.getAscendingSort(context),
|
||||||
PreferencesUtil.getGroupsBeforeSort(context),
|
PreferencesUtil.getGroupsBeforeSort(context),
|
||||||
if (mDatabase?.isRecycleBinEnabled == true) {
|
if (mDatabaseViewModel.database?.isRecycleBinEnabled == true) {
|
||||||
PreferencesUtil.getRecycleBinBottomSort(context)
|
PreferencesUtil.getRecycleBinBottomSort(context)
|
||||||
} else null
|
} else null
|
||||||
)
|
)
|
||||||
@@ -300,8 +302,9 @@ class GroupFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun containsRecycleBin(nodes: List<Node>): Boolean {
|
private fun containsRecycleBin(nodes: List<Node>): Boolean {
|
||||||
return mDatabase?.isRecycleBinEnabled == true
|
val database = mDatabaseViewModel.database
|
||||||
&& nodes.any { it == mDatabase?.recycleBin }
|
return database?.isRecycleBinEnabled == true
|
||||||
|
&& nodes.any { it == database.recycleBin }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun actionNodesCallback(database: ContextualDatabase,
|
fun actionNodesCallback(database: ContextualDatabase,
|
||||||
|
|||||||
@@ -23,18 +23,19 @@ import android.content.Context
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceCategory
|
import androidx.preference.PreferenceCategory
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class MainPreferenceFragment : PreferenceFragmentCompat() {
|
class MainPreferenceFragment : PreferenceFragmentCompat() {
|
||||||
|
|
||||||
private var mCallback: Callback? = null
|
private var mCallback: Callback? = null
|
||||||
|
|
||||||
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
private var mDatabaseLoaded: Boolean = false
|
|
||||||
|
|
||||||
override fun onAttach(context: Context) {
|
override fun onAttach(context: Context) {
|
||||||
super.onAttach(context)
|
super.onAttach(context)
|
||||||
@@ -51,19 +52,26 @@ class MainPreferenceFragment : PreferenceFragmentCompat() {
|
|||||||
super.onDetach()
|
super.onDetach()
|
||||||
}
|
}
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
mDatabaseViewModel.database.observe(viewLifecycleOwner) { database ->
|
lifecycleScope.launch {
|
||||||
mDatabaseLoaded = database?.loaded == true
|
// Initialize the parameters
|
||||||
checkDatabaseLoaded()
|
mDatabaseViewModel.uiState.collect { uiState ->
|
||||||
|
when (uiState) {
|
||||||
|
is DatabaseViewModel.UIState.Loading -> {}
|
||||||
|
is DatabaseViewModel.UIState.OnDatabaseRetrieved -> {
|
||||||
|
checkDatabaseLoaded(uiState.database?.loaded == true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkDatabaseLoaded() {
|
private fun checkDatabaseLoaded(isDatabaseLoaded: Boolean) {
|
||||||
findPreference<Preference>(getString(R.string.settings_database_key))
|
findPreference<Preference>(getString(R.string.settings_database_key))
|
||||||
?.isEnabled = mDatabaseLoaded
|
?.isEnabled = isDatabaseLoaded
|
||||||
|
|
||||||
findPreference<PreferenceCategory>(getString(R.string.settings_database_category_key))
|
findPreference<PreferenceCategory>(getString(R.string.settings_database_category_key))
|
||||||
?.isVisible = mDatabaseLoaded
|
?.isVisible = isDatabaseLoaded
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
@@ -119,7 +127,7 @@ class MainPreferenceFragment : PreferenceFragmentCompat() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checkDatabaseLoaded()
|
checkDatabaseLoaded(mDatabaseViewModel.database?.loaded == true)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Callback {
|
interface Callback {
|
||||||
|
|||||||
@@ -19,13 +19,14 @@
|
|||||||
*/
|
*/
|
||||||
package com.kunzisoft.keepass.settings
|
package com.kunzisoft.keepass.settings
|
||||||
|
|
||||||
import android.graphics.Color
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.*
|
import android.view.*
|
||||||
|
import androidx.core.graphics.toColorInt
|
||||||
import androidx.core.view.MenuProvider
|
import androidx.core.view.MenuProvider
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceCategory
|
import androidx.preference.PreferenceCategory
|
||||||
import androidx.preference.TwoStatePreference
|
import androidx.preference.TwoStatePreference
|
||||||
@@ -47,11 +48,11 @@ import com.kunzisoft.keepass.tasks.ActionRunnable
|
|||||||
import com.kunzisoft.keepass.utils.getParcelableCompat
|
import com.kunzisoft.keepass.utils.getParcelableCompat
|
||||||
import com.kunzisoft.keepass.utils.getSerializableCompat
|
import com.kunzisoft.keepass.utils.getSerializableCompat
|
||||||
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetrieval {
|
class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetrieval {
|
||||||
|
|
||||||
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
private var mDatabase: ContextualDatabase? = null
|
|
||||||
private var mDatabaseReadOnly: Boolean = false
|
private var mDatabaseReadOnly: Boolean = false
|
||||||
private var mMergeDataAllowed: Boolean = false
|
private var mMergeDataAllowed: Boolean = false
|
||||||
private var mDatabaseAutoSaveEnabled: Boolean = true
|
private var mDatabaseAutoSaveEnabled: Boolean = true
|
||||||
@@ -119,10 +120,19 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
|
|
||||||
activity?.addMenuProvider(menuProvider, viewLifecycleOwner)
|
activity?.addMenuProvider(menuProvider, viewLifecycleOwner)
|
||||||
|
|
||||||
mDatabaseViewModel.database.observe(viewLifecycleOwner) { database ->
|
lifecycleScope.launch {
|
||||||
mDatabase = database
|
mDatabaseViewModel.uiState.collect { uiState ->
|
||||||
view.resetAppTimeoutWhenViewTouchedOrFocused(requireContext(), database?.loaded)
|
when (uiState) {
|
||||||
onDatabaseRetrieved(database)
|
is DatabaseViewModel.UIState.Loading -> {}
|
||||||
|
is DatabaseViewModel.UIState.OnDatabaseRetrieved -> {
|
||||||
|
view.resetAppTimeoutWhenViewTouchedOrFocused(
|
||||||
|
context = requireContext(),
|
||||||
|
databaseLoaded = uiState.database?.loaded
|
||||||
|
)
|
||||||
|
onDatabaseRetrieved(uiState.database)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mDatabaseViewModel.actionFinished.observe(viewLifecycleOwner) {
|
mDatabaseViewModel.actionFinished.observe(viewLifecycleOwner) {
|
||||||
@@ -132,7 +142,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
|
|
||||||
override fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
mScreen = screen
|
mScreen = screen
|
||||||
val database = mDatabase
|
val database = mDatabaseViewModel.database
|
||||||
// Load the preferences from an XML resource
|
// Load the preferences from an XML resource
|
||||||
when (screen) {
|
when (screen) {
|
||||||
Screen.DATABASE -> {
|
Screen.DATABASE -> {
|
||||||
@@ -168,11 +178,10 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
mDatabase = database
|
|
||||||
mDatabaseReadOnly = database?.isReadOnly == true
|
mDatabaseReadOnly = database?.isReadOnly == true
|
||||||
mMergeDataAllowed = database?.isMergeDataAllowed() == true
|
mMergeDataAllowed = database?.isMergeDataAllowed() == true
|
||||||
|
|
||||||
mDatabase?.let {
|
database?.let {
|
||||||
if (it.loaded) {
|
if (it.loaded) {
|
||||||
when (mScreen) {
|
when (mScreen) {
|
||||||
Screen.DATABASE -> {
|
Screen.DATABASE -> {
|
||||||
@@ -458,7 +467,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newDefaultUsername
|
newDefaultUsername
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.defaultUsername = oldDefaultUsername
|
database.defaultUsername = oldDefaultUsername
|
||||||
oldDefaultUsername
|
oldDefaultUsername
|
||||||
}
|
}
|
||||||
dbDefaultUsernamePref?.summary = defaultUsernameToShow
|
dbDefaultUsernamePref?.summary = defaultUsernameToShow
|
||||||
@@ -471,7 +480,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newColor
|
newColor
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.customColor = Color.parseColor(oldColor)
|
database.customColor = oldColor.toColorInt()
|
||||||
oldColor
|
oldColor
|
||||||
}
|
}
|
||||||
dbCustomColorPref?.summary = defaultColorToShow
|
dbCustomColorPref?.summary = defaultColorToShow
|
||||||
@@ -483,7 +492,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newCompression
|
newCompression
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.compressionAlgorithm = oldCompression
|
database.compressionAlgorithm = oldCompression
|
||||||
oldCompression
|
oldCompression
|
||||||
}
|
}
|
||||||
dbDataCompressionPref?.summary = algorithmToShow?.getLocalizedName(resources)
|
dbDataCompressionPref?.summary = algorithmToShow?.getLocalizedName(resources)
|
||||||
@@ -497,7 +506,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
} else {
|
} else {
|
||||||
oldRecycleBin
|
oldRecycleBin
|
||||||
}
|
}
|
||||||
mDatabase?.setRecycleBin(recycleBinToShow)
|
database.setRecycleBin(recycleBinToShow)
|
||||||
refreshRecycleBinGroup(database)
|
refreshRecycleBinGroup(database)
|
||||||
}
|
}
|
||||||
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_TEMPLATES_GROUP_TASK -> {
|
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_TEMPLATES_GROUP_TASK -> {
|
||||||
@@ -509,7 +518,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
} else {
|
} else {
|
||||||
oldTemplatesGroup
|
oldTemplatesGroup
|
||||||
}
|
}
|
||||||
mDatabase?.setTemplatesGroup(templatesGroupToShow)
|
database.setTemplatesGroup(templatesGroupToShow)
|
||||||
refreshTemplatesGroup(database)
|
refreshTemplatesGroup(database)
|
||||||
}
|
}
|
||||||
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_MAX_HISTORY_ITEMS_TASK -> {
|
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_MAX_HISTORY_ITEMS_TASK -> {
|
||||||
@@ -519,7 +528,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newMaxHistoryItems
|
newMaxHistoryItems
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.historyMaxItems = oldMaxHistoryItems
|
database.historyMaxItems = oldMaxHistoryItems
|
||||||
oldMaxHistoryItems
|
oldMaxHistoryItems
|
||||||
}
|
}
|
||||||
dbMaxHistoryItemsPref?.summary = maxHistoryItemsToShow.toString()
|
dbMaxHistoryItemsPref?.summary = maxHistoryItemsToShow.toString()
|
||||||
@@ -531,7 +540,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newMaxHistorySize
|
newMaxHistorySize
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.historyMaxSize = oldMaxHistorySize
|
database.historyMaxSize = oldMaxHistorySize
|
||||||
oldMaxHistorySize
|
oldMaxHistorySize
|
||||||
}
|
}
|
||||||
dbMaxHistorySizePref?.summary = maxHistorySizeToShow.toString()
|
dbMaxHistorySizePref?.summary = maxHistorySizeToShow.toString()
|
||||||
@@ -549,7 +558,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newEncryption
|
newEncryption
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.encryptionAlgorithm = oldEncryption
|
database.encryptionAlgorithm = oldEncryption
|
||||||
oldEncryption
|
oldEncryption
|
||||||
}
|
}
|
||||||
mEncryptionAlgorithmPref?.summary = algorithmToShow.toString()
|
mEncryptionAlgorithmPref?.summary = algorithmToShow.toString()
|
||||||
@@ -561,7 +570,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newKeyDerivationEngine
|
newKeyDerivationEngine
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.kdfEngine = oldKeyDerivationEngine
|
database.kdfEngine = oldKeyDerivationEngine
|
||||||
oldKeyDerivationEngine
|
oldKeyDerivationEngine
|
||||||
}
|
}
|
||||||
mKeyDerivationPref?.summary = kdfEngineToShow.toString()
|
mKeyDerivationPref?.summary = kdfEngineToShow.toString()
|
||||||
@@ -578,7 +587,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newIterations
|
newIterations
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.numberKeyEncryptionRounds = oldIterations
|
database.numberKeyEncryptionRounds = oldIterations
|
||||||
oldIterations
|
oldIterations
|
||||||
}
|
}
|
||||||
mRoundPref?.summary = roundsToShow.toString()
|
mRoundPref?.summary = roundsToShow.toString()
|
||||||
@@ -590,7 +599,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newMemoryUsage
|
newMemoryUsage
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.memoryUsage = oldMemoryUsage
|
database.memoryUsage = oldMemoryUsage
|
||||||
oldMemoryUsage
|
oldMemoryUsage
|
||||||
}
|
}
|
||||||
mMemoryPref?.summary = memoryToShow.toString()
|
mMemoryPref?.summary = memoryToShow.toString()
|
||||||
@@ -602,7 +611,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
newParallelism
|
newParallelism
|
||||||
} else {
|
} else {
|
||||||
mDatabase?.parallelism = oldParallelism
|
database.parallelism = oldParallelism
|
||||||
oldParallelism
|
oldParallelism
|
||||||
}
|
}
|
||||||
mParallelismPref?.summary = parallelismToShow.toString()
|
mParallelismPref?.summary = parallelismToShow.toString()
|
||||||
|
|||||||
@@ -96,8 +96,6 @@ class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialog
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
|
|
||||||
database?.let {
|
database?.let {
|
||||||
var initColor = it.customColor
|
var initColor = it.customColor
|
||||||
if (initColor != null) {
|
if (initColor != null) {
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ class DatabaseDataCompressionPreferenceDialogFragmentCompat
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
setExplanationText(R.string.database_data_compression_summary)
|
setExplanationText(R.string.database_data_compression_summary)
|
||||||
|
|
||||||
mRecyclerView?.adapter = mCompressionAdapter
|
mRecyclerView?.adapter = mCompressionAdapter
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import com.kunzisoft.keepass.database.ContextualDatabase
|
|||||||
class DatabaseDefaultUsernamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseDefaultUsernamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
inputText = database?.defaultUsername?: ""
|
inputText = database?.defaultUsername?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import com.kunzisoft.keepass.database.ContextualDatabase
|
|||||||
class DatabaseDescriptionPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseDescriptionPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
inputText = database?.description ?: ""
|
inputText = database?.description ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ class DatabaseEncryptionAlgorithmPreferenceDialogFragmentCompat
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
database?.let {
|
database?.let {
|
||||||
algorithmSelected = database.encryptionAlgorithm
|
algorithmSelected = database.encryptionAlgorithm
|
||||||
mEncryptionAlgorithmAdapter?.setItems(database.availableEncryptionAlgorithms, algorithmSelected)
|
mEncryptionAlgorithmAdapter?.setItems(database.availableEncryptionAlgorithms, algorithmSelected)
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ class DatabaseKeyDerivationPreferenceDialogFragmentCompat
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
database?.let {
|
database?.let {
|
||||||
kdfEngineSelected = database.kdfEngine
|
kdfEngineSelected = database.kdfEngine
|
||||||
mKdfAdapter?.setItems(database.availableKdfEngines, kdfEngineSelected)
|
mKdfAdapter?.setItems(database.availableKdfEngines, kdfEngineSelected)
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ class DatabaseMaxHistoryItemsPreferenceDialogFragmentCompat : DatabaseSavePrefer
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
database?.historyMaxItems?.let { maxItemsDatabase ->
|
database?.historyMaxItems?.let { maxItemsDatabase ->
|
||||||
inputText = maxItemsDatabase.toString()
|
inputText = maxItemsDatabase.toString()
|
||||||
setSwitchAction({ isChecked ->
|
setSwitchAction({ isChecked ->
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ class DatabaseMaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePrefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
database?.historyMaxSize?.let { maxItemsDatabase ->
|
database?.historyMaxSize?.let { maxItemsDatabase ->
|
||||||
dataByte = DataByte(maxItemsDatabase, DataByte.ByteFormat.BYTE)
|
dataByte = DataByte(maxItemsDatabase, DataByte.ByteFormat.BYTE)
|
||||||
.toBetterByteFormat()
|
.toBetterByteFormat()
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ class DatabaseMemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreference
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
database?.let {
|
database?.let {
|
||||||
val memoryBytes = database.memoryUsage
|
val memoryBytes = database.memoryUsage
|
||||||
dataByte = DataByte(memoryBytes, DataByte.ByteFormat.BYTE)
|
dataByte = DataByte(memoryBytes, DataByte.ByteFormat.BYTE)
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import com.kunzisoft.keepass.database.ContextualDatabase
|
|||||||
class DatabaseNamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class DatabaseNamePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
inputText = database?.name ?: ""
|
inputText = database?.name ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ class DatabaseParallelismPreferenceDialogFragmentCompat : DatabaseSavePreference
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
inputText = database?.parallelism?.toString() ?: MIN_PARALLELISM.toString()
|
inputText = database?.parallelism?.toString() ?: MIN_PARALLELISM.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ class DatabaseRecycleBinGroupPreferenceDialogFragmentCompat
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
database?.let {
|
database?.let {
|
||||||
mGroupRecycleBin = database.recycleBin
|
mGroupRecycleBin = database.recycleBin
|
||||||
mGroupsAdapter?.setItems(database.getAllGroupsWithoutRoot(), mGroupRecycleBin)
|
mGroupsAdapter?.setItems(database.getAllGroupsWithoutRoot(), mGroupRecycleBin)
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ class DatabaseRemoveUnlinkedDataPreferenceDialogFragmentCompat : DatabaseSavePre
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
fun newInstance(key: String): DatabaseRemoveUnlinkedDataPreferenceDialogFragmentCompat {
|
fun newInstance(key: String): DatabaseRemoveUnlinkedDataPreferenceDialogFragmentCompat {
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ class DatabaseRoundsPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialo
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
inputText = database?.numberKeyEncryptionRounds?.toString() ?: MIN_ITERATIONS.toString()
|
inputText = database?.numberKeyEncryptionRounds?.toString() ?: MIN_ITERATIONS.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import com.kunzisoft.androidclearchroma.ChromaUtil
|
import com.kunzisoft.androidclearchroma.ChromaUtil
|
||||||
import com.kunzisoft.keepass.activities.legacy.DatabaseRetrieval
|
import com.kunzisoft.keepass.activities.legacy.DatabaseRetrieval
|
||||||
import com.kunzisoft.keepass.database.ContextualDatabase
|
import com.kunzisoft.keepass.database.ContextualDatabase
|
||||||
@@ -32,13 +35,13 @@ import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm
|
|||||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
abstract class DatabaseSavePreferenceDialogFragmentCompat
|
abstract class DatabaseSavePreferenceDialogFragmentCompat
|
||||||
: InputPreferenceDialogFragmentCompat(), DatabaseRetrieval {
|
: InputPreferenceDialogFragmentCompat(), DatabaseRetrieval {
|
||||||
|
|
||||||
private var mDatabaseAutoSaveEnable = true
|
private var mDatabaseAutoSaveEnable = true
|
||||||
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
private var mDatabase: ContextualDatabase? = null
|
|
||||||
|
|
||||||
override fun onAttach(context: Context) {
|
override fun onAttach(context: Context) {
|
||||||
super.onAttach(context)
|
super.onAttach(context)
|
||||||
@@ -47,20 +50,21 @@ abstract class DatabaseSavePreferenceDialogFragmentCompat
|
|||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
mDatabaseViewModel.database.observe(this) { database ->
|
|
||||||
onDatabaseRetrieved(database)
|
lifecycleScope.launch {
|
||||||
|
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||||
|
mDatabaseViewModel.uiState.collect { uiState ->
|
||||||
|
when (uiState) {
|
||||||
|
is DatabaseViewModel.UIState.Loading -> {}
|
||||||
|
is DatabaseViewModel.UIState.OnDatabaseRetrieved -> {
|
||||||
|
onDatabaseRetrieved(uiState.database)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
onDatabaseRetrieved(mDatabase)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
|
||||||
this.mDatabase = database
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDatabaseActionFinished(
|
override fun onDatabaseActionFinished(
|
||||||
database: ContextualDatabase,
|
database: ContextualDatabase,
|
||||||
actionTask: String,
|
actionTask: String,
|
||||||
@@ -70,7 +74,7 @@ abstract class DatabaseSavePreferenceDialogFragmentCompat
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(positiveResult: Boolean) {
|
||||||
onDialogClosed(mDatabase, positiveResult)
|
onDialogClosed(mDatabaseViewModel.database, positiveResult)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun onDialogClosed(database: ContextualDatabase?, positiveResult: Boolean) {
|
open fun onDialogClosed(database: ContextualDatabase?, positiveResult: Boolean) {
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ class DatabaseTemplatesGroupPreferenceDialogFragmentCompat
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
override fun onDatabaseRetrieved(database: ContextualDatabase?) {
|
||||||
super.onDatabaseRetrieved(database)
|
|
||||||
database?.let {
|
database?.let {
|
||||||
mGroupTemplates = database.templatesGroup
|
mGroupTemplates = database.templatesGroup
|
||||||
mGroupsAdapter?.setItems(database.getAllGroupsWithoutRoot(), mGroupTemplates)
|
mGroupsAdapter?.setItems(database.getAllGroupsWithoutRoot(), mGroupTemplates)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.kunzisoft.keepass.viewmodels
|
package com.kunzisoft.keepass.viewmodels
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import com.kunzisoft.keepass.database.ContextualDatabase
|
import com.kunzisoft.keepass.database.ContextualDatabase
|
||||||
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
|
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
|
||||||
@@ -9,11 +8,16 @@ import com.kunzisoft.keepass.database.crypto.kdf.KdfEngine
|
|||||||
import com.kunzisoft.keepass.database.element.Group
|
import com.kunzisoft.keepass.database.element.Group
|
||||||
import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm
|
import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm
|
||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
||||||
class DatabaseViewModel: ViewModel() {
|
class DatabaseViewModel: ViewModel() {
|
||||||
|
|
||||||
val database : LiveData<ContextualDatabase?> get() = _database
|
var database: ContextualDatabase? = null
|
||||||
private val _database = MutableLiveData<ContextualDatabase?>()
|
private set
|
||||||
|
|
||||||
|
private val mUiState = MutableStateFlow<UIState>(UIState.Loading)
|
||||||
|
val uiState: StateFlow<UIState> = mUiState
|
||||||
|
|
||||||
val actionFinished : LiveData<ActionResult> get() = _actionFinished
|
val actionFinished : LiveData<ActionResult> get() = _actionFinished
|
||||||
private val _actionFinished = SingleLiveEvent<ActionResult>()
|
private val _actionFinished = SingleLiveEvent<ActionResult>()
|
||||||
@@ -74,7 +78,8 @@ class DatabaseViewModel: ViewModel() {
|
|||||||
|
|
||||||
|
|
||||||
fun defineDatabase(database: ContextualDatabase?) {
|
fun defineDatabase(database: ContextualDatabase?) {
|
||||||
this._database.value = database
|
this.database = database
|
||||||
|
this.mUiState.value = UIState.OnDatabaseRetrieved(database)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onActionFinished(database: ContextualDatabase,
|
fun onActionFinished(database: ContextualDatabase,
|
||||||
@@ -184,6 +189,13 @@ class DatabaseViewModel: ViewModel() {
|
|||||||
_saveParallelism.value = SuperLong(oldValue, newValue, save)
|
_saveParallelism.value = SuperLong(oldValue, newValue, save)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sealed class UIState {
|
||||||
|
object Loading: UIState()
|
||||||
|
data class OnDatabaseRetrieved(
|
||||||
|
val database: ContextualDatabase?
|
||||||
|
): UIState()
|
||||||
|
}
|
||||||
|
|
||||||
data class ActionResult(val database: ContextualDatabase,
|
data class ActionResult(val database: ContextualDatabase,
|
||||||
val actionTask: String,
|
val actionTask: String,
|
||||||
val result: ActionRunnable.Result)
|
val result: ActionRunnable.Result)
|
||||||
|
|||||||
Reference in New Issue
Block a user