diff --git a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java
index b8125ba7..63a5f129 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java
@@ -308,6 +308,16 @@ public class Preferences {
return _prefs.getString("pref_backups_error", null);
}
+ public void setIsBackupReminderNeeded(boolean needed) {
+ if (isBackupsReminderNeeded() != needed) {
+ _prefs.edit().putBoolean("pref_backups_reminder_needed", needed).apply();
+ }
+ }
+
+ public boolean isBackupsReminderNeeded() {
+ return _prefs.getBoolean("pref_backups_reminder_needed", false);
+ }
+
public boolean isPinKeyboardEnabled() {
return _prefs.getBoolean("pref_pin_keyboard", false);
}
diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java
index 495b1cd3..28c3b4c5 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java
@@ -15,6 +15,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
+import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.view.ActionMode;
@@ -80,7 +81,8 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
private Menu _menu;
private SearchView _searchView;
private EntryListView _entryListView;
- private LinearLayout _btnBackupError;
+ private LinearLayout _btnErrorBar;
+ private TextView _textErrorBar;
private FabScrollHelper _fabScrollHelper;
@@ -132,10 +134,8 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
Dialogs.showSecureDialog(dialog);
});
- _btnBackupError = findViewById(R.id.btn_backup_error);
- _btnBackupError.setOnClickListener(view -> {
- startPreferencesActivity(BackupsPreferencesFragment.class, "pref_backups");
- });
+ _btnErrorBar = findViewById(R.id.btn_error_bar);
+ _textErrorBar = findViewById(R.id.text_error_bar);
_fabScrollHelper = new FabScrollHelper(fab);
_selectedEntries = new ArrayList<>();
@@ -480,7 +480,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
handleSharedImage();
updateLockIcon();
doShortcutActions();
- updateBackupErrorBar();
+ updateErrorBar();
}
@Override
@@ -637,13 +637,27 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
}
}
- private void updateBackupErrorBar() {
- String error = null;
+ private void updateErrorBar() {
+ String backupError = null;
if (_prefs.isBackupsEnabled()) {
- error = _prefs.getBackupsError();
+ backupError = _prefs.getBackupsError();
}
- _btnBackupError.setVisibility(error == null ? View.GONE : View.VISIBLE);
+ if (backupError != null) {
+ _textErrorBar.setText(R.string.backup_error_bar_message);
+ _btnErrorBar.setOnClickListener(view -> {
+ startPreferencesActivity(BackupsPreferencesFragment.class, "pref_backups");
+ });
+ _btnErrorBar.setVisibility(View.VISIBLE);
+ } else if (_prefs.isBackupsReminderNeeded()) {
+ _textErrorBar.setText(R.string.backup_reminder_bar_message);
+ _btnErrorBar.setOnClickListener(view -> {
+ startPreferencesActivity();
+ });
+ _btnErrorBar.setVisibility(View.VISIBLE);
+ } else {
+ _btnErrorBar.setVisibility(View.GONE);
+ }
}
@Override
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 46c60c57..a2128b90 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
@@ -64,13 +64,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
_backupsTriggerPreference = findPreference("pref_backups_trigger");
_backupsTriggerPreference.setOnPreferenceClickListener(preference -> {
if (_prefs.isBackupsEnabled()) {
- try {
- _vaultManager.scheduleBackup();
- Toast.makeText(getActivity(), R.string.backup_successful, Toast.LENGTH_LONG).show();
- } catch (VaultRepositoryException e) {
- e.printStackTrace();
- Dialogs.showErrorDialog(getContext(), R.string.backup_error, e);
- }
+ scheduleBackup();
}
return true;
});
@@ -108,6 +102,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
_prefs.setBackupsError(null);
_backupsLocationPreference.setSummary(String.format("%s: %s", getString(R.string.pref_backups_location_summary), Uri.decode(uri.toString())));
updateBackupPreference();
+ scheduleBackup();
}
private void updateBackupPreference() {
@@ -132,4 +127,14 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
_vaultManager.startActivityForResult(this, intent, CODE_BACKUPS);
}
+
+ private void scheduleBackup() {
+ try {
+ _vaultManager.scheduleBackup();
+ Toast.makeText(getActivity(), R.string.backup_successful, Toast.LENGTH_LONG).show();
+ } catch (VaultRepositoryException e) {
+ e.printStackTrace();
+ Dialogs.showErrorDialog(getContext(), R.string.backup_error, e);
+ }
+ }
}
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 8e488d4e..2a7601e4 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
@@ -214,6 +214,9 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
return;
}
+ // if the user creates an export, hide the backup reminder
+ _prefs.setIsBackupReminderNeeded(false);
+
Uri uri = FileProvider.getUriForFile(getContext(), BuildConfig.FILE_PROVIDER_AUTHORITY, file);
Intent intent = new Intent(Intent.ACTION_SEND)
.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
@@ -343,6 +346,9 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.exporting_vault_error, e);
} else {
+ // if the user creates an export, hide the backup reminder
+ _prefs.setIsBackupReminderNeeded(false);
+
Toast.makeText(getContext(), getString(R.string.exported_vault), Toast.LENGTH_SHORT).show();
}
}
diff --git a/app/src/main/java/com/beemdevelopment/aegis/vault/VaultManager.java b/app/src/main/java/com/beemdevelopment/aegis/vault/VaultManager.java
index 385cea37..ee0a2933 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/vault/VaultManager.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/vault/VaultManager.java
@@ -165,8 +165,10 @@ public class VaultManager {
public void saveAndBackup() throws VaultRepositoryException {
save();
+ boolean backedUp = false;
if (getVault().isEncryptionEnabled()) {
if (_prefs.isBackupsEnabled()) {
+ backedUp = true;
try {
scheduleBackup();
_prefs.setBackupsError(null);
@@ -176,12 +178,19 @@ public class VaultManager {
}
if (_prefs.isAndroidBackupsEnabled()) {
+ backedUp = true;
scheduleAndroidBackup();
}
}
+
+ if (!backedUp) {
+ _prefs.setIsBackupReminderNeeded(true);
+ }
}
public void scheduleBackup() throws VaultRepositoryException {
+ _prefs.setIsBackupReminderNeeded(false);
+
try {
File dir = new File(_context.getCacheDir(), "backup");
if (!dir.exists() && !dir.mkdir()) {
@@ -197,6 +206,7 @@ public class VaultManager {
}
public void scheduleAndroidBackup() {
+ _prefs.setIsBackupReminderNeeded(false);
_androidBackups.dataChanged();
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index f9db7ae3..d1ff2f3e 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -24,7 +24,7 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:orientation="vertical">
+ android:src="@drawable/ic_info_outline_black_24dp" />
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0a5b877f..f29a48a9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -311,6 +311,7 @@
Expected QR code #%d, but scanned #%d instead
Vault backup failed recently
+ Recent vault changes are not backed up
Switch camera