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

Commit 6042f68a authored by Yohei Yukawa's avatar Yohei Yukawa Committed by android-build-merger
Browse files

Merge "Reenable pre-N style hard keyboard layout settings" into pi-dev am: e1703e86

am: 3013858e

Change-Id: Ia0047941e8162ba940f0ee2b9b903bafbaea35af
parents 5d46b1de 3013858e
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -4177,10 +4177,6 @@
    <string name="keyboard_shortcuts_helper">Keyboard shortcuts helper</string>
    <!-- Summary text for the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=100] -->
    <string name="keyboard_shortcuts_helper_summary">Display available shortcuts</string>
    <!--
        Format string for a physical device in the form: InputMethodSubtype - InputMethodEditor.
        e.g. English (US) - X Keyboard -->
    <string name="physical_device_title" translatable="false"><xliff:g id="input_method_editor" example="X Keyboard">%1$s</xliff:g> - <xliff:g id="input_method_subtype" example="English (US)">%2$s</xliff:g></string>
    <!-- Summary text for keyboards when no layout has been selected. [CHAR LIMIT=35] -->
    <string name="default_keyboard_layout">Default</string>
+43 −45
Original line number Diff line number Diff line
@@ -16,43 +16,31 @@

package com.android.settings.inputmethod;

import android.annotation.Nullable;
import android.app.Activity;
import android.content.Context;
import android.hardware.input.InputDeviceIdentifier;
import android.hardware.input.InputManager;
import android.hardware.input.InputManager.InputDeviceListener;
import android.hardware.input.KeyboardLayout;
import android.os.Bundle;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.view.InputDevice;

