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

Commit 1f326146 authored by danielwbhuang's avatar danielwbhuang
Browse files

Set preference visible to false when there is no keyboard.

1. Physical keyboard settings should only show up if at least one PK is connected.
2. Update tests.
3. Fix NullPointerException.

Bug: 269983475
Bug: 270109384
Bug: 271357910
Test: atest and manual
Change-Id: If7798587fb386dbf669fc249cab304d91a26879b
parent fa57dd3f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -308,6 +308,12 @@ public class KeyboardLayoutDialogFragment extends InstrumentedDialogFragment
        public Keyboards loadInBackground() {
            Keyboards keyboards = new Keyboards();
            InputManager im = (InputManager)getContext().getSystemService(Context.INPUT_SERVICE);
            if (mInputDeviceIdentifier == null || NewKeyboardSettingsUtils.getInputDevice(
                    im, mInputDeviceIdentifier) == null) {
                keyboards.keyboardLayouts.add(null); // default layout
                keyboards.current = 0;
                return keyboards;
            }
            String[] keyboardLayoutDescriptors = im.getEnabledKeyboardLayoutsForInputDevice(
                    mInputDeviceIdentifier);
            for (String keyboardLayoutDescriptor : keyboardLayoutDescriptors) {
+7 −9
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.content.Context;
import android.hardware.input.InputDeviceIdentifier;
import android.hardware.input.InputManager;
import android.hardware.input.KeyboardLayout;
import android.view.InputDevice;

import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
@@ -37,7 +36,6 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;


public class KeyboardLayoutPickerController extends BasePreferenceController implements
        InputManager.InputDeviceListener, LifecycleObserver, OnStart, OnStop {

@@ -68,15 +66,12 @@ public class KeyboardLayoutPickerController extends BasePreferenceController imp
    @Override
    public void onStart() {
        mIm.registerInputDeviceListener(this, null);

        final InputDevice inputDevice =
                mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor());
        if (inputDevice == null) {
            mParent.getActivity().finish();
        if (mInputDeviceIdentifier == null
                || NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) {
            return;
        }
        mInputDeviceId = inputDevice.getId();

        mInputDeviceId =
                NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier).getId();
        updateCheckedState();
    }

@@ -150,6 +145,9 @@ public class KeyboardLayoutPickerController extends BasePreferenceController imp
    }

    private void createPreferenceHierarchy() {
        if (mKeyboardLayouts == null) {
            return;
        }
        for (KeyboardLayout layout : mKeyboardLayouts) {
            final SwitchPreference pref = new SwitchPreference(mScreen.getContext());
            pref.setTitle(layout.getLabel());
+4 −4
Original line number Diff line number Diff line
@@ -19,11 +19,11 @@ package com.android.settings.inputmethod;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.hardware.input.InputDeviceIdentifier;
import android.hardware.input.InputManager;

import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;


public class KeyboardLayoutPickerFragment extends DashboardFragment {

    private static final String TAG = "KeyboardLayoutPicker";
@@ -45,10 +45,10 @@ public class KeyboardLayoutPickerFragment extends DashboardFragment {

        final InputDeviceIdentifier inputDeviceIdentifier = getActivity().getIntent().
                getParcelableExtra(EXTRA_INPUT_DEVICE_IDENTIFIER);
        if (inputDeviceIdentifier == null) {
            getActivity().finish();
        final InputManager im = context.getSystemService(InputManager.class);
        if (NewKeyboardSettingsUtils.getInputDevice(im, inputDeviceIdentifier) == null) {
            return;
        }

        use(KeyboardLayoutPickerController.class).initialize(this /*parent*/,
                inputDeviceIdentifier);
    }
+5 −2
Original line number Diff line number Diff line
@@ -68,6 +68,9 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment
    }

    private void updateCheckedState() {
        if (NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) {
            return;
        }
        PreferenceScreen preferenceScreen = getPreferenceScreen();
        preferenceScreen.removeAll();
        List<InputMethodInfo> infoList = mImm.getEnabledInputMethodListAsUser(mUserId);
@@ -174,8 +177,8 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment
    public void onStart() {
        super.onStart();
        mIm.registerInputDeviceListener(this, null);
        final InputDevice inputDevice =
                mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor());
        InputDevice inputDevice =
                NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier);
        if (inputDevice == null) {
            getActivity().finish();
            return;
+7 −7
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.inputmethod;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.hardware.input.InputDeviceIdentifier;
import android.hardware.input.InputManager;
import android.os.Bundle;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype;
@@ -33,25 +34,24 @@ public class NewKeyboardLayoutPickerContent extends DashboardFragment {
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        InputManager inputManager = getContext().getSystemService(InputManager.class);
        Bundle arguments = getArguments();
        final String title = arguments.getString(NewKeyboardSettingsUtils.EXTRA_TITLE);
        final String layout = arguments.getString(NewKeyboardSettingsUtils.EXTRA_KEYBOARD_LAYOUT);
        final int userId = arguments.getInt(NewKeyboardSettingsUtils.EXTRA_USER_ID);
        final InputDeviceIdentifier inputDeviceIdentifier =
        final InputDeviceIdentifier identifier =
                arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER);
        final InputMethodInfo inputMethodInfo =
                arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_INFO);
        final InputMethodSubtype inputMethodSubtype =
                arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE);


        if (inputDeviceIdentifier == null) {
            getActivity().finish();
        if (identifier == null
                || NewKeyboardSettingsUtils.getInputDevice(inputManager, identifier) == null) {
            return;
        }
        getActivity().setTitle(title);
        use(NewKeyboardLayoutPickerController.class).initialize(this /*parent*/, userId,
                inputDeviceIdentifier, inputMethodInfo, inputMethodSubtype, layout);
                identifier, inputMethodInfo, inputMethodSubtype, layout);
    }

    @Override
Loading