From dc7cef7fb5882761992859ad7f02fc085dc923db Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Sun, 31 Jan 2021 16:45:02 +0100 Subject: [PATCH] #168 implement UI for sorting vault list. Backend still WIP --- .../presenter/VaultListPresenter.kt | 11 +++++++ .../ui/activity/VaultListActivity.kt | 4 +++ .../ui/activity/view/VaultListView.kt | 2 +- .../presentation/ui/adapter/VaultsAdapter.kt | 10 ++++-- .../ui/adapter/VaultsMoveListener.kt | 32 +++++++++++++++++++ .../ui/fragment/VaultListFragment.kt | 29 ++++++++++++++++- 6 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 presentation/src/main/java/org/cryptomator/presentation/ui/adapter/VaultsMoveListener.kt diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt index 74a3d225..47c67091 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt @@ -603,6 +603,17 @@ class VaultListPresenter @Inject constructor( // view?.showDialog(AppIsObscuredInfoDialog.newInstance()) } + fun onVaultMoved(fromPosition: Int, toPosition: Int) { + // FIXME insert position int into the db and update here + + getVaultListUseCase.run(object : DefaultResultHandler>() { + override fun onSuccess(vaults: List) { + val vaultModels = vaults.mapTo(ArrayList()) { VaultModel(it) } + view?.vaultMoved(fromPosition, toPosition, vaultModels) + } + }) + } + fun onBiometricAuthenticationSucceeded(vaultModel: VaultModel) { if (changedVaultPassword) { changedVaultPassword = false diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/VaultListActivity.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/VaultListActivity.kt index 8d8e4642..e7643f43 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/VaultListActivity.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/VaultListActivity.kt @@ -150,6 +150,10 @@ class VaultListActivity : BaseActivity(), // return biometricAuthentication?.stoppedBiometricAuthDuringCloudAuthentication() == true } + override fun vaultMoved(fromPosition: Int, toPosition: Int, vaultModelCollection: List) { + vaultListFragment().vaultMoved(fromPosition, toPosition, vaultModelCollection) + } + override fun showVaultSettingsDialog(vaultModel: VaultModel) { val vaultSettingDialog = // SettingsVaultBottomSheet.newInstance(vaultModel) diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/view/VaultListView.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/view/VaultListView.kt index 300ea4da..1682c7a2 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/view/VaultListView.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/view/VaultListView.kt @@ -23,5 +23,5 @@ interface VaultListView : View { fun isVaultLocked(vaultModel: VaultModel): Boolean fun cancelBasicAuthIfRunning() fun stoppedBiometricAuthDuringCloudAuthentication(): Boolean - + fun vaultMoved(fromPosition: Int, toPosition: Int, vaultModelCollection: List) } diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/VaultsAdapter.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/VaultsAdapter.kt index 322e4f54..779a1ea4 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/VaultsAdapter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/VaultsAdapter.kt @@ -8,14 +8,16 @@ import org.cryptomator.presentation.ui.adapter.VaultsAdapter.VaultViewHolder import javax.inject.Inject class VaultsAdapter @Inject -internal constructor() : RecyclerViewBaseAdapter() { +internal constructor() : RecyclerViewBaseAdapter(), VaultsMoveListener.Listener { - interface OnItemClickListener { + interface OnItemInteractionListener { fun onVaultClicked(vaultModel: VaultModel) fun onVaultSettingsClicked(vaultModel: VaultModel) fun onVaultLockClicked(vaultModel: VaultModel) + + fun onVaultMoved(fromPosition: Int, toPosition: Int) } override fun getItemLayout(viewType: Int): Int { @@ -65,4 +67,8 @@ internal constructor() : RecyclerViewBaseAdapter?) { + if (fromPosition < toPosition) { + for (i in fromPosition until toPosition) { + Collections.swap(vaultModelCollection, i, i + 1) + } + } else { + for (i in fromPosition downTo toPosition + 1) { + Collections.swap(vaultModelCollection, i, i - 1) + } + } + + vaultsAdapter.notifyItemMoved(fromPosition, toPosition) + } + fun rootView(): View = coordinatorLayout }