From d64252aaf3d38d799843ba976b3720cc377afc78 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 15 Aug 2018 10:15:31 -0300 Subject: [PATCH] Screen Lock Timeout: Address review comments --- .../android/account/LockManagerImpl.java | 17 ++++++++--- briar-android/src/main/res/values/strings.xml | 28 +++++++++++-------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/account/LockManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/account/LockManagerImpl.java index e0e7ebc15..494c0033b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/account/LockManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/account/LockManagerImpl.java @@ -63,11 +63,15 @@ public class LockManagerImpl implements LockManager, Service, EventListener { private volatile boolean lockableSetting = false; private volatile int timeoutMinutes; private int activitiesRunning = 0; + private boolean alarmSet = false; + // This is to ensure that we don't start unlocked after a timeout and thus + // is set to the elapsed real time when no more activities are running. + // Its value is only relevant as long as no activity is running. private long idleTime; private final MutableLiveData lockable = new MutableLiveData<>(); @Inject - public LockManagerImpl(Application app, SettingsManager settingsManager, + LockManagerImpl(Application app, SettingsManager settingsManager, AndroidNotificationManager notificationManager, @DatabaseExecutor Executor dbExecutor) { this.appContext = app.getApplicationContext(); @@ -108,7 +112,10 @@ public class LockManagerImpl implements LockManager, Service, EventListener { setLocked(true); } activitiesRunning++; - alarmManager.cancel(lockIntent); + if (alarmSet) { + alarmManager.cancel(lockIntent); + alarmSet = false; + } } @UiThread @@ -118,10 +125,11 @@ public class LockManagerImpl implements LockManager, Service, EventListener { if (activitiesRunning == 0) { idleTime = elapsedRealtime(); if (!locked && timeoutEnabled()) { - alarmManager.cancel(lockIntent); + if (alarmSet) alarmManager.cancel(lockIntent); long triggerAt = elapsedRealtime() + MINUTES.toMillis(timeoutMinutes); alarmManager.set(ELAPSED_REALTIME, triggerAt, lockIntent); + alarmSet = true; } } } @@ -146,7 +154,8 @@ public class LockManagerImpl implements LockManager, Service, EventListener { if (locked && !hasScreenLock(appContext)) { lockable.postValue(false); locked = false; - } else if (!locked && activitiesRunning == 0 && timeoutEnabled()) { + } else if (!locked && activitiesRunning == 0 && timeoutEnabled() && + timedOut()) { setLocked(true); } return locked; diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 2ab8490c5..33536126b 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -62,6 +62,7 @@ Private Groups Forums Blogs + Lock App Settings Sign Out @@ -357,18 +358,23 @@ Security - Screen Lock + Screen lock Use the device\'s screen lock to protect Briar while signed in - Set up a screen lock for your device to protect Briar while signed in - Screen Lock Inactivity Timeout - - When not using Briar, automatically lock it %s - after 1 Minute - after 5 Minutes - after 15 Minutes - after 30 Minutes - after 1 Hour - never + To use this feature, set up a screen lock for your device + Screen lock inactivity timeout + + When not using Briar, automatically lock it after %s + + 1 minute + + 5 minutes + + 15 minutes + + 30 minutes + + 1 hour + Never Never lock Briar automatically Change password