Merge "Public self targeting API"
diff --git a/core/api/current.txt b/core/api/current.txt
index ed119c8..5b2b37f 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -10033,6 +10033,7 @@
     field public static final String NFC_SERVICE = "nfc";
     field public static final String NOTIFICATION_SERVICE = "notification";
     field public static final String NSD_SERVICE = "servicediscovery";
+    field public static final String OVERLAY_SERVICE = "overlay";
     field public static final String PEOPLE_SERVICE = "people";
     field public static final String PERFORMANCE_HINT_SERVICE = "performance_hint";
     field public static final String POWER_SERVICE = "power";
@@ -11201,6 +11202,49 @@
 
 }
 
+package android.content.om {
+
+  public class FabricatedOverlay {
+    ctor public FabricatedOverlay(@NonNull String, @NonNull String);
+    method @NonNull public android.content.om.OverlayIdentifier getIdentifier();
+    method @NonNull public void setResourceValue(@NonNull String, @IntRange(from=android.util.TypedValue.TYPE_FIRST_INT, to=android.util.TypedValue.TYPE_LAST_INT) int, int, @Nullable String);
+    method @NonNull public void setResourceValue(@NonNull String, int, @NonNull String, @Nullable String);
+    method @NonNull public void setResourceValue(@NonNull String, @NonNull android.os.ParcelFileDescriptor, @Nullable String);
+    method public void setTargetOverlayable(@Nullable String);
+  }
+
+  public final class OverlayIdentifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.om.OverlayIdentifier> CREATOR;
+  }
+
+  public final class OverlayInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.om.OverlayIdentifier getOverlayIdentifier();
+    method @Nullable public String getOverlayName();
+    method @Nullable public String getTargetOverlayableName();
+    method @NonNull public String getTargetPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.om.OverlayInfo> CREATOR;
+  }
+
+  public class OverlayManager {
+    method @NonNull @NonUiContext public java.util.List<android.content.om.OverlayInfo> getOverlayInfosForTarget(@NonNull String);
+  }
+
+  public final class OverlayManagerTransaction implements android.os.Parcelable {
+    ctor public OverlayManagerTransaction(@NonNull android.content.om.OverlayManager);
+    method @NonUiContext public void commit() throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method public int describeContents();
+    method @NonNull public void registerFabricatedOverlay(@NonNull android.content.om.FabricatedOverlay);
+    method @NonNull public void unregisterFabricatedOverlay(@NonNull android.content.om.OverlayIdentifier);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.om.OverlayManagerTransaction> CREATOR;
+  }
+
+}
+
 package android.content.pm {
 
   public class ActivityInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
@@ -13107,6 +13151,7 @@
     method @NonNull public static android.content.res.loader.ResourcesProvider loadFromDirectory(@NonNull String, @Nullable android.content.res.loader.AssetsProvider) throws java.io.IOException;
     method @NonNull public static android.content.res.loader.ResourcesProvider loadFromSplit(@NonNull android.content.Context, @NonNull String) throws java.io.IOException;
     method @NonNull public static android.content.res.loader.ResourcesProvider loadFromTable(@NonNull android.os.ParcelFileDescriptor, @Nullable android.content.res.loader.AssetsProvider) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadOverlay(@NonNull android.content.om.OverlayInfo) throws java.io.IOException;
   }
 
 }
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 97b9a51..bd64f4d 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -3429,15 +3429,10 @@
 package android.content.om {
 
   public final class OverlayInfo implements android.os.Parcelable {
-    method public int describeContents();
     method @Nullable public String getCategory();
     method @NonNull public String getPackageName();
-    method @Nullable public String getTargetOverlayableName();
-    method @NonNull public String getTargetPackageName();
     method public int getUserId();
     method public boolean isEnabled();
-    method public void writeToParcel(@NonNull android.os.Parcel, int);
-    field @NonNull public static final android.os.Parcelable.Creator<android.content.om.OverlayInfo> CREATOR;
   }
 
   public class OverlayManager {
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 708a02d..9c25c32 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -5784,7 +5784,6 @@
      *
      * @see #getSystemService(String)
      * @see android.content.om.OverlayManager
-     * @hide
      */
     public static final String OVERLAY_SERVICE = "overlay";
 
diff --git a/core/java/android/content/om/FabricatedOverlay.java b/core/java/android/content/om/FabricatedOverlay.java
index e4936bc..7e787c9 100644
--- a/core/java/android/content/om/FabricatedOverlay.java
+++ b/core/java/android/content/om/FabricatedOverlay.java
@@ -78,16 +78,14 @@
  *
  * @see OverlayManager
  * @see OverlayManagerTransaction
- * @hide
  */
 public class FabricatedOverlay {
 
     /**
      * Retrieves the identifier for this fabricated overlay.
      * @return the overlay identifier
-     *
-     * @hide
      */
+    @NonNull
     public OverlayIdentifier getIdentifier() {
         return new OverlayIdentifier(
                 mOverlay.packageName, TextUtils.nullIfEmpty(mOverlay.overlayName));
@@ -325,7 +323,6 @@
      * @param overlayName a name used to uniquely identify the fabricated overlay owned by the
      *                   caller itself.
      * @param targetPackage the name of the package to be overlaid
-     * @hide
      */
     public FabricatedOverlay(@NonNull String overlayName, @NonNull String targetPackage) {
         this(generateFabricatedOverlayInternal(
@@ -344,7 +341,6 @@
      * should specify which overlayable to be overlaid.
      *
      * @param targetOverlayable the overlayable name defined in target package.
-     * @hide
      */
     public void setTargetOverlayable(@Nullable String targetOverlayable) {
         mOverlay.targetOverlayable = TextUtils.emptyIfNull(targetOverlayable);
@@ -438,7 +434,6 @@
      * @param value the integer representing the new value
      * @param configuration The string representation of the config this overlay is enabled for
      * @see android.util.TypedValue#TYPE_INT_COLOR_ARGB8 android.util.TypedValue#type
-     * @hide
      */
     @NonNull
     public void setResourceValue(
@@ -470,7 +465,6 @@
      * @param value the string representing the new value
      * @param configuration The string representation of the config this overlay is enabled for
      * @see android.util.TypedValue#TYPE_STRING android.util.TypedValue#type
-     * @hide
      */
     @NonNull
     public void setResourceValue(
@@ -491,7 +485,6 @@
      *     [package]:type/entry)
      * @param value the file descriptor whose contents are the value of the frro
      * @param configuration The string representation of the config this overlay is enabled for
-     * @hide
      */
     @NonNull
     public void setResourceValue(
diff --git a/core/java/android/content/om/OverlayIdentifier.java b/core/java/android/content/om/OverlayIdentifier.java
index a43091e..f256372 100644
--- a/core/java/android/content/om/OverlayIdentifier.java
+++ b/core/java/android/content/om/OverlayIdentifier.java
@@ -41,7 +41,6 @@
  * @see OverlayInfo#getOverlayIdentifier()
  * @see OverlayManagerTransaction.Builder#unregisterFabricatedOverlay(OverlayIdentifier)
  */
-/** @hide */
 @DataClass(genConstructor = false, genBuilder = false, genHiddenBuilder = false,
         genEqualsHashCode = true, genToString = false)
 public final class OverlayIdentifier implements Parcelable {
@@ -176,7 +175,6 @@
 
     /**
      * {@inheritDoc}
-     * @hide
      */
     @Override
     @DataClass.Generated.Member
@@ -194,7 +192,6 @@
 
     /**
      * {@inheritDoc}
-     * @hide
      */
     @Override
     @DataClass.Generated.Member
diff --git a/core/java/android/content/om/OverlayInfo.java b/core/java/android/content/om/OverlayInfo.java
index a81d16ab..ff1c088 100644
--- a/core/java/android/content/om/OverlayInfo.java
+++ b/core/java/android/content/om/OverlayInfo.java
@@ -46,9 +46,7 @@
  * -->
  *
  * @see OverlayManager#getOverlayInfosForTarget(String)
- * @hide
  */
-@SystemApi
 public final class OverlayInfo implements CriticalOverlayInfo, Parcelable {
 
     /** @hide */
@@ -59,7 +57,6 @@
             STATE_DISABLED,
             STATE_ENABLED,
             STATE_ENABLED_IMMUTABLE,
-            // @Deprecated STATE_TARGET_IS_BEING_REPLACED,
             STATE_OVERLAY_IS_BEING_REPLACED,
             STATE_SYSTEM_UPDATE_UNINSTALL,
     })
@@ -312,7 +309,6 @@
      * Get the overlay name from the registered fabricated overlay.
      *
      * @return the overlay name
-     * @hide
      */
     @Override
     @Nullable
@@ -324,10 +320,8 @@
      * Returns the name of the target overlaid package.
      *
      * @return the target package name
-     * @hide
      */
     @Override
-    @SystemApi
     @NonNull
     public String getTargetPackageName() {
         return targetPackageName;
@@ -359,9 +353,7 @@
      * Return the target overlayable name.
      *
      * @return the name of the target overlayable resources set
-     * @hide
      */
-    @SystemApi
     @Override
     @Nullable
     public String getTargetOverlayableName() {
@@ -394,7 +386,6 @@
      *
      * @return an identifier representing the current overlay.
      * @see OverlayManagerTransaction.Builder#unregisterFabricatedOverlay(OverlayIdentifier)
-     * @hide
      */
     @Override
     @NonNull
diff --git a/core/java/android/content/om/OverlayManager.java b/core/java/android/content/om/OverlayManager.java
index 7803cb8..96b7603 100644
--- a/core/java/android/content/om/OverlayManager.java
+++ b/core/java/android/content/om/OverlayManager.java
@@ -54,9 +54,7 @@
  * </ul>
  *
  * @see OverlayManagerTransaction
- * @hide
  */
-@SystemApi
 @SystemService(Context.OVERLAY_SERVICE)
 public class OverlayManager {
 
@@ -392,7 +390,6 @@
      *
      * @param targetPackageName the target package name
      * @return a list of overlay information
-     * @hide
      */
     @NonNull
     @NonUiContext
diff --git a/core/java/android/content/om/OverlayManagerTransaction.java b/core/java/android/content/om/OverlayManagerTransaction.java
index c7c605d..5fd695b 100644
--- a/core/java/android/content/om/OverlayManagerTransaction.java
+++ b/core/java/android/content/om/OverlayManagerTransaction.java
@@ -58,7 +58,6 @@
  *
  * @see OverlayManager
  * @see FabricatedOverlay
- * @hide
  */
 public final class OverlayManagerTransaction implements Parcelable {
     // TODO: remove @hide from this class when OverlayManager is added to the
@@ -92,8 +91,6 @@
     /**
      * Get an overlay manager transaction with the specified handler.
      * @param overlayManager handles this transaction.
-     *
-     * @hide
      */
     public OverlayManagerTransaction(@NonNull OverlayManager overlayManager) {
         this(new ArrayList<>(), Objects.requireNonNull(overlayManager));
@@ -291,8 +288,6 @@
 
     /**
      * {@inheritDoc}
-     *
-     * @hide
      */
     @Override
     public int describeContents() {
@@ -301,8 +296,6 @@
 
     /**
      * {@inheritDoc}
-     *
-     * @hide
      */
     @Override
     public void writeToParcel(@NonNull Parcel dest, int flags) {
@@ -340,7 +333,6 @@
      *
      * @throws IOException if there is a file operation error.
      * @throws PackageManager.NameNotFoundException if the package name is not found.
-     * @hide
      */
     @NonUiContext
     public void commit() throws PackageManager.NameNotFoundException, IOException {
@@ -374,8 +366,6 @@
      * package or target overlayable is changed.
      *
      * @param overlay the overlay to register with the overlay manager
-     *
-     * @hide
      */
     @NonNull
     public void registerFabricatedOverlay(@NonNull FabricatedOverlay overlay) {
@@ -389,7 +379,6 @@
      *
      * @see OverlayManager#getOverlayInfosForTarget(String)
      * @see OverlayInfo#getOverlayIdentifier()
-     * @hide
      */
     @NonNull
     public void unregisterFabricatedOverlay(@NonNull OverlayIdentifier overlay) {
diff --git a/core/java/android/content/res/loader/ResourcesProvider.java b/core/java/android/content/res/loader/ResourcesProvider.java
index a5a1fa689..b097bc0 100644
--- a/core/java/android/content/res/loader/ResourcesProvider.java
+++ b/core/java/android/content/res/loader/ResourcesProvider.java
@@ -83,7 +83,6 @@
      * @return the resources provider instance for the {@code overlayInfo}
      * @throws IOException when the files can't be loaded.
      * @see OverlayManager#getOverlayInfosForTarget(String) to get the list of overlay info.
-     * @hide
      */
     @SuppressLint("WrongConstant") // TODO(b/238713267): ApkAssets blocks PROPERTY_LOADER
     @NonNull