Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85df698d authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

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
parent 92f3efa4
Loading
Loading
Loading
Loading
+21 −1
Original line number Original line Diff line number Diff line
@@ -31,10 +31,12 @@ import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.util.PrintWriterPrinter;
import android.util.Slog;
import android.util.Slog;
import android.util.Xml;
import android.util.Xml;


import java.io.IOException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.ArrayList;


/**
/**
@@ -55,7 +57,7 @@ public final class SpellCheckerInfo implements Parcelable {
    /**
    /**
     * The array of subtypes.
     * The array of subtypes.
     */
     */
    private final ArrayList<SpellCheckerSubtype> mSubtypes = new ArrayList<SpellCheckerSubtype>();
    private final ArrayList<SpellCheckerSubtype> mSubtypes = new ArrayList<>();


    /**
    /**
     * Constructor.
     * Constructor.
@@ -267,4 +269,22 @@ public final class SpellCheckerInfo implements Parcelable {
    public int describeContents() {
    public int describeContents() {
        return 0;
        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());
        }
    }
}
}
+29 −38
Original line number Original line Diff line number Diff line
@@ -774,50 +774,36 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {


        synchronized(mSpellCheckerMap) {
        synchronized(mSpellCheckerMap) {
            pw.println("Current Text Services Manager state:");
            pw.println("Current Text Services Manager state:");
            pw.println("  Spell Checker Map:");
            pw.println("  Spell Checkers:");
            for (Map.Entry<String, SpellCheckerInfo> ent : mSpellCheckerMap.entrySet()) {
            int spellCheckerIndex = 0;
                pw.print("    "); pw.print(ent.getKey()); pw.println(":");
            for (final SpellCheckerInfo info : mSpellCheckerMap.values()) {
                SpellCheckerInfo info = ent.getValue();
                pw.println("  Spell Checker #" + spellCheckerIndex);
                pw.print("      "); pw.print("id="); pw.println(info.getId());
                info.dump(pw, "    ");
                pw.print("      "); pw.print("comp=");
                ++spellCheckerIndex;
                        pw.println(info.getComponent().toShortString());
                int NS = info.getSubtypeCount();
                for (int i=0; i<NS; i++) {
                    SpellCheckerSubtype st = info.getSubtypeAt(i);
                    pw.print("      "); pw.print("Subtype #"); pw.print(i); pw.println(":");
                    pw.print("        "); pw.print("locale="); pw.println(st.getLocale());
                    pw.print("        "); pw.print("extraValue=");
                            pw.println(st.getExtraValue());
                }
            }
            }
            pw.println("");
            pw.println("");
            pw.println("  Spell Checker Bind Groups:");
            pw.println("  Spell Checker Bind Groups:");
            for (Map.Entry<String, SpellCheckerBindGroup> ent
            for (final Map.Entry<String, SpellCheckerBindGroup> ent
                    : mSpellCheckerBindGroups.entrySet()) {
                    : mSpellCheckerBindGroups.entrySet()) {
                SpellCheckerBindGroup grp = ent.getValue();
                final SpellCheckerBindGroup grp = ent.getValue();
                pw.print("    "); pw.print(ent.getKey()); pw.print(" ");
                pw.println("    " + ent.getKey() + " " + grp + ":");
                        pw.print(grp); pw.println(":");
                pw.println("      " + "mInternalConnection=" + grp.mInternalConnection);
                pw.print("      "); pw.print("mInternalConnection=");
                pw.println("      " + "mSpellChecker=" + grp.mSpellChecker);
                        pw.println(grp.mInternalConnection);
                pw.println("      " + "mBound=" + grp.mBound + " mConnected=" + grp.mConnected);
                pw.print("      "); pw.print("mSpellChecker=");
                final int N = grp.mListeners.size();
                        pw.println(grp.mSpellChecker);
                for (int i = 0; i < N; i++) {
                pw.print("      "); pw.print("mBound="); pw.print(grp.mBound);
                    final InternalDeathRecipient listener = grp.mListeners.get(i);
                        pw.print(" mConnected="); pw.println(grp.mConnected);
                    pw.println("      " + "Listener #" + i + ":");
                int NL = grp.mListeners.size();
                    pw.println("        " + "mTsListener=" + listener.mTsListener);
                for (int i=0; i<NL; i++) {
                    pw.println("        " + "mScListener=" + listener.mScListener);
                    InternalDeathRecipient listener = grp.mListeners.get(i);
                    pw.println("        " + "mGroup=" + listener.mGroup);
                    pw.print("      "); pw.print("Listener #"); pw.print(i); pw.println(":");
                    pw.println("        " + "mScLocale=" + listener.mScLocale
                    pw.print("        "); pw.print("mTsListener=");
                            + " mUid=" + listener.mUid);
                            pw.println(listener.mTsListener);
                    pw.print("        "); pw.print("mScListener=");
                            pw.println(listener.mScListener);
                    pw.print("        "); pw.print("mGroup=");
                            pw.println(listener.mGroup);
                    pw.print("        "); pw.print("mScLocale=");
                            pw.print(listener.mScLocale);
                            pw.print(" mUid="); pw.println(listener.mUid);
                }
                }
            }
            }
            pw.println("");
            pw.println("  mSettings:");
            mSettings.dumpLocked(pw, "    ");
        }
        }
    }
    }


@@ -1119,6 +1105,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
        public boolean isSpellCheckerEnabled() {
        public boolean isSpellCheckerEnabled() {
            return getBoolean(Settings.Secure.SPELL_CHECKER_ENABLED, true);
            return getBoolean(Settings.Secure.SPELL_CHECKER_ENABLED, true);
        }
        }

        public void dumpLocked(final PrintWriter pw, final String prefix) {
            pw.println(prefix + "mCurrentUserId=" + mCurrentUserId);
            pw.println(prefix + "mCurrentProfileIds=" + Arrays.toString(mCurrentProfileIds));
        }
    }
    }


    // ----------------------------------------------------------------------
    // ----------------------------------------------------------------------