Loading src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +1 −41 Original line number Diff line number Diff line Loading @@ -22,11 +22,8 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ServiceInfo; import android.hardware.input.InputDeviceIdentifier; import android.hardware.input.InputManager; import android.hardware.input.KeyboardLayout; import android.speech.tts.TtsEngines; import android.support.v7.preference.Preference; import android.view.InputDevice; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; Loading Loading @@ -246,44 +243,7 @@ public class InputMethodAndLanguageSettings extends DashboardFragment indexables.add(indexable); } // TODO: Move to PhysicalKeyboardFragment. // Hard keyboards InputManager inputManager = (InputManager) context.getSystemService( Context.INPUT_SERVICE); boolean hasHardKeyboards = false; 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()) { continue; } hasHardKeyboards = true; InputDeviceIdentifier identifier = device.getIdentifier(); String keyboardLayoutDescriptor = inputManager.getCurrentKeyboardLayoutForInputDevice(identifier); KeyboardLayout keyboardLayout = keyboardLayoutDescriptor != null ? inputManager.getKeyboardLayout(keyboardLayoutDescriptor) : null; String summary; if (keyboardLayout != null) { summary = keyboardLayout.toString(); } else { summary = context.getString(R.string.keyboard_layout_default_label); } indexable = new SearchIndexableRaw(context); indexable.key = device.getName(); indexable.title = device.getName(); indexable.summaryOn = summary; indexable.summaryOff = summary; indexable.screenTitle = screenTitle; indexables.add(indexable); } if (hasHardKeyboards) { if (!PhysicalKeyboardFragment.getPhysicalFullKeyboards().isEmpty()) { // Hard keyboard category. indexable = new SearchIndexableRaw(context); indexable.key = "builtin_keyboard_settings"; Loading src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java +43 −1 Original line number Diff line number Diff line Loading @@ -49,6 +49,9 @@ import com.android.internal.util.Preconditions; import com.android.settings.R; import com.android.settings.Settings; 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; Loading @@ -59,7 +62,7 @@ import java.util.List; import java.util.Objects; public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment implements InputManager.InputDeviceListener { implements InputManager.InputDeviceListener, Indexable { private static final String KEYBOARD_ASSISTANCE_CATEGORY = "keyboard_assistance_category"; private static final String SHOW_VIRTUAL_KEYBOARD_SWITCH = "show_virtual_keyboard_switch"; Loading Loading @@ -528,4 +531,43 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment } } public static List<InputDevice> getPhysicalFullKeyboards() { List<InputDevice> keyboards = null; for (final int deviceId : InputDevice.getDeviceIds()) { final InputDevice device = InputDevice.getDevice(deviceId); if (device != null && !device.isVirtual() && device.isFullKeyboard()) { if (keyboards == null) keyboards = new ArrayList<>(); keyboards.add(device); } } return (keyboards == null) ? Collections.emptyList() : keyboards; } public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final InputManager inputManager = (InputManager) context.getSystemService( Context.INPUT_SERVICE); final String screenTitle = context.getString(R.string.physical_keyboard_title); final List<SearchIndexableRaw> indexes = new ArrayList<>(); for (final InputDevice device : getPhysicalFullKeyboards()) { final String keyboardLayoutDescriptor = inputManager .getCurrentKeyboardLayoutForInputDevice(device.getIdentifier()); final KeyboardLayout keyboardLayout = (keyboardLayoutDescriptor != null) ? inputManager.getKeyboardLayout(keyboardLayoutDescriptor) : null; final String summary = (keyboardLayout != null) ? keyboardLayout.toString() : context.getString(R.string.keyboard_layout_default_label); final SearchIndexableRaw index = new SearchIndexableRaw(context); index.key = device.getName(); index.title = device.getName(); index.summaryOn = summary; index.summaryOff = summary; index.screenTitle = screenTitle; indexes.add(index); } return indexes; } }; } src/com/android/settings/search/DynamicIndexableContentMonitor.java +2 −2 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.view.inputmethod.InputMethodManager; import com.android.internal.content.PackageMonitor; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.print.PrintSettingsFragment; import java.util.ArrayList; Loading Loading @@ -205,8 +206,7 @@ public final class DynamicIndexableContentMonitor implements } private void buildIndex(boolean rebuild) { // TODO: Fix landing page to PhysicalKeyboardFragment. mIndex.updateFromClassNameResource(InputMethodAndLanguageSettings.class.getName(), mIndex.updateFromClassNameResource(PhysicalKeyboardFragment.class.getName(), rebuild, true /* includeInSearchResult */); } Loading src/com/android/settings/search/SearchIndexableResources.java +2 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import com.android.settings.gestures.GestureSettings; import com.android.settings.gestures.PickupGestureSettings; import com.android.settings.gestures.SwipeToNotificationSettings; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.location.LocationSettings; import com.android.settings.location.ScanningSettings; import com.android.settings.network.NetworkDashboardFragment; Loading Loading @@ -141,6 +142,7 @@ public final class SearchIndexableResources { R.drawable.ic_settings_accounts); addIndex(InputMethodAndLanguageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_language); addIndex(PhysicalKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language); addIndex(PrivacySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_backup); addIndex(DateTimeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_date_time); addIndex(AccessibilitySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_accessibility); Loading tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java +9 −20 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.only; Loading Loading @@ -58,6 +57,7 @@ import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.print.PrintSettingsFragment; import com.android.settings.testutils.shadow.ShadowActivityWithLoadManager; import com.android.settings.testutils.shadow.ShadowContextImplWithRegisterReceiver; Loading @@ -69,7 +69,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.verification.VerificationMode; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; Loading Loading @@ -210,9 +209,7 @@ public class DynamicIndexableContentMonitorTest { mMonitor.register(mActivity, LOADER_ID, mIndex, true /* isUserUnlocked */); // Rebuild indexing should happen. // CAVEAT: Currently InputMethodAndLanuageSettings may be indexed once for input devices and // once for input methods. verifyRebuildIndexing(InputMethodAndLanguageSettings.class, atLeastOnce()); verifyRebuildIndexing(PhysicalKeyboardFragment.class); // Input monitor should be registered to InputManager. final InputManager.InputDeviceListener listener = extactInputDeviceListener(); assertThat(listener).isNotNull(); Loading @@ -224,7 +221,7 @@ public class DynamicIndexableContentMonitorTest { mMonitor.register(mActivity, LOADER_ID, mIndex, true /* isUserUnlocked */); verifyNoIndexing(InputMethodAndLanguageSettings.class); verifyNoIndexing(PhysicalKeyboardFragment.class); assertThat(extactInputDeviceListener()).isEqualTo(listener); /* Loading @@ -234,7 +231,7 @@ public class DynamicIndexableContentMonitorTest { listener.onInputDeviceAdded(1 /* deviceId */); verifyIncrementalIndexing(InputMethodAndLanguageSettings.class); verifyIncrementalIndexing(PhysicalKeyboardFragment.class); /* * A device is removed. Loading @@ -243,7 +240,7 @@ public class DynamicIndexableContentMonitorTest { listener.onInputDeviceRemoved(2 /* deviceId */); verifyRebuildIndexing(InputMethodAndLanguageSettings.class); verifyRebuildIndexing(PhysicalKeyboardFragment.class); /* * A device is changed. Loading @@ -252,7 +249,7 @@ public class DynamicIndexableContentMonitorTest { listener.onInputDeviceChanged(3 /* deviceId */); verifyRebuildIndexing(InputMethodAndLanguageSettings.class); verifyRebuildIndexing(PhysicalKeyboardFragment.class); } @Test Loading Loading @@ -338,9 +335,7 @@ public class DynamicIndexableContentMonitorTest { final PackageMonitor packageMonitor = extractPackageMonitor(); assertThat(packageMonitor).isNotNull(); // CAVEAT: Currently InputMethodAndLanuageSettings may be indexed once for input devices and // once for input methods. verifyRebuildIndexing(InputMethodAndLanguageSettings.class, atLeastOnce()); verifyRebuildIndexing(InputMethodAndLanguageSettings.class); /* * When an input method service package is installed, incremental indexing happen. Loading Loading @@ -417,9 +412,7 @@ public class DynamicIndexableContentMonitorTest { final ContentObserver observer = extractContentObserver(UserDictionary.Words.CONTENT_URI); assertThat(observer).isNotNull(); // CAVEAT: Currently InputMethodAndLanuageSettings may be indexed once for input devices and // once for input methods. verifyRebuildIndexing(InputMethodAndLanguageSettings.class, atLeastOnce()); verifyRebuildIndexing(InputMethodAndLanguageSettings.class); /* * When user dictionary content is changed, rebuild indexing happens. Loading @@ -441,11 +434,7 @@ public class DynamicIndexableContentMonitorTest { } private void verifyRebuildIndexing(Class<?> indexingClass) { verifyRebuildIndexing(indexingClass, times(1)); } private void verifyRebuildIndexing(Class<?> indexingClass, VerificationMode verificationMode) { verify(mIndex, verificationMode).updateFromClassNameResource(indexingClass.getName(), verify(mIndex, times(1)).updateFromClassNameResource(indexingClass.getName(), true /* rebuild */, true /* includeInSearchResults */); verify(mIndex, never()).updateFromClassNameResource(indexingClass.getName(), false /* rebuild */, true /* includeInSearchResults */); Loading Loading
src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +1 −41 Original line number Diff line number Diff line Loading @@ -22,11 +22,8 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ServiceInfo; import android.hardware.input.InputDeviceIdentifier; import android.hardware.input.InputManager; import android.hardware.input.KeyboardLayout; import android.speech.tts.TtsEngines; import android.support.v7.preference.Preference; import android.view.InputDevice; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; Loading Loading @@ -246,44 +243,7 @@ public class InputMethodAndLanguageSettings extends DashboardFragment indexables.add(indexable); } // TODO: Move to PhysicalKeyboardFragment. // Hard keyboards InputManager inputManager = (InputManager) context.getSystemService( Context.INPUT_SERVICE); boolean hasHardKeyboards = false; 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()) { continue; } hasHardKeyboards = true; InputDeviceIdentifier identifier = device.getIdentifier(); String keyboardLayoutDescriptor = inputManager.getCurrentKeyboardLayoutForInputDevice(identifier); KeyboardLayout keyboardLayout = keyboardLayoutDescriptor != null ? inputManager.getKeyboardLayout(keyboardLayoutDescriptor) : null; String summary; if (keyboardLayout != null) { summary = keyboardLayout.toString(); } else { summary = context.getString(R.string.keyboard_layout_default_label); } indexable = new SearchIndexableRaw(context); indexable.key = device.getName(); indexable.title = device.getName(); indexable.summaryOn = summary; indexable.summaryOff = summary; indexable.screenTitle = screenTitle; indexables.add(indexable); } if (hasHardKeyboards) { if (!PhysicalKeyboardFragment.getPhysicalFullKeyboards().isEmpty()) { // Hard keyboard category. indexable = new SearchIndexableRaw(context); indexable.key = "builtin_keyboard_settings"; Loading
src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java +43 −1 Original line number Diff line number Diff line Loading @@ -49,6 +49,9 @@ import com.android.internal.util.Preconditions; import com.android.settings.R; import com.android.settings.Settings; 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; Loading @@ -59,7 +62,7 @@ import java.util.List; import java.util.Objects; public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment implements InputManager.InputDeviceListener { implements InputManager.InputDeviceListener, Indexable { private static final String KEYBOARD_ASSISTANCE_CATEGORY = "keyboard_assistance_category"; private static final String SHOW_VIRTUAL_KEYBOARD_SWITCH = "show_virtual_keyboard_switch"; Loading Loading @@ -528,4 +531,43 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment } } public static List<InputDevice> getPhysicalFullKeyboards() { List<InputDevice> keyboards = null; for (final int deviceId : InputDevice.getDeviceIds()) { final InputDevice device = InputDevice.getDevice(deviceId); if (device != null && !device.isVirtual() && device.isFullKeyboard()) { if (keyboards == null) keyboards = new ArrayList<>(); keyboards.add(device); } } return (keyboards == null) ? Collections.emptyList() : keyboards; } public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final InputManager inputManager = (InputManager) context.getSystemService( Context.INPUT_SERVICE); final String screenTitle = context.getString(R.string.physical_keyboard_title); final List<SearchIndexableRaw> indexes = new ArrayList<>(); for (final InputDevice device : getPhysicalFullKeyboards()) { final String keyboardLayoutDescriptor = inputManager .getCurrentKeyboardLayoutForInputDevice(device.getIdentifier()); final KeyboardLayout keyboardLayout = (keyboardLayoutDescriptor != null) ? inputManager.getKeyboardLayout(keyboardLayoutDescriptor) : null; final String summary = (keyboardLayout != null) ? keyboardLayout.toString() : context.getString(R.string.keyboard_layout_default_label); final SearchIndexableRaw index = new SearchIndexableRaw(context); index.key = device.getName(); index.title = device.getName(); index.summaryOn = summary; index.summaryOff = summary; index.screenTitle = screenTitle; indexes.add(index); } return indexes; } }; }
src/com/android/settings/search/DynamicIndexableContentMonitor.java +2 −2 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.view.inputmethod.InputMethodManager; import com.android.internal.content.PackageMonitor; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.print.PrintSettingsFragment; import java.util.ArrayList; Loading Loading @@ -205,8 +206,7 @@ public final class DynamicIndexableContentMonitor implements } private void buildIndex(boolean rebuild) { // TODO: Fix landing page to PhysicalKeyboardFragment. mIndex.updateFromClassNameResource(InputMethodAndLanguageSettings.class.getName(), mIndex.updateFromClassNameResource(PhysicalKeyboardFragment.class.getName(), rebuild, true /* includeInSearchResult */); } Loading
src/com/android/settings/search/SearchIndexableResources.java +2 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import com.android.settings.gestures.GestureSettings; import com.android.settings.gestures.PickupGestureSettings; import com.android.settings.gestures.SwipeToNotificationSettings; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.location.LocationSettings; import com.android.settings.location.ScanningSettings; import com.android.settings.network.NetworkDashboardFragment; Loading Loading @@ -141,6 +142,7 @@ public final class SearchIndexableResources { R.drawable.ic_settings_accounts); addIndex(InputMethodAndLanguageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_language); addIndex(PhysicalKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language); addIndex(PrivacySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_backup); addIndex(DateTimeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_date_time); addIndex(AccessibilitySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_accessibility); Loading
tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java +9 −20 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.only; Loading Loading @@ -58,6 +57,7 @@ import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.print.PrintSettingsFragment; import com.android.settings.testutils.shadow.ShadowActivityWithLoadManager; import com.android.settings.testutils.shadow.ShadowContextImplWithRegisterReceiver; Loading @@ -69,7 +69,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.verification.VerificationMode; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; Loading Loading @@ -210,9 +209,7 @@ public class DynamicIndexableContentMonitorTest { mMonitor.register(mActivity, LOADER_ID, mIndex, true /* isUserUnlocked */); // Rebuild indexing should happen. // CAVEAT: Currently InputMethodAndLanuageSettings may be indexed once for input devices and // once for input methods. verifyRebuildIndexing(InputMethodAndLanguageSettings.class, atLeastOnce()); verifyRebuildIndexing(PhysicalKeyboardFragment.class); // Input monitor should be registered to InputManager. final InputManager.InputDeviceListener listener = extactInputDeviceListener(); assertThat(listener).isNotNull(); Loading @@ -224,7 +221,7 @@ public class DynamicIndexableContentMonitorTest { mMonitor.register(mActivity, LOADER_ID, mIndex, true /* isUserUnlocked */); verifyNoIndexing(InputMethodAndLanguageSettings.class); verifyNoIndexing(PhysicalKeyboardFragment.class); assertThat(extactInputDeviceListener()).isEqualTo(listener); /* Loading @@ -234,7 +231,7 @@ public class DynamicIndexableContentMonitorTest { listener.onInputDeviceAdded(1 /* deviceId */); verifyIncrementalIndexing(InputMethodAndLanguageSettings.class); verifyIncrementalIndexing(PhysicalKeyboardFragment.class); /* * A device is removed. Loading @@ -243,7 +240,7 @@ public class DynamicIndexableContentMonitorTest { listener.onInputDeviceRemoved(2 /* deviceId */); verifyRebuildIndexing(InputMethodAndLanguageSettings.class); verifyRebuildIndexing(PhysicalKeyboardFragment.class); /* * A device is changed. Loading @@ -252,7 +249,7 @@ public class DynamicIndexableContentMonitorTest { listener.onInputDeviceChanged(3 /* deviceId */); verifyRebuildIndexing(InputMethodAndLanguageSettings.class); verifyRebuildIndexing(PhysicalKeyboardFragment.class); } @Test Loading Loading @@ -338,9 +335,7 @@ public class DynamicIndexableContentMonitorTest { final PackageMonitor packageMonitor = extractPackageMonitor(); assertThat(packageMonitor).isNotNull(); // CAVEAT: Currently InputMethodAndLanuageSettings may be indexed once for input devices and // once for input methods. verifyRebuildIndexing(InputMethodAndLanguageSettings.class, atLeastOnce()); verifyRebuildIndexing(InputMethodAndLanguageSettings.class); /* * When an input method service package is installed, incremental indexing happen. Loading Loading @@ -417,9 +412,7 @@ public class DynamicIndexableContentMonitorTest { final ContentObserver observer = extractContentObserver(UserDictionary.Words.CONTENT_URI); assertThat(observer).isNotNull(); // CAVEAT: Currently InputMethodAndLanuageSettings may be indexed once for input devices and // once for input methods. verifyRebuildIndexing(InputMethodAndLanguageSettings.class, atLeastOnce()); verifyRebuildIndexing(InputMethodAndLanguageSettings.class); /* * When user dictionary content is changed, rebuild indexing happens. Loading @@ -441,11 +434,7 @@ public class DynamicIndexableContentMonitorTest { } private void verifyRebuildIndexing(Class<?> indexingClass) { verifyRebuildIndexing(indexingClass, times(1)); } private void verifyRebuildIndexing(Class<?> indexingClass, VerificationMode verificationMode) { verify(mIndex, verificationMode).updateFromClassNameResource(indexingClass.getName(), verify(mIndex, times(1)).updateFromClassNameResource(indexingClass.getName(), true /* rebuild */, true /* includeInSearchResults */); verify(mIndex, never()).updateFromClassNameResource(indexingClass.getName(), false /* rebuild */, true /* includeInSearchResults */); Loading