Directly show the layout selection screen.

When a user clicks on the physical keyboard in order to select a
layout, rather than showing them a dialog with an empty list of
layouts, send them straight to the screen where they can pick which
layouts to enable.

Also, only request keyboard layouts that are appropriate for the
input device we're in the process of configuring.

Bug: 25062009
Change-Id: I4483dfc89afc8d148b2cfa7c6a5f66d2a02f712a
This commit is contained in:
Michael Wright
2015-11-03 15:26:01 +00:00
parent 949499948a
commit 17b6319884
3 changed files with 24 additions and 8 deletions

View File

@@ -572,11 +572,14 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
} }
private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) { private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) {
KeyboardLayoutDialogFragment fragment = new KeyboardLayoutDialogFragment( KeyboardLayoutDialogFragment fragment = (KeyboardLayoutDialogFragment)
inputDeviceIdentifier); getFragmentManager().findFragmentByTag("keyboardLayout");
if (fragment == null) {
fragment = new KeyboardLayoutDialogFragment(inputDeviceIdentifier);
fragment.setTargetFragment(this, 0); fragment.setTargetFragment(this, 0);
fragment.show(getActivity().getFragmentManager(), "keyboardLayout"); fragment.show(getActivity().getFragmentManager(), "keyboardLayout");
} }
}
@Override @Override
public void onSetupKeyboardLayouts(InputDeviceIdentifier inputDeviceIdentifier) { public void onSetupKeyboardLayouts(InputDeviceIdentifier inputDeviceIdentifier) {

View File

@@ -53,6 +53,7 @@ public class KeyboardLayoutDialogFragment extends DialogFragment
private int mInputDeviceId = -1; private int mInputDeviceId = -1;
private InputManager mIm; private InputManager mIm;
private KeyboardLayoutAdapter mAdapter; private KeyboardLayoutAdapter mAdapter;
private boolean mHasShownLayoutSelectionScreen;
public KeyboardLayoutDialogFragment() { public KeyboardLayoutDialogFragment() {
} }
@@ -178,6 +179,7 @@ public class KeyboardLayoutDialogFragment extends DialogFragment
dialog.getListView().setItemChecked(data.current, true); dialog.getListView().setItemChecked(data.current, true);
} }
updateSwitchHintVisibility(); updateSwitchHintVisibility();
showSetupKeyboardLayoutsIfNecessary();
} }
@Override @Override
@@ -212,6 +214,17 @@ public class KeyboardLayoutDialogFragment extends DialogFragment
} }
} }
private void showSetupKeyboardLayoutsIfNecessary() {
AlertDialog dialog = (AlertDialog)getDialog();
if (dialog != null
&& mAdapter.getCount() == 1 && mAdapter.getItem(0) == null
&& !mHasShownLayoutSelectionScreen) {
mHasShownLayoutSelectionScreen = true;
((OnSetupKeyboardLayoutsListener)getTargetFragment()).onSetupKeyboardLayouts(
mInputDeviceIdentifier);
}
}
private static final class KeyboardLayoutAdapter extends ArrayAdapter<KeyboardLayout> { private static final class KeyboardLayoutAdapter extends ArrayAdapter<KeyboardLayout> {
private final LayoutInflater mInflater; private final LayoutInflater mInflater;
private int mCheckedItem = -1; private int mCheckedItem = -1;
@@ -300,7 +313,7 @@ public class KeyboardLayoutDialogFragment extends DialogFragment
public Keyboards loadInBackground() { public Keyboards loadInBackground() {
Keyboards keyboards = new Keyboards(); Keyboards keyboards = new Keyboards();
InputManager im = (InputManager)getContext().getSystemService(Context.INPUT_SERVICE); InputManager im = (InputManager)getContext().getSystemService(Context.INPUT_SERVICE);
String[] keyboardLayoutDescriptors = im.getKeyboardLayoutsForInputDevice( String[] keyboardLayoutDescriptors = im.getEnabledKeyboardLayoutsForInputDevice(
mInputDeviceIdentifier); mInputDeviceIdentifier);
for (String keyboardLayoutDescriptor : keyboardLayoutDescriptors) { for (String keyboardLayoutDescriptor : keyboardLayoutDescriptors) {
KeyboardLayout keyboardLayout = im.getKeyboardLayout(keyboardLayoutDescriptor); KeyboardLayout keyboardLayout = im.getKeyboardLayout(keyboardLayoutDescriptor);

View File

@@ -65,7 +65,7 @@ public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment
} }
mIm = (InputManager)getSystemService(Context.INPUT_SERVICE); mIm = (InputManager)getSystemService(Context.INPUT_SERVICE);
mKeyboardLayouts = mIm.getKeyboardLayouts(); mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier);
Arrays.sort(mKeyboardLayouts); Arrays.sort(mKeyboardLayouts);
setPreferenceScreen(createPreferenceHierarchy()); setPreferenceScreen(createPreferenceHierarchy());
} }
@@ -148,7 +148,7 @@ public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment
} }
private void updateCheckedState() { private void updateCheckedState() {
String[] enabledKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice( String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice(
mInputDeviceIdentifier); mInputDeviceIdentifier);
Arrays.sort(enabledKeyboardLayouts); Arrays.sort(enabledKeyboardLayouts);