From 9767466064ed0d11374c638e2bdd501cc548c1e8 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Sat, 20 Feb 2021 17:11:20 +0100 Subject: [PATCH] Apply sorting of vaults when sharing with CM and biometric setup too --- .../model/comparator/VaultPositionComparator.kt | 10 ++++++++++ .../ui/adapter/BiometricAuthSettingsAdapter.kt | 7 +++++-- .../ui/adapter/SharedLocationsAdapter.kt | 9 +++++++-- .../presentation/ui/adapter/VaultsAdapter.kt | 17 +++++++++-------- .../ui/fragment/SharedFilesFragment.kt | 8 +++++--- 5 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 presentation/src/main/java/org/cryptomator/presentation/model/comparator/VaultPositionComparator.kt diff --git a/presentation/src/main/java/org/cryptomator/presentation/model/comparator/VaultPositionComparator.kt b/presentation/src/main/java/org/cryptomator/presentation/model/comparator/VaultPositionComparator.kt new file mode 100644 index 00000000..08324c77 --- /dev/null +++ b/presentation/src/main/java/org/cryptomator/presentation/model/comparator/VaultPositionComparator.kt @@ -0,0 +1,10 @@ +package org.cryptomator.presentation.model.comparator + +import org.cryptomator.presentation.model.VaultModel + +class VaultPositionComparator : Comparator { + + override fun compare(v1: VaultModel, v2: VaultModel): Int { + return v1.position - v2.position + } +} diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/BiometricAuthSettingsAdapter.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/BiometricAuthSettingsAdapter.kt index e1e2bfef..b01a9050 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/BiometricAuthSettingsAdapter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/BiometricAuthSettingsAdapter.kt @@ -2,15 +2,18 @@ package org.cryptomator.presentation.ui.adapter import android.view.View import com.google.android.material.switchmaterial.SwitchMaterial -import kotlinx.android.synthetic.main.item_biometric_auth_vault.view.* import org.cryptomator.presentation.R import org.cryptomator.presentation.model.VaultModel +import org.cryptomator.presentation.model.comparator.VaultPositionComparator import org.cryptomator.presentation.ui.adapter.BiometricAuthSettingsAdapter.BiometricAuthSettingsViewHolder import javax.inject.Inject +import kotlinx.android.synthetic.main.item_biometric_auth_vault.view.cloud +import kotlinx.android.synthetic.main.item_biometric_auth_vault.view.toggleBiometricAuth +import kotlinx.android.synthetic.main.item_biometric_auth_vault.view.vaultName class BiometricAuthSettingsAdapter // @Inject -constructor() : RecyclerViewBaseAdapter() { +constructor() : RecyclerViewBaseAdapter(VaultPositionComparator()) { private var onVaultBiometricAuthSettingsChanged: OnVaultBiometricAuthSettingsChanged? = null diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/SharedLocationsAdapter.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/SharedLocationsAdapter.kt index 6ec8b950..28f85a17 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/SharedLocationsAdapter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/adapter/SharedLocationsAdapter.kt @@ -1,14 +1,19 @@ package org.cryptomator.presentation.ui.adapter import android.view.View -import kotlinx.android.synthetic.main.item_shareable_location.view.* import org.cryptomator.presentation.R import org.cryptomator.presentation.model.VaultModel +import org.cryptomator.presentation.model.comparator.VaultPositionComparator import org.cryptomator.presentation.ui.adapter.SharedLocationsAdapter.VaultViewHolder import javax.inject.Inject +import kotlinx.android.synthetic.main.item_shareable_location.view.chooseFolderLocation +import kotlinx.android.synthetic.main.item_shareable_location.view.chosenLocation +import kotlinx.android.synthetic.main.item_shareable_location.view.cloudImage +import kotlinx.android.synthetic.main.item_shareable_location.view.selectedVault +import kotlinx.android.synthetic.main.item_shareable_location.view.vaultName class SharedLocationsAdapter @Inject -constructor() : RecyclerViewBaseAdapter() { +constructor() : RecyclerViewBaseAdapter(VaultPositionComparator()) { private var selectedVault: VaultModel? = null private var selectedLocation: String? = null 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 5d00e96d..946aebfe 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 @@ -1,15 +1,22 @@ package org.cryptomator.presentation.ui.adapter import android.view.View -import kotlinx.android.synthetic.main.item_vault.view.* import org.cryptomator.presentation.R import org.cryptomator.presentation.model.VaultModel +import org.cryptomator.presentation.model.comparator.VaultPositionComparator import org.cryptomator.presentation.ui.adapter.VaultsAdapter.VaultViewHolder import javax.inject.Inject +import kotlinx.android.synthetic.main.item_vault.view.cloudImage +import kotlinx.android.synthetic.main.item_vault.view.settings +import kotlinx.android.synthetic.main.item_vault.view.unlockedImage +import kotlinx.android.synthetic.main.item_vault.view.vaultName +import kotlinx.android.synthetic.main.item_vault.view.vaultPath class VaultsAdapter @Inject -internal constructor() : RecyclerViewBaseAdapter(VaultModelComparator()), VaultsMoveListener.Listener { +internal constructor() : RecyclerViewBaseAdapter(VaultPositionComparator()), VaultsMoveListener.Listener { + interface OnItemInteractionListener { + fun onVaultClicked(vaultModel: VaultModel) fun onVaultSettingsClicked(vaultModel: VaultModel) @@ -76,10 +83,4 @@ internal constructor() : RecyclerViewBaseAdapter { - override fun compare(o1: VaultModel, o2: VaultModel): Int { - return o1.position - o2.position - } - } } diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/fragment/SharedFilesFragment.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/fragment/SharedFilesFragment.kt index 9d6f8e51..4a45076b 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/fragment/SharedFilesFragment.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/fragment/SharedFilesFragment.kt @@ -8,6 +8,7 @@ import org.cryptomator.presentation.R import org.cryptomator.presentation.model.CloudFolderModel import org.cryptomator.presentation.model.SharedFileModel import org.cryptomator.presentation.model.VaultModel +import org.cryptomator.presentation.model.comparator.VaultPositionComparator import org.cryptomator.presentation.presenter.SharedFilesPresenter import org.cryptomator.presentation.ui.adapter.SharedFilesAdapter import org.cryptomator.presentation.ui.adapter.SharedFilesAdapter.Callback @@ -69,9 +70,10 @@ class SharedFilesFragment : BaseFragment() { } fun displayVaults(vaults: List?) { - if (vaults?.isNotEmpty() == true) { - presenter.selectedVault?.let { presenter.selectedVault = vaults[vaults.indexOf(it)] } - val preselectedVault = presenter.selectedVault ?: vaults[0] + val sortedVaults = vaults?.sortedWith(VaultPositionComparator()) + if (sortedVaults?.isNotEmpty() == true) { + presenter.selectedVault?.let { presenter.selectedVault = sortedVaults[sortedVaults.indexOf(it)] } + val preselectedVault = presenter.selectedVault ?: sortedVaults[0] locationsAdapter.setPreselectedVault(preselectedVault) presenter.onVaultSelected(preselectedVault) }