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

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

Merge "Changed ContentCaptureService to receive one event at time."

parents 601ed487 fc24beab
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -5050,7 +5050,7 @@ package android.service.carrier {


package android.service.contentcapture {
package android.service.contentcapture {


  public final class ContentCaptureEventsRequest implements android.os.Parcelable {
  public final deprecated class ContentCaptureEventsRequest implements android.os.Parcelable {
    method public int describeContents();
    method public int describeContents();
    method public java.util.List<android.view.contentcapture.ContentCaptureEvent> getEvents();
    method public java.util.List<android.view.contentcapture.ContentCaptureEvent> getEvents();
    method public void writeToParcel(android.os.Parcel, int);
    method public void writeToParcel(android.os.Parcel, int);
@@ -5062,7 +5062,8 @@ package android.service.contentcapture {
    method public final java.util.Set<android.content.ComponentName> getContentCaptureDisabledActivities();
    method public final java.util.Set<android.content.ComponentName> getContentCaptureDisabledActivities();
    method public final java.util.Set<java.lang.String> getContentCaptureDisabledPackages();
    method public final java.util.Set<java.lang.String> getContentCaptureDisabledPackages();
    method public void onActivitySnapshot(android.view.contentcapture.ContentCaptureSessionId, android.service.contentcapture.SnapshotData);
    method public void onActivitySnapshot(android.view.contentcapture.ContentCaptureSessionId, android.service.contentcapture.SnapshotData);
    method public void onContentCaptureEventsRequest(android.view.contentcapture.ContentCaptureSessionId, android.service.contentcapture.ContentCaptureEventsRequest);
    method public void onContentCaptureEvent(android.view.contentcapture.ContentCaptureSessionId, android.view.contentcapture.ContentCaptureEvent);
    method public deprecated void onContentCaptureEventsRequest(android.view.contentcapture.ContentCaptureSessionId, android.service.contentcapture.ContentCaptureEventsRequest);
    method public void onCreateContentCaptureSession(android.view.contentcapture.ContentCaptureContext, android.view.contentcapture.ContentCaptureSessionId);
    method public void onCreateContentCaptureSession(android.view.contentcapture.ContentCaptureContext, android.view.contentcapture.ContentCaptureSessionId);
    method public void onDestroyContentCaptureSession(android.view.contentcapture.ContentCaptureSessionId);
    method public void onDestroyContentCaptureSession(android.view.contentcapture.ContentCaptureSessionId);
    method public final void setActivityContentCaptureEnabled(android.content.ComponentName, boolean);
    method public final void setActivityContentCaptureEnabled(android.content.ComponentName, boolean);
+11 −7
Original line number Original line Diff line number Diff line
@@ -17,26 +17,30 @@ package android.service.contentcapture;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.SystemApi;
import android.content.pm.ParceledListSlice;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.view.contentcapture.ContentCaptureEvent;
import android.view.contentcapture.ContentCaptureEvent;


import java.util.Arrays;
import java.util.List;
import java.util.List;


/**
/**
 * Batch of content capture events.
 * Not needed anymore...
 *
 * @deprecated
 *
 *
 * @hide
 * @hide
 */
 */
@SystemApi
@SystemApi
@Deprecated
public final class ContentCaptureEventsRequest implements Parcelable {
public final class ContentCaptureEventsRequest implements Parcelable {
// TODO(b/121033016): remove .java and .aidl once service implementation doesn't use it anymore


    private final ParceledListSlice<ContentCaptureEvent> mEvents;
    private final ContentCaptureEvent mEvent;


    /** @hide */
    /** @hide */
    public ContentCaptureEventsRequest(@NonNull ParceledListSlice<ContentCaptureEvent> events) {
    public ContentCaptureEventsRequest(@NonNull ContentCaptureEvent event) {
        mEvents = events;
        mEvent = event;
    }
    }


    /**
    /**
@@ -44,7 +48,7 @@ public final class ContentCaptureEventsRequest implements Parcelable {
     */
     */
    @NonNull
    @NonNull
    public List<ContentCaptureEvent> getEvents() {
    public List<ContentCaptureEvent> getEvents() {
        return mEvents.getList();
        return Arrays.asList(mEvent);
    }
    }


    @Override
    @Override
@@ -54,7 +58,7 @@ public final class ContentCaptureEventsRequest implements Parcelable {


    @Override
    @Override
    public void writeToParcel(Parcel parcel, int flags) {
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeParcelable(mEvents, flags);
        parcel.writeParcelable(mEvent, flags);
    }
    }


    public static final Parcelable.Creator<ContentCaptureEventsRequest> CREATOR =
    public static final Parcelable.Creator<ContentCaptureEventsRequest> CREATOR =
+35 −12
Original line number Original line Diff line number Diff line
@@ -109,10 +109,9 @@ public abstract class ContentCaptureService extends Service {
            new IContentCaptureDirectManager.Stub() {
            new IContentCaptureDirectManager.Stub() {


        @Override
        @Override
        public void sendEvents(String sessionId,
        public void sendEvents(@SuppressWarnings("rawtypes") ParceledListSlice events) {
                @SuppressWarnings("rawtypes") ParceledListSlice events) {
            mHandler.sendMessage(obtainMessage(ContentCaptureService::handleSendEvents,
            mHandler.sendMessage(obtainMessage(ContentCaptureService::handleSendEvents,
                            ContentCaptureService.this, sessionId, Binder.getCallingUid(), events));
                            ContentCaptureService.this, Binder.getCallingUid(), events));
        }
        }
    };
    };


@@ -218,17 +217,28 @@ public abstract class ContentCaptureService extends Service {
    }
    }


    /**
    /**
     * Notifies the service of {@link ContentCaptureEvent events} associated with a content capture
     * session.
     *
     *
     * @param sessionId the session's Id
     * @deprecated use {@link #onContentCaptureEvent(ContentCaptureSessionId, ContentCaptureEvent)}
     * @param request the events
     * instead.
     */
     */
    @Deprecated
    public void onContentCaptureEventsRequest(@NonNull ContentCaptureSessionId sessionId,
    public void onContentCaptureEventsRequest(@NonNull ContentCaptureSessionId sessionId,
            @NonNull ContentCaptureEventsRequest request) {
            @NonNull ContentCaptureEventsRequest request) {
        if (VERBOSE) Log.v(TAG, "onContentCaptureEventsRequest(id=" + sessionId + ")");
        if (VERBOSE) Log.v(TAG, "onContentCaptureEventsRequest(id=" + sessionId + ")");
    }
    }


    /**
     * Notifies the service of {@link ContentCaptureEvent events} associated with a content capture
     * session.
     *
     * @param sessionId the session's Id
     * @param event the event
     */
    public void onContentCaptureEvent(@NonNull ContentCaptureSessionId sessionId,
            @NonNull ContentCaptureEvent event) {
        if (VERBOSE) Log.v(TAG, "onContentCaptureEventsRequest(id=" + sessionId + ")");
        onContentCaptureEventsRequest(sessionId, new ContentCaptureEventsRequest(event));
    }
    /**
    /**
     * Notifies the service of {@link SnapshotData snapshot data} associated with a session.
     * Notifies the service of {@link SnapshotData snapshot data} associated with a session.
     *
     *
@@ -272,11 +282,24 @@ public abstract class ContentCaptureService extends Service {
                mClientInterface.asBinder());
                mClientInterface.asBinder());
    }
    }


    private void handleSendEvents(@NonNull String sessionId, int uid,
    private void handleSendEvents(int uid,
            @NonNull ParceledListSlice<ContentCaptureEvent> events) {
            @NonNull ParceledListSlice<ContentCaptureEvent> parceledEvents) {
        if (handleIsRightCallerFor(sessionId, uid)) {

            onContentCaptureEventsRequest(new ContentCaptureSessionId(sessionId),
        // Most events belong to the same session, so we can keep a reference to the last one
                    new ContentCaptureEventsRequest(events));
        // to avoid creating too many ContentCaptureSessionId objects
        String lastSessionId = null;
        ContentCaptureSessionId sessionId = null;

        final List<ContentCaptureEvent> events = parceledEvents.getList();
        for (int i = 0; i < events.size(); i++) {
            final ContentCaptureEvent event = events.get(i);
            String sessionIdString = event.getSessionId();
            if (!sessionIdString.equals(lastSessionId)) {
                if (!handleIsRightCallerFor(sessionIdString, uid)) continue;
                sessionId = new ContentCaptureSessionId(sessionIdString);
                lastSessionId = sessionIdString;
            }
            onContentCaptureEvent(sessionId, event);
        }
        }
    }
    }


+4 −4
Original line number Original line Diff line number Diff line
@@ -327,7 +327,7 @@ public final class ActivityContentCaptureSession extends ContentCaptureSession {
            mHandler.removeMessages(MSG_FLUSH);
            mHandler.removeMessages(MSG_FLUSH);


            final ParceledListSlice<ContentCaptureEvent> events = handleClearEvents();
            final ParceledListSlice<ContentCaptureEvent> events = handleClearEvents();
            mDirectServiceInterface.sendEvents(mId, events);
            mDirectServiceInterface.sendEvents(events);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            Log.w(mTag, "Error sending " + numberEvents + " for " + getActivityDebugName()
            Log.w(mTag, "Error sending " + numberEvents + " for " + getActivityDebugName()
                    + ": " + e);
                    + ": " + e);
@@ -387,14 +387,14 @@ public final class ActivityContentCaptureSession extends ContentCaptureSession {
    @Override
    @Override
    void internalNotifyViewAppeared(@NonNull ViewStructureImpl node) {
    void internalNotifyViewAppeared(@NonNull ViewStructureImpl node) {
        mHandler.sendMessage(obtainMessage(ActivityContentCaptureSession::handleSendEvent, this,
        mHandler.sendMessage(obtainMessage(ActivityContentCaptureSession::handleSendEvent, this,
                new ContentCaptureEvent(TYPE_VIEW_APPEARED)
                new ContentCaptureEvent(mId, TYPE_VIEW_APPEARED)
                        .setViewNode(node.mNode), /* forceFlush= */ false));
                        .setViewNode(node.mNode), /* forceFlush= */ false));
    }
    }


    @Override
    @Override
    void internalNotifyViewDisappeared(@NonNull AutofillId id) {
    void internalNotifyViewDisappeared(@NonNull AutofillId id) {
        mHandler.sendMessage(obtainMessage(ActivityContentCaptureSession::handleSendEvent, this,
        mHandler.sendMessage(obtainMessage(ActivityContentCaptureSession::handleSendEvent, this,
                new ContentCaptureEvent(TYPE_VIEW_DISAPPEARED).setAutofillId(id),
                new ContentCaptureEvent(mId, TYPE_VIEW_DISAPPEARED).setAutofillId(id),
                        /* forceFlush= */ false));
                        /* forceFlush= */ false));
    }
    }


@@ -402,7 +402,7 @@ public final class ActivityContentCaptureSession extends ContentCaptureSession {
    void internalNotifyViewTextChanged(@NonNull AutofillId id, @Nullable CharSequence text,
    void internalNotifyViewTextChanged(@NonNull AutofillId id, @Nullable CharSequence text,
            int flags) {
            int flags) {
        mHandler.sendMessage(obtainMessage(ActivityContentCaptureSession::handleSendEvent, this,
        mHandler.sendMessage(obtainMessage(ActivityContentCaptureSession::handleSendEvent, this,
                new ContentCaptureEvent(TYPE_VIEW_TEXT_CHANGED, flags).setAutofillId(id)
                new ContentCaptureEvent(mId, TYPE_VIEW_TEXT_CHANGED, flags).setAutofillId(id)
                        .setText(text), /* forceFlush= */ false));
                        .setText(text), /* forceFlush= */ false));
    }
    }


+19 −8
Original line number Original line Diff line number Diff line
@@ -29,7 +29,6 @@ import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.RetentionPolicy;


// TODO(b/111276913): add javadocs / implement Parcelable / implement
/** @hide */
/** @hide */
@SystemApi
@SystemApi
public final class ContentCaptureEvent implements Parcelable {
public final class ContentCaptureEvent implements Parcelable {
@@ -72,6 +71,7 @@ public final class ContentCaptureEvent implements Parcelable {
    @Retention(RetentionPolicy.SOURCE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface EventType{}
    public @interface EventType{}


    private final @NonNull String mSessionId;
    private final int mType;
    private final int mType;
    private final long mEventTime;
    private final long mEventTime;
    private final int mFlags;
    private final int mFlags;
@@ -80,21 +80,21 @@ public final class ContentCaptureEvent implements Parcelable {
    private @Nullable CharSequence mText;
    private @Nullable CharSequence mText;


    /** @hide */
    /** @hide */
    public ContentCaptureEvent(int type, long eventTime, int flags) {
    public ContentCaptureEvent(@NonNull String sessionId, int type, long eventTime, int flags) {
        mSessionId = sessionId;
        mType = type;
        mType = type;
        mEventTime = eventTime;
        mEventTime = eventTime;
        mFlags = flags;
        mFlags = flags;
    }
    }



    /** @hide */
    /** @hide */
    public ContentCaptureEvent(int type, int flags) {
    public ContentCaptureEvent(@NonNull String sessionId, int type, int flags) {
        this(type, System.currentTimeMillis(), flags);
        this(sessionId, type, System.currentTimeMillis(), flags);
    }
    }


    /** @hide */
    /** @hide */
    public ContentCaptureEvent(int type) {
    public ContentCaptureEvent(@NonNull String sessionId, int type) {
        this(type, /* flags= */ 0);
        this(sessionId, type, /* flags= */ 0);
    }
    }


    /** @hide */
    /** @hide */
@@ -104,12 +104,20 @@ public final class ContentCaptureEvent implements Parcelable {
    }
    }


    /** @hide */
    /** @hide */
    @NonNull
    public String getSessionId() {
        return mSessionId;
    }

    /** @hide */
    @NonNull
    public ContentCaptureEvent setViewNode(@NonNull ViewNode node) {
    public ContentCaptureEvent setViewNode(@NonNull ViewNode node) {
        mNode = Preconditions.checkNotNull(node);
        mNode = Preconditions.checkNotNull(node);
        return this;
        return this;
    }
    }


    /** @hide */
    /** @hide */
    @NonNull
    public ContentCaptureEvent setText(@Nullable CharSequence text) {
    public ContentCaptureEvent setText(@Nullable CharSequence text) {
        mText = text;
        mText = text;
        return this;
        return this;
@@ -214,6 +222,7 @@ public final class ContentCaptureEvent implements Parcelable {


    @Override
    @Override
    public void writeToParcel(Parcel parcel, int flags) {
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeString(mSessionId);
        parcel.writeInt(mType);
        parcel.writeInt(mType);
        parcel.writeLong(mEventTime);
        parcel.writeLong(mEventTime);
        parcel.writeInt(mFlags);
        parcel.writeInt(mFlags);
@@ -227,10 +236,12 @@ public final class ContentCaptureEvent implements Parcelable {


        @Override
        @Override
        public ContentCaptureEvent createFromParcel(Parcel parcel) {
        public ContentCaptureEvent createFromParcel(Parcel parcel) {
            final String sessionId = parcel.readString();
            final int type = parcel.readInt();
            final int type = parcel.readInt();
            final long eventTime  = parcel.readLong();
            final long eventTime  = parcel.readLong();
            final int flags = parcel.readInt();
            final int flags = parcel.readInt();
            final ContentCaptureEvent event = new ContentCaptureEvent(type, eventTime, flags);
            final ContentCaptureEvent event =
                    new ContentCaptureEvent(sessionId, type, eventTime, flags);
            final AutofillId id = parcel.readParcelable(null);
            final AutofillId id = parcel.readParcelable(null);
            if (id != null) {
            if (id != null) {
                event.setAutofillId(id);
                event.setAutofillId(id);
Loading