More cleanup in input & language settings.

- Removed unused preferences that are commented out in pref xml.
- Also removed code that references to them in Fragment.

Bug: 32637613
Test: compile/manual
Change-Id: I84be24f9c5df7531843f03b047a93f9aa912432e
This commit is contained in:
Fan Zhang
2016-11-03 15:55:18 -07:00
parent 46debf8256
commit cdaf4f7970
2 changed files with 14 additions and 334 deletions

View File

@@ -15,7 +15,6 @@
--> -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:key="language_keyboard_settings" android:key="language_keyboard_settings"
android:title="@string/language_keyboard_settings_title"> android:title="@string/language_keyboard_settings_title">
@@ -50,26 +49,6 @@
android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment" /> android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment" />
</PreferenceCategory> </PreferenceCategory>
<!-- Temporarily disabled: -->
<!--<PreferenceCategory-->
<!--android:key="keyboard_settings_category"-->
<!--android:title="@string/keyboard_settings_category">-->
<!--<PreferenceScreen-->
<!--android:key="current_input_method"-->
<!--android:title="@string/current_input_method"-->
<!--/>-->
<!--&lt;!&ndash; Enabled input method list will be populated programmatically here. &ndash;&gt;-->
<!--</PreferenceCategory>-->
<!--<PreferenceCategory-->
<!--android:key="hard_keyboard"-->
<!--android:title="@string/builtin_keyboard_settings_title"-->
<!--android:persistent="false">-->
<!--&lt;!&ndash; Additional preference screens are inserted here programmatically-->
<!--with low order values to set the key map of each attached keyboard. &ndash;&gt;-->
<!--</PreferenceCategory>-->
<PreferenceCategory <PreferenceCategory
android:key="voice_category" android:key="voice_category"
android:title="@string/voice_category" > android:title="@string/voice_category" >

View File

