summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Thomas Vannet <tvannet@google.com> 2022-03-21 07:57:30 -0700
committer Thomas Vannet <tvannet@google.com> 2022-03-21 07:57:30 -0700
commitfb818c519df183efecb023a14fc2654da04fad32 (patch)
treec2cce56b3c92fa06d317635cd7634acdc3e8d172
parent017ebacdafa213c5dcce7b0f2650f433c382bbb4 (diff)
Catch exception when stopping OTP session twice
An uncaught IllegalArgumentException thrown in ActivityManager.removeOnUidImportanceListener would result in a one-time permission session for a background group sometimes not getting cleaned up properly, leading to background permissions not geting revoked. Test: run cts -m CtsPermissionTestCases -t android.permission.cts.RevokeSelfPermissionTest Bug: 225386829 Change-Id: Iad7f181866b407d556672457ade1f3312d10a95d
-rw-r--r--services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java18
1 files changed, 15 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
index 60602337ba1a..881f8707fdd8 100644
--- a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
+++ b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
@@ -317,9 +317,21 @@ public class OneTimePermissionUserManager {
synchronized (mInnerLock) {
mIsFinished = true;
cancelAlarmLocked();
- mActivityManager.removeOnUidImportanceListener(mStartTimerListener);
- mActivityManager.removeOnUidImportanceListener(mSessionKillableListener);
- mActivityManager.removeOnUidImportanceListener(mGoneListener);
+ try {
+ mActivityManager.removeOnUidImportanceListener(mStartTimerListener);
+ } catch (IllegalArgumentException e) {
+ Log.e(LOG_TAG, "Could not remove start timer listener", e);
+ }
+ try {
+ mActivityManager.removeOnUidImportanceListener(mSessionKillableListener);
+ } catch (IllegalArgumentException e) {
+ Log.e(LOG_TAG, "Could not remove session killable listener", e);
+ }
+ try {
+ mActivityManager.removeOnUidImportanceListener(mGoneListener);
+ } catch (IllegalArgumentException e) {
+ Log.e(LOG_TAG, "Could not remove gone listener", e);
+ }
}
}