From 6cd3b4dd951a42e90798b59996ce701dd34295e7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 13 Jun 2019 10:33:04 +0200 Subject: [PATCH] Import https://github.com/vector-im/riot-android/pull/3111/files in RiotX --- .../riotredesign/core/epoxy/LoadingItem.kt | 16 ++++++- .../settings/KeysBackupManageActivity.kt | 10 +++++ .../settings/KeysBackupSettingsFragment.kt | 2 +- ...eysBackupSettingsRecyclerViewController.kt | 1 + .../settings/KeysBackupSettingsViewModel.kt | 10 ++++- .../VectorSettingsPreferencesFragment.kt | 42 +++++++++++-------- vector/src/main/res/layout/item_loading.xml | 27 ++++++++++-- vector/src/main/res/values/strings.xml | 1 + 8 files changed, 83 insertions(+), 26 deletions(-) diff --git a/vector/src/main/java/im/vector/riotredesign/core/epoxy/LoadingItem.kt b/vector/src/main/java/im/vector/riotredesign/core/epoxy/LoadingItem.kt index 212196ad..2ee016ef 100644 --- a/vector/src/main/java/im/vector/riotredesign/core/epoxy/LoadingItem.kt +++ b/vector/src/main/java/im/vector/riotredesign/core/epoxy/LoadingItem.kt @@ -16,11 +16,25 @@ package im.vector.riotredesign.core.epoxy +import android.widget.TextView +import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyModelClass import im.vector.riotredesign.R +import im.vector.riotredesign.core.extensions.setTextOrHide @EpoxyModelClass(layout = R.layout.item_loading) abstract class LoadingItem : VectorEpoxyModel() { - class Holder : VectorEpoxyHolder() + @EpoxyAttribute var loadingText: String? = null + + override fun bind(holder: Holder) { + super.bind(holder) + + holder.textView.setTextOrHide(loadingText) + } + + + class Holder : VectorEpoxyHolder() { + val textView by bind(R.id.loadingText) + } } \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupManageActivity.kt b/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupManageActivity.kt index 23e041ad..98b6716b 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupManageActivity.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupManageActivity.kt @@ -77,4 +77,14 @@ class KeysBackupManageActivity : SimpleFragmentActivity() { } } } + + override fun onBackPressed() { + // When there is no network we could get stuck in infinite loading + // because backup state will stay in CheckingBackUpOnHomeserver + if (viewModel.canExit()) { + finish() + return + } + super.onBackPressed() + } } \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsFragment.kt index e6c6528a..983a3e2a 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsFragment.kt @@ -80,7 +80,7 @@ class KeysBackupSettingsFragment : VectorBaseFragment(), .setMessage(R.string.keys_backup_settings_delete_confirm_message) .setCancelable(false) .setPositiveButton(R.string.keys_backup_settings_delete_confirm_title) { _, _ -> - viewModel.deleteCurrentBackup(it) + viewModel.deleteCurrentBackup() } .setNegativeButton(R.string.cancel, null) .setCancelable(true) diff --git a/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsRecyclerViewController.kt b/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsRecyclerViewController.kt index dfc6b233..80e716cc 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsRecyclerViewController.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsRecyclerViewController.kt @@ -59,6 +59,7 @@ class KeysBackupSettingsRecyclerViewController(val stringProvider: StringProvide KeysBackupState.CheckingBackUpOnHomeserver -> { loadingItem { id("summary") + loadingText(stringProvider.getString(R.string.keys_backup_settings_checking_backup_state)) } } KeysBackupState.Disabled -> { diff --git a/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsViewModel.kt b/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsViewModel.kt index 16b62fb0..2376cb26 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsViewModel.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/crypto/keysbackup/settings/KeysBackupSettingsViewModel.kt @@ -15,7 +15,6 @@ */ package im.vector.riotredesign.features.crypto.keysbackup.settings -import android.content.Context import com.airbnb.mvrx.* import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.session.Session @@ -105,7 +104,7 @@ class KeysBackupSettingsViewModel(initialState: KeysBackupSettingViewState, getKeysBackupTrust() } - fun deleteCurrentBackup(context: Context) { + fun deleteCurrentBackup() { val keysBackupService = keysBackupService if (keysBackupService.currentBackupVersion != null) { @@ -137,4 +136,11 @@ class KeysBackupSettingsViewModel(initialState: KeysBackupSettingViewState, }) } } + + fun canExit(): Boolean { + val currentBackupState = keysBackupService.state + + return currentBackupState == KeysBackupState.Unknown + || currentBackupState == KeysBackupState.CheckingBackUpOnHomeserver + } } diff --git a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt index fc325f6c..a55b0f6e 100755 --- a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt @@ -568,6 +568,9 @@ class VectorSettingsPreferencesFragment : VectorPreferenceFragment(), SharedPref // Device list refreshDevicesList() + //Refresh Key Management section + refreshKeysManagementSection() + // Advanced settings // user account @@ -2192,24 +2195,6 @@ class VectorSettingsPreferencesFragment : VectorPreferenceFragment(), SharedPref activity?.let { copyToClipboard(it, deviceId!!) } true } - - - manageBackupPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { - context?.let { - startActivity(KeysBackupManageActivity.intent(it)) - } - false - } - - exportPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { - exportKeys() - true - } - - importPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { - importKeys() - true - } } // crypto section: device key (fingerprint) @@ -2239,6 +2224,27 @@ class VectorSettingsPreferencesFragment : VectorPreferenceFragment(), SharedPref } } + private fun refreshKeysManagementSection() { + //If crypto is not enabled parent section will be removed + //TODO notice that this will not work when no network + manageBackupPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { + context?.let { + startActivity(KeysBackupManageActivity.intent(it)) + } + false + } + + exportPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { + exportKeys() + true + } + + importPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { + importKeys() + true + } + } + //============================================================================================================== // devices list //============================================================================================================== diff --git a/vector/src/main/res/layout/item_loading.xml b/vector/src/main/res/layout/item_loading.xml index 4e723f8b..9a2b62f9 100644 --- a/vector/src/main/res/layout/item_loading.xml +++ b/vector/src/main/res/layout/item_loading.xml @@ -1,7 +1,26 @@ - \ No newline at end of file + android:orientation="vertical"> + + + + + + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index cfd5ab3c..b1693255 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1379,6 +1379,7 @@ Why choose Riot.im? To use Key Backup on this device, restore with your passphrase or recovery key now. Deleting backup… Failed to delete backup (%s) + Checking backup state Delete Backup Delete your backed up encryption keys from the server? You will no longer be able to use your recovery key to read encrypted message history.