Merge "Split TextClassifierEvent into multiple subclasses" into qt-dev

This commit is contained in:
Tony Mak
2019-04-17 10:05:20 +00:00
committed by Android (Google) Code Review
7 changed files with 832 additions and 362 deletions

View File

@@ -53616,29 +53616,23 @@ package android.view.textclassifier {
method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder setIncludedTypes(@Nullable java.util.Collection<java.lang.String>);
}
public final class TextClassifierEvent implements android.os.Parcelable {
public abstract class TextClassifierEvent implements android.os.Parcelable {
method public int describeContents();
method @NonNull public int[] getActionIndices();
method @NonNull public String[] getEntityTypes();
method public int getEventCategory();
method @Nullable public android.view.textclassifier.TextClassificationContext getEventContext();
method public int getEventIndex();
method public long getEventTime();
method public int getEventType();
method @NonNull public android.os.Bundle getExtras();
method @Nullable public String getLanguage();
method public int getRelativeSuggestedWordEndIndex();
method public int getRelativeSuggestedWordStartIndex();
method public int getRelativeWordEndIndex();
method public int getRelativeWordStartIndex();
method @Nullable public String getModelName();
method @Nullable public String getResultId();
method public float getScore();
method @NonNull public float[] getScores();
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 @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent> CREATOR;
field public static final int TYPE_ACTIONS_GENERATED = 20; // 0x14
field public static final int TYPE_ACTIONS_SHOWN = 6; // 0x6
@@ -53660,25 +53654,63 @@ package android.view.textclassifier {
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 @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 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);
method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setExtras(@NonNull android.os.Bundle);
method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setLanguage(@Nullable String);
method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setRelativeSuggestedWordEndIndex(int);
method @NonNull public android.view.textclassifier.TextClassifierEvent.Builder setRelativeSuggestedWordStartIndex(int);
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 abstract static class TextClassifierEvent.Builder<T extends android.view.textclassifier.TextClassifierEvent.Builder<T>> {
method @NonNull public T setActionIndices(@NonNull int...);
method @NonNull public T setEntityTypes(@NonNull java.lang.String...);
method @NonNull public T setEventContext(@Nullable android.view.textclassifier.TextClassificationContext);
method @NonNull public T setEventIndex(int);
method @NonNull public T setExtras(@NonNull android.os.Bundle);
method @NonNull public T setModelName(@Nullable String);
method @NonNull public T setResultId(@Nullable String);
method @NonNull public T setScores(@NonNull float...);
}
public static final class TextClassifierEvent.ConversationActionsEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent> CREATOR;
}
public static final class TextClassifierEvent.ConversationActionsEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent.Builder> {
ctor public TextClassifierEvent.ConversationActionsEvent.Builder(int);
method @NonNull public android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent build();
}
public static final class TextClassifierEvent.LanguageDetectionEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
method @Nullable public android.icu.util.ULocale getLocale();
field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent> CREATOR;
}
public static final class TextClassifierEvent.LanguageDetectionEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent.Builder> {
ctor public TextClassifierEvent.LanguageDetectionEvent.Builder(int);
method @NonNull public android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent build();
method @NonNull public android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent.Builder setLocale(@Nullable android.icu.util.ULocale);
}
public static final class TextClassifierEvent.TextLinkifyEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent> CREATOR;
}
public static final class TextClassifierEvent.TextLinkifyEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent.Builder> {
ctor public TextClassifierEvent.TextLinkifyEvent.Builder(int);
method @NonNull public android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent build();
}
public static final class TextClassifierEvent.TextSelectionEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
method public int getRelativeSuggestedWordEndIndex();
method public int getRelativeSuggestedWordStartIndex();
method public int getRelativeWordEndIndex();
method public int getRelativeWordStartIndex();
field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.TextSelectionEvent> CREATOR;
}
public static final class TextClassifierEvent.TextSelectionEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder> {
ctor public TextClassifierEvent.TextSelectionEvent.Builder(int);
method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent build();
method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeSuggestedWordEndIndex(int);
method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeSuggestedWordStartIndex(int);
method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeWordEndIndex(int);
method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeWordStartIndex(int);
}
public final class TextLanguage implements android.os.Parcelable {

File diff suppressed because it is too large Load Diff

View File

@@ -65,9 +65,10 @@ public final class TextClassifierEventTronLogger {
final LogMaker log = new LogMaker(category)
.setSubtype(getLogType(event))
.addTaggedData(FIELD_TEXT_CLASSIFIER_SESSION_ID, event.getResultId())
.addTaggedData(FIELD_TEXTCLASSIFIER_MODEL, getModelName(event))
.addTaggedData(FIELD_TEXT_CLASSIFIER_SCORE, event.getScore());
.addTaggedData(FIELD_TEXTCLASSIFIER_MODEL, getModelName(event));
if (event.getScores().length >= 1) {
log.addTaggedData(FIELD_TEXT_CLASSIFIER_SCORE, event.getScores()[0]);
}
String[] entityTypes = event.getEntityTypes();
// The old logger does not support a field of list type, and thus workaround by store them
// in three separate fields. This is not an issue with the new logger.

View File

@@ -933,12 +933,11 @@ public final class SelectionActionModeHelper {
final String language = ExtrasUtils.getEntityType(foreignLanguageExtra);
final float score = ExtrasUtils.getScore(foreignLanguageExtra);
final String model = ExtrasUtils.getModelName(foreignLanguageExtra);
return new TextClassifierEvent.Builder(
TextClassifierEvent.CATEGORY_LANGUAGE_DETECTION, eventType)
return new TextClassifierEvent.LanguageDetectionEvent.Builder(eventType)
.setEventContext(classificationContext)
.setResultId(classification.getId())
.setEntityTypes(language)
.setScore(score)
.setScores(score)
.setActionIndices(classification.getActions().indexOf(translateAction))
.setModelName(model)
.build();

View File

@@ -49,8 +49,6 @@ import org.mockito.MockitoAnnotations;
public class TextClassifierEventTronLoggerTest {
private static final String WIDGET_TYPE = "notification";
private static final String PACKAGE_NAME = "pkg";
private static final long EVENT_TIME = System.currentTimeMillis();
@Mock
private MetricsLogger mMetricsLogger;
@@ -68,13 +66,11 @@ public class TextClassifierEventTronLoggerTest {
TextClassificationContext textClassificationContext =
new TextClassificationContext.Builder(PACKAGE_NAME, WIDGET_TYPE)
.build();
TextClassifierEvent textClassifierEvent =
new TextClassifierEvent.Builder(
TextClassifierEvent.CATEGORY_CONVERSATION_ACTIONS,
TextClassifierEvent.ConversationActionsEvent textClassifierEvent =
new TextClassifierEvent.ConversationActionsEvent.Builder(
TextClassifierEvent.TYPE_SMART_ACTION)
.setEntityTypes(ConversationAction.TYPE_CALL_PHONE)
.setScore(0.5f)
.setEventTime(EVENT_TIME)
.setScores(0.5f)
.setEventContext(textClassificationContext)
.build();
@@ -83,10 +79,8 @@ public class TextClassifierEventTronLoggerTest {
ArgumentCaptor<LogMaker> captor = ArgumentCaptor.forClass(LogMaker.class);
Mockito.verify(mMetricsLogger).write(captor.capture());
LogMaker logMaker = captor.getValue();
assertThat(logMaker.getCategory()).isEqualTo(
CONVERSATION_ACTIONS);
assertThat(logMaker.getSubtype()).isEqualTo(
ACTION_TEXT_SELECTION_SMART_SHARE);
assertThat(logMaker.getCategory()).isEqualTo(CONVERSATION_ACTIONS);
assertThat(logMaker.getSubtype()).isEqualTo(ACTION_TEXT_SELECTION_SMART_SHARE);
assertThat(logMaker.getTaggedData(FIELD_TEXT_CLASSIFIER_FIRST_ENTITY_TYPE))
.isEqualTo(ConversationAction.TYPE_CALL_PHONE);
assertThat((float) logMaker.getTaggedData(FIELD_TEXT_CLASSIFIER_SCORE))
@@ -101,9 +95,8 @@ public class TextClassifierEventTronLoggerTest {
@Test
public void testWriteEvent_unsupportedCategory() {
TextClassifierEvent textClassifierEvent =
new TextClassifierEvent.Builder(
TextClassifierEvent.CATEGORY_SELECTION,
TextClassifierEvent.TextSelectionEvent textClassifierEvent =
new TextClassifierEvent.TextSelectionEvent.Builder(
TextClassifierEvent.TYPE_SMART_ACTION)
.build();

View File

@@ -338,7 +338,7 @@ public class SmartActionsHelper {
createTextClassifierEventBuilder(
TextClassifierEvent.TYPE_SMART_ACTION, session.resultId)
.setEntityTypes(ConversationAction.TYPE_TEXT_REPLY)
.setScore(session.repliesScores.getOrDefault(reply, 0f))
.setScores(session.repliesScores.getOrDefault(reply, 0f))
.build();
mTextClassifier.onTextClassifierEvent(textClassifierEvent);
}
@@ -381,11 +381,9 @@ public class SmartActionsHelper {
.build();
}
private TextClassifierEvent.Builder createTextClassifierEventBuilder(
private TextClassifierEvent.ConversationActionsEvent.Builder createTextClassifierEventBuilder(
int eventType, String resultId) {
return new TextClassifierEvent.Builder(
TextClassifierEvent.CATEGORY_CONVERSATION_ACTIONS, eventType)
.setEventTime(System.currentTimeMillis())
return new TextClassifierEvent.ConversationActionsEvent.Builder(eventType)
.setEventContext(
new TextClassificationContext.Builder(
mContext.getPackageName(), TextClassifier.WIDGET_TYPE_NOTIFICATION)

View File

@@ -330,7 +330,9 @@ public class SmartActionsHelperTest {
List<TextClassifierEvent> events = argumentCaptor.getAllValues();
assertTextClassifierEvent(events.get(0), TextClassifierEvent.TYPE_ACTIONS_GENERATED);
assertTextClassifierEvent(events.get(1), TextClassifierEvent.TYPE_SMART_ACTION);
assertThat(events.get(1).getScore()).isEqualTo(SCORE);
float[] scores = events.get(1).getScores();
assertThat(scores).hasLength(1);
assertThat(scores[0]).isEqualTo(SCORE);
}
@Test