@@ -18,20 +18,14 @@ package com.android.settings.inputmethod;
import android.app.Activity; import android.app.Activity;
import android.app.Fragment; import android.app.Fragment;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ServiceInfo; import android.content.pm.ServiceInfo;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.hardware.input.InputDeviceIdentifier; import android.hardware.input.InputDeviceIdentifier;
import android.hardware.input.InputManager; import android.hardware.input.InputManager;
import android.hardware.input.KeyboardLayout; import android.hardware.input.KeyboardLayout;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings; import android.provider.Settings;
import android.provider.Settings.System; import android.provider.Settings.System;
import android.speech.tts.TtsEngines; import android.speech.tts.TtsEngines;
@@ -39,9 +33,6 @@ import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceClickListener; import android.support.v7.preference.Preference.OnPreferenceClickListener;
import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceManager;
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.view.InputDevice; import android.view.InputDevice;
import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
@@ -65,39 +56,23 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable; import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw; import com.android.settings.search.SearchIndexableRaw;
import java.text.Collator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.TreeSet; import java.util.TreeSet;
public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
implements InputManager.InputDeviceListener, implements InputManager.InputDeviceListener,
KeyboardLayoutDialogFragment.OnSetupKeyboardLayoutsListener, Indexable, KeyboardLayoutDialogFragment.OnSetupKeyboardLayoutsListener, Indexable {
InputMethodPreference.OnSavePreferenceListener {
private static final String KEY_SPELL_CHECKERS = "spellcheckers_settings"; private static final String KEY_SPELL_CHECKERS = "spellcheckers_settings";
private static final String KEY_PHONE_LANGUAGE = "phone_language"; private static final String KEY_PHONE_LANGUAGE = "phone_language";
private static final String KEY_CURRENT_INPUT_METHOD = "current_input_method";
private static final String KEY_USER_DICTIONARY_SETTINGS = "key_user_dictionary_settings"; private static final String KEY_USER_DICTIONARY_SETTINGS = "key_user_dictionary_settings";
private static final String KEY_PREVIOUSLY_ENABLED_SUBTYPES = "previously_enabled_subtypes";
private PreferenceCategory mKeyboardSettingsCategory;
private PreferenceCategory mHardKeyboardCategory;
private PreferenceCategory mGameControllerCategory; private PreferenceCategory mGameControllerCategory;
private Preference mLanguagePref; private Preference mLanguagePref;
private final ArrayList<InputMethodPreference> mInputMethodPreferenceList = new ArrayList<>();
private final ArrayList<PreferenceScreen> mHardKeyboardPreferenceList = new ArrayList<>();
private InputManager mIm; private InputManager mIm;
private InputMethodManager mImm;
private boolean mShowsOnlyFullImeAndKeyboardList;
private Handler mHandler;
private SettingsObserver mSettingsObserver;
private Intent mIntentWaitingForResult; private Intent mIntentWaitingForResult;
private InputMethodSettingValuesWrapper mInputMethodSettingValues; private InputMethodSettingValuesWrapper mInputMethodSettingValues;
private DevicePolicyManager mDpm;
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
@@ -111,7 +86,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
addPreferencesFromResource(R.xml.language_settings); addPreferencesFromResource(R.xml.language_settings);
final Activity activity = getActivity(); final Activity activity = getActivity();
mImm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mInputMethodSettingValues = InputMethodSettingValuesWrapper.getInstance(activity); mInputMethodSettingValues = InputMethodSettingValuesWrapper.getInstance(activity);
if (activity.getAssets().getLocales().length == 1) { if (activity.getAssets().getLocales().length == 1) {
@@ -123,28 +97,9 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
new VoiceInputOutputSettings(this).onCreate(); new VoiceInputOutputSettings(this).onCreate();
// Get references to dynamically constructed categories.
mHardKeyboardCategory = (PreferenceCategory)findPreference("hard_keyboard");
mKeyboardSettingsCategory = (PreferenceCategory)findPreference(
"keyboard_settings_category");
mGameControllerCategory = (PreferenceCategory)findPreference( mGameControllerCategory = (PreferenceCategory)findPreference(
"game_controller_settings_category"); "game_controller_settings_category");
final Intent startingIntent = activity.getIntent();
// Filter out irrelevant features if invoked from IME settings button.
mShowsOnlyFullImeAndKeyboardList = Settings.ACTION_INPUT_METHOD_SETTINGS.equals(
startingIntent.getAction());
if (mShowsOnlyFullImeAndKeyboardList) {
getPreferenceScreen().removeAll();
if (mHardKeyboardCategory != null) {
getPreferenceScreen().addPreference(mHardKeyboardCategory);
}
if (mKeyboardSettingsCategory != null) {
mKeyboardSettingsCategory.removeAll();
getPreferenceScreen().addPreference(mKeyboardSettingsCategory);
}
}
// Build hard keyboard and game controller preference categories. // Build hard keyboard and game controller preference categories.
mIm = (InputManager)activity.getSystemService(Context.INPUT_SERVICE); mIm = (InputManager)activity.getSystemService(Context.INPUT_SERVICE);
updateInputDevices(); updateInputDevices();
@@ -162,19 +117,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
R.string.spellcheckers_settings_title); R.string.spellcheckers_settings_title);
spellChecker.setIntent(intent); spellChecker.setIntent(intent);
} }
mHandler = new Handler();
mSettingsObserver = new SettingsObserver(mHandler, activity);
mDpm = (DevicePolicyManager) (getActivity().
getSystemService(Context.DEVICE_POLICY_SERVICE));
// If we've launched from the keyboard layout notification, go ahead and just show the
// keyboard layout dialog.
final InputDeviceIdentifier identifier =
startingIntent.getParcelableExtra(Settings.EXTRA_INPUT_DEVICE_IDENTIFIER);
if (mShowsOnlyFullImeAndKeyboardList && identifier != null) {
showKeyboardLayoutDialog(identifier);
}
} }
private void updateUserDictionaryPreference(Preference userDictionaryPreference) { private void updateUserDictionaryPreference(Preference userDictionaryPreference) {
@@ -221,7 +163,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
mSettingsObserver.resume();
mIm.registerInputDeviceListener(this, null); mIm.registerInputDeviceListener(this, null);
final Preference spellChecker = findPreference(KEY_SPELL_CHECKERS); final Preference spellChecker = findPreference(KEY_SPELL_CHECKERS);
@@ -240,7 +181,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
} }
} }
if (!mShowsOnlyFullImeAndKeyboardList) {
if (mLanguagePref != null) { if (mLanguagePref != null) {
final String localeNames = FeatureFactory.getFactory(getContext()) final String localeNames = FeatureFactory.getFactory(getContext())
.getLocaleFeatureProvider().getLocaleNames(); .getLocaleFeatureProvider().getLocaleNames();
@@ -248,14 +188,12 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
} }
updateUserDictionaryPreference(findPreference(KEY_USER_DICTIONARY_SETTINGS)); updateUserDictionaryPreference(findPreference(KEY_USER_DICTIONARY_SETTINGS));
}
updateInputDevices(); updateInputDevices();
// Refresh internal states in mInputMethodSettingValues to keep the latest // Refresh internal states in mInputMethodSettingValues to keep the latest
// "InputMethodInfo"s and "InputMethodSubtype"s // "InputMethodInfo"s and "InputMethodSubtype"s
mInputMethodSettingValues.refreshAllInputMethodAndSubtypes(); mInputMethodSettingValues.refreshAllInputMethodAndSubtypes();
updateInputMethodPreferenceViews();
} }
@Override @Override
@@ -263,12 +201,11 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
super.onPause(); super.onPause();
mIm.unregisterInputDeviceListener(this); mIm.unregisterInputDeviceListener(this);
mSettingsObserver.pause();
// TODO: Consolidate the logic to InputMethodSettingsWrapper // TODO: Consolidate the logic to InputMethodSettingsWrapper
InputMethodAndSubtypeUtil.saveInputMethodSubtypeList( InputMethodAndSubtypeUtil.saveInputMethodSubtypeList(
this, getContentResolver(), mInputMethodSettingValues.getInputMethodList(), this, getContentResolver(), mInputMethodSettingValues.getInputMethodList(),
!mHardKeyboardPreferenceList.isEmpty()); false /* hasHardKeyboard */);
} }
@Override @Override
@@ -292,15 +229,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
if (Utils.isMonkeyRunning()) { if (Utils.isMonkeyRunning()) {
return false; return false;
} }
if (preference instanceof PreferenceScreen) { if (preference instanceof SwitchPreference) {
if (preference.getFragment() != null) {
// Fragment will be handled correctly by the super class.
} else if (KEY_CURRENT_INPUT_METHOD.equals(preference.getKey())) {
final InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showInputMethodPicker(false /* showAuxiliarySubtypes */);
}
} else if (preference instanceof SwitchPreference) {
final SwitchPreference pref = (SwitchPreference) preference; final SwitchPreference pref = (SwitchPreference) preference;
if (pref == mGameControllerCategory.findPreference("vibrate_input_devices")) { if (pref == mGameControllerCategory.findPreference("vibrate_input_devices")) {
System.putInt(getContentResolver(), Settings.System.VIBRATE_INPUT_DEVICES, System.putInt(getContentResolver(), Settings.System.VIBRATE_INPUT_DEVICES,
@@ -311,202 +240,10 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
return super.onPreferenceTreeClick(preference); return super.onPreferenceTreeClick(preference);
} }
private void updateInputMethodPreferenceViews() {
if (mKeyboardSettingsCategory == null) {
return;
}
synchronized (mInputMethodPreferenceList) {
// Clear existing "InputMethodPreference"s
for (final InputMethodPreference pref : mInputMethodPreferenceList) {
mKeyboardSettingsCategory.removePreference(pref);
}
mInputMethodPreferenceList.clear();
List<String> permittedList = mDpm.getPermittedInputMethodsForCurrentUser();
final Context context = getPrefContext();
final List<InputMethodInfo> imis = mShowsOnlyFullImeAndKeyboardList
? mInputMethodSettingValues.getInputMethodList()
: mImm.getEnabledInputMethodList();
final int N = (imis == null ? 0 : imis.size());
for (int i = 0; i < N; ++i) {
final InputMethodInfo imi = imis.get(i);
final boolean isAllowedByOrganization = permittedList == null
|| permittedList.contains(imi.getPackageName());
final InputMethodPreference pref = new InputMethodPreference(
context, imi, mShowsOnlyFullImeAndKeyboardList /* hasSwitch */,
isAllowedByOrganization, this);
mInputMethodPreferenceList.add(pref);
}
final Collator collator = Collator.getInstance();
Collections.sort(mInputMethodPreferenceList, new Comparator<InputMethodPreference>() {
@Override
public int compare(InputMethodPreference lhs, InputMethodPreference rhs) {
return lhs.compareTo(rhs, collator);
}
});
for (int i = 0; i < N; ++i) {
final InputMethodPreference pref = mInputMethodPreferenceList.get(i);
mKeyboardSettingsCategory.addPreference(pref);
InputMethodAndSubtypeUtil.removeUnnecessaryNonPersistentPreference(pref);
pref.updatePreferenceViews();
}
}
updateCurrentImeName();
// TODO: Consolidate the logic with InputMethodSettingsWrapper
// CAVEAT: The preference class here does not know about the default value - that is
// managed by the Input Method Manager Service, so in this case it could save the wrong
// value. Hence we must update the checkboxes here.
InputMethodAndSubtypeUtil.loadInputMethodSubtypeList(
this, getContentResolver(),
mInputMethodSettingValues.getInputMethodList(), null);
}
@Override
public void onSaveInputMethodPreference(final InputMethodPreference pref) {
final InputMethodInfo imi = pref.getInputMethodInfo();
if (!pref.isChecked()) {
// An IME is being disabled. Save enabled subtypes of the IME to shared preference to be
// able to re-enable these subtypes when the IME gets re-enabled.
saveEnabledSubtypesOf(imi);
}
final boolean hasHardwareKeyboard = getResources().getConfiguration().keyboard
== Configuration.KEYBOARD_QWERTY;
InputMethodAndSubtypeUtil.saveInputMethodSubtypeList(this, getContentResolver(),
mImm.getInputMethodList(), hasHardwareKeyboard);
// Update input method settings and preference list.
mInputMethodSettingValues.refreshAllInputMethodAndSubtypes();
if (pref.isChecked()) {
// An IME is being enabled. Load the previously enabled subtypes from shared preference
// and enable these subtypes.
restorePreviouslyEnabledSubtypesOf(imi);
}
for (final InputMethodPreference p : mInputMethodPreferenceList) {
p.updatePreferenceViews();
}
}
private void saveEnabledSubtypesOf(final InputMethodInfo imi) {
final HashSet<String> enabledSubtypeIdSet = new HashSet<>();
final List<InputMethodSubtype> enabledSubtypes = mImm.getEnabledInputMethodSubtypeList(
imi, true /* allowsImplicitlySelectedSubtypes */);
for (final InputMethodSubtype subtype : enabledSubtypes) {
final String subtypeId = Integer.toString(subtype.hashCode());
enabledSubtypeIdSet.add(subtypeId);
}
final HashMap<String, HashSet<String>> imeToEnabledSubtypeIdsMap =
loadPreviouslyEnabledSubtypeIdsMap();
final String imiId = imi.getId();
imeToEnabledSubtypeIdsMap.put(imiId, enabledSubtypeIdSet);
savePreviouslyEnabledSubtypeIdsMap(imeToEnabledSubtypeIdsMap);
}
private void restorePreviouslyEnabledSubtypesOf(final InputMethodInfo imi) {
final HashMap<String, HashSet<String>> imeToEnabledSubtypeIdsMap =
loadPreviouslyEnabledSubtypeIdsMap();
final String imiId = imi.getId();
final HashSet<String> enabledSubtypeIdSet = imeToEnabledSubtypeIdsMap.remove(imiId);
if (enabledSubtypeIdSet == null) {
return;
}
savePreviouslyEnabledSubtypeIdsMap(imeToEnabledSubtypeIdsMap);
InputMethodAndSubtypeUtil.enableInputMethodSubtypesOf(
getContentResolver(), imiId, enabledSubtypeIdSet);
}
private HashMap<String, HashSet<String>> loadPreviouslyEnabledSubtypeIdsMap() {
final Context context = getActivity();
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final String imesAndSubtypesString = prefs.getString(KEY_PREVIOUSLY_ENABLED_SUBTYPES, null);
return InputMethodAndSubtypeUtil.parseInputMethodsAndSubtypesString(imesAndSubtypesString);
}
private void savePreviouslyEnabledSubtypeIdsMap(
final HashMap<String, HashSet<String>> subtypesMap) {
final Context context = getActivity();
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final String imesAndSubtypesString = InputMethodAndSubtypeUtil
.buildInputMethodsAndSubtypesString(subtypesMap);
prefs.edit().putString(KEY_PREVIOUSLY_ENABLED_SUBTYPES, imesAndSubtypesString).apply();
}
private void updateCurrentImeName() {
final Context context = getActivity();
if (context == null || mImm == null) return;
final Preference curPref = getPreferenceScreen().findPreference(KEY_CURRENT_INPUT_METHOD);
if (curPref != null) {
final CharSequence curIme =
mInputMethodSettingValues.getCurrentInputMethodName(context);
if (!TextUtils.isEmpty(curIme)) {
synchronized (this) {
curPref.setSummary(curIme);
}
}
}
}
private void updateInputDevices() { private void updateInputDevices() {
updateHardKeyboards();
updateGameControllers(); updateGameControllers();
} }
private void updateHardKeyboards() {
if (mHardKeyboardCategory == null) {
return;
}
mHardKeyboardPreferenceList.clear();
final int[] devices = InputDevice.getDeviceIds();
for (int i = 0; i < devices.length; i++) {
InputDevice device = InputDevice.getDevice(devices[i]);
if (device != null
&& !device.isVirtual()
&& device.isFullKeyboard()) {
final InputDeviceIdentifier identifier = device.getIdentifier();
final String keyboardLayoutDescriptor =
mIm.getCurrentKeyboardLayoutForInputDevice(identifier);
final KeyboardLayout keyboardLayout = keyboardLayoutDescriptor != null ?
mIm.getKeyboardLayout(keyboardLayoutDescriptor) : null;
final PreferenceScreen pref = new PreferenceScreen(getPrefContext(), null);
pref.setTitle(device.getName());
if (keyboardLayout != null) {
pref.setSummary(keyboardLayout.toString());
} else {
pref.setSummary(R.string.keyboard_layout_default_label);
}
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
showKeyboardLayoutDialog(identifier);
return true;
}
});
mHardKeyboardPreferenceList.add(pref);
}
}
if (!mHardKeyboardPreferenceList.isEmpty()) {
for (int i = mHardKeyboardCategory.getPreferenceCount(); i-- > 0; ) {
final Preference pref = mHardKeyboardCategory.getPreference(i);
if (pref.getOrder() < 1000) {
mHardKeyboardCategory.removePreference(pref);
}
}
Collections.sort(mHardKeyboardPreferenceList);
final int count = mHardKeyboardPreferenceList.size();
for (int i = 0; i < count; i++) {
final Preference pref = mHardKeyboardPreferenceList.get(i);
pref.setOrder(i);
mHardKeyboardCategory.addPreference(pref);
}
getPreferenceScreen().addPreference(mHardKeyboardCategory);
} else {
getPreferenceScreen().removePreference(mHardKeyboardCategory);
}
}
private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) { private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) {
KeyboardLayoutDialogFragment fragment = (KeyboardLayoutDialogFragment) KeyboardLayoutDialogFragment fragment = (KeyboardLayoutDialogFragment)
getFragmentManager().findFragmentByTag("keyboardLayout"); getFragmentManager().findFragmentByTag("keyboardLayout");
@@ -563,31 +300,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
return false; return false;
} }
private class SettingsObserver extends ContentObserver {
private Context mContext;
public SettingsObserver(Handler handler, Context context) {
super(handler);
mContext = context;
}
@Override public void onChange(boolean selfChange) {
updateCurrentImeName();
}
public void resume() {
final ContentResolver cr = mContext.getContentResolver();
cr.registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.DEFAULT_INPUT_METHOD), false, this);
cr.registerContentObserver(Settings.Secure.getUriFor(
Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE), false, this);
}
public void pause() {
mContext.getContentResolver().unregisterContentObserver(this);
}
}
private static class SummaryProvider implements SummaryLoader.SummaryProvider { private static class SummaryProvider implements SummaryLoader.SummaryProvider {
private final Context mContext; private final Context mContext;
@@ -668,16 +380,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
.getInstance(context); .getInstance(context);
immValues.refreshAllInputMethodAndSubtypes(); immValues.refreshAllInputMethodAndSubtypes();
// Current IME.
String currImeName = immValues.getCurrentInputMethodName(context).toString();
indexable = new SearchIndexableRaw(context);
indexable.key = KEY_CURRENT_INPUT_METHOD;
indexable.title = context.getString(R.string.current_input_method);
indexable.summaryOn = currImeName;
indexable.summaryOff = currImeName;
indexable.screenTitle = screenTitle;
indexables.add(indexable);
InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService( InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(
Context.INPUT_METHOD_SERVICE); Context.INPUT_METHOD_SERVICE);
@@ -744,8 +446,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
// Hard keyboard category. // Hard keyboard category.
indexable = new SearchIndexableRaw(context); indexable = new SearchIndexableRaw(context);
indexable.key = "builtin_keyboard_settings"; indexable.key = "builtin_keyboard_settings";
indexable.title = context.getString( indexable.title = context.getString(R.string.builtin_keyboard_settings_title);
R.string.builtin_keyboard_settings_title);
indexable.screenTitle = screenTitle; indexable.screenTitle = screenTitle;
indexables.add(indexable); indexables.add(indexable);
} }