diff --git a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java index 22f54e2c..7c0e4e73 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java +++ b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java @@ -35,6 +35,15 @@ public class Preferences { _prefs.edit().putBoolean("pref_intro", done).apply(); } + public void setTapToRevealTime(int number) { + _prefs.edit().putInt("pref_tap_to_reveal_time", number).apply(); + } + + public int getTapToRevealTime() { + return _prefs.getInt("pref_tap_to_reveal_time", 30); + } + + public int getTimeout() { return _prefs.getInt("pref_timeout", -1); } 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 a90e99d4..2703dbae 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/Dialogs.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/Dialogs.java @@ -11,6 +11,7 @@ import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; +import android.widget.NumberPicker; import android.widget.TextView; import com.beemdevelopment.aegis.crypto.KeyStoreHandle; @@ -152,6 +153,24 @@ public class Dialogs { showSecureDialog(dialog); } + public static void showNumberPickerDialog(Activity activity, NumberInputListener listener) { + View view = activity.getLayoutInflater().inflate(R.layout.dialog_number_picker, null); + NumberPicker numberPicker = view.findViewById(R.id.numberPicker); + numberPicker.setMinValue(3); + numberPicker.setMaxValue(60); + numberPicker.setValue(new Preferences(activity.getApplicationContext()).getTapToRevealTime()); + numberPicker.setWrapSelectorWheel(true); + + AlertDialog dialog = new AlertDialog.Builder(activity) + .setTitle(R.string.set_number) + .setView(view) + .setPositiveButton(android.R.string.ok, (dialog1, which) -> + listener.onNumberInputResult(numberPicker.getValue())) + .create(); + + showSecureDialog(dialog); + } + public static void showFingerprintDialog(Activity activity, Dialogs.SlotListener listener) { View view = activity.getLayoutInflater().inflate(R.layout.dialog_fingerprint, null); TextView textFingerprint = view.findViewById(R.id.text_fingerprint); @@ -196,6 +215,10 @@ public class Dialogs { showSecureDialog(dialog); } + public interface NumberInputListener { + void onNumberInputResult(int number); + } + public interface TextInputListener { void onTextInputResult(String text); } 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 b43dcfc2..62e1038f 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -68,6 +68,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene _entryListView.setListener(this); _entryListView.setShowAccountName(getPreferences().isAccountNameVisible()); _entryListView.setTapToReveal(getPreferences().isTapToRevealEnabled()); + _entryListView.setTapToRevealTime(getPreferences().getTapToRevealTime()); // set up the floating action button _fabMenu = findViewById(R.id.fab); @@ -160,8 +161,10 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene } else if (data.getBooleanExtra("needsRefresh", false)) { boolean showAccountName = getPreferences().isAccountNameVisible(); boolean tapToReveal = getPreferences().isTapToRevealEnabled(); + int tapToRevealTime = getPreferences().getTapToRevealTime(); _entryListView.setShowAccountName(showAccountName); _entryListView.setTapToReveal(tapToReveal); + _entryListView.setTapToRevealTime(tapToRevealTime); _entryListView.refresh(true); } } diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesFragment.java b/app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesFragment.java index fc25e2eb..bdb12afa 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesFragment.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesFragment.java @@ -13,6 +13,7 @@ import android.view.Window; import android.view.WindowManager; import android.widget.Toast; +import com.beemdevelopment.aegis.Preferences; import com.beemdevelopment.aegis.db.DatabaseFileCredentials; import com.beemdevelopment.aegis.helpers.FingerprintHelper; import com.beemdevelopment.aegis.helpers.PermissionHelper; @@ -163,7 +164,22 @@ public class PreferencesFragment extends PreferenceFragmentCompat { } }); - + Preference tapToRevealTimePreference = findPreference("pref_tap_to_reveal_time"); + tapToRevealTimePreference.setSummary(app.getPreferences().getTapToRevealTime() + " seconds"); + tapToRevealTimePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + Dialogs.showNumberPickerDialog(getActivity(), new Dialogs.NumberInputListener() { + @Override + public void onNumberInputResult(int number) { + app.getPreferences().setTapToRevealTime(number); + tapToRevealTimePreference.setSummary(number + " seconds"); + _result.putExtra("needsRefresh", true); + } + }); + return false; + } + }); _encryptionPreference = (SwitchPreference) findPreference("pref_encryption"); _encryptionPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java index 2d3cf65b..df6fff17 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java @@ -25,6 +25,7 @@ public class EntryAdapter extends RecyclerView.Adapter implements I private static Listener _listener; private boolean _showAccountName; private boolean _tapToReveal; + private int _tapToRevealTime; private String _groupFilter; // keeps track of the viewholders that are currently bound @@ -45,6 +46,10 @@ public class EntryAdapter extends RecyclerView.Adapter implements I _tapToReveal = tapToReveal; } + public void setTapToRevealTime(int number) { + _tapToRevealTime = number; + } + public void addEntry(DatabaseEntry entry) { _entries.add(entry); if (!isEntryFiltered(entry)) { @@ -194,6 +199,7 @@ public class EntryAdapter extends RecyclerView.Adapter implements I DatabaseEntry entry = _shownEntries.get(position); boolean showProgress = !isPeriodUniform() && entry.getInfo() instanceof TotpInfo; holder.setData(entry, _showAccountName, showProgress, _tapToReveal); + holder.setTapToRevealTime(_tapToRevealTime); if (showProgress) { holder.startRefreshLoop(); } diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java index ae65a113..5f5afaf4 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java @@ -31,6 +31,7 @@ public class EntryHolder extends RecyclerView.ViewHolder { private boolean _codeIsRevealed; private boolean _tapToReveal; + private int _tapToRevealTime; private PeriodProgressBar _progressBar; @@ -105,6 +106,10 @@ public class EntryHolder extends RecyclerView.ViewHolder { } } + public void setTapToRevealTime(int number) { + _tapToRevealTime = number; + } + public void setOnRefreshClickListener(View.OnClickListener listener) { _buttonRefresh.setOnClickListener(listener); } @@ -123,7 +128,7 @@ public class EntryHolder extends RecyclerView.ViewHolder { public void revealCode() { updateCode(); - _hiddenHandler.postDelayed(this::hideCode, 30000); + _hiddenHandler.postDelayed(this::hideCode, _tapToRevealTime * 1000); _codeIsRevealed = true; } diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java index 94ff77e9..bedc09d8 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java @@ -155,6 +155,10 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { _adapter.setTapToReveal(tapToReveal); } + public void setTapToRevealTime(int number) { + _adapter.setTapToRevealTime(number); + } + public void addEntry(DatabaseEntry entry) { _adapter.addEntry(entry); checkPeriodUniformity(); diff --git a/app/src/main/res/layout/dialog_number_picker.xml b/app/src/main/res/layout/dialog_number_picker.xml new file mode 100644 index 00000000..6c4288ee --- /dev/null +++ b/app/src/main/res/layout/dialog_number_picker.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2252f05a..5078b0f9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -29,6 +29,7 @@ Block screenshots and other attempts to capture the screen within the app Tap to reveal Tokens will be hidden by default. Tap on the tokens to reveal code. + Timeout for tap to reveal Encryption Encrypt the database and unlock it with a password or fingerprint Fingerprint @@ -52,6 +53,7 @@ Unlock the vault Please enter a password Please enter a group name + Please enter a number Please confirm the password A change in your device\'s security settings has been detected. Please go to \"Settings -> Fingerprint\" and re-add your fingerprint. diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 33dc4100..4fcf60fd 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -43,6 +43,13 @@ android:title="@string/pref_tap_to_reveal_title" android:summary="@string/pref_tap_to_reveal_summary" app:iconSpaceReserved="false"/> + + +