From e836611f3057cf9eae589a34a39fe80d0a9145f3 Mon Sep 17 00:00:00 2001 From: Evan Severson Date: Tue, 31 Jan 2023 17:14:34 -0800 Subject: [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 Merged-In: I30579090c803b231fd750abbc4ad645805f7ece2 Change-Id: I30579090c803b231fd750abbc4ad645805f7ece2 --- .../server/pm/permission/OneTimePermissionUserManager.java | 11 +++++------ 1 file 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) { -- cgit v1.2.3-59-g8ed1b