diff --git a/api/current.txt b/api/current.txt index 55f5a6d7fdba4..26946e7340f0e 100644 --- a/api/current.txt +++ b/api/current.txt @@ -53560,7 +53560,7 @@ package android.view.textclassifier { public final class TextClassifierEvent implements android.os.Parcelable { method public int describeContents(); method @NonNull public int[] getActionIndices(); - method @Nullable public String getEntityType(); + method @NonNull public String[] getEntityTypes(); method public int getEventCategory(); method @Nullable public android.view.textclassifier.TextClassificationContext getEventContext(); method public int getEventIndex(); @@ -53573,6 +53573,7 @@ package android.view.textclassifier { method public int getRelativeWordEndIndex(); method public int getRelativeWordStartIndex(); method @Nullable public String getResultId(); + method public float getScore(); 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 @@ -53607,7 +53608,7 @@ package android.view.textclassifier { ctor public TextClassifierEvent.Builder(int, int); method @NonNull public android.view.textclassifier.TextClassifierEvent build(); method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setActionIndices(@NonNull int...); - method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setEntityType(@Nullable String); + method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setEntityTypes(@NonNull java.lang.String...); method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setEventContext(@Nullable android.view.textclassifier.TextClassificationContext); method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setEventIndex(int); method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setEventTime(long); @@ -53618,6 +53619,7 @@ package android.view.textclassifier { method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setRelativeWordEndIndex(int); method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setRelativeWordStartIndex(int); method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setResultId(@Nullable String); + method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setScore(float); } public final class TextLanguage implements android.os.Parcelable { diff --git a/core/java/android/view/textclassifier/ActionsSuggestionsHelper.java b/core/java/android/view/textclassifier/ActionsSuggestionsHelper.java index 77cb4cd28763b..fdc34b3f68d04 100644 --- a/core/java/android/view/textclassifier/ActionsSuggestionsHelper.java +++ b/core/java/android/view/textclassifier/ActionsSuggestionsHelper.java @@ -103,10 +103,9 @@ public final class ActionsSuggestionsHelper { final String modelName = String.format( Locale.US, "%s_v%d", localesJoiner.toString(), modelVersion); final int hash = Objects.hash( - messages.stream() - .map(ConversationActions.Message::getText) - .collect(Collectors.toList()), - context.getPackageName()); + messages.stream().mapToInt(ActionsSuggestionsHelper::hashMessage), + context.getPackageName(), + System.currentTimeMillis()); return SelectionSessionLogger.SignatureParser.createSignature( SelectionSessionLogger.CLASSIFIER_ID, modelName, hash); } @@ -128,4 +127,8 @@ public final class ActionsSuggestionsHelper { return result; } } + + private static int hashMessage(ConversationActions.Message message) { + return Objects.hash(message.getAuthor(), message.getText(), message.getReferenceTime()); + } } diff --git a/core/java/android/view/textclassifier/TextClassifierEvent.java b/core/java/android/view/textclassifier/TextClassifierEvent.java index b84f6f07e4147..cd13cc0ec5774 100644 --- a/core/java/android/view/textclassifier/TextClassifierEvent.java +++ b/core/java/android/view/textclassifier/TextClassifierEvent.java @@ -72,7 +72,7 @@ public final class TextClassifierEvent implements Parcelable { TYPE_ACTIONS_SHOWN, TYPE_LINK_CLICKED, TYPE_OVERTYPE, TYPE_COPY_ACTION, TYPE_PASTE_ACTION, TYPE_CUT_ACTION, TYPE_SHARE_ACTION, TYPE_SMART_ACTION, TYPE_SELECTION_DRAG, TYPE_SELECTION_DESTROYED, TYPE_OTHER_ACTION, TYPE_SELECT_ALL, - TYPE_SELECTION_RESET, TYPE_MANUAL_REPLY}) + TYPE_SELECTION_RESET, TYPE_MANUAL_REPLY, TYPE_ACTIONS_GENERATED}) public @interface Type { // For custom event types, use range 1,000,000+. } @@ -121,7 +121,7 @@ public final class TextClassifierEvent implements Parcelable { @Category private final int mEventCategory; @Type private final int mEventType; - @Nullable private final String mEntityType; + @Nullable private final String[] mEntityTypes; @Nullable private final TextClassificationContext mEventContext; @Nullable private final String mResultId; private final int mEventIndex; @@ -139,11 +139,12 @@ public final class TextClassifierEvent implements Parcelable { // Language detection. @Nullable private final String mLanguage; + private final float mScore; private TextClassifierEvent( int eventCategory, int eventType, - String entityType, + String[] entityTypes, TextClassificationContext eventContext, String resultId, int eventIndex, @@ -154,10 +155,11 @@ public final class TextClassifierEvent implements Parcelable { int relativeSuggestedWordStartIndex, int relativeSuggestedWordEndIndex, int[] actionIndex, - String language) { + String language, + float score) { mEventCategory = eventCategory; mEventType = eventType; - mEntityType = entityType; + mEntityTypes = entityTypes; mEventContext = eventContext; mResultId = resultId; mEventIndex = eventIndex; @@ -169,6 +171,7 @@ public final class TextClassifierEvent implements Parcelable { mRelativeSuggestedWordEndIndex = relativeSuggestedWordEndIndex; mActionIndices = actionIndex; mLanguage = language; + mScore = score; } @Override @@ -180,7 +183,7 @@ public final class TextClassifierEvent implements Parcelable { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mEventCategory); dest.writeInt(mEventType); - dest.writeString(mEntityType); + dest.writeStringArray(mEntityTypes); dest.writeParcelable(mEventContext, flags); dest.writeString(mResultId); dest.writeInt(mEventIndex); @@ -192,13 +195,14 @@ public final class TextClassifierEvent implements Parcelable { dest.writeInt(mRelativeSuggestedWordEndIndex); dest.writeIntArray(mActionIndices); dest.writeString(mLanguage); + dest.writeFloat(mScore); } private static TextClassifierEvent readFromParcel(Parcel in) { return new TextClassifierEvent( /* eventCategory= */ in.readInt(), /* eventType= */ in.readInt(), - /* entityType= */ in.readString(), + /* entityTypes=*/ in.readStringArray(), /* eventContext= */ in.readParcelable(null), /* resultId= */ in.readString(), /* eventIndex= */ in.readInt(), @@ -209,7 +213,8 @@ public final class TextClassifierEvent implements Parcelable { /* relativeSuggestedWordStartIndex= */ in.readInt(), /* relativeSuggestedWordEndIndex= */ in.readInt(), /* actionIndices= */ in.createIntArray(), - /* language= */ in.readString()); + /* language= */ in.readString(), + /* score= */ in.readFloat()); } /** @@ -229,11 +234,11 @@ public final class TextClassifierEvent implements Parcelable { } /** - * Returns the entity type. e.g. {@link TextClassifier#TYPE_ADDRESS}. + * Returns an array of entity types. e.g. {@link TextClassifier#TYPE_ADDRESS}. */ - @Nullable - public String getEntityType() { - return mEntityType; + @NonNull + public String[] getEntityTypes() { + return mEntityTypes; } /** @@ -326,6 +331,13 @@ public final class TextClassifierEvent implements Parcelable { return mLanguage; } + /** + * Returns the score of the suggestion. + */ + public float getScore() { + return mScore; + } + /** * Builder to build a text classifier event. */ @@ -333,7 +345,7 @@ public final class TextClassifierEvent implements Parcelable { private final int mEventCategory; private final int mEventType; - @Nullable private String mEntityType; + private String[] mEntityTypes = new String[0]; @Nullable private TextClassificationContext mEventContext; @Nullable private String mResultId; private int mEventIndex; @@ -345,6 +357,7 @@ public final class TextClassifierEvent implements Parcelable { private int mRelativeSuggestedWordEndIndex; private int[] mActionIndices = new int[0]; @Nullable private String mLanguage; + private float mScore; /** * Creates a builder for building {@link TextClassifierEvent}s. @@ -358,11 +371,12 @@ public final class TextClassifierEvent implements Parcelable { } /** - * Sets the entity type. e.g. {@link TextClassifier#TYPE_ADDRESS}. + * Sets the entity types. e.g. {@link TextClassifier#TYPE_ADDRESS}. */ @NonNull - public Builder setEntityType(@Nullable String entityType) { - mEntityType = entityType; + public Builder setEntityTypes(@NonNull String... entityTypes) { + mEntityTypes = new String[entityTypes.length]; + System.arraycopy(entityTypes, 0, mEntityTypes, 0, entityTypes.length); return this; } @@ -477,6 +491,15 @@ public final class TextClassifierEvent implements Parcelable { return this; } + /** + * Sets the score of the suggestion. + */ + @NonNull + public Builder setScore(float score) { + mScore = score; + return this; + } + /** * Builds and returns a text classifier event. */ @@ -486,7 +509,7 @@ public final class TextClassifierEvent implements Parcelable { return new TextClassifierEvent( mEventCategory, mEventType, - mEntityType, + mEntityTypes, mEventContext, mResultId, mEventIndex, @@ -497,7 +520,8 @@ public final class TextClassifierEvent implements Parcelable { mRelativeSuggestedWordStartIndex, mRelativeSuggestedWordEndIndex, mActionIndices, - mLanguage); + mLanguage, + mScore); } // TODO: Add build(boolean validate). } @@ -507,7 +531,7 @@ public final class TextClassifierEvent implements Parcelable { StringBuilder out = new StringBuilder(128); out.append("TextClassifierEvent{"); out.append("mEventCategory=").append(mEventCategory); - out.append(", mEventType=").append(mEventType); + out.append(", mEventTypes=").append(Arrays.toString(mEntityTypes)); out.append(", mEventContext=").append(mEventContext); out.append(", mResultId=").append(mResultId); out.append(", mEventIndex=").append(mEventIndex); @@ -519,6 +543,7 @@ public final class TextClassifierEvent implements Parcelable { out.append(", mRelativeSuggestedWordEndIndex=").append(mRelativeSuggestedWordEndIndex); out.append(", mActionIndices=").append(Arrays.toString(mActionIndices)); out.append(", mLanguage=").append(mLanguage); + out.append(", mScore=").append(mScore); out.append("}"); return out.toString(); } diff --git a/core/java/android/view/textclassifier/TextClassifierEventTronLogger.java b/core/java/android/view/textclassifier/TextClassifierEventTronLogger.java index 439e594cc8fed..5563dfc2eee53 100644 --- a/core/java/android/view/textclassifier/TextClassifierEventTronLogger.java +++ b/core/java/android/view/textclassifier/TextClassifierEventTronLogger.java @@ -15,12 +15,15 @@ */ package android.view.textclassifier; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SELECTION_ENTITY_TYPE; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SELECTION_SESSION_ID; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SELECTION_WIDGET_TYPE; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SELECTION_WIDGET_VERSION; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXTCLASSIFIER_MODEL; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_EVENT_TIME; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_FIRST_ENTITY_TYPE; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_SCORE; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_SECOND_ENTITY_TYPE; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_SESSION_ID; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_THIRD_ENTITY_TYPE; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_WIDGET_TYPE; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_WIDGET_VERSION; import android.metrics.LogMaker; @@ -60,16 +63,30 @@ public final class TextClassifierEventTronLogger { return; } final LogMaker log = new LogMaker(category) - .setType(getLogType(event)) - .addTaggedData(FIELD_SELECTION_SESSION_ID, event.getResultId()) + .setSubtype(getLogType(event)) + .addTaggedData(FIELD_TEXT_CLASSIFIER_SESSION_ID, event.getResultId()) .addTaggedData(FIELD_TEXT_CLASSIFIER_EVENT_TIME, event.getEventTime()) .addTaggedData(FIELD_TEXTCLASSIFIER_MODEL, SelectionSessionLogger.SignatureParser.getModelName(event.getResultId())) - .addTaggedData(FIELD_SELECTION_ENTITY_TYPE, event.getEntityType()); + .addTaggedData(FIELD_TEXT_CLASSIFIER_SCORE, event.getScore()); + + String[] entityTypes = event.getEntityTypes(); + // TRON does not support a field of list type, and thus workaround by store them + // in three separate fields. This is no longer an issue once we have moved to Westworld. + if (entityTypes.length >= 1) { + log.addTaggedData(FIELD_TEXT_CLASSIFIER_FIRST_ENTITY_TYPE, entityTypes[0]); + } + if (entityTypes.length >= 2) { + log.addTaggedData(FIELD_TEXT_CLASSIFIER_SECOND_ENTITY_TYPE, entityTypes[1]); + } + if (entityTypes.length >= 3) { + log.addTaggedData(FIELD_TEXT_CLASSIFIER_THIRD_ENTITY_TYPE, entityTypes[2]); + } TextClassificationContext eventContext = event.getEventContext(); if (eventContext != null) { - log.addTaggedData(FIELD_SELECTION_WIDGET_TYPE, eventContext.getWidgetType()); - log.addTaggedData(FIELD_SELECTION_WIDGET_VERSION, eventContext.getWidgetVersion()); + log.addTaggedData(FIELD_TEXT_CLASSIFIER_WIDGET_TYPE, eventContext.getWidgetType()); + log.addTaggedData(FIELD_TEXT_CLASSIFIER_WIDGET_VERSION, + eventContext.getWidgetVersion()); log.setPackageName(eventContext.getPackageName()); } mMetricsLogger.write(log); @@ -94,6 +111,8 @@ public final class TextClassifierEventTronLogger { return MetricsEvent.ACTION_TEXT_CLASSIFIER_ACTIONS_SHOWN; case TextClassifierEvent.TYPE_MANUAL_REPLY: return MetricsEvent.ACTION_TEXT_CLASSIFIER_MANUAL_REPLY; + case TextClassifierEvent.TYPE_ACTIONS_GENERATED: + return MetricsEvent.ACTION_TEXT_CLASSIFIER_ACTIONS_GENERATED; default: return MetricsEvent.VIEW_UNKNOWN; } @@ -127,14 +146,22 @@ public final class TextClassifierEventTronLogger { if (!Log.ENABLE_FULL_LOGGING) { return; } - final String id = String.valueOf(log.getTaggedData(FIELD_SELECTION_SESSION_ID)); + final String id = String.valueOf(log.getTaggedData(FIELD_TEXT_CLASSIFIER_SESSION_ID)); final String categoryName = toCategoryName(log.getCategory()); - final String eventName = toEventName(log.getType()); - final String widgetType = String.valueOf(log.getTaggedData(FIELD_SELECTION_WIDGET_TYPE)); + final String eventName = toEventName(log.getSubtype()); + final String widgetType = + String.valueOf(log.getTaggedData(FIELD_TEXT_CLASSIFIER_WIDGET_TYPE)); final String widgetVersion = - String.valueOf(log.getTaggedData(FIELD_SELECTION_WIDGET_VERSION)); + String.valueOf(log.getTaggedData(FIELD_TEXT_CLASSIFIER_WIDGET_VERSION)); final String model = String.valueOf(log.getTaggedData(FIELD_TEXTCLASSIFIER_MODEL)); - final String entityType = String.valueOf(log.getTaggedData(FIELD_SELECTION_ENTITY_TYPE)); + final String firstEntityType = + String.valueOf(log.getTaggedData(FIELD_TEXT_CLASSIFIER_FIRST_ENTITY_TYPE)); + final String secondEntityType = + String.valueOf(log.getTaggedData(FIELD_TEXT_CLASSIFIER_SECOND_ENTITY_TYPE)); + final String thirdEntityType = + String.valueOf(log.getTaggedData(FIELD_TEXT_CLASSIFIER_THIRD_ENTITY_TYPE)); + final String score = + String.valueOf(log.getTaggedData(FIELD_TEXT_CLASSIFIER_SCORE)); StringBuilder builder = new StringBuilder(); builder.append("writeEvent: "); @@ -144,7 +171,10 @@ public final class TextClassifierEventTronLogger { builder.append(", widgetType=").append(widgetType); builder.append(", widgetVersion=").append(widgetVersion); builder.append(", model=").append(model); - builder.append(", entityType=").append(entityType); + builder.append(", firstEntityType=").append(firstEntityType); + builder.append(", secondEntityType=").append(secondEntityType); + builder.append(", thirdEntityType=").append(thirdEntityType); + builder.append(", score=").append(score); Log.v(TAG, builder.toString()); } diff --git a/core/tests/coretests/src/android/view/textclassifier/logging/TextClassifierEventTronLoggerTest.java b/core/tests/coretests/src/android/view/textclassifier/logging/TextClassifierEventTronLoggerTest.java index b1b74160ecd5c..73af56743b5f1 100644 --- a/core/tests/coretests/src/android/view/textclassifier/logging/TextClassifierEventTronLoggerTest.java +++ b/core/tests/coretests/src/android/view/textclassifier/logging/TextClassifierEventTronLoggerTest.java @@ -18,9 +18,10 @@ package android.view.textclassifier.logging; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_TEXT_SELECTION_SMART_SHARE; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.CONVERSATION_ACTIONS; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SELECTION_ENTITY_TYPE; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_SELECTION_WIDGET_TYPE; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_EVENT_TIME; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_FIRST_ENTITY_TYPE; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_SCORE; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TEXT_CLASSIFIER_WIDGET_TYPE; import static com.google.common.truth.Truth.assertThat; @@ -71,7 +72,8 @@ public class TextClassifierEventTronLoggerTest { new TextClassifierEvent.Builder( TextClassifierEvent.CATEGORY_CONVERSATION_ACTIONS, TextClassifierEvent.TYPE_SMART_ACTION) - .setEntityType(ConversationAction.TYPE_CALL_PHONE) + .setEntityTypes(ConversationAction.TYPE_CALL_PHONE) + .setScore(0.5f) .setEventTime(EVENT_TIME) .setEventContext(textClassificationContext) .build(); @@ -83,15 +85,18 @@ public class TextClassifierEventTronLoggerTest { LogMaker logMaker = captor.getValue(); assertThat(logMaker.getCategory()).isEqualTo( CONVERSATION_ACTIONS); - assertThat(logMaker.getType()).isEqualTo( + assertThat(logMaker.getSubtype()).isEqualTo( ACTION_TEXT_SELECTION_SMART_SHARE); - assertThat(logMaker.getTaggedData(FIELD_SELECTION_ENTITY_TYPE)) + assertThat(logMaker.getTaggedData(FIELD_TEXT_CLASSIFIER_FIRST_ENTITY_TYPE)) .isEqualTo(ConversationAction.TYPE_CALL_PHONE); + assertThat((float) logMaker.getTaggedData(FIELD_TEXT_CLASSIFIER_SCORE)) + .isWithin(0.00001f).of(0.5f); assertThat(logMaker.getTaggedData(FIELD_TEXT_CLASSIFIER_EVENT_TIME)) .isEqualTo(EVENT_TIME); assertThat(logMaker.getPackageName()).isEqualTo(PACKAGE_NAME); - assertThat(logMaker.getTaggedData(FIELD_SELECTION_WIDGET_TYPE)) + assertThat(logMaker.getTaggedData(FIELD_TEXT_CLASSIFIER_WIDGET_TYPE)) .isEqualTo(WIDGET_TYPE); + } @Test diff --git a/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java b/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java index 0d528e7078f8a..bc6e2fc7fc48c 100644 --- a/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java +++ b/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java @@ -202,7 +202,7 @@ public class SmartActionsHelper { } TextClassifierEvent textClassifierEvent = createTextClassifierEventBuilder(TextClassifierEvent.TYPE_SMART_ACTION, resultId) - .setEntityType(ConversationAction.TYPE_TEXT_REPLY) + .setEntityTypes(ConversationAction.TYPE_TEXT_REPLY) .build(); mTextClassifier.onTextClassifierEvent(textClassifierEvent); } @@ -225,7 +225,7 @@ public class SmartActionsHelper { } TextClassifierEvent textClassifierEvent = createTextClassifierEventBuilder(TextClassifierEvent.TYPE_SMART_ACTION, resultId) - .setEntityType(actionType) + .setEntityTypes(actionType) .build(); mTextClassifier.onTextClassifierEvent(textClassifierEvent); } diff --git a/proto/src/metrics_constants/metrics_constants.proto b/proto/src/metrics_constants/metrics_constants.proto index d1aa84fe31336..73fcb0150a9ec 100644 --- a/proto/src/metrics_constants/metrics_constants.proto +++ b/proto/src/metrics_constants/metrics_constants.proto @@ -6780,22 +6780,22 @@ message MetricsEvent { CONVERSATION_ACTIONS = 1615; // ACTION: Actions from a text classifier are shown to user. - // CATEGORY: CONVERSATION_ACTIONS + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS // OS: Q ACTION_TEXT_CLASSIFIER_ACTIONS_SHOWN = 1616; - // ACTION: Event time of a text classifier event in unix timestamp. - // CATEGORY: CONVERSATION_ACTIONS, LANGUAGE_DETECTION + // FIELD: Event time of a text classifier event in unix timestamp. + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS // OS: Q FIELD_TEXT_CLASSIFIER_EVENT_TIME = 1617; // ACTION: Users compose their own replies instead of using suggested ones. - // CATEGORY: CONVERSATION_ACTIONS + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS // OS: Q ACTION_TEXT_CLASSIFIER_MANUAL_REPLY = 1618; // ACTION: Text classifier generates an action. - // CATEGORY: CONVERSATION_ACTIONS + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS // OS: Q ACTION_TEXT_CLASSIFIER_ACTIONS_GENERATED = 1619; @@ -6840,7 +6840,7 @@ message MetricsEvent { // OPEN: Settings > Display > Adaptive sleep // OS: Q SETTINGS_ADAPTIVE_SLEEP = 1628; - + // Tagged data for SMART_REPLY_VISIBLE and NOTIFICATION_ITEM_ACTION. // The UI location of the notification containing the smart suggestions. // This is a NotificationLocation object (see the NotificationLocation @@ -6870,6 +6870,40 @@ message MetricsEvent { // OS: Q DIALOG_AWARE_DISABLE = 1633; + // FIELD: Session ID of TextClassifierEvent. + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS + // OS: Q + FIELD_TEXT_CLASSIFIER_SESSION_ID = 1634; + + // FIELD: First entity type. + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS + // OS: Q + FIELD_TEXT_CLASSIFIER_FIRST_ENTITY_TYPE = 1635; + // FIELD: Second entity type. + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS + // OS: Q + FIELD_TEXT_CLASSIFIER_SECOND_ENTITY_TYPE = 1636; + + // FIELD: Third entity type. + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS + // OS: Q + FIELD_TEXT_CLASSIFIER_THIRD_ENTITY_TYPE = 1637; + + // FIELD: Score of the suggestion. + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS + // OS: Q + FIELD_TEXT_CLASSIFIER_SCORE = 1638; + + // FIELD: widget type, e.g: notification, textview + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS + // OS: Q + FIELD_TEXT_CLASSIFIER_WIDGET_TYPE = 1639; + + // FIELD: version of the widget. + // CATEGORY: LANGUAGE_DETECTION, CONVERSATION_ACTIONS + // OS: Q + FIELD_TEXT_CLASSIFIER_WIDGET_VERSION = 1640; + // ---- End Q Constants, all Q constants go above this line ---- // Add new aosp constants above this line. // END OF AOSP CONSTANTS