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

Commit 6e38d26c authored by Ken Wakasa's avatar Ken Wakasa Committed by Android (Google) Code Review
Browse files

Merge "Fix the sort order of the input methods & subtypes in the settings." into honeycomb-mr1

parents f8b8a3fa 761eb376
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -89,16 +89,14 @@ public class InputMethodsPanel extends LinearLayout implements StatusBarPanel,
        public int compare(InputMethodInfo imi1, InputMethodInfo imi2) {
            if (imi2 == null) return 0;
            if (imi1 == null) return 1;
            if (mPackageManager != null) {
            if (mPackageManager == null) {
                return imi1.getId().compareTo(imi2.getId());
            }
            CharSequence imiId1 = imi1.loadLabel(mPackageManager) + "/" + imi1.getId();
            CharSequence imiId2 = imi2.loadLabel(mPackageManager) + "/" + imi2.getId();
                if (imiId1 != null && imiId2 != null) {
            return imiId1.toString().compareTo(imiId2.toString());
        }
    }
            return imi1.getId().compareTo(imi2.getId());
        }
    }

    public InputMethodsPanel(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
@@ -267,7 +265,6 @@ public class InputMethodsPanel extends LinearLayout implements StatusBarPanel,

        Map<InputMethodInfo, List<InputMethodSubtype>> enabledIMIs =
                getEnabledInputMethodAndSubtypeList();
        // TODO: Sort by alphabet and mode.
        Set<InputMethodInfo> cachedImiSet = enabledIMIs.keySet();
        for (InputMethodInfo imi: cachedImiSet) {
            List<InputMethodSubtype> subtypes = enabledIMIs.get(imi);
+34 −12
Original line number Diff line number Diff line
@@ -82,8 +82,8 @@ import android.view.inputmethod.InputMethodSubtype;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -1750,10 +1750,28 @@ public class InputMethodManagerService extends IInputMethodManager.Stub

            hideInputMethodMenuLocked();

            final Map<CharSequence, Pair<InputMethodInfo, Integer>> imMap =
                new TreeMap<CharSequence, Pair<InputMethodInfo, Integer>>(Collator.getInstance());
            final TreeMap<InputMethodInfo, List<InputMethodSubtype>> sortedImmis =
                    new TreeMap<InputMethodInfo, List<InputMethodSubtype>>(
                            new Comparator<InputMethodInfo>() {
                                @Override
                                public int compare(InputMethodInfo imi1, InputMethodInfo imi2) {
                                    if (imi2 == null) return 0;
                                    if (imi1 == null) return 1;
                                    if (pm == null) {
                                        return imi1.getId().compareTo(imi2.getId());
                                    }
                                    CharSequence imiId1 = imi1.loadLabel(pm) + "/" + imi1.getId();
                                    CharSequence imiId2 = imi2.loadLabel(pm) + "/" + imi2.getId();
                                    return imiId1.toString().compareTo(imiId2.toString());
                                }
                            });

            for (InputMethodInfo imi: immis.keySet()) {
            sortedImmis.putAll(immis);

            final ArrayList<Pair<CharSequence, Pair<InputMethodInfo, Integer>>> imList =
                    new ArrayList<Pair<CharSequence, Pair<InputMethodInfo, Integer>>>();

            for (InputMethodInfo imi : sortedImmis.keySet()) {
                if (imi == null) continue;
                List<InputMethodSubtype> explicitlyOrImplicitlyEnabledSubtypeList = immis.get(imi);
                HashSet<String> enabledSubtypeSet = new HashSet<String>();
@@ -1767,35 +1785,39 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                    for (int j = 0; j < subtypeCount; ++j) {
                        InputMethodSubtype subtype = imi.getSubtypeAt(j);
                        if (enabledSubtypeSet.contains(String.valueOf(subtype.hashCode()))) {
                            CharSequence title;
                            final CharSequence title;
                            int nameResId = subtype.getNameResId();
                            String mode = subtype.getMode();
                            if (nameResId != 0) {
                                title = TextUtils.concat(pm.getText(imi.getPackageName(),
                                        nameResId, imi.getServiceInfo().applicationInfo),
                                        " (", label, ")");
                                        (TextUtils.isEmpty(label) ? "" : " (" + label + ")"));
                            } else {
                                CharSequence language = subtype.getLocale();
                                // TODO: Use more friendly Title and UI
                                title = label + "," + (mode == null ? "" : mode) + ","
                                        + (language == null ? "" : language);
                            }
                            imMap.put(title, new Pair<InputMethodInfo, Integer>(imi, j));
                            imList.add(new Pair<CharSequence, Pair<InputMethodInfo, Integer>>(
                                    title, new Pair<InputMethodInfo, Integer>(imi, j)));
                        }
                    }
                } else {
                    imMap.put(label,
                            new Pair<InputMethodInfo, Integer>(imi, NOT_A_SUBTYPE_ID));
                    imList.add(new Pair<CharSequence, Pair<InputMethodInfo, Integer>>(
                            label, new Pair<InputMethodInfo, Integer>(imi, NOT_A_SUBTYPE_ID)));
                }
            }

            final int N = imMap.size();
            mItems = imMap.keySet().toArray(new CharSequence[N]);
            final int N = imList.size();
            mItems = new CharSequence[N];
            for (int i = 0; i < N; ++i) {
                mItems[i] = imList.get(i).first;
            }
            mIms = new InputMethodInfo[N];
            mSubtypeIds = new int[N];
            int checkedItem = 0;
            for (int i = 0; i < N; ++i) {
                Pair<InputMethodInfo, Integer> value = imMap.get(mItems[i]);
                Pair<InputMethodInfo, Integer> value = imList.get(i).second;
                mIms[i] = value.first;
                mSubtypeIds[i] = value.second;
                if (mIms[i].getId().equals(lastInputMethodId)) {