summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Severson <evanseverson@google.com>2023-01-31 17:14:34 -0800
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-27 17:12:53 +0000
commit9fcbb3f8e0e7a4c36448347d873ab203d69cc8ad (patch)
tree1c212a8a56a6a186f027f7f1c9df052a99dd4091
parent98e98beaf8e0ef88f73b24e4a10fa2b9717d1a39 (diff)
downloadbase-9fcbb3f8e0e7a4c36448347d873ab203d69cc8ad.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.java11
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) {