OSDN Git Service

Directly show the layout selection screen.
authorMichael Wright <michaelwr@google.com>
Tue, 3 Nov 2015 15:26:01 +0000 (15:26 +0000)
committerMichael Wright <michaelwr@google.com>
Tue, 5 Jan 2016 21:44:42 +0000 (16:44 -0500)
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

src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java

index fff5a78..aa2d68a 100644 (file)
@@ -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
index fef2e9d..ad7a2b1 100644 (file)
@@ -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);
@@ -351,4 +364,4 @@ public class KeyboardLayoutDialogFragment extends DialogFragment
     public interface OnSetupKeyboardLayoutsListener {
         public void onSetupKeyboardLayouts(InputDeviceIdentifier mInputDeviceIdentifier);
     }
-}
\ No newline at end of file
+}
index 0dcf9db..ad1162e 100644 (file)
@@ -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);