Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17b63198 authored by Michael Wright's avatar Michael Wright
Browse files

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
parent 94949994
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -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) {
+15 −2
Original line number Diff line number Diff line
@@ -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);
+2 −2
Original line number Diff line number Diff line
@@ -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);