mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Delete nodes with viewmodel
This commit is contained in:
@@ -86,7 +86,6 @@ class GroupActivity : LockingActivity(),
|
||||
TimePickerDialog.OnTimeSetListener,
|
||||
GroupFragment.NodeClickListener,
|
||||
GroupFragment.NodesActionMenuListener,
|
||||
DeleteNodesDialogFragment.DeleteNodeListener,
|
||||
GroupFragment.OnScrollListener,
|
||||
SortDialogFragment.SortSelectionListener {
|
||||
|
||||
|
||||
@@ -20,63 +20,35 @@
|
||||
package com.kunzisoft.keepass.activities.dialogs
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import com.kunzisoft.keepass.R
|
||||
import com.kunzisoft.keepass.database.element.Database
|
||||
import com.kunzisoft.keepass.database.element.node.Node
|
||||
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService
|
||||
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.getBundleFromListNodes
|
||||
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.getListNodesFromBundle
|
||||
import com.kunzisoft.keepass.viewmodels.NodesViewModel
|
||||
|
||||
open class DeleteNodesDialogFragment : DialogFragment() {
|
||||
|
||||
private var mNodesToDelete: List<Node> = ArrayList()
|
||||
private var mListener: DeleteNodeListener? = null
|
||||
|
||||
override fun onAttach(context: Context) {
|
||||
super.onAttach(context)
|
||||
try {
|
||||
mListener = context as DeleteNodeListener
|
||||
} catch (e: ClassCastException) {
|
||||
throw ClassCastException(context.toString()
|
||||
+ " must implement " + DeleteNodeListener::class.java.name)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDetach() {
|
||||
mListener = null
|
||||
super.onDetach()
|
||||
}
|
||||
private val mNodesViewModel: NodesViewModel by activityViewModels()
|
||||
|
||||
protected open fun retrieveMessage(): String {
|
||||
return getString(R.string.warning_permanently_delete_nodes)
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
mNodesViewModel.nodesToDelete.observe(this) {
|
||||
this.mNodesToDelete = it
|
||||
}
|
||||
|
||||
arguments?.apply {
|
||||
if (containsKey(DatabaseTaskNotificationService.GROUPS_ID_KEY)
|
||||
&& containsKey(DatabaseTaskNotificationService.ENTRIES_ID_KEY)) {
|
||||
// TODO Database
|
||||
mNodesToDelete = getListNodesFromBundle(Database.getInstance(), this)
|
||||
}
|
||||
} ?: savedInstanceState?.apply {
|
||||
if (containsKey(DatabaseTaskNotificationService.GROUPS_ID_KEY)
|
||||
&& containsKey(DatabaseTaskNotificationService.ENTRIES_ID_KEY)) {
|
||||
// TODO Database
|
||||
mNodesToDelete = getListNodesFromBundle(Database.getInstance(), savedInstanceState)
|
||||
}
|
||||
}
|
||||
activity?.let { activity ->
|
||||
// Use the Builder class for convenient dialog construction
|
||||
val builder = AlertDialog.Builder(activity)
|
||||
|
||||
builder.setMessage(retrieveMessage())
|
||||
builder.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
mListener?.permanentlyDeleteNodes(mNodesToDelete)
|
||||
mNodesViewModel.permanentlyDeleteNodes(mNodesToDelete)
|
||||
}
|
||||
builder.setNegativeButton(android.R.string.cancel) { _, _ -> dismiss() }
|
||||
// Create the AlertDialog object and return it
|
||||
@@ -84,21 +56,4 @@ open class DeleteNodesDialogFragment : DialogFragment() {
|
||||
}
|
||||
return super.onCreateDialog(savedInstanceState)
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState.putAll(getBundleFromListNodes(mNodesToDelete))
|
||||
}
|
||||
|
||||
interface DeleteNodeListener {
|
||||
fun permanentlyDeleteNodes(nodes: List<Node>)
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getInstance(nodesToDelete: List<Node>): DeleteNodesDialogFragment {
|
||||
return DeleteNodesDialogFragment().apply {
|
||||
arguments = getBundleFromListNodes(nodesToDelete)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,20 +20,10 @@
|
||||
package com.kunzisoft.keepass.activities.dialogs
|
||||
|
||||
import com.kunzisoft.keepass.R
|
||||
import com.kunzisoft.keepass.database.element.node.Node
|
||||
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.getBundleFromListNodes
|
||||
|
||||
class EmptyRecycleBinDialogFragment : DeleteNodesDialogFragment() {
|
||||
|
||||
override fun retrieveMessage(): String {
|
||||
return getString(R.string.warning_empty_recycle_bin)
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getInstance(nodesToDelete: List<Node>): EmptyRecycleBinDialogFragment {
|
||||
return EmptyRecycleBinDialogFragment().apply {
|
||||
arguments = getBundleFromListNodes(nodesToDelete)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Toast
|
||||
import androidx.activity.viewModels
|
||||
import com.kunzisoft.keepass.R
|
||||
import com.kunzisoft.keepass.activities.dialogs.DeleteNodesDialogFragment
|
||||
import com.kunzisoft.keepass.activities.dialogs.EmptyRecycleBinDialogFragment
|
||||
@@ -49,11 +50,13 @@ import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||
import com.kunzisoft.keepass.utils.*
|
||||
import com.kunzisoft.keepass.viewmodels.NodesViewModel
|
||||
import java.util.*
|
||||
|
||||
abstract class LockingActivity : SpecialModeActivity(),
|
||||
PasswordEncodingDialogFragment.Listener,
|
||||
DeleteNodesDialogFragment.DeleteNodeListener {
|
||||
PasswordEncodingDialogFragment.Listener {
|
||||
|
||||
private val mNodesViewModel: NodesViewModel by viewModels()
|
||||
|
||||
protected var mTimeoutEnable: Boolean = true
|
||||
|
||||
@@ -88,6 +91,10 @@ abstract class LockingActivity : SpecialModeActivity(),
|
||||
intent.getBooleanExtra(TIMEOUT_ENABLE_KEY, TIMEOUT_ENABLE_KEY_DEFAULT)
|
||||
}
|
||||
|
||||
mNodesViewModel.nodesToPermanentlyDelete.observe(this) { nodes ->
|
||||
permanentlyDeleteNodes(nodes)
|
||||
}
|
||||
|
||||
mExitLock = false
|
||||
}
|
||||
|
||||
@@ -219,16 +226,17 @@ abstract class LockingActivity : SpecialModeActivity(),
|
||||
else {
|
||||
val deleteNodesDialogFragment: DeleteNodesDialogFragment =
|
||||
if (recycleBin) {
|
||||
EmptyRecycleBinDialogFragment.getInstance(nodes)
|
||||
EmptyRecycleBinDialogFragment()
|
||||
} else {
|
||||
DeleteNodesDialogFragment.getInstance(nodes)
|
||||
DeleteNodesDialogFragment()
|
||||
}
|
||||
deleteNodesDialogFragment.show(supportFragmentManager, "deleteNodesDialogFragment")
|
||||
mNodesViewModel.deleteNodes(nodes)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun permanentlyDeleteNodes(nodes: List<Node>) {
|
||||
private fun permanentlyDeleteNodes(nodes: List<Node>) {
|
||||
deleteDatabaseNodes(nodes,!mReadOnly && mAutoSaveEnable)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.kunzisoft.keepass.viewmodels
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.kunzisoft.keepass.database.element.node.Node
|
||||
|
||||
class NodesViewModel: ViewModel() {
|
||||
|
||||
val nodesToDelete : LiveData<List<Node>> get() = _nodesToDelete
|
||||
private val _nodesToDelete = MutableLiveData<List<Node>>()
|
||||
|
||||
val nodesToPermanentlyDelete : LiveData<List<Node>> get() = _nodesToPermanentlyDelete
|
||||
private val _nodesToPermanentlyDelete = SingleLiveEvent<List<Node>>()
|
||||
|
||||
fun deleteNodes(nodes: List<Node>) {
|
||||
this._nodesToDelete.value = nodes
|
||||
}
|
||||
|
||||
fun permanentlyDeleteNodes(nodes: List<Node>) {
|
||||
this._nodesToDelete.value = listOf()
|
||||
this._nodesToPermanentlyDelete.value = nodes
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user