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);