Fix number of entries and refactor GroupFragment

This commit is contained in:
J-Jamet
2022-01-07 18:59:23 +01:00
parent b83696bc60
commit 553416c927
2 changed files with 58 additions and 31 deletions

View File

@@ -44,7 +44,7 @@ import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.kunzisoft.keepass.R import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.dialogs.* import com.kunzisoft.keepass.activities.dialogs.*
import com.kunzisoft.keepass.activities.dialogs.NodesFragment import com.kunzisoft.keepass.activities.fragments.GroupFragment
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
import com.kunzisoft.keepass.activities.helpers.SpecialMode import com.kunzisoft.keepass.activities.helpers.SpecialMode
import com.kunzisoft.keepass.activities.legacy.DatabaseLockActivity import com.kunzisoft.keepass.activities.legacy.DatabaseLockActivity
@@ -77,9 +77,10 @@ import org.joda.time.DateTime
class GroupActivity : DatabaseLockActivity(), class GroupActivity : DatabaseLockActivity(),
DatePickerDialog.OnDateSetListener, DatePickerDialog.OnDateSetListener,
TimePickerDialog.OnTimeSetListener, TimePickerDialog.OnTimeSetListener,
NodesFragment.NodeClickListener, GroupFragment.NodeClickListener,
NodesFragment.NodesActionMenuListener, GroupFragment.NodesActionMenuListener,
NodesFragment.OnScrollListener, GroupFragment.OnScrollListener,
GroupFragment.GroupRefreshedListener,
SortDialogFragment.SortSelectionListener { SortDialogFragment.SortSelectionListener {
// Views // Views
@@ -104,7 +105,7 @@ class GroupActivity : DatabaseLockActivity(),
private var mBreadcrumbAdapter: BreadcrumbAdapter? = null private var mBreadcrumbAdapter: BreadcrumbAdapter? = null
private var mNodesFragment: NodesFragment? = null private var mGroupFragment: GroupFragment? = null
private var mRecyclingBinEnabled = false private var mRecyclingBinEnabled = false
private var mRecyclingBinIsCurrentGroup = false private var mRecyclingBinIsCurrentGroup = false
private var mRequestStartupSearch = true private var mRequestStartupSearch = true
@@ -173,7 +174,7 @@ class GroupActivity : DatabaseLockActivity(),
finishNodeAction() finishNodeAction()
launchDialogToShowGroupInfo(currentGroup) launchDialogToShowGroupInfo(currentGroup)
} else { } else {
if (mNodesFragment?.nodeActionSelectionMode == true) { if (mGroupFragment?.nodeActionSelectionMode == true) {
finishNodeAction() finishNodeAction()
} }
mDatabase?.let { database -> mDatabase?.let { database ->
@@ -226,15 +227,15 @@ class GroupActivity : DatabaseLockActivity(),
} }
// Initialize the fragment with the list // Initialize the fragment with the list
mNodesFragment = mGroupFragment =
supportFragmentManager.findFragmentByTag(GROUP_FRAGMENT_TAG) as NodesFragment? supportFragmentManager.findFragmentByTag(GROUP_FRAGMENT_TAG) as GroupFragment?
if (mNodesFragment == null) if (mGroupFragment == null)
mNodesFragment = NodesFragment() mGroupFragment = GroupFragment()
// Attach fragment to content view // Attach fragment to content view
supportFragmentManager.beginTransaction().replace( supportFragmentManager.beginTransaction().replace(
R.id.nodes_list_fragment_container, R.id.nodes_list_fragment_container,
mNodesFragment!!, mGroupFragment!!,
GROUP_FRAGMENT_TAG GROUP_FRAGMENT_TAG
).commit() ).commit()
@@ -261,7 +262,7 @@ class GroupActivity : DatabaseLockActivity(),
EntrySelectionHelper.doSpecialAction(intent, EntrySelectionHelper.doSpecialAction(intent,
{ {
mCurrentGroup?.nodeId?.let { currentParentGroupId -> mCurrentGroup?.nodeId?.let { currentParentGroupId ->
mNodesFragment?.mEntryActivityResultLauncher?.let { resultLauncher -> mGroupFragment?.mEntryActivityResultLauncher?.let { resultLauncher ->
EntryEditActivity.launchToCreate( EntryEditActivity.launchToCreate(
this@GroupActivity, this@GroupActivity,
database, database,
@@ -552,6 +553,12 @@ class GroupActivity : DatabaseLockActivity(),
super.onSaveInstanceState(outState) super.onSaveInstanceState(outState)
} }
override fun onGroupRefreshed() {
mCurrentGroup?.let { currentGroup ->
assignGroupViewElements(currentGroup)
}
}
private fun assignGroupViewElements(group: Group?) { private fun assignGroupViewElements(group: Group?) {
// Assign title // Assign title
if (group?.isVirtual == true) { if (group?.isVirtual == true) {
@@ -635,7 +642,7 @@ class GroupActivity : DatabaseLockActivity(),
val entryVersioned = node as Entry val entryVersioned = node as Entry
EntrySelectionHelper.doSpecialAction(intent, EntrySelectionHelper.doSpecialAction(intent,
{ {
mNodesFragment?.mEntryActivityResultLauncher?.let { resultLauncher -> mGroupFragment?.mEntryActivityResultLauncher?.let { resultLauncher ->
EntryActivity.launch( EntryActivity.launch(
this@GroupActivity, this@GroupActivity,
database, database,
@@ -796,7 +803,7 @@ class GroupActivity : DatabaseLockActivity(),
): Boolean { ): Boolean {
if (nodes.isNotEmpty()) { if (nodes.isNotEmpty()) {
if (actionNodeMode == null || toolbarAction?.getSupportActionModeCallback() == null) { if (actionNodeMode == null || toolbarAction?.getSupportActionModeCallback() == null) {
mNodesFragment?.actionNodesCallback( mGroupFragment?.actionNodesCallback(
database, database,
nodes, nodes,
this this
@@ -835,7 +842,7 @@ class GroupActivity : DatabaseLockActivity(),
launchDialogForGroupUpdate(node as Group) launchDialogForGroupUpdate(node as Group)
} }
Type.ENTRY -> { Type.ENTRY -> {
mNodesFragment?.mEntryActivityResultLauncher?.let { resultLauncher -> mGroupFragment?.mEntryActivityResultLauncher?.let { resultLauncher ->
EntryEditActivity.launchToUpdate( EntryEditActivity.launchToUpdate(
this@GroupActivity, this@GroupActivity,
database, database,
@@ -890,17 +897,17 @@ class GroupActivity : DatabaseLockActivity(),
override fun onPasteMenuClick( override fun onPasteMenuClick(
database: Database, database: Database,
pasteMode: NodesFragment.PasteMode?, pasteMode: GroupFragment.PasteMode?,
nodes: List<Node> nodes: List<Node>
): Boolean { ): Boolean {
when (pasteMode) { when (pasteMode) {
NodesFragment.PasteMode.PASTE_FROM_COPY -> { GroupFragment.PasteMode.PASTE_FROM_COPY -> {
// Copy // Copy
mCurrentGroup?.let { newParent -> mCurrentGroup?.let { newParent ->
copyNodes(nodes, newParent) copyNodes(nodes, newParent)
} }
} }
NodesFragment.PasteMode.PASTE_FROM_MOVE -> { GroupFragment.PasteMode.PASTE_FROM_MOVE -> {
// Move // Move
mCurrentGroup?.let { newParent -> mCurrentGroup?.let { newParent ->
moveNodes(nodes, newParent) moveNodes(nodes, newParent)
@@ -1101,7 +1108,7 @@ class GroupActivity : DatabaseLockActivity(),
sortNodeEnum: SortNodeEnum, sortNodeEnum: SortNodeEnum,
sortNodeParameters: SortNodeEnum.SortNodeParameters sortNodeParameters: SortNodeEnum.SortNodeParameters
) { ) {
mNodesFragment?.onSortSelected(sortNodeEnum, sortNodeParameters) mGroupFragment?.onSortSelected(sortNodeEnum, sortNodeParameters)
} }
override fun startActivity(intent: Intent) { override fun startActivity(intent: Intent) {
@@ -1140,7 +1147,7 @@ class GroupActivity : DatabaseLockActivity(),
} }
override fun onBackPressed() { override fun onBackPressed() {
if (mNodesFragment?.nodeActionSelectionMode == true) { if (mGroupFragment?.nodeActionSelectionMode == true) {
finishNodeAction() finishNodeAction()
} else { } else {
// Normal way when we are not in root // Normal way when we are not in root

View File

@@ -17,7 +17,7 @@
* along with KeePassDX. If not, see <http://www.gnu.org/licenses/>. * along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.kunzisoft.keepass.activities.dialogs package com.kunzisoft.keepass.activities.fragments
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
@@ -30,7 +30,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE
import com.kunzisoft.keepass.R import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.EntryEditActivity import com.kunzisoft.keepass.activities.EntryEditActivity
import com.kunzisoft.keepass.activities.fragments.DatabaseFragment import com.kunzisoft.keepass.activities.dialogs.SortDialogFragment
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
import com.kunzisoft.keepass.activities.helpers.SpecialMode import com.kunzisoft.keepass.activities.helpers.SpecialMode
import com.kunzisoft.keepass.adapters.NodesAdapter import com.kunzisoft.keepass.adapters.NodesAdapter
@@ -44,10 +44,11 @@ import com.kunzisoft.keepass.tasks.ActionRunnable
import com.kunzisoft.keepass.viewmodels.GroupViewModel import com.kunzisoft.keepass.viewmodels.GroupViewModel
import java.util.* import java.util.*
class NodesFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListener { class GroupFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListener {
private var nodeClickListener: NodeClickListener? = null private var nodeClickListener: NodeClickListener? = null
private var onScrollListener: OnScrollListener? = null private var onScrollListener: OnScrollListener? = null
private var groupRefreshed: GroupRefreshedListener? = null
private var mNodesRecyclerView: RecyclerView? = null private var mNodesRecyclerView: RecyclerView? = null
private var mLayoutManager: LinearLayoutManager? = null private var mLayoutManager: LinearLayoutManager? = null
@@ -100,6 +101,8 @@ class NodesFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
override fun onAttach(context: Context) { override fun onAttach(context: Context) {
super.onAttach(context) super.onAttach(context)
// TODO Change to ViewModel
try { try {
nodeClickListener = context as NodeClickListener nodeClickListener = context as NodeClickListener
} catch (e: ClassCastException) { } catch (e: ClassCastException) {
@@ -117,11 +120,20 @@ class NodesFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
TAG, context.toString() TAG, context.toString()
+ " must implement " + RecyclerView.OnScrollListener::class.java.name) + " must implement " + RecyclerView.OnScrollListener::class.java.name)
} }
try {
groupRefreshed = context as GroupRefreshedListener
} catch (e: ClassCastException) {
// The activity doesn't implement the interface, throw exception
throw ClassCastException(context.toString()
+ " must implement " + GroupRefreshedListener::class.java.name)
}
} }
override fun onDetach() { override fun onDetach() {
nodeClickListener = null nodeClickListener = null
onScrollListener = null onScrollListener = null
groupRefreshed = null
super.onDetach() super.onDetach()
} }
@@ -259,6 +271,8 @@ class NodesFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
} else { } else {
notFoundView?.visibility = View.GONE notFoundView?.visibility = View.GONE
} }
groupRefreshed?.onGroupRefreshed()
} }
override fun onSortSelected(sortNodeEnum: SortNodeEnum, override fun onSortSelected(sortNodeEnum: SortNodeEnum,
@@ -294,12 +308,14 @@ class NodesFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
PreferencesUtil.getListSort(context), PreferencesUtil.getListSort(context),
PreferencesUtil.getAscendingSort(context), PreferencesUtil.getAscendingSort(context),
PreferencesUtil.getGroupsBeforeSort(context), PreferencesUtil.getGroupsBeforeSort(context),
PreferencesUtil.getRecycleBinBottomSort(context)) PreferencesUtil.getRecycleBinBottomSort(context)
)
} else { } else {
SortDialogFragment.getInstance( SortDialogFragment.getInstance(
PreferencesUtil.getListSort(context), PreferencesUtil.getListSort(context),
PreferencesUtil.getAscendingSort(context), PreferencesUtil.getAscendingSort(context),
PreferencesUtil.getGroupsBeforeSort(context)) PreferencesUtil.getGroupsBeforeSort(context)
)
} }
sortDialogFragment.show(childFragmentManager, "sortDialog") sortDialogFragment.show(childFragmentManager, "sortDialog")
@@ -446,7 +462,11 @@ class NodesFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
fun onScrolled(dy: Int) fun onScrolled(dy: Int)
} }
interface GroupRefreshedListener {
fun onGroupRefreshed()
}
companion object { companion object {
private val TAG = NodesFragment::class.java.name private val TAG = GroupFragment::class.java.name
} }
} }