summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2017-01-10 15:47:19 +0900
committerTadashi G. Takaoka <takaoka@google.com>2017-01-10 17:07:50 +0900
commite776821a8d5429bfe9e2aa259169d6980718f420 (patch)
treefa8418bbe3eac24c5c16024fe1b727ef2c6a60cd /src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
parent7bbc632bfb9773c28d353275e2bd240d41103455 (diff)
downloadpackages_apps_Settings-e776821a8d5429bfe9e2aa259169d6980718f420.tar.gz
packages_apps_Settings-e776821a8d5429bfe9e2aa259169d6980718f420.tar.bz2
packages_apps_Settings-e776821a8d5429bfe9e2aa259169d6980718f420.zip
Move IME related seach landing pages to its fragments
This CL moves the code building index of IMEs from InputMethodAndLanguageSettings to VirtualKeyboardFragment and AvailableVirtualKeyboardFragment, so that a search landing page of IME becomes one of the fragment correctly depending on the IME state. Bug: 32643633 Test: Manually installing/uninstalling AOSP LatinIME.apk while Settings app is/isn't running, then search AOSP and verify the landing page is correctly determined by the IME's enable state. Test: Update robolectric DynamicIndexableContentMonitorTest Change-Id: Ie44f358c2d3919fc864f4f88e6229293113823dd
Diffstat (limited to 'src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java')
-rw-r--r--src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java55
1 files changed, 54 insertions, 1 deletions
diff --git a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
index 0dbab44d43..b9c0796258 100644
--- a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
+import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -33,9 +34,14 @@ import android.os.Bundle;
import android.support.v7.preference.PreferenceScreen;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
+import android.view.inputmethod.InputMethodSubtype;
+
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
import java.text.Collator;
import java.util.ArrayList;
@@ -44,7 +50,7 @@ import java.util.Comparator;
import java.util.List;
public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFragment
- implements InputMethodPreference.OnSavePreferenceListener {
+ implements InputMethodPreference.OnSavePreferenceListener, Indexable {
private final ArrayList<InputMethodPreference> mInputMethodPreferenceList = new ArrayList<>();
private InputMethodSettingValuesWrapper mInputMethodSettingValues;
@@ -169,4 +175,51 @@ public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFr
pref.updatePreferenceViews();
}
}
+
+ private static List<InputMethodSubtype> getAllSubtypesOf(final InputMethodInfo imi) {
+ final int subtypeCount = imi.getSubtypeCount();
+ final List<InputMethodSubtype> allSubtypes = new ArrayList<>(subtypeCount);
+ for (int index = 0; index < subtypeCount; index++) {
+ allSubtypes.add(imi.getSubtypeAt(index));
+ }
+ return allSubtypes;
+ }
+
+ static List<SearchIndexableRaw> buildSearchIndexOfInputMethods(final Context context,
+ final List<InputMethodInfo> inputMethods, final String screenTitle) {
+ final List<SearchIndexableRaw> indexes = new ArrayList<>();
+ final InputMethodManager imm = (InputMethodManager) context.getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ for (int i = 0; i < inputMethods.size(); i++) {
+ final InputMethodInfo imi = inputMethods.get(i);
+ final ServiceInfo serviceInfo = imi.getServiceInfo();
+ final SearchIndexableRaw index = new SearchIndexableRaw(context);
+ index.key = new ComponentName(serviceInfo.packageName, serviceInfo.name)
+ .flattenToString();
+ index.title = imi.loadLabel(context.getPackageManager()).toString();
+ index.summaryOn = index.summaryOff = InputMethodAndSubtypeUtil
+ .getSubtypeLocaleNameListAsSentence(getAllSubtypesOf(imi), context, imi);
+ index.screenTitle = screenTitle;
+ indexes.add(index);
+ }
+ return indexes;
+ }
+
+ public static Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
+ @Override
+ public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+ final InputMethodManager imm = context.getSystemService(InputMethodManager.class);
+ final List<InputMethodInfo> enabledInputMethods = imm.getEnabledInputMethodList();
+ final List<InputMethodInfo> disabledInputMethods = new ArrayList<>();
+ for (final InputMethodInfo imi : imm.getInputMethodList()) {
+ if (!enabledInputMethods.contains(imi)) {
+ disabledInputMethods.add(imi);
+ }
+ }
+ final String screenTitle = context.getString(
+ R.string.available_virtual_keyboard_category);
+ return buildSearchIndexOfInputMethods(context, disabledInputMethods, screenTitle);
+ }
+ };
}