import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.Preconditions;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.inputmethod.PhysicalKeyboardFragment.KeyboardInfoPreference;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public final class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment
public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment
        implements InputDeviceListener {

    private InputDeviceIdentifier mInputDeviceIdentifier;
    private int mInputDeviceId = -1;
    private InputManager mIm;
    private InputMethodInfo mImi;
    @Nullable
    private InputMethodSubtype mSubtype;
    private KeyboardLayout[] mKeyboardLayouts;
    private Map<Preference, KeyboardLayout> mPreferenceMap = new HashMap<>();

    // TODO: Make these constants public API for b/25752827
    private HashMap<CheckBoxPreference, KeyboardLayout> mPreferenceMap = new HashMap<>();

    /**
     * Intent extra: The input device descriptor of the keyboard whose keyboard
@@ -60,16 +48,6 @@ public final class KeyboardLayoutPickerFragment extends SettingsPreferenceFragme
     */
    public static final String EXTRA_INPUT_DEVICE_IDENTIFIER = "input_device_identifier";

    /**
     * Intent extra: The associated {@link InputMethodInfo}.
     */
    public static final String EXTRA_INPUT_METHOD_INFO = "input_method_info";

    /**
     * Intent extra: The associated {@link InputMethodSubtype}.
     */
    public static final String EXTRA_INPUT_METHOD_SUBTYPE = "input_method_subtype";

    @Override
    public int getMetricsCategory() {
        return MetricsEvent.INPUTMETHOD_KEYBOARD;
@@ -78,18 +56,14 @@ public final class KeyboardLayoutPickerFragment extends SettingsPreferenceFragme
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        Activity activity = Preconditions.checkNotNull(getActivity());

        mInputDeviceIdentifier = activity.getIntent().getParcelableExtra(
        mInputDeviceIdentifier = getActivity().getIntent().getParcelableExtra(
                EXTRA_INPUT_DEVICE_IDENTIFIER);
        mImi = activity.getIntent().getParcelableExtra(EXTRA_INPUT_METHOD_INFO);
        mSubtype = activity.getIntent().getParcelableExtra(EXTRA_INPUT_METHOD_SUBTYPE);

        if (mInputDeviceIdentifier == null || mImi == null) {
            activity.finish();
        if (mInputDeviceIdentifier == null) {
            getActivity().finish();
        }

        mIm = activity.getSystemService(InputManager.class);
        mIm = (InputManager) getSystemService(Context.INPUT_SERVICE);
        mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier);
        Arrays.sort(mKeyboardLayouts);
        setPreferenceScreen(createPreferenceHierarchy());
@@ -108,6 +82,8 @@ public final class KeyboardLayoutPickerFragment extends SettingsPreferenceFragme
            return;
        }
        mInputDeviceId = inputDevice.getId();

        updateCheckedState();
    }

    @Override
@@ -120,21 +96,34 @@ public final class KeyboardLayoutPickerFragment extends SettingsPreferenceFragme

    @Override
    public boolean onPreferenceTreeClick(Preference preference) {
        KeyboardLayout layout = mPreferenceMap.get(preference);
        if (preference instanceof CheckBoxPreference) {
            CheckBoxPreference checkboxPref = (CheckBoxPreference)preference;
            KeyboardLayout layout = mPreferenceMap.get(checkboxPref);
            if (layout != null) {
            mIm.setKeyboardLayoutForInputDevice(mInputDeviceIdentifier, mImi, mSubtype,
                boolean checked = checkboxPref.isChecked();
                if (checked) {
                    mIm.addKeyboardLayoutForInputDevice(mInputDeviceIdentifier,
                            layout.getDescriptor());
            getActivity().finish();
                } else {
                    mIm.removeKeyboardLayoutForInputDevice(mInputDeviceIdentifier,
                            layout.getDescriptor());
                }
                return true;
            }
        }
        return super.onPreferenceTreeClick(preference);
    }

    @Override
    public void onInputDeviceAdded(int deviceId) {}
    public void onInputDeviceAdded(int deviceId) {
    }

    @Override
    public void onInputDeviceChanged(int deviceId) {}
    public void onInputDeviceChanged(int deviceId) {
        if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) {
            updateCheckedState();
        }
    }

    @Override
    public void onInputDeviceRemoved(int deviceId) {
@@ -147,14 +136,23 @@ public final class KeyboardLayoutPickerFragment extends SettingsPreferenceFragme
        PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity());

        for (KeyboardLayout layout : mKeyboardLayouts) {
            Preference pref = new Preference(getPrefContext());
            CheckBoxPreference pref = new CheckBoxPreference(getPrefContext());
            pref.setTitle(layout.getLabel());
            pref.setSummary(layout.getCollection());
            root.addPreference(pref);
            mPreferenceMap.put(pref, layout);
        }

        root.setTitle(KeyboardInfoPreference.getDisplayName(getContext(), mImi, mSubtype));
        return root;
    }

    private void updateCheckedState() {
        String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice(
                mInputDeviceIdentifier);
        Arrays.sort(enabledKeyboardLayouts);

        for (Map.Entry<CheckBoxPreference, KeyboardLayout> entry : mPreferenceMap.entrySet()) {
            entry.getKey().setChecked(Arrays.binarySearch(enabledKeyboardLayouts,
                    entry.getValue().getDescriptor()) >= 0);
        }
    }
}
+120 −310

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ public class PhysicalKeyboardPreferenceController extends AbstractPreferenceCont
            return;
        }
        final List<HardKeyboardDeviceInfo> keyboards =
                PhysicalKeyboardFragment.getHardKeyboards();
                PhysicalKeyboardFragment.getHardKeyboards(mContext);
        if (keyboards.isEmpty()) {
            mPreference.setSummary(R.string.disconnected);
            return;
+1 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ public class PhysicalKeyboardPreferenceControllerTest {
    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        when(mContext.getSystemService(Context.INPUT_SERVICE)).thenReturn(mIm);
        when(mContext.getSystemService(InputManager.class)).thenReturn(mIm);
        mController = new PhysicalKeyboardPreferenceController(mContext, null /* lifecycle */);
    }