Move physical keyboard search landing page to its Fragment

This CL moves the code building index of physical keyboards from
InputMethodAndLanguageSettings to PhysicalKeyboardFragment, so that a
search landing page becomes PhysicalKeyboardFragment as expected.

Bug: 32643633
Test: Connecting/Disconnecting Anker bluetooth keyboard while Settings
      app is/isn't running, the search Anker and verify landing page
      is PhysicalKeyboardFragment.
Test: Update robolectric DynamicIndexableContentMonitorTest.

Change-Id: I51f308ada74966a96c258f8ef50a9b4fc7bc6635
This commit is contained in:
Tadashi G. Takaoka
2017-01-10 15:02:22 +09:00
parent ae182dedee
commit 7bbc632bfb
5 changed files with 57 additions and 64 deletions

View File

@@ -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;
@@ -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";

View File

@@ -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;
@@ -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";
@@ -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;
}
};
}