Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa539c85 authored by Evan Severson's avatar Evan Severson Committed by Android Build Coastguard Worker
Browse files

[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
parent c00b7e7d
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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) {