diff options
author | 2023-04-28 21:41:28 +0000 | |
---|---|---|
committer | 2023-04-28 21:41:28 +0000 | |
commit | 326dd9c1156475192444fd6807155b96e42cc74c (patch) | |
tree | 42cadb792c767b2b6319763a2aadab262b6b80e5 | |
parent | 4bde468c7234abcec70e77655136a4ba5aa87268 (diff) | |
parent | c539a470cbdaf0fbba3045e534e53bb1ecacdb0b (diff) |
Merge "Fix timer bug in TrustManagerService." into udc-dev
-rw-r--r-- | services/core/java/com/android/server/trust/TrustManagerService.java | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java index 8786005d519f..1ab982399b57 100644 --- a/services/core/java/com/android/server/trust/TrustManagerService.java +++ b/services/core/java/com/android/server/trust/TrustManagerService.java @@ -393,6 +393,23 @@ public class TrustManagerService extends SystemService { true /* overrideHardTimeout */); } + private void cancelBothTrustableAlarms(int userId) { + TrustableTimeoutAlarmListener idleTimeout = + mIdleTrustableTimeoutAlarmListenerForUser.get( + userId); + TrustableTimeoutAlarmListener trustableTimeout = + mTrustableTimeoutAlarmListenerForUser.get( + userId); + if (idleTimeout != null && idleTimeout.isQueued()) { + idleTimeout.setQueued(false); + mAlarmManager.cancel(idleTimeout); + } + if (trustableTimeout != null && trustableTimeout.isQueued()) { + trustableTimeout.setQueued(false); + mAlarmManager.cancel(trustableTimeout); + } + } + private void handleScheduleTrustedTimeout(int userId, boolean shouldOverride) { long when = SystemClock.elapsedRealtime() + TRUST_TIMEOUT_IN_MILLIS; TrustedTimeoutAlarmListener alarm = mTrustTimeoutAlarmListenerForUser.get(userId); @@ -657,6 +674,11 @@ public class TrustManagerService extends SystemService { resultCallback.complete(new GrantTrustResult(STATUS_UNLOCKED_BY_GRANT)); } } + + if ((wasTrusted || wasTrustable) && pendingTrustState == TrustState.UNTRUSTED) { + if (DEBUG) Slog.d(TAG, "Trust was revoked, destroy trustable alarms"); + cancelBothTrustableAlarms(userId); + } } private void updateTrustUsuallyManaged(int userId, boolean managed) { @@ -1908,7 +1930,11 @@ public class TrustManagerService extends SystemService { handleScheduleTrustTimeout(shouldOverride, timeoutType); break; case MSG_REFRESH_TRUSTABLE_TIMERS_AFTER_AUTH: - refreshTrustableTimers(msg.arg1); + TrustableTimeoutAlarmListener trustableAlarm = + mTrustableTimeoutAlarmListenerForUser.get(msg.arg1); + if (trustableAlarm != null && trustableAlarm.isQueued()) { + refreshTrustableTimers(msg.arg1); + } break; } } @@ -2160,7 +2186,7 @@ public class TrustManagerService extends SystemService { TrustedTimeoutAlarmListener otherAlarm; boolean otherAlarmPresent; if (ENABLE_ACTIVE_UNLOCK_FLAG) { - cancelBothTrustableAlarms(); + cancelBothTrustableAlarms(mUserId); otherAlarm = mTrustTimeoutAlarmListenerForUser.get(mUserId); otherAlarmPresent = (otherAlarm != null) && otherAlarm.isQueued(); if (otherAlarmPresent) { @@ -2172,23 +2198,6 @@ public class TrustManagerService extends SystemService { } } - private void cancelBothTrustableAlarms() { - TrustableTimeoutAlarmListener idleTimeout = - mIdleTrustableTimeoutAlarmListenerForUser.get( - mUserId); - TrustableTimeoutAlarmListener trustableTimeout = - mTrustableTimeoutAlarmListenerForUser.get( - mUserId); - if (idleTimeout != null && idleTimeout.isQueued()) { - idleTimeout.setQueued(false); - mAlarmManager.cancel(idleTimeout); - } - if (trustableTimeout != null && trustableTimeout.isQueued()) { - trustableTimeout.setQueued(false); - mAlarmManager.cancel(trustableTimeout); - } - } - private void disableRenewableTrustWhileNonrenewableTrustIsPresent() { // if non-renewable trust is running, we need to temporarily prevent // renewable trust from being used |