From ce6f7729c54b14b8b8f4ad3c52efec0a73f2c82b Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Tue, 4 Aug 2020 11:38:54 +0200 Subject: [PATCH] Lock button with toolbar --- .../keepass/activities/EntryEditActivity.kt | 20 ++++++++++++--- .../keepass/activities/GroupActivity.kt | 25 ++++++++++++++----- .../keepass/activities/ListNodesFragment.kt | 10 +++++--- .../keepass/view/AddNodeButtonView.kt | 2 +- .../main/res/layout/activity_entry_edit.xml | 10 ++++++++ app/src/main/res/layout/activity_group.xml | 23 +++++++++-------- app/src/main/res/menu/entry_edit.xml | 5 ---- 7 files changed, 65 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index d5dc51cad..00ec157c4 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -84,6 +84,7 @@ class EntryEditActivity : LockingActivity(), private var entryEditContentsView: EntryEditContentsView? = null private var entryEditAddToolBar: ActionMenuView? = null private var validateButton: View? = null + private var lockView: View? = null // Education private var entryEditActivityEducation: EntryEditActivityEducation? = null @@ -116,6 +117,11 @@ class EntryEditActivity : LockingActivity(), } } + lockView = findViewById(R.id.lock_button) + lockView?.setOnClickListener { + lockAndExit() + } + // Focus view to reinitialize timeout resetAppTimeoutWhenViewFocusedOrChanged(coordinatorLayout) @@ -221,10 +227,6 @@ class EntryEditActivity : LockingActivity(), setOnMenuItemClickListener { item -> when (item.itemId) { - R.id.menu_lock -> { - lockAndExit() - true - } R.id.menu_generate_password -> { openPasswordGenerator() true @@ -262,6 +264,16 @@ class EntryEditActivity : LockingActivity(), } } + override fun onResume() { + super.onResume() + + lockView?.visibility = if (PreferencesUtil.showLockDatabaseButton(this)) { + View.VISIBLE + } else { + View.GONE + } + } + private fun populateViewsWithEntry(newEntry: Entry) { // Don't start the field reference manager, we want to see the raw ref mDatabase?.stopManageEntry(newEntry) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt index 8c0ca66da..de54d459a 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -108,6 +108,8 @@ class GroupActivity : LockingActivity(), private var mCurrentGroupIsASearch: Boolean = false private var mRequestStartupSearch = true + private var actionNodeMode: ActionMode? = null + // To manage history in selection mode private var mSelectionModeCountBackStack = 0 @@ -511,7 +513,8 @@ class GroupActivity : LockingActivity(), } override fun onScrolled(dy: Int) { - addNodeButtonView?.hideButtonOnScrollListener(dy) + if (actionNodeMode == null) + addNodeButtonView?.hideOrShowButtonOnScrollListener(dy) } override fun onNodeClick(node: Node) { @@ -554,18 +557,28 @@ class GroupActivity : LockingActivity(), } } - private var actionNodeMode: ActionMode? = null - private fun finishNodeAction() { actionNodeMode?.finish() - actionNodeMode = null - addNodeButtonView?.showButton() } override fun onNodeSelected(nodes: List): Boolean { if (nodes.isNotEmpty()) { if (actionNodeMode == null || toolbarAction?.getSupportActionModeCallback() == null) { - mListNodesFragment?.actionNodesCallback(nodes, this)?.let { + mListNodesFragment?.actionNodesCallback(nodes, this, object: ActionMode.Callback { + override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean { + return true + } + override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean { + return true + } + override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean { + return false + } + override fun onDestroyActionMode(mode: ActionMode?) { + actionNodeMode = null + addNodeButtonView?.showButton() + } + })?.let { actionNodeMode = toolbarAction?.startSupportActionMode(it) } } else { diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/ListNodesFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/ListNodesFragment.kt index 002cb984b..d12a8fc39 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/ListNodesFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/ListNodesFragment.kt @@ -266,14 +266,15 @@ class ListNodesFragment : StylishFragment(), SortDialogFragment.SortSelectionLis } fun actionNodesCallback(nodes: List, - menuListener: NodesActionMenuListener?) : ActionMode.Callback { + menuListener: NodesActionMenuListener?, + actionModeCallback: ActionMode.Callback) : ActionMode.Callback { return object : ActionMode.Callback { override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean { nodeActionSelectionMode = false nodeActionPasteMode = PasteMode.UNDEFINED - return true + return actionModeCallback.onCreateActionMode(mode, menu) } override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean { @@ -318,7 +319,7 @@ class ListNodesFragment : StylishFragment(), SortDialogFragment.SortSelectionLis // Add the number of items selected in title mode?.title = nodes.size.toString() - return true + return actionModeCallback.onPrepareActionMode(mode, menu) } override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean { @@ -348,7 +349,7 @@ class ListNodesFragment : StylishFragment(), SortDialogFragment.SortSelectionLis nodeActionSelectionMode = false returnValue } - else -> false + else -> actionModeCallback.onActionItemClicked(mode, item) } } @@ -358,6 +359,7 @@ class ListNodesFragment : StylishFragment(), SortDialogFragment.SortSelectionLis mAdapter?.unselectActionNodes() nodeActionPasteMode = PasteMode.UNDEFINED nodeActionSelectionMode = false + actionModeCallback.onDestroyActionMode(mode) } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/view/AddNodeButtonView.kt b/app/src/main/java/com/kunzisoft/keepass/view/AddNodeButtonView.kt index c77ae653d..cf7a6af8a 100644 --- a/app/src/main/java/com/kunzisoft/keepass/view/AddNodeButtonView.kt +++ b/app/src/main/java/com/kunzisoft/keepass/view/AddNodeButtonView.kt @@ -121,7 +121,7 @@ class AddNodeButtonView @JvmOverloads constructor(context: Context, return super.onTouchEvent(event) } - fun hideButtonOnScrollListener(dy: Int) { + fun hideOrShowButtonOnScrollListener(dy: Int) { if (state == State.CLOSE) { if (dy > 0 && addButtonView?.visibility == View.VISIBLE) { hideButton() diff --git a/app/src/main/res/layout/activity_entry_edit.xml b/app/src/main/res/layout/activity_entry_edit.xml index 2b6aee634..2e12faf6c 100644 --- a/app/src/main/res/layout/activity_entry_edit.xml +++ b/app/src/main/res/layout/activity_entry_edit.xml @@ -73,6 +73,10 @@ android:layout_gravity="bottom" > @@ -88,4 +92,10 @@ app:useCompatPadding="true" style="@style/KeepassDXStyle.Fab"/> + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_group.xml b/app/src/main/res/layout/activity_group.xml index c680f668c..c673ffe78 100644 --- a/app/src/main/res/layout/activity_group.xml +++ b/app/src/main/res/layout/activity_group.xml @@ -142,13 +142,6 @@ android:background="?android:attr/windowBackground" /> - - + android:background="?attr/colorAccent" /> + + \ No newline at end of file diff --git a/app/src/main/res/menu/entry_edit.xml b/app/src/main/res/menu/entry_edit.xml index 84fd3c5f9..4935468c9 100644 --- a/app/src/main/res/menu/entry_edit.xml +++ b/app/src/main/res/menu/entry_edit.xml @@ -21,11 +21,6 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" tools:ignore="AlwaysShowAction"> -