Merge "Directly show the layout selection screen."
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index fff5a78..aa2d68a 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -572,10 +572,13 @@
     }
 
     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 fef2e9d..ad7a2b1 100644
--- a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
+++ b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
@@ -53,6 +53,7 @@
     private int mInputDeviceId = -1;
     private InputManager mIm;
     private KeyboardLayoutAdapter mAdapter;
+    private boolean mHasShownLayoutSelectionScreen;
 
     public KeyboardLayoutDialogFragment() {
     }
@@ -178,6 +179,7 @@
             dialog.getListView().setItemChecked(data.current, true);
         }
         updateSwitchHintVisibility();
+        showSetupKeyboardLayoutsIfNecessary();
     }
 
     @Override
@@ -212,6 +214,17 @@
         }
     }
 
+    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 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 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 0dcf9db..ad1162e 100644
--- a/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java
+++ b/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java
@@ -65,7 +65,7 @@
         }
 
         mIm = (InputManager)getSystemService(Context.INPUT_SERVICE);
-        mKeyboardLayouts = mIm.getKeyboardLayouts();
+        mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier);
         Arrays.sort(mKeyboardLayouts);
         setPreferenceScreen(createPreferenceHierarchy());
     }
@@ -148,7 +148,7 @@
     }
 
     private void updateCheckedState() {
-        String[] enabledKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(
+        String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice(
                 mInputDeviceIdentifier);
         Arrays.sort(enabledKeyboardLayouts);