From f93e9e5439febff8ff7837fca2f522a49bd04f5c Mon Sep 17 00:00:00 2001 From: Tony Mak Date: Mon, 16 Jul 2018 14:46:29 +0200 Subject: [PATCH] Include textclassifier info in dumpsys Example output: Text classifier constants=null TextClassifierImpl: Model file(s): ModelFile { path=/data/misc/textclassifier/textclassifier.model name=textclassifier.model version=603 locales=en } ModelFile { path=/etc/textclassifier/textclassifier.universal.model name=textclassifier.universal.model version=6 locales=und } ModelFile { path=/etc/textclassifier/textclassifier.en.model name=textclassifier.en.model version=6 locales=en } mFallback=android.view.textclassifier.TextClassifier$1@8269b3 SystemTextClassifier: mFallback=android.view.textclassifier.TextClassifierImpl@72dbb70 mPackageName=android mSessionId=null isSystemTextClassifierEnabled=true TextClassificationConstants: isLocalTextClassifierEnabled=true isSystemTextClassifierEnabled=true isModelDarkLaunchEnabled=false isSmartSelectionEnabled=true isSmartTextShareEnabled=true isSmartLinkifyEnabled=true isSmartSelectionAnimationEnabled=true getSuggestSelectionMaxRangeLength=10000 getClassifyTextMaxRangeLength=10000 getGenerateLinksMaxTextLength=100000 getGenerateLinksLogSampleRate=100 getEntityListDefault=[address, email, phone, url, date, datetime, flight] getEntityListNotEditable=[address, email, phone, url, date, datetime, flight] getEntityListEditable=[address, email, phone, url, date, datetime, flight] FIXES: 111434669 Test: adb shell dumpsys textclassification Change-Id: If0cbc290034ff51ec31fed1ce08e5bc806603549 --- .../view/textclassifier/SystemTextClassifier.java | 12 +++++++++++ .../TextClassificationConstants.java | 23 ++++++++++++++++++++++ .../textclassifier/TextClassificationManager.java | 8 ++++++++ .../view/textclassifier/TextClassifier.java | 6 ++++++ .../view/textclassifier/TextClassifierImpl.java | 19 ++++++++++++++++++ .../TextClassificationManagerService.java | 15 ++++++++++++++ 6 files changed, 83 insertions(+) diff --git a/core/java/android/view/textclassifier/SystemTextClassifier.java b/core/java/android/view/textclassifier/SystemTextClassifier.java index 10191e0edbf7..16eb5afd978f 100644 --- a/core/java/android/view/textclassifier/SystemTextClassifier.java +++ b/core/java/android/view/textclassifier/SystemTextClassifier.java @@ -30,6 +30,7 @@ import android.service.textclassifier.ITextSelectionCallback; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting.Visibility; +import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import java.util.concurrent.CountDownLatch; @@ -162,6 +163,17 @@ public final class SystemTextClassifier implements TextClassifier { } } + @Override + public void dump(@NonNull IndentingPrintWriter printWriter) { + printWriter.println("SystemTextClassifier:"); + printWriter.increaseIndent(); + printWriter.printPair("mFallback", mFallback); + printWriter.printPair("mPackageName", mPackageName); + printWriter.printPair("mSessionId", mSessionId); + printWriter.decreaseIndent(); + printWriter.println(); + } + /** * Attempts to initialize a new classification session. * diff --git a/core/java/android/view/textclassifier/TextClassificationConstants.java b/core/java/android/view/textclassifier/TextClassificationConstants.java index 21b56031556c..2fc74221a456 100644 --- a/core/java/android/view/textclassifier/TextClassificationConstants.java +++ b/core/java/android/view/textclassifier/TextClassificationConstants.java @@ -20,6 +20,8 @@ import android.annotation.Nullable; import android.util.KeyValueListParser; import android.util.Slog; +import com.android.internal.util.IndentingPrintWriter; + import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -241,4 +243,25 @@ public final class TextClassificationConstants { private static List parseEntityList(String listStr) { return Collections.unmodifiableList(Arrays.asList(listStr.split(ENTITY_LIST_DELIMITER))); } + + void dump(IndentingPrintWriter pw) { + pw.println("TextClassificationConstants:"); + pw.increaseIndent(); + pw.printPair("isLocalTextClassifierEnabled", mLocalTextClassifierEnabled); + pw.printPair("isSystemTextClassifierEnabled", mSystemTextClassifierEnabled); + pw.printPair("isModelDarkLaunchEnabled", mModelDarkLaunchEnabled); + pw.printPair("isSmartSelectionEnabled", mSmartSelectionEnabled); + pw.printPair("isSmartTextShareEnabled", mSmartTextShareEnabled); + pw.printPair("isSmartLinkifyEnabled", mSmartLinkifyEnabled); + pw.printPair("isSmartSelectionAnimationEnabled", mSmartSelectionAnimationEnabled); + pw.printPair("getSuggestSelectionMaxRangeLength", mSuggestSelectionMaxRangeLength); + pw.printPair("getClassifyTextMaxRangeLength", mClassifyTextMaxRangeLength); + pw.printPair("getGenerateLinksMaxTextLength", mGenerateLinksMaxTextLength); + pw.printPair("getGenerateLinksLogSampleRate", mGenerateLinksLogSampleRate); + pw.printPair("getEntityListDefault", mEntityListDefault); + pw.printPair("getEntityListNotEditable", mEntityListNotEditable); + pw.printPair("getEntityListEditable", mEntityListEditable); + pw.decreaseIndent(); + pw.println(); + } } diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java index dc1194bbe07c..201218ba86f4 100644 --- a/core/java/android/view/textclassifier/TextClassificationManager.java +++ b/core/java/android/view/textclassifier/TextClassificationManager.java @@ -27,6 +27,7 @@ import android.service.textclassifier.TextClassifierService; import android.view.textclassifier.TextClassifier.TextClassifierType; import com.android.internal.annotations.GuardedBy; +import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import java.lang.ref.WeakReference; @@ -246,6 +247,13 @@ public final class TextClassificationManager { : mContext; } + /** @hide **/ + public void dump(IndentingPrintWriter pw) { + getLocalTextClassifier().dump(pw); + getSystemTextClassifier().dump(pw); + getSettings().dump(pw); + } + /** @hide */ public static TextClassificationConstants getSettings(Context context) { Preconditions.checkNotNull(context); diff --git a/core/java/android/view/textclassifier/TextClassifier.java b/core/java/android/view/textclassifier/TextClassifier.java index 24f531ded05c..1505863ad276 100644 --- a/core/java/android/view/textclassifier/TextClassifier.java +++ b/core/java/android/view/textclassifier/TextClassifier.java @@ -34,6 +34,7 @@ import android.text.util.Linkify.LinkifyMask; import android.util.ArrayMap; import android.util.ArraySet; +import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; @@ -390,6 +391,11 @@ public interface TextClassifier { return false; } + /** @hide **/ + default void dump(@NonNull IndentingPrintWriter printWriter) { + + } + /** * Configuration object for specifying what entities to identify. * diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java index 6e5751abbc40..29339e915ce0 100644 --- a/core/java/android/view/textclassifier/TextClassifierImpl.java +++ b/core/java/android/view/textclassifier/TextClassifierImpl.java @@ -41,6 +41,7 @@ import android.provider.CalendarContract; import android.provider.ContactsContract; import com.android.internal.annotations.GuardedBy; +import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import java.io.File; @@ -439,6 +440,24 @@ public final class TextClassifierImpl implements TextClassifier { return builder.setId(createId(text, start, end)).build(); } + @Override + public void dump(@NonNull IndentingPrintWriter printWriter) { + synchronized (mLock) { + listAllModelsLocked(); + printWriter.println("TextClassifierImpl:"); + printWriter.increaseIndent(); + printWriter.println("Model file(s):"); + printWriter.increaseIndent(); + for (ModelFile modelFile : mAllModelFiles) { + printWriter.println(modelFile.toString()); + } + printWriter.decreaseIndent(); + printWriter.printPair("mFallback", mFallback); + printWriter.decreaseIndent(); + printWriter.println(); + } + } + /** * Closes the ParcelFileDescriptor and logs any errors that occur. */ diff --git a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java index 2742b0fa5d10..005212f95edb 100644 --- a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java +++ b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java @@ -28,6 +28,7 @@ import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; import android.os.UserHandle; +import android.provider.Settings; import android.service.textclassifier.ITextClassificationCallback; import android.service.textclassifier.ITextClassifierService; import android.service.textclassifier.ITextLinksCallback; @@ -38,16 +39,22 @@ import android.util.SparseArray; import android.view.textclassifier.SelectionEvent; import android.view.textclassifier.TextClassification; import android.view.textclassifier.TextClassificationContext; +import android.view.textclassifier.TextClassificationManager; import android.view.textclassifier.TextClassificationSessionId; +import android.view.textclassifier.TextClassifier; import android.view.textclassifier.TextLinks; import android.view.textclassifier.TextSelection; import com.android.internal.annotations.GuardedBy; +import com.android.internal.util.DumpUtils; import com.android.internal.util.FunctionalUtils; import com.android.internal.util.FunctionalUtils.ThrowingRunnable; +import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.server.SystemService; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.ArrayDeque; import java.util.Queue; @@ -259,6 +266,14 @@ public final class TextClassificationManagerService extends ITextClassifierServi return mUserStates.get(userId); } + @Override + protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) { + if (!DumpUtils.checkDumpPermission(mContext, LOG_TAG, fout)) return; + IndentingPrintWriter pw = new IndentingPrintWriter(fout, " "); + TextClassificationManager tcm = mContext.getSystemService(TextClassificationManager.class); + tcm.dump(pw); + } + private static final class PendingRequest implements IBinder.DeathRecipient { @Nullable private final IBinder mBinder; -- 2.11.0