[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
This commit is contained in:
@@ -18,6 +18,7 @@ package com.android.server.pm.permission;
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
|
import android.app.ActivityManagerInternal;
|
||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
import android.app.IActivityManager;
|
import android.app.IActivityManager;
|
||||||
import android.app.IUidObserver;
|
import android.app.IUidObserver;
|
||||||
@@ -34,6 +35,7 @@ import android.util.Log;
|
|||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
|
import com.android.server.LocalServices;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class that handles one-time permissions for a user
|
* Class that handles one-time permissions for a user
|
||||||
@@ -49,6 +51,7 @@ public class OneTimePermissionUserManager {
|
|||||||
|
|
||||||
private final @NonNull Context mContext;
|
private final @NonNull Context mContext;
|
||||||
private final @NonNull IActivityManager mIActivityManager;
|
private final @NonNull IActivityManager mIActivityManager;
|
||||||
|
private final @NonNull ActivityManagerInternal mActivityManagerInternal;
|
||||||
private final @NonNull AlarmManager mAlarmManager;
|
private final @NonNull AlarmManager mAlarmManager;
|
||||||
private final @NonNull PermissionControllerManager mPermissionControllerManager;
|
private final @NonNull PermissionControllerManager mPermissionControllerManager;
|
||||||
|
|
||||||
@@ -79,6 +82,7 @@ public class OneTimePermissionUserManager {
|
|||||||
OneTimePermissionUserManager(@NonNull Context context) {
|
OneTimePermissionUserManager(@NonNull Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mIActivityManager = ActivityManager.getService();
|
mIActivityManager = ActivityManager.getService();
|
||||||
|
mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class);
|
||||||
mAlarmManager = context.getSystemService(AlarmManager.class);
|
mAlarmManager = context.getSystemService(AlarmManager.class);
|
||||||
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
|
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
|
||||||
mHandler = context.getMainThreadHandler();
|
mHandler = context.getMainThreadHandler();
|
||||||
@@ -241,12 +245,7 @@ public class OneTimePermissionUserManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int getCurrentState() {
|
private int getCurrentState() {
|
||||||
try {
|
return getStateFromProcState(mActivityManagerInternal.getUidProcessState(mUid));
|
||||||
return getStateFromProcState(mIActivityManager.getUidProcessState(mUid, null));
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(LOG_TAG, "Couldn't check uid proc state", e);
|
|
||||||
}
|
|
||||||
return STATE_GONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getStateFromProcState(int procState) {
|
private int getStateFromProcState(int procState) {
|
||||||
|
|||||||
Reference in New Issue
Block a user