From 85df698df50262602ee2ac622d5c46f630c18f02 Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Tue, 8 Mar 2016 15:16:07 -0800 Subject: [PATCH] Dump spell checker service info from TSMS. This is a preparation CL to make TextServicesManagerService (TSMS) encryption-aware. This CL changes nothing except for the output of TSMS#dump(). To diagnose File-Based Encryption (FBE) related issues, it would be useful if we can see if each spell checker service is encryption-aware or not. To do that this CL updates TSMS#dump() so that it can include the result of ResolveInfo#dump() as we have done in InputMethodManagerService. This CL also updates TSMS#dump() so that its output can be more consistent with IMMS#dump(). Bug: 27456430 Change-Id: Ie2321278f1d52533a3cd74d98f1f84c950a8f6d0 --- .../view/textservice/SpellCheckerInfo.java | 22 +++++- .../server/TextServicesManagerService.java | 67 ++++++++----------- 2 files changed, 50 insertions(+), 39 deletions(-) diff --git a/core/java/android/view/textservice/SpellCheckerInfo.java b/core/java/android/view/textservice/SpellCheckerInfo.java index 471b6d4322f73..fc17f7aed301f 100644 --- a/core/java/android/view/textservice/SpellCheckerInfo.java +++ b/core/java/android/view/textservice/SpellCheckerInfo.java @@ -31,10 +31,12 @@ import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; +import android.util.PrintWriterPrinter; import android.util.Slog; import android.util.Xml; import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; /** @@ -55,7 +57,7 @@ public final class SpellCheckerInfo implements Parcelable { /** * The array of subtypes. */ - private final ArrayList mSubtypes = new ArrayList(); + private final ArrayList mSubtypes = new ArrayList<>(); /** * Constructor. @@ -267,4 +269,22 @@ public final class SpellCheckerInfo implements Parcelable { public int describeContents() { return 0; } + + /** + * @hide + */ + public void dump(final PrintWriter pw, final String prefix) { + pw.println(prefix + "mId=" + mId); + pw.println(prefix + "mSettingsActivityName=" + mSettingsActivityName); + pw.println(prefix + "Service:"); + mService.dump(new PrintWriterPrinter(pw), prefix + " "); + final int N = getSubtypeCount(); + for (int i = 0; i < N; i++) { + final SpellCheckerSubtype st = getSubtypeAt(i); + pw.println(prefix + " " + "Subtype #" + i + ":"); + pw.println(prefix + " " + "locale=" + st.getLocale() + + " languageTag=" + st.getLanguageTag()); + pw.println(prefix + " " + "extraValue=" + st.getExtraValue()); + } + } } diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java index 3f453dc64646d..8bcb7adc1511a 100644 --- a/services/core/java/com/android/server/TextServicesManagerService.java +++ b/services/core/java/com/android/server/TextServicesManagerService.java @@ -774,50 +774,36 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { synchronized(mSpellCheckerMap) { pw.println("Current Text Services Manager state:"); - pw.println(" Spell Checker Map:"); - for (Map.Entry ent : mSpellCheckerMap.entrySet()) { - pw.print(" "); pw.print(ent.getKey()); pw.println(":"); - SpellCheckerInfo info = ent.getValue(); - pw.print(" "); pw.print("id="); pw.println(info.getId()); - pw.print(" "); pw.print("comp="); - pw.println(info.getComponent().toShortString()); - int NS = info.getSubtypeCount(); - for (int i=0; i ent + for (final Map.Entry ent : mSpellCheckerBindGroups.entrySet()) { - SpellCheckerBindGroup grp = ent.getValue(); - pw.print(" "); pw.print(ent.getKey()); pw.print(" "); - pw.print(grp); pw.println(":"); - pw.print(" "); pw.print("mInternalConnection="); - pw.println(grp.mInternalConnection); - pw.print(" "); pw.print("mSpellChecker="); - pw.println(grp.mSpellChecker); - pw.print(" "); pw.print("mBound="); pw.print(grp.mBound); - pw.print(" mConnected="); pw.println(grp.mConnected); - int NL = grp.mListeners.size(); - for (int i=0; i