diff options
author | Evan Severson <evanseverson@google.com> | 2023-01-31 17:14:34 -0800 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-05-18 17:55:10 +0000 |
commit | b93922788a8a60ca7e5164a05601eb746c2a0994 (patch) | |
tree | 5019b307c6819dc83fab2c5bbbb96c52255b929e | |
parent | b2fa796bcfe4a57b97aa25d9c9233bca431c642e (diff) | |
download | base-b93922788a8a60ca7e5164a05601eb746c2a0994.tar.gz |
[1-time permissions] Use internal api to check proc states
We need to check the proc state and the binder method has a filter that
is affected by a bug that keeps a killed a proces in the "pending top"
list. Using the internal api isn't affected by this filter and also is
more correct for inprocess calls.
Test: Install test app that requests permission and will exit
immediately on granting, observe permission is no longer
indefinitely held.
Bug: 254736794
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e836611f3057cf9eae589a34a39fe80d0a9145f3)
Merged-In: I30579090c803b231fd750abbc4ad645805f7ece2
Change-Id: I30579090c803b231fd750abbc4ad645805f7ece2
-rw-r--r-- | services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java | 11 |
1 files changed, 5 insertions, 6 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 a1c98109052e..d28048ce74c7 100644 --- a/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java +++ b/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java @@ -18,6 +18,7 @@ package com.android.server.pm.permission; import android.annotation.NonNull; import android.app.ActivityManager; +import android.app.ActivityManagerInternal; import android.app.AlarmManager; import android.app.IActivityManager; import android.app.IUidObserver; @@ -34,6 +35,7 @@ import android.util.Log; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; +import com.android.server.LocalServices; /** * Class that handles one-time permissions for a user @@ -49,6 +51,7 @@ public class OneTimePermissionUserManager { private final @NonNull Context mContext; private final @NonNull IActivityManager mIActivityManager; + private final @NonNull ActivityManagerInternal mActivityManagerInternal; private final @NonNull AlarmManager mAlarmManager; private final @NonNull PermissionControllerManager mPermissionControllerManager; @@ -79,6 +82,7 @@ public class OneTimePermissionUserManager { OneTimePermissionUserManager(@NonNull Context context) { mContext = context; mIActivityManager = ActivityManager.getService(); + mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); mAlarmManager = context.getSystemService(AlarmManager.class); mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class); mHandler = context.getMainThreadHandler(); @@ -241,12 +245,7 @@ public class OneTimePermissionUserManager { } private int getCurrentState() { - try { - return getStateFromProcState(mIActivityManager.getUidProcessState(mUid, null)); - } catch (RemoteException e) { - Log.e(LOG_TAG, "Couldn't check uid proc state", e); - } - return STATE_GONE; + return getStateFromProcState(mActivityManagerInternal.getUidProcessState(mUid)); } private int getStateFromProcState(int procState) { |