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

Commit 674b1acd authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Follow API council suggest to modify API for SelfTargeting"

parents a15206b9 b39ccbb1
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -11642,13 +11642,13 @@ package android.content.om {
  }
  public class OverlayManager {
    method public void commit(@NonNull android.content.om.OverlayManagerTransaction);
    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 static android.content.om.OverlayManagerTransaction newInstance();
    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);
+21 −6
Original line number Diff line number Diff line
@@ -323,8 +323,27 @@ public class OverlayManager {
     *
     * @hide
     */
    private void commitToSystemServer(@NonNull final OverlayManagerTransaction transaction) {
        try {
            mService.commit(transaction);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Commit the overlay manager transaction.
     *
     * <p>Applications can register overlays and unregister the registered overlays in an atomic
     * operation via {@link OverlayManagerTransaction}.
     *
     * @see OverlayManagerTransaction
     *
     * @param transaction the series of overlay related requests to perform
     * @throws Exception if not all the requests could be successfully
     */
    public void commit(@NonNull final OverlayManagerTransaction transaction) {
        if (transaction.isSelfTargetingTransaction()
        if (transaction.isSelfTargeting()
                || mService == null
                || mService.asBinder() == null) {
            try {
@@ -335,11 +354,7 @@ public class OverlayManager {
            return;
        }

        try {
            mService.commit(transaction);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
        commitToSystemServer(transaction);
    }

    /**
+22 −29
Original line number Diff line number Diff line
@@ -16,20 +16,20 @@

package android.content.om;

import static android.annotation.SystemApi.Client.SYSTEM_SERVER;

import static com.android.internal.util.Preconditions.checkNotNull;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.NonUiContext;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.annotation.SystemApi;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.UserHandle;

import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -63,7 +63,7 @@ public final class OverlayManagerTransaction implements Parcelable {
    // TODO: remove @hide from this class when OverlayManager is added to the
    // SDK, but keep OverlayManagerTransaction.Request @hidden
    private final List<Request> mRequests;
    private final OverlayManager mOverlayManager;
    private final boolean mSelfTargeting;

    /**
     * Container for a batch of requests to the OverlayManagerService.
@@ -79,21 +79,23 @@ public final class OverlayManagerTransaction implements Parcelable {
     * }</pre>
     */
    private OverlayManagerTransaction(
            @NonNull final List<Request> requests, @Nullable OverlayManager overlayManager) {
            @NonNull final List<Request> requests, boolean selfTargeting) {
        Objects.requireNonNull(requests);
        if (requests.contains(null)) {
            throw new IllegalArgumentException("null request");
        }
        mRequests = requests;
        mOverlayManager = overlayManager;
        mSelfTargeting = selfTargeting;
    }

    /**
     * Get an overlay manager transaction with the specified handler.
     * @param overlayManager handles this transaction.
     * Get an overlay manager transaction.
     *
     * @return a new {@link OverlayManagerTransaction} instance.
     */
    public OverlayManagerTransaction(@NonNull OverlayManager overlayManager) {
        this(new ArrayList<>(), Objects.requireNonNull(overlayManager));
    @NonNull
    public static OverlayManagerTransaction newInstance() {
        return new OverlayManagerTransaction(new ArrayList<>(), true /* selfTargeting */);
    }

    private OverlayManagerTransaction(@NonNull final Parcel source) {
@@ -106,7 +108,7 @@ public final class OverlayManagerTransaction implements Parcelable {
            final Bundle extras = source.readBundle(null);
            mRequests.add(new Request(request, overlay, userId, extras));
        }
        mOverlayManager = null;
        mSelfTargeting = false;
    }

    /**
@@ -117,6 +119,7 @@ public final class OverlayManagerTransaction implements Parcelable {
     */
    @SuppressLint("ReferencesHidden")
    @NonNull
    @SystemApi(client = SYSTEM_SERVER)
    public Iterator<Request> getRequests() {
        return mRequests.iterator();
    }
@@ -137,6 +140,7 @@ public final class OverlayManagerTransaction implements Parcelable {
     *
     * @hide
     */
    @SystemApi(client = SYSTEM_SERVER)
    public static final class Request {
        @IntDef(prefix = "TYPE_", value = {
                TYPE_SET_ENABLED,
@@ -200,7 +204,7 @@ public final class OverlayManagerTransaction implements Parcelable {

    /**
     * Builder class for OverlayManagerTransaction objects.
     *
     * TODO(b/269197647): mark the API used by the systemUI.
     * @hide
     */
    public static final class Builder {
@@ -282,7 +286,7 @@ public final class OverlayManagerTransaction implements Parcelable {
         */
        @NonNull
        public OverlayManagerTransaction build() {
            return new OverlayManagerTransaction(mRequests, null /* overlayManager */);
            return new OverlayManagerTransaction(mRequests, false /* selfTargeting */);
        }
    }

@@ -325,20 +329,6 @@ public final class OverlayManagerTransaction implements Parcelable {
        }
    };

    /**
     * Commit the overlay manager transaction to register or unregister overlays for self-targeting.
     *
     * <p>Applications can register overlays and unregister the registered overlays via {@link
     * OverlayManagerTransaction}.
     *
     * @throws IOException if there is a file operation error.
     * @throws PackageManager.NameNotFoundException if the package name is not found.
     */
    @NonUiContext
    public void commit() throws PackageManager.NameNotFoundException, IOException {
        mOverlayManager.commitSelfTarget(this);
    }

    private static Request generateRegisterFabricatedOverlayRequest(
            @NonNull FabricatedOverlay overlay) {
        Objects.requireNonNull(overlay);
@@ -385,7 +375,10 @@ public final class OverlayManagerTransaction implements Parcelable {
        mRequests.add(generateUnRegisterFabricatedOverlayRequest(overlay));
    }

    boolean isSelfTargetingTransaction() {
        return mOverlayManager != null;
    /**
     * Indicate whether the transaction is for self-targeting or not.
     */
    boolean isSelfTargeting() {
        return mSelfTargeting;
    }
}