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

Commit 8059ab81 authored by Adam He's avatar Adam He Committed by Android (Google) Code Review
Browse files

Merge "Minor changes on LocusId APIs."

parents 004dd4d4 7e735751
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -10638,9 +10638,9 @@ package android.content {
  }
  public final class LocusId implements android.os.Parcelable {
    ctor public LocusId(@NonNull android.net.Uri);
    ctor public LocusId(@NonNull String);
    method public int describeContents();
    method @NonNull public android.net.Uri getUri();
    method @NonNull public String getId();
    method public void writeToParcel(android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.content.LocusId> CREATOR;
  }
@@ -53036,7 +53036,7 @@ package android.view.contentcapture {
  public final class ContentCaptureContext implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public static android.view.contentcapture.ContentCaptureContext forLocusId(@NonNull android.net.Uri);
    method @NonNull public static android.view.contentcapture.ContentCaptureContext forLocusId(@NonNull String);
    method @Nullable public android.os.Bundle getExtras();
    method @NonNull public android.content.LocusId getLocusId();
    method public void writeToParcel(android.os.Parcel, int);
@@ -53084,18 +53084,19 @@ package android.view.contentcapture {
    method public boolean isForEverything();
    method public void writeToParcel(android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.UserDataRemovalRequest> CREATOR;
    field public static final int FLAG_IS_PREFIX = 1; // 0x1
  }
  public static final class UserDataRemovalRequest.Builder {
    ctor public UserDataRemovalRequest.Builder();
    method @NonNull public android.view.contentcapture.UserDataRemovalRequest.Builder addLocusId(@NonNull android.content.LocusId, boolean);
    method @NonNull public android.view.contentcapture.UserDataRemovalRequest.Builder addLocusId(@NonNull android.content.LocusId, int);
    method @NonNull public android.view.contentcapture.UserDataRemovalRequest build();
    method @NonNull public android.view.contentcapture.UserDataRemovalRequest.Builder forEverything();
  }
  public final class UserDataRemovalRequest.LocusIdRequest {
    method @NonNull public int getFlags();
    method @NonNull public android.content.LocusId getLocusId();
    method @NonNull public boolean isRecursive();
  }
}
+19 −20
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@
package android.content;

import android.annotation.NonNull;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;

@@ -34,28 +33,28 @@ import java.io.PrintWriter;
// TODO(b/123577059): make sure this is well documented and understandable
public final class LocusId implements Parcelable {

    private final Uri mUri;
    private final String mId;

    /**
     * Default constructor.
     */
    public LocusId(@NonNull Uri uri) {
        mUri = Preconditions.checkNotNull(uri);
    public LocusId(@NonNull String id) {
        mId = Preconditions.checkNotNull(id);
    }

    /**
     * Gets the {@code uri} associated with the locus.
     * Gets the {@code id} associated with the locus.
     */
    @NonNull
    public Uri getUri() {
        return mUri;
    public String getId() {
        return mId;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((mUri == null) ? 0 : mUri.hashCode());
        result = prime * result + ((mId == null) ? 0 : mId.hashCode());
        return result;
    }

@@ -65,26 +64,27 @@ public final class LocusId implements Parcelable {
        if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;
        final LocusId other = (LocusId) obj;
        if (mUri == null) {
            if (other.mUri != null) return false;
        if (mId == null) {
            if (other.mId != null) return false;
        } else {
            if (!mUri.equals(other.mUri)) return false;
            if (!mId.equals(other.mId)) return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "LocusId[uri=" + getSanitizedUri() + "]";
        return "LocusId[" + getSanitizedId() + "]";
    }

    /** @hide */
    public void dump(@NonNull PrintWriter pw) {
        pw.print("uri:"); pw.println(getSanitizedUri());
        pw.print("id:"); pw.println(getSanitizedId());
    }

    private String getSanitizedUri() {
        final int size = mUri.toString().length();
    @NonNull
    private String getSanitizedId() {
        final int size = mId.length();
        return size + "_chars";
    }

@@ -94,8 +94,8 @@ public final class LocusId implements Parcelable {
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(mUri, flags);
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeString(mId);
    }

    public static final @android.annotation.NonNull Parcelable.Creator<LocusId> CREATOR =
@@ -103,9 +103,8 @@ public final class LocusId implements Parcelable {

        @NonNull
        @Override
        public LocusId createFromParcel(Parcel source) {
            final Uri uri = source.readParcelable(null);
            return new LocusId(uri);
        public LocusId createFromParcel(Parcel parcel) {
            return new LocusId(parcel.readString());
        }

        @NonNull
+3 −4
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.app.TaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.LocusId;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -212,11 +211,11 @@ public final class ContentCaptureContext implements Parcelable {
    }

    /**
     * Helper that creates a {@link ContentCaptureContext} associated with the given {@code uri}.
     * Helper that creates a {@link ContentCaptureContext} associated with the given {@code id}.
     */
    @NonNull
    public static ContentCaptureContext forLocusId(@NonNull Uri uri) {
        return new Builder(new LocusId(uri)).build();
    public static ContentCaptureContext forLocusId(@NonNull String id) {
        return new Builder(new LocusId(id)).build();
    }

    /**
+35 −17
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package android.view.contentcapture;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.app.ActivityThread;
import android.content.LocusId;
@@ -24,6 +25,8 @@ import android.util.IntArray;

import com.android.internal.util.Preconditions;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;

@@ -33,6 +36,19 @@ import java.util.List;
 */
public final class UserDataRemovalRequest implements Parcelable {

    /**
     * When set, service should use the {@link LocusId#getId()} as prefix for the data to be
     * removed.
     */
    public static final int FLAG_IS_PREFIX = 0x1;

    /** @hide */
    @IntDef(prefix = { "FLAG" }, flag = true, value = {
            FLAG_IS_PREFIX
    })
    @Retention(RetentionPolicy.SOURCE)
    @interface Flags {}

    private final String mPackageName;

    private final boolean mForEverything;
@@ -46,7 +62,7 @@ public final class UserDataRemovalRequest implements Parcelable {
            mLocusIdRequests = new ArrayList<>(size);
            for (int i = 0; i < size; i++) {
                mLocusIdRequests.add(new LocusIdRequest(builder.mLocusIds.get(i),
                        builder.mRecursive.get(i) == 1));
                        builder.mFlags.get(i)));
            }
        }
    }
@@ -59,7 +75,7 @@ public final class UserDataRemovalRequest implements Parcelable {
            mLocusIdRequests = new ArrayList<>(size);
            for (int i = 0; i < size; i++) {
                mLocusIdRequests.add(new LocusIdRequest((LocusId) parcel.readValue(null),
                        parcel.readBoolean()));
                        parcel.readInt()));
            }
        }
    }
@@ -94,7 +110,7 @@ public final class UserDataRemovalRequest implements Parcelable {

        private boolean mForEverything;
        private ArrayList<LocusId> mLocusIds;
        private IntArray mRecursive;
        private IntArray mFlags;

        private boolean mDestroyed;

@@ -116,24 +132,24 @@ public final class UserDataRemovalRequest implements Parcelable {
         * Request service to remove data associated with a given {@link LocusId}.
         *
         * @param locusId the {@link LocusId} being requested to be removed.
         * @param recursive whether it should remove the data associated with just the
         * {@code LocusId} or its tree of descendants.
         * @param flags either {@link UserDataRemovalRequest#FLAG_IS_PREFIX} or {@code 0}
         *
         * @return this builder
         */
        @NonNull
        public Builder addLocusId(@NonNull LocusId locusId, boolean recursive) {
        public Builder addLocusId(@NonNull LocusId locusId, @Flags int flags) {
            throwIfDestroyed();
            Preconditions.checkState(!mForEverything, "Already is for everything");
            Preconditions.checkNotNull(locusId);
            // felipeal: check flags

            if (mLocusIds == null) {
                mLocusIds = new ArrayList<>();
                mRecursive = new IntArray();
                mFlags = new IntArray();
            }

            mLocusIds.add(locusId);
            mRecursive.add(recursive ? 1 : 0);
            mFlags.add(flags);
            return this;
        }

@@ -144,7 +160,8 @@ public final class UserDataRemovalRequest implements Parcelable {
        public UserDataRemovalRequest build() {
            throwIfDestroyed();

            Preconditions.checkState(mForEverything || mLocusIds != null);
            Preconditions.checkState(mForEverything || mLocusIds != null,
                    "must call either #forEverything() or add one #addLocusId()");

            mDestroyed = true;
            return new UserDataRemovalRequest(this);
@@ -170,7 +187,7 @@ public final class UserDataRemovalRequest implements Parcelable {
            for (int i = 0; i < size; i++) {
                final LocusIdRequest request = mLocusIdRequests.get(i);
                parcel.writeValue(request.getLocusId());
                parcel.writeBoolean(request.isRecursive());
                parcel.writeInt(request.getFlags());
            }
        }
    }
@@ -196,11 +213,11 @@ public final class UserDataRemovalRequest implements Parcelable {
     */
    public final class LocusIdRequest {
        private final @NonNull LocusId mLocusId;
        private final boolean mRecursive;
        private final @Flags int mFlags;

        private LocusIdRequest(@NonNull LocusId locusId, boolean recursive) {
        private LocusIdRequest(@NonNull LocusId locusId, @Flags int flags) {
            this.mLocusId = locusId;
            this.mRecursive = recursive;
            this.mFlags = flags;
        }

        /**
@@ -212,12 +229,13 @@ public final class UserDataRemovalRequest implements Parcelable {
        }

        /**
         * Checks whether the request is to remove just the data associated with the {@link LocusId}
         *  per se, or also its descendants.
         * Gets the flags associates with request.
         *
         * @return either {@link UserDataRemovalRequest#FLAG_IS_PREFIX} or {@code 0}.
         */
        @NonNull
        public boolean isRecursive() {
            return mRecursive;
        public @Flags int getFlags() {
            return mFlags;
        }
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import static com.google.common.truth.Truth.assertThat;
import static org.testng.Assert.assertThrows;

import android.content.LocusId;
import android.net.Uri;
import android.os.Parcel;
import android.os.SystemClock;
import android.view.autofill.AutofillId;
@@ -47,7 +46,7 @@ public class ContentCaptureEventTest {

    private static final long MY_EPOCH = SystemClock.uptimeMillis();

    private static final LocusId ID = new LocusId(Uri.parse("WHATEVER"));
    private static final LocusId ID = new LocusId("WHATEVER");

    // Not using @Mock because it's final - no need to be fancy here....
    private final ContentCaptureContext mClientContext =