Delegate onDatabaseActionFinished in Fragment

This commit is contained in:
J-Jamet
2021-08-09 12:46:03 +02:00
parent 3451135800
commit 571f257c17
3 changed files with 63 additions and 40 deletions

View File

@@ -59,14 +59,9 @@ import com.kunzisoft.keepass.education.GroupActivityEducation
import com.kunzisoft.keepass.model.GroupInfo
import com.kunzisoft.keepass.model.RegisterInfo
import com.kunzisoft.keepass.model.SearchInfo
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_COPY_NODES_TASK
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_CREATE_GROUP_TASK
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_DELETE_NODES_TASK
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_MOVE_NODES_TASK
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_UPDATE_ENTRY_TASK
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_UPDATE_GROUP_TASK
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.NEW_NODES_KEY
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.OLD_NODES_KEY
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.getListNodesFromBundle
import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.tasks.ActionRunnable
@@ -365,10 +360,7 @@ class GroupActivity : LockingActivity(),
result: ActionRunnable.Result
) {
super.onDatabaseActionFinished(database, actionTask, result)
var oldNodes: List<Node> = ArrayList()
result.data?.getBundle(OLD_NODES_KEY)?.let { oldNodesBundle ->
oldNodes = getListNodesFromBundle(database, oldNodesBundle)
}
var newNodes: List<Node> = ArrayList()
result.data?.getBundle(NEW_NODES_KEY)?.let { newNodesBundle ->
newNodes = getListNodesFromBundle(database, newNodesBundle)
@@ -377,7 +369,6 @@ class GroupActivity : LockingActivity(),
when (actionTask) {
ACTION_DATABASE_UPDATE_ENTRY_TASK -> {
if (result.isSuccess) {
mGroupFragment?.updateNodes(oldNodes, newNodes)
EntrySelectionHelper.doSpecialAction(intent,
{
// Standard not used after task
@@ -418,40 +409,10 @@ class GroupActivity : LockingActivity(),
)
}
}
ACTION_DATABASE_UPDATE_GROUP_TASK -> {
if (result.isSuccess) {
mGroupFragment?.updateNodes(oldNodes, newNodes)
}
}
ACTION_DATABASE_CREATE_GROUP_TASK,
ACTION_DATABASE_COPY_NODES_TASK,
ACTION_DATABASE_MOVE_NODES_TASK -> {
if (result.isSuccess) {
mGroupFragment?.addNodes(newNodes)
}
}
ACTION_DATABASE_DELETE_NODES_TASK -> {
if (result.isSuccess) {
// Rebuild all the list to avoid bug when delete node from sort
reloadCurrentGroup()
// Add trash in views list if it doesn't exists
if (database.isRecycleBinEnabled) {
val recycleBin = database.recycleBin
val currentGroup = mCurrentGroup
if (currentGroup != null && recycleBin != null
&& currentGroup != recycleBin
) {
// Recycle bin already here, simply update it
if (mGroupFragment?.contains(recycleBin) == true) {
mGroupFragment?.updateNode(recycleBin)
}
// Recycle bin not here, verify if parents are similar to add it
else if (currentGroup == recycleBin.parent) {
mGroupFragment?.addNode(recycleBin)
}
}
}
}
}
}

View File

@@ -24,6 +24,10 @@ abstract class DatabaseFragment : StylishFragment(), DatabaseRetrieval {
onDatabaseRetrieved(database)
}
}
mDatabaseViewModel.actionFinished.observe(viewLifecycleOwner) { result ->
onDatabaseActionFinished(result.database, result.actionTask, result.result)
}
}
override fun onDatabaseActionFinished(

View File

@@ -42,7 +42,9 @@ import com.kunzisoft.keepass.database.element.SortNodeEnum
import com.kunzisoft.keepass.database.element.node.Node
import com.kunzisoft.keepass.database.element.node.NodeId
import com.kunzisoft.keepass.database.element.node.Type
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService
import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.tasks.ActionRunnable
import com.kunzisoft.keepass.viewmodels.GroupViewModel
import java.util.*
@@ -170,6 +172,62 @@ class GroupFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
}
}
override fun onDatabaseActionFinished(
database: Database,
actionTask: String,
result: ActionRunnable.Result
) {
super.onDatabaseActionFinished(database, actionTask, result)
var oldNodes: List<Node> = ArrayList()
result.data?.getBundle(DatabaseTaskNotificationService.OLD_NODES_KEY)?.let { oldNodesBundle ->
oldNodes =
DatabaseTaskNotificationService.getListNodesFromBundle(database, oldNodesBundle)
}
var newNodes: List<Node> = ArrayList()
result.data?.getBundle(DatabaseTaskNotificationService.NEW_NODES_KEY)?.let { newNodesBundle ->
newNodes =
DatabaseTaskNotificationService.getListNodesFromBundle(database, newNodesBundle)
}
when (actionTask) {
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_ENTRY_TASK,
DatabaseTaskNotificationService.ACTION_DATABASE_UPDATE_GROUP_TASK -> {
if (result.isSuccess) {
updateNodes(oldNodes, newNodes)
}
}
DatabaseTaskNotificationService.ACTION_DATABASE_CREATE_GROUP_TASK,
DatabaseTaskNotificationService.ACTION_DATABASE_COPY_NODES_TASK,
DatabaseTaskNotificationService.ACTION_DATABASE_MOVE_NODES_TASK -> {
if (result.isSuccess) {
addNodes(newNodes)
}
}
DatabaseTaskNotificationService.ACTION_DATABASE_DELETE_NODES_TASK -> {
if (result.isSuccess) {
// Add trash in views list if it doesn't exists
if (database.isRecycleBinEnabled) {
val recycleBin = database.recycleBin
val currentGroup = mCurrentGroup
if (currentGroup != null && recycleBin != null
&& currentGroup != recycleBin
) {
// Recycle bin already here, simply update it
if (contains(recycleBin)) {
updateNode(recycleBin)
}
// Recycle bin not here, verify if parents are similar to add it
else if (currentGroup == recycleBin.parent) {
addNode(recycleBin)
}
}
}
}
}
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
// To apply theme