Skip to content

Commit b75a5c6

Browse files
Evan SeversonAndroid Build Coastguard Worker
authored andcommitted
[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
1 parent 3b3110b commit b75a5c6

1 file changed

Lines changed: 5 additions & 6 deletions

File tree

services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import android.annotation.NonNull;
2020
import android.app.ActivityManager;
21+
import android.app.ActivityManagerInternal;
2122
import android.app.AlarmManager;
2223
import android.app.IActivityManager;
2324
import android.app.IUidObserver;
@@ -34,6 +35,7 @@
3435
import android.util.SparseArray;
3536

3637
import com.android.internal.annotations.GuardedBy;
38+
import com.android.server.LocalServices;
3739

3840
/**
3941
* Class that handles one-time permissions for a user
@@ -49,6 +51,7 @@ public class OneTimePermissionUserManager {
4951

5052
private final @NonNull Context mContext;
5153
private final @NonNull IActivityManager mIActivityManager;
54+
private final @NonNull ActivityManagerInternal mActivityManagerInternal;
5255
private final @NonNull AlarmManager mAlarmManager;
5356
private final @NonNull PermissionControllerManager mPermissionControllerManager;
5457

@@ -79,6 +82,7 @@ public void onReceive(Context context, Intent intent) {
7982
OneTimePermissionUserManager(@NonNull Context context) {
8083
mContext = context;
8184
mIActivityManager = ActivityManager.getService();
85+
mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class);
8286
mAlarmManager = context.getSystemService(AlarmManager.class);
8387
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
8488
mHandler = context.getMainThreadHandler();
@@ -241,12 +245,7 @@ public void updateSessionParameters(long timeoutMillis, long revokeAfterKilledDe
241245
}
242246

243247
private int getCurrentState() {
244-
try {
245-
return getStateFromProcState(mIActivityManager.getUidProcessState(mUid, null));
246-
} catch (RemoteException e) {
247-
Log.e(LOG_TAG, "Couldn't check uid proc state", e);
248-
}
249-
return STATE_GONE;
248+
return getStateFromProcState(mActivityManagerInternal.getUidProcessState(mUid));
250249
}
251250

252251
private int getStateFromProcState(int procState) {

0 commit comments

Comments
 (0)