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

Commit 37ccedcc authored by Abodunrinwa Toki's avatar Abodunrinwa Toki Committed by Tony Mak
Browse files

Introduce TextClassifierEvent

This serves as a general TextClassifier event object for reporting
any textclassifier event and will replace the SelectionEvent class.

Example:

// Smart link clicked.
new TextClassifierEvent.Builder(CATEGORY_LINKIFY, TYPE_LINK_CLICKED)
  .setEventContext(new TextClassificationContext.Builder(
      pkgname, WIDGET_TYPE_TEXTVIEW)
      .build())
  .setEntityType(TextClassifier.EMAIL)
  .setResultId(textclassification.getId())
  .setEventIndex(0)
  .setEventTime(now)
  .setStart(0)
  .setEnd(3)
  .build();

Bug: 120837847
Test: See related cts CL
Test: atest cts/tests/tests/view/src/android/view/textclassifier/cts \
      frameworks/base/core/tests/coretests/src/android/view/textclassifier
Change-Id: Ifd84a45fc5c46ffdb200dcb9600f6a470ce792bb
parent c4359bf1
Loading
Loading
Loading
Loading
+64 −0
Original line number Diff line number Diff line
@@ -52831,6 +52831,7 @@ package android.view.textclassifier {
    method public default int getMaxGenerateLinksTextLength();
    method public default boolean isDestroyed();
    method public default void onSelectionEvent(android.view.textclassifier.SelectionEvent);
    method public default void onTextClassifierEvent(android.view.textclassifier.TextClassifierEvent);
    method public default android.view.textclassifier.ConversationActions suggestConversationActions(android.view.textclassifier.ConversationActions.Request);
    method public default android.view.textclassifier.TextSelection suggestSelection(android.view.textclassifier.TextSelection.Request);
    method public default android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.os.LocaleList);
