From 7993142cc5f888705120a3f469007d1ef52fbeb2 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Wed, 26 Oct 2022 13:14:54 +0200 Subject: [PATCH] Show a warning when a separate export/backup password is configured --- .../BackupsPreferencesFragment.java | 3 ++ .../ImportExportPreferencesFragment.java | 6 ++++ .../SecurityPreferencesFragment.java | 13 ++----- .../aegis/vault/VaultRepository.java | 8 +++++ app/src/main/res/drawable/ic_android.xml | 8 +++++ app/src/main/res/layout/dialog_export.xml | 11 +++++- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences_backups.xml | 35 +++++++++---------- 8 files changed, 56 insertions(+), 30 deletions(-) create mode 100644 app/src/main/res/drawable/ic_android.xml diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/BackupsPreferencesFragment.java b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/BackupsPreferencesFragment.java index 7a772fef..119fbc23 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/BackupsPreferencesFragment.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/BackupsPreferencesFragment.java @@ -26,6 +26,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment { private Preference _backupsLocationPreference; private Preference _backupsTriggerPreference; private Preference _backupsVersionsPreference; + private Preference _backupsPasswordWarningPreference; private Preference _builtinBackupStatusPreference; private Preference _androidBackupStatusPreference; @@ -41,6 +42,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment { super.onCreatePreferences(savedInstanceState, rootKey); addPreferencesFromResource(R.xml.preferences_backups); + _backupsPasswordWarningPreference = requirePreference("pref_backups_warning_password"); _builtinBackupStatusPreference = requirePreference("pref_status_backup_builtin"); _builtinBackupStatusPreference.setOnPreferenceClickListener(preference -> { Preferences.BackupResult backupRes = _prefs.getBuiltInBackupResult(); @@ -138,6 +140,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment { boolean encrypted = _vaultManager.getVault().isEncryptionEnabled(); boolean androidBackupEnabled = _prefs.isAndroidBackupsEnabled() && encrypted; boolean backupEnabled = _prefs.isBackupsEnabled() && encrypted; + _backupsPasswordWarningPreference.setVisible(_vaultManager.getVault().isBackupPasswordSet()); _androidBackupsPreference.setChecked(androidBackupEnabled); _androidBackupsPreference.setEnabled(encrypted); _backupsPreference.setChecked(backupEnabled); diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/ImportExportPreferencesFragment.java b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/ImportExportPreferencesFragment.java index dfd0c397..103b6061 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/ImportExportPreferencesFragment.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/ImportExportPreferencesFragment.java @@ -9,6 +9,7 @@ import android.view.View; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.CheckBox; +import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; @@ -147,10 +148,13 @@ public class ImportExportPreferencesFragment extends PreferencesFragment { } private void startExport() { + boolean isBackupPasswordSet = _vaultManager.getVault().isBackupPasswordSet(); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_export, null); TextView warningText = view.findViewById(R.id.text_export_warning); CheckBox checkBoxEncrypt = view.findViewById(R.id.checkbox_export_encrypt); CheckBox checkBoxAccept = view.findViewById(R.id.checkbox_accept); + TextView passwordInfoText = view.findViewById(R.id.text_separate_password); + passwordInfoText.setVisibility(checkBoxEncrypt.isChecked() && isBackupPasswordSet ? View.VISIBLE : View.GONE); AutoCompleteTextView dropdown = view.findViewById(R.id.dropdown_export_format); DropdownHelper.fillDropdown(requireContext(), dropdown, R.array.export_formats); dropdown.setText(getString(R.string.export_format_aegis), false); @@ -158,6 +162,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment { checkBoxEncrypt.setChecked(position == 0); checkBoxEncrypt.setEnabled(position == 0); warningText.setVisibility(checkBoxEncrypt.isChecked() ? View.GONE : View.VISIBLE); + passwordInfoText.setVisibility(checkBoxEncrypt.isChecked() && isBackupPasswordSet ? View.VISIBLE : View.GONE); }); AlertDialog dialog = new AlertDialog.Builder(requireContext()) @@ -174,6 +179,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment { checkBoxEncrypt.setOnCheckedChangeListener((buttonView, isChecked) -> { warningText.setVisibility(isChecked ? View.GONE : View.VISIBLE); + passwordInfoText.setVisibility(isChecked && isBackupPasswordSet ? View.VISIBLE : View.GONE); checkBoxAccept.setVisibility(isChecked ? View.GONE : View.VISIBLE); checkBoxAccept.setChecked(false); btnPos.setEnabled(isChecked); diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/SecurityPreferencesFragment.java b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/SecurityPreferencesFragment.java index 4abe06df..5c7f2e46 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/SecurityPreferencesFragment.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/SecurityPreferencesFragment.java @@ -238,7 +238,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment { _backupPasswordPreference = requirePreference("pref_backup_password"); _backupPasswordPreference.setOnPreferenceChangeListener((preference, newValue) -> { - if (!isBackupPasswordSet()) { + if (!_vaultManager.getVault().isBackupPasswordSet()) { Dialogs.showSetPasswordDialog(requireActivity(), new SetBackupPasswordListener()); } else { VaultFileCredentials creds = _vaultManager.getVault().getCredentials(); @@ -264,7 +264,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment { private void updateEncryptionPreferences() { boolean encrypted = _vaultManager.getVault().isEncryptionEnabled(); - boolean backupPasswordSet = isBackupPasswordSet(); + boolean backupPasswordSet = _vaultManager.getVault().isBackupPasswordSet(); _encryptionPreference.setChecked(encrypted, true); _setPasswordPreference.setVisible(encrypted); _biometricsPreference.setVisible(encrypted); @@ -294,15 +294,6 @@ public class SecurityPreferencesFragment extends PreferencesFragment { } } - private boolean isBackupPasswordSet() { - VaultRepository vault = _vaultManager.getVault(); - if (!vault.isEncryptionEnabled()) { - return false; - } - - return vault.getCredentials().getSlots().findBackupPasswordSlots().size() > 0; - } - private String getPasswordReminderSummary() { PassReminderFreq freq = _prefs.getPasswordReminderFrequency(); if (freq == PassReminderFreq.NEVER) { diff --git a/app/src/main/java/com/beemdevelopment/aegis/vault/VaultRepository.java b/app/src/main/java/com/beemdevelopment/aegis/vault/VaultRepository.java index ab5ec219..bd80b490 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/vault/VaultRepository.java +++ b/app/src/main/java/com/beemdevelopment/aegis/vault/VaultRepository.java @@ -230,4 +230,12 @@ public class VaultRepository { public boolean isEncryptionEnabled() { return _creds != null; } + + public boolean isBackupPasswordSet() { + if (!isEncryptionEnabled()) { + return false; + } + + return getCredentials().getSlots().findBackupPasswordSlots().size() > 0; + } } diff --git a/app/src/main/res/drawable/ic_android.xml b/app/src/main/res/drawable/ic_android.xml new file mode 100644 index 00000000..af157bd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_android.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_export.xml b/app/src/main/res/layout/dialog_export.xml index b59b30f3..bad96118 100644 --- a/app/src/main/res/layout/dialog_export.xml +++ b/app/src/main/res/layout/dialog_export.xml @@ -17,7 +17,7 @@ android:layout_height="wrap_content" android:layout_marginStart="25dp" android:layout_marginEnd="25dp" - android:layout_marginTop="5dp" + android:layout_marginTop="15dp" android:hint="@string/export_format_hint" style="?attr/dropdownStyle"> + This action will export the vault out of Aegis\' internal storage. Select the format you\'d like your export to be in: You are about to export an unencrypted copy of your Aegis vault. This is not recommended. I understand the risk + Exports are encrypted using a separate password configured in Security settings. Aegis (.JSON) Text file (.TXT) Export format @@ -210,6 +211,7 @@ Most recent backup successful: %s Most recent backup failed: %s No backups have been made yet + Backups are encrypted using a separate password configured in Security settings DocumentsUI appears to be missing from your device. This is an important system component necessary for the selection and creation of documents. If you used a tool to "debloat" your device, you may have accidentally deleted it and will have to reinstall it. An error occurred while trying to import an icon pack The icon pack you\'re trying to import already exists. Do you want to overwrite it? diff --git a/app/src/main/res/xml/preferences_backups.xml b/app/src/main/res/xml/preferences_backups.xml index 651bdaa8..2fc021ab 100644 --- a/app/src/main/res/xml/preferences_backups.xml +++ b/app/src/main/res/xml/preferences_backups.xml @@ -2,53 +2,52 @@ + + android:title="@string/pref_cat_backups_auto"> + app:icon="@drawable/ic_cloud_upload_outline_black_24dp" /> + android:summary="@string/pref_backups_location_summary" /> + android:summary="@string/pref_backups_trigger_summary" /> + android:title="@string/pref_backups_versions_title" /> + android:selectable="false" /> + android:title="@string/pref_cat_backups_android"> + app:icon="@drawable/ic_android" /> + android:selectable="false" /> + android:summary="@string/pref_android_backups_hint" />