diff --git a/services/java/com/android/server/TextServicesManagerService.java b/services/java/com/android/server/TextServicesManagerService.java index ef48b9e2bc307..788ecda647c09 100644 --- a/services/java/com/android/server/TextServicesManagerService.java +++ b/services/java/com/android/server/TextServicesManagerService.java @@ -43,10 +43,13 @@ import android.util.Slog; import android.view.textservice.SpellCheckerInfo; import android.view.textservice.SpellCheckerSubtype; +import java.io.FileDescriptor; import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; public class TextServicesManagerService extends ITextServicesManager.Stub { private static final String TAG = TextServicesManagerService.class.getSimpleName(); @@ -480,6 +483,66 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } } + @Override + protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) + != PackageManager.PERMISSION_GRANTED) { + + pw.println("Permission Denial: can't dump TextServicesManagerService from from pid=" + + Binder.getCallingPid() + + ", uid=" + Binder.getCallingUid()); + return; + } + + 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 + : 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