@@ -52852,6 +52853,7 @@ package android.view.textclassifier {
    field public static final java.lang.String WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW = "nosel-customview";
    field public static final java.lang.String WIDGET_TYPE_EDITTEXT = "edittext";
    field public static final java.lang.String WIDGET_TYPE_EDIT_WEBVIEW = "edit-webview";
    field public static final java.lang.String WIDGET_TYPE_NOTIFICATION = "notification";
    field public static final java.lang.String WIDGET_TYPE_TEXTVIEW = "textview";
    field public static final java.lang.String WIDGET_TYPE_UNKNOWN = "unknown";
    field public static final java.lang.String WIDGET_TYPE_UNSELECTABLE_TEXTVIEW = "nosel-textview";
@@ -52869,6 +52871,68 @@ package android.view.textclassifier {
    field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifier.EntityConfig> CREATOR;
  }
  public final class TextClassifierEvent implements android.os.Parcelable {
    method public int describeContents();
    method public int[] getActionIndices();
    method public java.lang.String getEntityType();
    method public int getEventCategory();
    method public android.view.textclassifier.TextClassificationContext getEventContext();
    method public int getEventIndex();
    method public long getEventTime();
    method public int getEventType();
    method public android.os.Bundle getExtras();
    method public java.lang.String getLanguage();
    method public int getRelativeSuggestedWordEndIndex();
    method public int getRelativeSuggestedWordStartIndex();
    method public int getRelativeWordEndIndex();
    method public int getRelativeWordStartIndex();
    method public java.lang.String getResultId();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int CATEGORY_CONVERSATION_ACTIONS = 3; // 0x3
    field public static final int CATEGORY_LANGUAGE_DETECTION = 4; // 0x4
    field public static final int CATEGORY_LINKIFY = 2; // 0x2
    field public static final int CATEGORY_SELECTION = 1; // 0x1
    field public static final int CATEGORY_UNDEFINED = 0; // 0x0
    field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent> CREATOR;
    field public static final int TYPE_ACTIONS_SHOWN = 6; // 0x6
    field public static final int TYPE_AUTO_SELECTION = 5; // 0x5
    field public static final int TYPE_COPY_ACTION = 9; // 0x9
    field public static final int TYPE_CUT_ACTION = 11; // 0xb
    field public static final int TYPE_LINK_CLICKED = 7; // 0x7
    field public static final int TYPE_MANUAL_REPLY = 19; // 0x13
    field public static final int TYPE_OTHER_ACTION = 16; // 0x10
    field public static final int TYPE_OVERTYPE = 8; // 0x8
    field public static final int TYPE_PASTE_ACTION = 10; // 0xa
    field public static final int TYPE_SELECTION_DESTROYED = 15; // 0xf
    field public static final int TYPE_SELECTION_DRAG = 14; // 0xe
    field public static final int TYPE_SELECTION_MODIFIED = 2; // 0x2
    field public static final int TYPE_SELECTION_RESET = 18; // 0x12
    field public static final int TYPE_SELECTION_STARTED = 1; // 0x1
    field public static final int TYPE_SELECT_ALL = 17; // 0x11
    field public static final int TYPE_SHARE_ACTION = 12; // 0xc
    field public static final int TYPE_SMART_ACTION = 13; // 0xd
    field public static final int TYPE_SMART_SELECTION_MULTI = 4; // 0x4
    field public static final int TYPE_SMART_SELECTION_SINGLE = 3; // 0x3
    field public static final int TYPE_UNDEFINED = 0; // 0x0
  }
  public static final class TextClassifierEvent.Builder {
    ctor public TextClassifierEvent.Builder(int, int);
    method public android.view.textclassifier.TextClassifierEvent build();
    method public android.view.textclassifier.TextClassifierEvent.Builder setActionIndices(int...);
    method public android.view.textclassifier.TextClassifierEvent.Builder setEntityType(java.lang.String);
    method public android.view.textclassifier.TextClassifierEvent.Builder setEventContext(android.view.textclassifier.TextClassificationContext);
    method public android.view.textclassifier.TextClassifierEvent.Builder setEventIndex(int);
    method public android.view.textclassifier.TextClassifierEvent.Builder setEventTime(long);
    method public android.view.textclassifier.TextClassifierEvent.Builder setExtras(android.os.Bundle);
    method public android.view.textclassifier.TextClassifierEvent.Builder setLanguage(java.lang.String);
    method public android.view.textclassifier.TextClassifierEvent.Builder setRelativeSuggestedWordEndIndex(int);
    method public android.view.textclassifier.TextClassifierEvent.Builder setRelativeSuggestedWordStartIndex(int);
    method public android.view.textclassifier.TextClassifierEvent.Builder setRelativeWordEndIndex(int);
    method public android.view.textclassifier.TextClassifierEvent.Builder setRelativeWordStartIndex(int);
    method public android.view.textclassifier.TextClassifierEvent.Builder setResultId(java.lang.String);
  }
  public final class TextLanguage implements android.os.Parcelable {
    method public int describeContents();
    method public float getConfidenceScore(android.icu.util.ULocale);
+2 −1
Original line number Diff line number Diff line
@@ -5357,9 +5357,10 @@ package android.service.textclassifier {
    method public void onDestroyTextClassificationSession(android.view.textclassifier.TextClassificationSessionId);
    method public void onDetectLanguage(android.view.textclassifier.TextClassificationSessionId, android.view.textclassifier.TextLanguage.Request, android.os.CancellationSignal, android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLanguage>);
    method public abstract void onGenerateLinks(android.view.textclassifier.TextClassificationSessionId, android.view.textclassifier.TextLinks.Request, android.os.CancellationSignal, android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLinks>);
    method public void onSelectionEvent(android.view.textclassifier.TextClassificationSessionId, android.view.textclassifier.SelectionEvent);
    method public deprecated void onSelectionEvent(android.view.textclassifier.TextClassificationSessionId, android.view.textclassifier.SelectionEvent);
    method public void onSuggestConversationActions(android.view.textclassifier.TextClassificationSessionId, android.view.textclassifier.ConversationActions.Request, android.os.CancellationSignal, android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.ConversationActions>);
    method public abstract void onSuggestSelection(android.view.textclassifier.TextClassificationSessionId, android.view.textclassifier.TextSelection.Request, android.os.CancellationSignal, android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextSelection>);
    method public void onTextClassifierEvent(android.view.textclassifier.TextClassificationSessionId, android.view.textclassifier.TextClassifierEvent);
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.textclassifier.TextClassifierService";
  }

+6 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.view.textclassifier.SelectionEvent;
import android.view.textclassifier.TextClassification;
import android.view.textclassifier.TextClassificationContext;
import android.view.textclassifier.TextClassificationSessionId;
import android.view.textclassifier.TextClassifierEvent;
import android.view.textclassifier.TextLinks;
import android.view.textclassifier.TextLanguage;
import android.view.textclassifier.TextSelection;
@@ -52,10 +53,15 @@ oneway interface ITextClassifierService {
            in TextLinks.Request request,
            in ITextLinksCallback callback);

    // TODO: Remove
    void onSelectionEvent(
            in TextClassificationSessionId sessionId,
            in SelectionEvent event);

    void onTextClassifierEvent(
            in TextClassificationSessionId sessionId,
            in TextClassifierEvent event);

    void onCreateTextClassificationSession(
            in TextClassificationContext context,
            in TextClassificationSessionId sessionId);
+27 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.view.textclassifier.TextClassificationContext;
import android.view.textclassifier.TextClassificationManager;
import android.view.textclassifier.TextClassificationSessionId;
import android.view.textclassifier.TextClassifier;
import android.view.textclassifier.TextClassifierEvent;
import android.view.textclassifier.TextLanguage;
import android.view.textclassifier.TextLinks;
import android.view.textclassifier.TextSelection;
@@ -191,6 +192,15 @@ public abstract class TextClassifierService extends Service {
            TextClassifierService.this.onSelectionEvent(sessionId, event);
        }

        /** {@inheritDoc} */
        @Override
        public void onTextClassifierEvent(
                TextClassificationSessionId sessionId,
                TextClassifierEvent event) {
            Preconditions.checkNotNull(event);
            TextClassifierService.this.onTextClassifierEvent(sessionId, event);
        }

        /** {@inheritDoc} */
        @Override
        public void onDetectLanguage(
@@ -368,10 +378,27 @@ public abstract class TextClassifierService extends Service {
     *
     * @param sessionId the session id
     * @param event the selection event
     * @deprecated
     *      Use {@link #onTextClassifierEvent(TextClassificationSessionId, TextClassifierEvent)}
     *      instead
     */
    @Deprecated
    public void onSelectionEvent(
            @Nullable TextClassificationSessionId sessionId, @NonNull SelectionEvent event) {}

    /**
     * Writes the TextClassifier event.
     * This is called when a TextClassifier event occurs. e.g. user changed selection,
     * smart selection happened, or a link was clicked.
     *
     * <p>The default implementation ignores the event.
     *
     * @param sessionId the session id
     * @param event the TextClassifier event
     */
    public void onTextClassifierEvent(
            @Nullable TextClassificationSessionId sessionId, @NonNull TextClassifierEvent event) {}

    /**
     * Creates a new text classification session for the specified context.
     *
+12 −0
Original line number Diff line number Diff line
@@ -146,6 +146,18 @@ public final class SystemTextClassifier implements TextClassifier {
        }
    }

    @Override
    public void onTextClassifierEvent(@NonNull TextClassifierEvent event) {
        Preconditions.checkNotNull(event);
        Utils.checkMainThread();

        try {
            mManagerService.onTextClassifierEvent(mSessionId, event);
        } catch (RemoteException e) {
            Log.e(LOG_TAG, "Error reporting textclassifier event.", e);
        }
    }

    @Override
    public TextLanguage detectLanguage(TextLanguage.Request request) {
        Preconditions.checkNotNull(request);
Loading