Revise hasMultipleEnabledIMEsOrSubtypes()

bug: 4559308

Change-Id: If831c0827dbf030eaf1d241ebfa60d4e5029ae63
main
Ken Wakasa 2011-06-07 20:44:46 +09:00
parent f20eb55d4f
commit a88a5eddbc
2 changed files with 37 additions and 1 deletions

View File

@ -48,6 +48,8 @@ public final class InputMethodSubtypeCompatWrapper extends AbstractCompatWrapper
CompatUtils.getMethod(CLASS_InputMethodSubtype, "containsExtraValueKey", String.class);
private static final Method METHOD_getExtraValueOf =
CompatUtils.getMethod(CLASS_InputMethodSubtype, "getExtraValueOf", String.class);
private static final Method METHOD_isAuxiliary =
CompatUtils.getMethod(CLASS_InputMethodSubtype, "isAuxiliary");
private final int mDummyNameResId;
private final int mDummyIconResId;
@ -116,6 +118,10 @@ public final class InputMethodSubtypeCompatWrapper extends AbstractCompatWrapper
return (String)CompatUtils.invoke(mObj, null, METHOD_getExtraValueOf, key);
}
public boolean isAuxiliary() {
return (Boolean)CompatUtils.invoke(mObj, false, METHOD_isAuxiliary);
}
public boolean isDummy() {
return !hasOriginalObject();
}

View File

@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
import com.android.inputmethod.compat.InputTypeCompatUtils;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
@ -43,8 +44,10 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
public class Utils {
@ -109,7 +112,34 @@ public class Utils {
}
public static boolean hasMultipleEnabledIMEsOrSubtypes(InputMethodManagerCompatWrapper imm) {
return imm.getEnabledInputMethodList().size() > 1
final List<InputMethodInfoCompatWrapper> enabledImis = imm.getEnabledInputMethodList();
// Filters out IMEs that have auxiliary subtypes only (including either implicitly or
// explicitly enabled ones).
final ArrayList<InputMethodInfoCompatWrapper> filteredImis =
new ArrayList<InputMethodInfoCompatWrapper>();
outerloop:
for (InputMethodInfoCompatWrapper imi : enabledImis) {
// We can return true immediately after we find two or more filtered IMEs.
if (filteredImis.size() > 1) return true;
final List<InputMethodSubtypeCompatWrapper> subtypes =
imm.getEnabledInputMethodSubtypeList(imi, true);
// IMEs that have no subtypes should be included.
if (subtypes.isEmpty()) {
filteredImis.add(imi);
continue;
}
// IMEs that have one or more non-auxiliary subtypes should be included.
for (InputMethodSubtypeCompatWrapper subtype : subtypes) {
if (!subtype.isAuxiliary()) {
filteredImis.add(imi);
continue outerloop;
}
}
}
return filteredImis.size() > 1
// imm.getEnabledInputMethodSubtypeList(null, false) will return the current IME's enabled
// input method subtype (The current IME should be LatinIME.)
|| imm.getEnabledInputMethodSubtypeList(null, false).size() > 1;