diff options
| author | 2022-03-21 07:57:30 -0700 | |
|---|---|---|
| committer | 2022-03-21 07:57:30 -0700 | |
| commit | fb818c519df183efecb023a14fc2654da04fad32 (patch) | |
| tree | c2cce56b3c92fa06d317635cd7634acdc3e8d172 | |
| parent | 017ebacdafa213c5dcce7b0f2650f433c382bbb4 (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.java | 18 |
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); + } } } |