diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-12-21 02:36:32 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-12-21 02:36:32 +0000 |
| commit | 84cdbdfc1301d02409c525de9f5092ff3ed84d6d (patch) | |
| tree | 90a079935b36cbccb67b503e3dc75b7c91a49417 /core/java/android | |
| parent | 5f5461ad1a48ce2b8113293bad1c1fd639907185 (diff) | |
| parent | e94e0787db1b5b8ce5fe533634bd116a063faef1 (diff) | |
Merge "Send logs to TextClassifier by calling onTextClassifierEvent in NAS"
Diffstat (limited to 'core/java/android')
4 files changed, 72 insertions, 8 deletions
diff --git a/core/java/android/service/notification/NotificationAssistantService.java b/core/java/android/service/notification/NotificationAssistantService.java index c850a4e0f815..dd0242ae2dc8 100644 --- a/core/java/android/service/notification/NotificationAssistantService.java +++ b/core/java/android/service/notification/NotificationAssistantService.java @@ -19,7 +19,7 @@ package android.service.notification; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.annotation.IntDef; -import android.annotation.Nullable; +import android.annotation.NonNull; import android.annotation.SdkConstant; import android.annotation.SystemApi; import android.annotation.TestApi; @@ -179,13 +179,13 @@ public abstract class NotificationAssistantService extends NotificationListenerS * @param isExpanded whether the notification is expanded. */ public void onNotificationExpansionChanged( - String key, boolean isUserAction, boolean isExpanded) {} + @NonNull String key, boolean isUserAction, boolean isExpanded) {} /** * Implement this to know when a direct reply is sent from a notification. * @param key the notification key */ - public void onNotificationDirectReply(String key) {} + public void onNotificationDirectReply(@NonNull String key) {} /** * Implement this to know when a suggested reply is sent. @@ -193,7 +193,9 @@ public abstract class NotificationAssistantService extends NotificationListenerS * @param reply the reply that is just sent * @param source the source that provided the reply, e.g. SOURCE_FROM_APP */ - public void onSuggestedReplySent(String key, CharSequence reply, @Source int source) {} + public void onSuggestedReplySent(@NonNull String key, @NonNull CharSequence reply, + @Source int source) { + } /** * Implement this to know when an action is clicked. @@ -201,7 +203,8 @@ public abstract class NotificationAssistantService extends NotificationListenerS * @param action the action that is just clicked * @param source the source that provided the action, e.g. SOURCE_FROM_APP */ - public void onActionClicked(String key, @Nullable Notification.Action action, int source) { + public void onActionClicked(@NonNull String key, @NonNull Notification.Action action, + @Source int source) { } /** diff --git a/core/java/android/view/textclassifier/ActionsSuggestionsHelper.java b/core/java/android/view/textclassifier/ActionsSuggestionsHelper.java index b41096c74bf7..77cb4cd28763 100644 --- a/core/java/android/view/textclassifier/ActionsSuggestionsHelper.java +++ b/core/java/android/view/textclassifier/ActionsSuggestionsHelper.java @@ -17,6 +17,7 @@ package android.view.textclassifier; import android.app.Person; +import android.content.Context; import android.text.TextUtils; import android.util.ArrayMap; @@ -28,7 +29,10 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.Objects; +import java.util.StringJoiner; import java.util.function.Function; import java.util.stream.Collectors; @@ -84,6 +88,29 @@ public final class ActionsSuggestionsHelper { new ActionsSuggestionsModel.ConversationMessage[nativeMessages.size()]); } + /** + * Returns the result id for logging. + */ + public static String createResultId( + Context context, + List<ConversationActions.Message> messages, + int modelVersion, + List<Locale> modelLocales) { + final StringJoiner localesJoiner = new StringJoiner(","); + for (Locale locale : modelLocales) { + localesJoiner.add(locale.toLanguageTag()); + } + 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()); + return SelectionSessionLogger.SignatureParser.createSignature( + SelectionSessionLogger.CLASSIFIER_ID, modelName, hash); + } + private static final class PersonEncoder { private final Map<Person, Integer> mMapping = new ArrayMap<>(); private int mNextUserId = FIRST_NON_LOCAL_USER; diff --git a/core/java/android/view/textclassifier/TextClassifierEvent.java b/core/java/android/view/textclassifier/TextClassifierEvent.java index 3bb9ee88dae9..f2fea02171f9 100644 --- a/core/java/android/view/textclassifier/TextClassifierEvent.java +++ b/core/java/android/view/textclassifier/TextClassifierEvent.java @@ -27,6 +27,7 @@ import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.Arrays; /** * A text classifier event. @@ -498,4 +499,25 @@ public final class TextClassifierEvent implements Parcelable { } // TODO: Add build(boolean validate). } + + @Override + public String toString() { + StringBuilder out = new StringBuilder(128); + out.append("TextClassifierEvent{"); + out.append("mEventCategory=").append(mEventCategory); + out.append(", mEventType=").append(mEventType); + out.append(", mEventContext=").append(mEventContext); + out.append(", mResultId=").append(mResultId); + out.append(", mEventIndex=").append(mEventIndex); + out.append(", mEventTime=").append(mEventTime); + out.append(", mExtras=").append(mExtras); + out.append(", mRelativeWordStartIndex=").append(mRelativeWordStartIndex); + out.append(", mRelativeWordEndIndex=").append(mRelativeWordEndIndex); + out.append(", mRelativeSuggestedWordStartIndex=").append(mRelativeSuggestedWordStartIndex); + out.append(", mRelativeSuggestedWordEndIndex=").append(mRelativeSuggestedWordEndIndex); + out.append(", mActionIndices=").append(Arrays.toString(mActionIndices)); + out.append(", mLanguage=").append(mLanguage); + out.append("}"); + return out.toString(); + } } diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java index 9b0f9c6ee5e8..fcd06c384921 100644 --- a/core/java/android/view/textclassifier/TextClassifierImpl.java +++ b/core/java/android/view/textclassifier/TextClassifierImpl.java @@ -80,6 +80,8 @@ public final class TextClassifierImpl implements TextClassifier { private static final String LOG_TAG = DEFAULT_LOG_TAG; + private static final boolean DEBUG = false; + private static final File FACTORY_MODEL_DIR = new File("/etc/textclassifier/"); // Annotator private static final String ANNOTATOR_FACTORY_MODEL_FILENAME_REGEX = @@ -109,6 +111,8 @@ public final class TextClassifierImpl implements TextClassifier { @GuardedBy("mLock") // Do not access outside this lock. private LangIdModel mLangIdImpl; @GuardedBy("mLock") // Do not access outside this lock. + private ModelFileManager.ModelFile mActionModelInUse; + @GuardedBy("mLock") // Do not access outside this lock. private ActionsSuggestionsModel mActionsImpl; private final Object mLoggerLock = new Object(); @@ -342,8 +346,10 @@ public final class TextClassifierImpl implements TextClassifier { } @Override - public void onTextClassifierEvent(@NonNull TextClassifierEvent event) { - // TODO: Implement. + public void onTextClassifierEvent(TextClassifierEvent event) { + if (DEBUG) { + Log.d(DEFAULT_LOG_TAG, "onTextClassifierEvent() called with: event = [" + event + "]"); + } } /** @inheritDoc */ @@ -408,7 +414,12 @@ public final class TextClassifierImpl implements TextClassifier { .setConfidenceScore(nativeSuggestion.getScore()) .build()); } - return new ConversationActions(conversationActions, /*id*/ null); + String resultId = ActionsSuggestionsHelper.createResultId( + mContext, + request.getConversation(), + mActionModelInUse.getVersion(), + mActionModelInUse.getSupportedLocales()); + return new ConversationActions(conversationActions, resultId); } catch (Throwable t) { // Avoid throwing from this method. Log the error. Log.e(LOG_TAG, "Error suggesting conversation actions.", t); @@ -517,6 +528,7 @@ public final class TextClassifierImpl implements TextClassifier { try { if (pfd != null) { mActionsImpl = new ActionsSuggestionsModel(pfd.getFd()); + mActionModelInUse = bestModel; } } finally { maybeCloseAndLogError(pfd); |
