Loading core/java/android/content/om/OverlayManager.java +40 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. * Loading Loading @@ -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. Loading services/core/java/com/android/server/om/OverlayActorEnforcer.java +3 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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, Loading Loading
core/java/android/content/om/OverlayManager.java +40 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. * Loading Loading @@ -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. Loading
services/core/java/com/android/server/om/OverlayActorEnforcer.java +3 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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, Loading