From 49a7fda932b8a3e13d750e633273ef83455426ff Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Sun, 3 May 2020 16:57:51 +0200 Subject: [PATCH] Display a warning if automatic time sync is not enabled This'll display a warning to users who don't have automatic time synchronization enabled on their device. Aegis will try to take the user to the right settings menu if they tap "Yes". Users also have the option to silence the warning. [](https://alexbakker.me/u/jf1o8087lr.png) --- .../beemdevelopment/aegis/Preferences.java | 8 ++++++ .../com/beemdevelopment/aegis/ui/Dialogs.java | 27 +++++++++++++++++++ .../aegis/ui/MainActivity.java | 14 ++++++++++ app/src/main/res/layout/dialog_time_sync.xml | 22 +++++++++++++++ app/src/main/res/values/strings.xml | 3 +++ 5 files changed, 74 insertions(+) create mode 100644 app/src/main/res/layout/dialog_time_sync.xml diff --git a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java index de37bb81..73f1e619 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java +++ b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java @@ -159,4 +159,12 @@ public class Preferences { public void setBackupsVersionCount(int versions) { _prefs.edit().putInt("pref_backups_versions", versions).apply(); } + + public boolean isTimeSyncWarningEnabled() { + return _prefs.getBoolean("pref_warn_time_sync", true); + } + + public void setIsTimeSyncWarningEnabled(boolean enabled) { + _prefs.edit().putBoolean("pref_warn_time_sync", enabled).apply(); + } } diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/Dialogs.java b/app/src/main/java/com/beemdevelopment/aegis/ui/Dialogs.java index d9998840..16978e85 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/Dialogs.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/Dialogs.java @@ -6,6 +6,8 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.provider.Settings; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; @@ -293,6 +295,31 @@ public class Dialogs { Dialogs.showSecureDialog(dialog); } + public static void showTimeSyncWarningDialog(Context context, Dialog.OnClickListener listener) { + Preferences prefs = new Preferences(context); + View view = LayoutInflater.from(context).inflate(R.layout.dialog_time_sync, null); + CheckBox checkBox = view.findViewById(R.id.check_warning_disable); + + showSecureDialog(new AlertDialog.Builder(context) + .setTitle(R.string.time_sync_warning_title) + .setView(view) + .setCancelable(false) + .setPositiveButton(R.string.yes, (dialog, which) -> { + if (checkBox.isChecked()) { + prefs.setIsTimeSyncWarningEnabled(false); + } + if (listener != null) { + listener.onClick(dialog, which); + } + }) + .setNegativeButton(R.string.no, (dialog, which) -> { + if (checkBox.isChecked()) { + prefs.setIsTimeSyncWarningEnabled(false); + } + }) + .create()); + } + public interface NumberInputListener { void onNumberInputResult(int number); } 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 2c4f14eb..8b70f4b9 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -10,6 +10,7 @@ import android.graphics.BitmapFactory; import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; +import android.provider.Settings; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -343,11 +344,23 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene private void onDoIntroResult() { _vault = _app.getVaultManager(); loadEntries(); + checkTimeSyncSetting(); + } + + private void checkTimeSyncSetting() { + boolean autoTime = Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME, 1) == 1; + if (!autoTime && getPreferences().isTimeSyncWarningEnabled()) { + Dialogs.showTimeSyncWarningDialog(this, (dialog, which) -> { + Intent intent = new Intent(Settings.ACTION_DATE_SETTINGS); + startActivity(intent); + }); + } } private void onDecryptResult() { _vault = _app.getVaultManager(); loadEntries(); + checkTimeSyncSetting(); } private void startScanActivity() { @@ -450,6 +463,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene _entryListView.refresh(false); } else { loadEntries(); + checkTimeSyncSetting(); } handleDeeplink(); diff --git a/app/src/main/res/layout/dialog_time_sync.xml b/app/src/main/res/layout/dialog_time_sync.xml new file mode 100644 index 00000000..49f42838 --- /dev/null +++ b/app/src/main/res/layout/dialog_time_sync.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7e9207e0..047eaaa4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -231,6 +231,9 @@ Support us by leaving a review in the Google Play Store This device doesn\'t support web view, which is necessary to view the changelog. It is missing a system component. Email + Automatic time synchronization + Aegis relies on the system time to be in sync to generate correct codes. A deviation of only a few seconds could result in incorrect codes. It looks like your device is not configured to automatically synchronize the time. Would you like to do so now? + Stop warning me. I know what I\'m doing. body {