diff options
| -rw-r--r-- | core/java/android/view/textclassifier/TextClassificationResult.java | 25 | ||||
| -rw-r--r-- | core/java/android/view/textclassifier/TextClassifierImpl.java | 20 | ||||
| -rw-r--r-- | core/java/android/widget/Editor.java | 10 | ||||
| -rw-r--r-- | core/java/android/widget/TextViewMetrics.java | 33 | ||||
| -rw-r--r-- | proto/src/metrics_constants.proto | 12 |
5 files changed, 94 insertions, 6 deletions
diff --git a/core/java/android/view/textclassifier/TextClassificationResult.java b/core/java/android/view/textclassifier/TextClassificationResult.java index 8912ef3e8f43..e188d11a0cc2 100644 --- a/core/java/android/view/textclassifier/TextClassificationResult.java +++ b/core/java/android/view/textclassifier/TextClassificationResult.java @@ -47,6 +47,7 @@ public final class TextClassificationResult { @Nullable private final OnClickListener mOnClickListener; @NonNull private final EntityConfidence<String> mEntityConfidence; @NonNull private final List<String> mEntities; + private int mLogType; private TextClassificationResult( @NonNull String text, @@ -54,7 +55,8 @@ public final class TextClassificationResult { String label, Intent intent, OnClickListener onClickListener, - @NonNull EntityConfidence<String> entityConfidence) { + @NonNull EntityConfidence<String> entityConfidence, + int logType) { mText = text; mIcon = icon; mLabel = label; @@ -62,6 +64,7 @@ public final class TextClassificationResult { mOnClickListener = onClickListener; mEntityConfidence = new EntityConfidence<>(entityConfidence); mEntities = mEntityConfidence.getEntities(); + mLogType = logType; } /** @@ -134,6 +137,14 @@ public final class TextClassificationResult { return mOnClickListener; } + /** + * Returns the MetricsLogger subtype for the action that is performed for this result. + * @hide + */ + public int getLogType() { + return mLogType; + } + @Override public String toString() { return String.format("TextClassificationResult {" @@ -167,6 +178,7 @@ public final class TextClassificationResult { @Nullable private OnClickListener mOnClickListener; @NonNull private final EntityConfidence<String> mEntityConfidence = new EntityConfidence<>(); + private int mLogType; /** * Sets the classified text. @@ -215,6 +227,15 @@ public final class TextClassificationResult { } /** + * Sets the MetricsLogger subtype for the action that is performed for this result. + * @hide + */ + public Builder setLogType(int type) { + mLogType = type; + return this; + } + + /** * Sets an OnClickListener that may be triggered to act on the classified text. */ public Builder setOnClickListener(@Nullable OnClickListener onClickListener) { @@ -227,7 +248,7 @@ public final class TextClassificationResult { */ public TextClassificationResult build() { return new TextClassificationResult( - mText, mIcon, mLabel, mIntent, mOnClickListener, mEntityConfidence); + mText, mIcon, mLabel, mIntent, mOnClickListener, mEntityConfidence, mLogType); } } } diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java index 022c15726201..246fab37cfa7 100644 --- a/core/java/android/view/textclassifier/TextClassifierImpl.java +++ b/core/java/android/view/textclassifier/TextClassifierImpl.java @@ -37,6 +37,7 @@ import android.text.util.Linkify; import android.util.Log; import android.util.Patterns; import android.view.View; +import android.widget.TextViewMetrics; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; @@ -243,6 +244,8 @@ final class TextClassifierImpl implements TextClassifier { } final String type = getHighestScoringType(classifications); + builder.setLogType(IntentFactory.getLogType(type)); + final Intent intent = IntentFactory.create(mContext, type, text.toString()); final PackageManager pm; final ResolveInfo resolveInfo; @@ -543,5 +546,22 @@ final class TextClassifierImpl implements TextClassifier { return null; } } + + @Nullable + public static int getLogType(String type) { + type = type.trim().toLowerCase(Locale.ENGLISH); + switch (type) { + case TextClassifier.TYPE_EMAIL: + return TextViewMetrics.SUBTYPE_ASSIST_MENU_ITEM_EMAIL; + case TextClassifier.TYPE_PHONE: + return TextViewMetrics.SUBTYPE_ASSIST_MENU_ITEM_PHONE; + case TextClassifier.TYPE_ADDRESS: + return TextViewMetrics.SUBTYPE_ASSIST_MENU_ITEM_ADDRESS; + case TextClassifier.TYPE_URL: + return TextViewMetrics.SUBTYPE_ASSIST_MENU_ITEM_URL; + default: + return TextViewMetrics.SUBTYPE_ASSIST_MENU_ITEM_OTHER; + } + } } } diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 0d3baa8361ba..4ae35103a814 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -41,6 +41,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.metrics.LogMaker; import android.os.Bundle; import android.os.LocaleList; import android.os.Parcel; @@ -165,6 +166,8 @@ public class Editor { final UndoInputFilter mUndoInputFilter = new UndoInputFilter(this); boolean mAllowUndo = true; + private final MetricsLogger mMetricsLogger = new MetricsLogger(); + // Cursor Controllers. private InsertionPointCursorController mInsertionPointCursorController; SelectionModifierCursorController mSelectionModifierCursorController; @@ -3894,6 +3897,10 @@ public class Editor { menu.add(TextView.ID_ASSIST, TextView.ID_ASSIST, MENU_ITEM_ORDER_ASSIST, label) .setIcon(icon) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + mMetricsLogger.write( + new LogMaker(MetricsEvent.TEXT_SELECTION_MENU_ITEM_ASSIST) + .setType(MetricsEvent.TYPE_OPEN) + .setSubtype(textClassificationResult.getLogType())); } } } @@ -3922,6 +3929,9 @@ public class Editor { .onClick(mTextView); } } + mMetricsLogger.action( + MetricsEvent.ACTION_TEXT_SELECTION_MENU_ITEM_ASSIST, + textClassificationResult.getLogType()); stopTextActionMode(); return true; } diff --git a/core/java/android/widget/TextViewMetrics.java b/core/java/android/widget/TextViewMetrics.java index 0a14d3e8b466..96d17943bf09 100644 --- a/core/java/android/widget/TextViewMetrics.java +++ b/core/java/android/widget/TextViewMetrics.java @@ -21,20 +21,45 @@ package android.widget; * * @hide */ -final class TextViewMetrics { +public final class TextViewMetrics { private TextViewMetrics() {} /** * Long press on TextView - no special classification. */ - static final int SUBTYPE_LONG_PRESS_OTHER = 0; + public static final int SUBTYPE_LONG_PRESS_OTHER = 0; /** * Long press on TextView - selection started. */ - static final int SUBTYPE_LONG_PRESS_SELECTION = 1; + public static final int SUBTYPE_LONG_PRESS_SELECTION = 1; /** * Long press on TextView - drag and drop started. */ - static final int SUBTYPE_LONG_PRESS_DRAG_AND_DROP = 2; + public static final int SUBTYPE_LONG_PRESS_DRAG_AND_DROP = 2; + + /** + * Assist menu item (shown or clicked) - classification: other. + */ + public static final int SUBTYPE_ASSIST_MENU_ITEM_OTHER = 0; + + /** + * Assist menu item (shown or clicked) - classification: email. + */ + public static final int SUBTYPE_ASSIST_MENU_ITEM_EMAIL = 1; + + /** + * Assist menu item (shown or clicked) - classification: phone. + */ + public static final int SUBTYPE_ASSIST_MENU_ITEM_PHONE = 2; + + /** + * Assist menu item (shown or clicked) - classification: address. + */ + public static final int SUBTYPE_ASSIST_MENU_ITEM_ADDRESS = 3; + + /** + * Assist menu item (shown or clicked) - classification: url. + */ + public static final int SUBTYPE_ASSIST_MENU_ITEM_URL = 4; } diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index f56cbdda734b..fc70b2b8a87b 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -3911,6 +3911,18 @@ message MetricsEvent { // OS: O APPLICATIONS_STORAGE_MOVIES = 935; + // OPEN: Text selection "assist" menu item shown. + // SUBTYPE: 1 is for EMAIL, 2 is for PHONE, 3 is for ADDRESS, 4 is for URL, 0 is for OTHER. + // CATEGORY: TEXT_CONTROLS + // OS: O + TEXT_SELECTION_MENU_ITEM_ASSIST = 936; + + // ACTION: Text selection "assist" menu item clicked. + // SUBTYPE: 1 is for EMAIL, 2 is for PHONE, 3 is for ADDRESS, 4 is for URL, 0 is for OTHER. + // CATEGORY: TEXT_CONTROLS + // OS: O + ACTION_TEXT_SELECTION_MENU_ITEM_ASSIST = 937; + // ---- End O Constants, all O constants go above this line ---- // Add new aosp constants above this line. |