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:
@@ -572,11 +572,14 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
|
||||
}
|
||||
|
||||
private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) {
|
||||
KeyboardLayoutDialogFragment fragment = new KeyboardLayoutDialogFragment(
|
||||
inputDeviceIdentifier);
|
||||
KeyboardLayoutDialogFragment fragment = (KeyboardLayoutDialogFragment)
|
||||
getFragmentManager().findFragmentByTag("keyboardLayout");
|
||||
if (fragment == null) {
|
||||
fragment = new KeyboardLayoutDialogFragment(inputDeviceIdentifier);
|
||||
fragment.setTargetFragment(this, 0);
|
||||
fragment.show(getActivity().getFragmentManager(), "keyboardLayout");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSetupKeyboardLayouts(InputDeviceIdentifier inputDeviceIdentifier) {
|
||||
|
@@ -53,6 +53,7 @@ public class KeyboardLayoutDialogFragment extends DialogFragment
|
||||
private int mInputDeviceId = -1;
|
||||
private InputManager mIm;
|
||||
private KeyboardLayoutAdapter mAdapter;
|
||||
private boolean mHasShownLayoutSelectionScreen;
|
||||
|
||||
public KeyboardLayoutDialogFragment() {
|
||||
}
|
||||
@@ -178,6 +179,7 @@ public class KeyboardLayoutDialogFragment extends DialogFragment
|
||||
dialog.getListView().setItemChecked(data.current, true);
|
||||
}
|
||||
updateSwitchHintVisibility();
|
||||
showSetupKeyboardLayoutsIfNecessary();
|
||||
}
|
||||
|
||||
@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 final LayoutInflater mInflater;
|
||||
private int mCheckedItem = -1;
|
||||
@@ -300,7 +313,7 @@ public class KeyboardLayoutDialogFragment extends DialogFragment
|
||||
public Keyboards loadInBackground() {
|
||||
Keyboards keyboards = new Keyboards();
|
||||
InputManager im = (InputManager)getContext().getSystemService(Context.INPUT_SERVICE);
|
||||
String[] keyboardLayoutDescriptors = im.getKeyboardLayoutsForInputDevice(
|
||||
String[] keyboardLayoutDescriptors = im.getEnabledKeyboardLayoutsForInputDevice(
|
||||
mInputDeviceIdentifier);
|
||||
for (String keyboardLayoutDescriptor : keyboardLayoutDescriptors) {
|
||||
KeyboardLayout keyboardLayout = im.getKeyboardLayout(keyboardLayoutDescriptor);
|
||||
|
@@ -65,7 +65,7 @@ public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment
|
||||
}
|
||||
|
||||
mIm = (InputManager)getSystemService(Context.INPUT_SERVICE);
|
||||
mKeyboardLayouts = mIm.getKeyboardLayouts();
|
||||
mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier);
|
||||
Arrays.sort(mKeyboardLayouts);
|
||||
setPreferenceScreen(createPreferenceHierarchy());
|
||||
}
|
||||
@@ -148,7 +148,7 @@ public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment
|
||||
}
|
||||
|
||||
private void updateCheckedState() {
|
||||
String[] enabledKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(
|
||||
String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice(
|
||||
mInputDeviceIdentifier);
|
||||
Arrays.sort(enabledKeyboardLayouts);
|
||||
|
||||
|
Reference in New Issue
Block a user