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

Change-Id: I45ca814735f95e4f7ed875534251aeda363fcfa2
This commit is contained in:
Automerger Merge Worker
2020-03-06 22:51:40 +00:00
2 changed files with 43 additions and 8 deletions

View File

@@ -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.

View File

@@ -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,