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

Commit 147339d5 authored by Jing Ji's avatar Jing Ji Committed by Android (Google) Code Review
Browse files

Merge "Add support to the ActivityManager#addOnUidImportanceListener() to filter by uid" into main

parents f3b40f71 4b92b253
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -554,6 +554,7 @@ package android.app {
  public class ActivityManager {
    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int);
    method @FlaggedApi("android.app.uid_importance_listener_for_uids") @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void addOnUidImportanceListener(@NonNull android.app.ActivityManager.OnUidImportanceListener, int, @Nullable int[]);
    method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void forceStopPackage(String);
    method @FlaggedApi("android.app.get_binding_uid_importance") @RequiresPermission(android.Manifest.permission.GET_BINDING_UID_IMPORTANCE) public int getBindingUidImportance(int);
    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public static int getCurrentUser();
+36 −5
Original line number Diff line number Diff line
@@ -4402,7 +4402,7 @@ public class ActivityManager {
    }

    /**
     * Start monitoring changes to the importance of uids running in the system.
     * Start monitoring changes to the importance of all uids running in the system.
     * @param listener The listener callback that will receive change reports.
     * @param importanceCutpoint The level of importance in which the caller is interested
     * in differences.  For example, if {@link RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE}
@@ -4422,17 +4422,48 @@ public class ActivityManager {
    @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
    public void addOnUidImportanceListener(OnUidImportanceListener listener,
            @RunningAppProcessInfo.Importance int importanceCutpoint) {
        synchronized (this) {
        addOnUidImportanceListenerInternal(listener, importanceCutpoint, null /* uids */);
    }

    /**
     * Start monitoring changes to the importance of given uids running in the system.
     *
     * @param listener The listener callback that will receive change reports.
     * @param importanceCutpoint The level of importance in which the caller is interested
     * in differences.  For example, if {@link RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE}
     * is used here, you will receive a call each time a uids importance transitions between
     * being <= {@link RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE} and
     * > {@link RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE}.
     * @param uids The UIDs that this listener is interested with. A {@code null} value means
     * all UIDs will be monitored by this listener, this will be equivalent to the
     * {@link #addOnUidImportanceListener(OnUidImportanceListener, int)} in this case.
     *
     * @throws IllegalArgumentException If the listener is already registered.
     * @hide
     */
    @FlaggedApi(Flags.FLAG_UID_IMPORTANCE_LISTENER_FOR_UIDS)
    @SystemApi
    @SuppressLint("SamShouldBeLast")
    @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
    public void addOnUidImportanceListener(@NonNull OnUidImportanceListener listener,
            @RunningAppProcessInfo.Importance int importanceCutpoint, @Nullable int[] uids) {
        addOnUidImportanceListenerInternal(listener, importanceCutpoint, uids);
    }

    @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
    private void addOnUidImportanceListenerInternal(@NonNull OnUidImportanceListener listener,
            @RunningAppProcessInfo.Importance int importanceCutpoint, @Nullable int[] uids) {
        synchronized (mImportanceListeners) {
            if (mImportanceListeners.containsKey(listener)) {
                throw new IllegalArgumentException("Listener already registered: " + listener);
            }
            // TODO: implement the cut point in the system process to avoid IPCs.
            MyUidObserver observer = new MyUidObserver(listener, mContext);
            try {
                getService().registerUidObserver(observer,
                getService().registerUidObserverForUids(observer,
                        UID_OBSERVER_PROCSTATE | UID_OBSERVER_GONE,
                        RunningAppProcessInfo.importanceToProcState(importanceCutpoint),
                        mContext.getOpPackageName());
                        mContext.getOpPackageName(), uids);
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
@@ -4450,7 +4481,7 @@ public class ActivityManager {
    @SystemApi
    @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
    public void removeOnUidImportanceListener(OnUidImportanceListener listener) {
        synchronized (this) {
        synchronized (mImportanceListeners) {
            MyUidObserver observer = mImportanceListeners.remove(listener);
            if (observer == null) {
                throw new IllegalArgumentException("Listener not registered: " + listener);
+1 −0
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ interface IActivityManager {
     * @throws RemoteException
     * @return Returns A binder token identifying the UidObserver registration.
     */
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS)")
    IBinder registerUidObserverForUids(in IUidObserver observer, int which, int cutpoint,
            String callingPackage, in int[] uids);

+8 −1
Original line number Diff line number Diff line
@@ -20,3 +20,10 @@ flag {
    description: "API to track and query restrictions applied to apps"
    bug: "320150834"
}

flag {
     namespace: "backstage_power"
     name: "uid_importance_listener_for_uids"
     description: "API to add OnUidImportanceListener with targetted UIDs"
     bug: "286258140"
}
+1 −6
Original line number Diff line number Diff line
@@ -7823,12 +7823,7 @@ public class ActivityManagerService extends IActivityManager.Stub
    @Override
    public void registerUidObserver(IUidObserver observer, int which, int cutpoint,
            String callingPackage) {
        if (!hasUsageStatsPermission(callingPackage)) {
            enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS,
                    "registerUidObserver");
        }
        mUidObserverController.register(observer, which, cutpoint, callingPackage,
                Binder.getCallingUid(), /*uids*/null);
        registerUidObserverForUids(observer, which, cutpoint, callingPackage, null /* uids */);
    }
    /**