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

Commit 7a30c084 authored by Amanda Lin Dietz's avatar Amanda Lin Dietz Committed by Android (Google) Code Review
Browse files

Merge "[A11y Magnification Keyboard Focus] Only show follow keyboard setting...

Merge "[A11y Magnification Keyboard Focus] Only show follow keyboard setting when keyboard is attached" into main
parents 257614fa b9122d59
Loading
Loading
Loading
Loading
+6 −32
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@ import android.os.Bundle;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.InputDevice;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -57,6 +56,7 @@ import com.android.settings.DialogCreatable;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums;
import com.android.settings.accessibility.shortcuts.EditShortcutsPreferenceFragment;
import com.android.settings.inputmethod.InputPeripheralsSettingsUtils;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.Indexable;
@@ -210,11 +210,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends

    private static boolean isMagnificationCursorFollowingModeDialogSupported() {
        return com.android.settings.accessibility.Flags.enableMagnificationCursorFollowingDialog()
                && hasMouse();
                && InputPeripheralsSettingsUtils.isMouse();
    }

    private static boolean isMagnificationKeyboardFollowingSupported() {
        return android.view.accessibility.Flags.requestRectangleWithSource();
        return android.view.accessibility.Flags.requestRectangleWithSource()
                && InputPeripheralsSettingsUtils.isHardKeyboard();
    }

    private static boolean isMagnificationMagnifyNavAndImeSupported() {
@@ -256,7 +257,8 @@ public class ToggleScreenMagnificationPreferenceFragment extends
                && !Flags.enableMagnificationOneFingerPanningGesture()) {
            String summary = "";
            boolean hasTouchscreen = hasTouchscreen();
            if (Flags.enableMagnificationKeyboardControl() && hasHardKeyboard()) {
            if (Flags.enableMagnificationKeyboardControl()
                    && InputPeripheralsSettingsUtils.isHardKeyboard()) {
                // Include the keyboard summary when a keyboard is plugged in.
                final String meta = context.getString(R.string.modifier_keys_meta);
                final String alt = context.getString(R.string.modifier_keys_alt);
@@ -706,34 +708,6 @@ public class ToggleScreenMagnificationPreferenceFragment extends
                getPrefContext(), MAGNIFICATION_CONTROLLER_NAME);
    }

    /**
     * Returns if a mouse is attached.
     */
    private static boolean hasMouse() {
        final int[] devices = InputDevice.getDeviceIds();
        for (int i = 0; i < devices.length; i++) {
            InputDevice device = InputDevice.getDevice(devices[i]);
            if (device != null && (device.getSources() & InputDevice.SOURCE_MOUSE)
                    == InputDevice.SOURCE_MOUSE) {
                return true;
            }
        }
        return false;
    }

    private boolean hasHardKeyboard() {
        final int[] devices = InputDevice.getDeviceIds();
        for (int i = 0; i < devices.length; i++) {
            InputDevice device = InputDevice.getDevice(devices[i]);
            if (device == null || device.isVirtual() || !device.isFullKeyboard()) {
                continue;
            }

            return true;
        }
        return false;
    }

    private boolean hasTouchscreen() {
        return getPackageManager()
                .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)
+2 −2
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ public class InputPeripheralsSettingsUtils {
    /**
     * Returns whether any hard keyboard is connected.
     */
    static boolean isHardKeyboard() {
    public static boolean isHardKeyboard() {
        for (int deviceId : InputDevice.getDeviceIds()) {
            final InputDevice device = InputDevice.getDevice(deviceId);
            if (device == null) {
@@ -91,7 +91,7 @@ public class InputPeripheralsSettingsUtils {
    /**
     * Returns whether any mouse is connected.
     */
    static boolean isMouse() {
    public static boolean isMouse() {
        for (int deviceId : InputDevice.getDeviceIds()) {
            final InputDevice device = InputDevice.getDevice(deviceId);
            if (device == null) {
+43 −10
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ import com.android.settingslib.search.SearchIndexableRaw;

import com.google.common.truth.Correspondence;

import org.bouncycastle.util.Arrays;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -141,6 +142,9 @@ public class ToggleScreenMagnificationPreferenceFragmentTest {
    private static final String KEY_FOLLOW_KEYBOARD =
            Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_KEYBOARD_ENABLED;

    private static final int SHADOW_MOUSE_DEVICE_ID = 1;
    private static final int SHADOW_KEYBOARD_DEVICE_ID = 2;

    private FragmentController<ToggleScreenMagnificationPreferenceFragment> mFragController;
    private Context mContext;
    private Resources mSpyResources;
@@ -372,10 +376,21 @@ public class ToggleScreenMagnificationPreferenceFragmentTest {
        assertThat(switchPreference.isChecked()).isFalse();
    }

    @Test
    @EnableFlags(android.view.accessibility.Flags.FLAG_REQUEST_RECTANGLE_WITH_SOURCE)
    public void onResume_noKeyboardAttached_noFollowKeyboardPreference() {
        mFragController.create(R.id.main_content, /* bundle= */ null).start().resume();

        final TwoStatePreference switchPreference = mFragController.get().findPreference(
                MagnificationFollowKeyboardPreferenceController.PREF_KEY);
        assertThat(switchPreference).isNull();
    }

    @Test
    @EnableFlags(android.view.accessibility.Flags.FLAG_REQUEST_RECTANGLE_WITH_SOURCE)
    @Config(shadows = ShadowInputDevice.class)
    public void onResume_defaultStateForFollowingKeyboard_switchPreferenceShouldReturnFalse() {
        addKeyboardDevice();
        setKeyFollowKeyboardEnabled(false);

        mFragController.create(R.id.main_content, /* bundle= */ null).start().resume();
@@ -388,7 +403,9 @@ public class ToggleScreenMagnificationPreferenceFragmentTest {

    @Test
    @EnableFlags(android.view.accessibility.Flags.FLAG_REQUEST_RECTANGLE_WITH_SOURCE)
    @Config(shadows = ShadowInputDevice.class)
    public void onResume_enableFollowingKeyboard_switchPreferenceShouldReturnTrue() {
        addKeyboardDevice();
        setKeyFollowKeyboardEnabled(true);

        mFragController.create(R.id.main_content, /* bundle= */ null).start().resume();
@@ -790,10 +807,7 @@ public class ToggleScreenMagnificationPreferenceFragmentTest {
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_KEYBOARD_CONTROL)
    @Config(shadows = ShadowInputDevice.class)
    public void getCurrentHtmlDescription_includesKeyboardInfoIfKeyboardAttached() {
        int deviceId = 1;
        ShadowInputDevice.sDeviceIds = new int[]{deviceId};
        InputDevice device = ShadowInputDevice.makeFullKeyboardInputDevicebyId(deviceId);
        ShadowInputDevice.addDevice(deviceId, device);
        addKeyboardDevice();

        ToggleScreenMagnificationPreferenceFragment fragment =
                mFragController.create(
@@ -971,6 +985,7 @@ public class ToggleScreenMagnificationPreferenceFragmentTest {
        setAlwaysOnSupported(true);
        setJoystickSupported(true);
        addMouseDevice();
        addKeyboardDevice();

        final List<String> niks = ToggleScreenMagnificationPreferenceFragment
                .SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
@@ -1081,13 +1096,31 @@ public class ToggleScreenMagnificationPreferenceFragmentTest {
                enabled ? ON : OFF);
    }

    private void addMouseDevice() {
        int deviceId = 1;
    private static void addShadowInputDeviceId(int deviceId) {
        if (ShadowInputDevice.sDeviceIds == null) {
            ShadowInputDevice.sDeviceIds = new int[]{deviceId};
        InputDevice device = ShadowInputDevice.makeInputDevicebyIdWithSources(deviceId,
                InputDevice.SOURCE_MOUSE);
        ShadowInputDevice.addDevice(deviceId, device);
        } else {
            int curLength = ShadowInputDevice.sDeviceIds.length;
            ShadowInputDevice.sDeviceIds = Arrays.copyOf(ShadowInputDevice.sDeviceIds,
                    curLength + 1);
            ShadowInputDevice.sDeviceIds[curLength] = deviceId;
        }
    }

    private static void addMouseDevice() {
        addShadowInputDeviceId(SHADOW_MOUSE_DEVICE_ID);
        InputDevice device = ShadowInputDevice
                .makeInputDevicebyIdWithSources(SHADOW_MOUSE_DEVICE_ID, InputDevice.SOURCE_MOUSE);
        ShadowInputDevice.addDevice(SHADOW_MOUSE_DEVICE_ID, device);
    }

    private static void addKeyboardDevice() {
        addShadowInputDeviceId(SHADOW_KEYBOARD_DEVICE_ID);
        InputDevice device = ShadowInputDevice
                .makeFullKeyboardInputDevicebyId(SHADOW_KEYBOARD_DEVICE_ID);
        ShadowInputDevice.addDevice(SHADOW_KEYBOARD_DEVICE_ID, device);
    }

    private void setWindowMagnificationSupported(boolean magnificationAreaSupported,
            boolean windowMagnificationSupported) {
        when(mSpyResources.getBoolean(