From 17b631988451613393c4656900c1821e23d8434a Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Tue, 3 Nov 2015 15:26:01 +0000 Subject: [PATCH] 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 --- .../InputMethodAndLanguageSettings.java | 11 +++++++---- .../KeyboardLayoutDialogFragment.java | 17 +++++++++++++++-- .../KeyboardLayoutPickerFragment.java | 4 ++-- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index fff5a785f05..aa2d68a8cd7 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -572,10 +572,13 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment } private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) { - KeyboardLayoutDialogFragment fragment = new KeyboardLayoutDialogFragment( - inputDeviceIdentifier); - fragment.setTargetFragment(this, 0); - fragment.show(getActivity().getFragmentManager(), "keyboardLayout"); + KeyboardLayoutDialogFragment fragment = (KeyboardLayoutDialogFragment) + getFragmentManager().findFragmentByTag("keyboardLayout"); + if (fragment == null) { + fragment = new KeyboardLayoutDialogFragment(inputDeviceIdentifier); + fragment.setTargetFragment(this, 0); + fragment.show(getActivity().getFragmentManager(), "keyboardLayout"); + } } @Override diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java index fef2e9d0922..ad7a2b167a5 100644 --- a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java +++ b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java @@ -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 { 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); @@ -351,4 +364,4 @@ public class KeyboardLayoutDialogFragment extends DialogFragment public interface OnSetupKeyboardLayoutsListener { public void onSetupKeyboardLayouts(InputDeviceIdentifier mInputDeviceIdentifier); } -} \ No newline at end of file +} diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java b/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java index 0dcf9db52d0..ad1162e64ff 100644 --- a/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java +++ b/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java @@ -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);