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

Commit 4d4d2513 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Clarify actor requirements in OverlayManager API" into rvc-dev am: 585c4df7 am: e21cfb06

Change-Id: I4fa4f9fc311c4d3eac3eff68aab9aaa8af8bcccb
parents e82319ad e21cfb06
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -27,14 +27,50 @@ import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
import android.content.Context;
import android.os.Build;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;

import com.android.server.SystemConfig;

import java.util.List;

/**
 * Updates OverlayManager state; gets information about installed overlay packages.
 *
 * <p>Users of this API must be actors of any overlays they desire to change the state of.</p>
 *
 * <p>An actor is a package responsible for managing the state of overlays targeting overlayables
 * that specify the actor. For example, an actor may enable or disable an overlay or otherwise
 * change its state.</p>
 *
 * <p>Actors are specified as part of the overlayable definition.
 *
 * <pre>{@code
 * <overlayable name="OverlayableResourcesName" actor="overlay://namespace/actorName">
 * }</pre></p>
 *
 * <p>Actors are defined through {@link SystemConfig}. Only system packages can be used.
 * The namespace "android" is reserved for use by AOSP and any "android" definitions must
 * have an implementation on device that fulfill their intended functionality.</p>
 *
 * <pre>{@code
 * <named-actor
 *     namespace="namespace"
 *     name="actorName"
 *     package="com.example.pkg"
 *     />
 * }</pre></p>
 *
 * <p>An actor can manipulate a particular overlay if any of the following is true:
 * <ul>
 * <li>its UID is {@link Process#ROOT_UID}, {@link Process#SYSTEM_UID}</li>
 * <li>it is the target of the overlay package</li>
 * <li>it has the CHANGE_OVERLAY_PACKAGES permission and the target does not specify an actor</li>
 * <li>it is the actor specified by the overlayable</li>
 * </ul></p>
 *
 * @hide
 */
@SystemApi
@@ -84,6 +120,8 @@ public class OverlayManager {
     * If a set of overlay packages share the same category, single call to this method is
     * equivalent to multiple calls to {@link #setEnabled(String, boolean, UserHandle)}.
     *
     * The caller must pass the actor requirements specified in the class comment.
     *
     * @param packageName the name of the overlay package to enable.
     * @param user The user for which to change the overlay.
     *
@@ -116,6 +154,8 @@ public class OverlayManager {
     * While {@link #setEnabledExclusiveInCategory(String, UserHandle)} doesn't support disabling
     * every overlay in a category, this method allows you to disable everything.
     *
     * The caller must pass the actor requirements specified in the class comment.
     *
     * @param packageName the name of the overlay package to enable.
     * @param enable {@code false} if the overlay should be turned off.
     * @param user The user for which to change the overlay.
+3 −8
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import android.util.Pair;

import com.android.internal.util.ArrayUtils;
import com.android.internal.util.CollectionUtils;
import com.android.server.SystemConfig;

import java.io.IOException;
import java.util.List;
@@ -38,6 +37,8 @@ import java.util.Map;
/**
 * Performs verification that a calling UID can act on a target package's overlayable.
 *
 * Actors requirements are specified in {@link android.content.om.OverlayManager}.
 *
 * @hide
 */
public class OverlayActorEnforcer {
@@ -99,13 +100,7 @@ public class OverlayActorEnforcer {
    }

    /**
     * An actor is valid if any of the following is true:
     * - is {@link Process#ROOT_UID}, {@link Process#SYSTEM_UID}
     * - is the target overlay package
     * - has the CHANGE_OVERLAY_PACKAGES permission and an actor is not defined
     * - is the same the as the package defined in {@link SystemConfig#getNamedActors()} for a given
     *     namespace and actor name
     *
     * See {@link OverlayActorEnforcer} class comment for actor requirements.
     * @return true if the actor is allowed to act on the target overlayInfo
     */
    private ActorState isAllowedActor(String methodName, OverlayInfo overlayInfo,