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

Commit 692e1421 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of ['googleplex-android-review.googlesource.com/33597716'] into 25Q3-release.

Change-Id: I614f04a980dd79e1f43e8c37ac390cc0da856dc0
parents d07ce06b 2cea43e1
Loading
Loading
Loading
Loading
+18 −65
Original line number Diff line number Diff line
@@ -104,6 +104,8 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    private ImageButton mFullScreenButton;
    private int mLastSelectedButtonIndex = MagnificationSize.DEFAULT;
    private boolean mAllowDiagonalScrolling = false;
    private boolean mAllowMagnifyTyping = false;
    private boolean mAllowMagnifyKeyboard = false;

    /**
     * Amount by which magnification scale changes compared to seekbar in settings.
@@ -114,12 +116,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest

    private WindowMagnificationSettingsCallback mCallback;

    @VisibleForTesting
    ContentObserver mMagnificationCapabilityObserver;
    @VisibleForTesting
    ContentObserver mMagnifyTypingObserver;
    @VisibleForTesting
    ContentObserver mMagnifyKeyboardObserver;
    private ContentObserver mMagnificationCapabilityObserver;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
@@ -154,6 +151,17 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
                Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING, 1,
                UserHandle.USER_CURRENT) == 1;

        if (Flags.enableMagnificationMagnifyNavBarAndIme()) {
            mAllowMagnifyTyping = mSecureSettings.getIntForUser(
                    Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED, 1,
                    UserHandle.USER_CURRENT) == 1;

            mAllowMagnifyKeyboard = mSecureSettings.getIntForUser(
                    Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME,
                    AccessibilityUtils.getMagnificationMagnifyKeyboardDefaultValue(mContext),
                    UserHandle.USER_CURRENT) == 1;
        }

        mParams = createLayoutParams(context);
        mWindowInsetChangeRunnable = this::onWindowInsetChanged;

@@ -171,28 +179,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
                });
            }
        };

        if (Flags.enableMagnificationMagnifyNavBarAndIme()) {
            mMagnifyTypingObserver = new ContentObserver(
                    mContext.getMainThreadHandler()) {
                @Override
                public void onChange(boolean selfChange) {
                    mSettingView.post(() -> {
                        updateMagnifyTypingUI();
                    });
                }
            };

            mMagnifyKeyboardObserver = new ContentObserver(
                    mContext.getMainThreadHandler()) {
                @Override
                public void onChange(boolean selfChange) {
                    mSettingView.post(() -> {
                        updateMagnifyKeyboardUI();
                    });
                }
            };
        }
    }

    private class ZoomSeekbarChangeListener implements
@@ -350,10 +336,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest

        // Unregister observer before removing view
        mSecureSettings.unregisterContentObserverSync(mMagnificationCapabilityObserver);
        if (Flags.enableMagnificationMagnifyNavBarAndIme()) {
            mSecureSettings.unregisterContentObserverSync(mMagnifyTypingObserver);
            mSecureSettings.unregisterContentObserverSync(mMagnifyKeyboardObserver);
        }
        mWindowManager.removeView(mSettingView);
        mIsVisible = false;
        if (resetPosition) {
@@ -405,8 +387,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    private void showSettingPanel(boolean resetPosition) {
        if (!mIsVisible) {
            updateUIControlsIfNeeded();
            updateMagnifyTypingUI();
            updateMagnifyKeyboardUI();
            setScaleSeekbar(getMagnificationScale());
            if (resetPosition) {
                mDraggableWindowBounds.set(getDraggableWindowBounds());
@@ -421,18 +401,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
                    mMagnificationCapabilityObserver,
                    UserHandle.USER_CURRENT);

            if (Flags.enableMagnificationMagnifyNavBarAndIme()) {
                mSecureSettings.registerContentObserverForUserSync(
                        Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED,
                        mMagnifyTypingObserver,
                        UserHandle.USER_CURRENT);

                mSecureSettings.registerContentObserverForUserSync(
                        Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME,
                        mMagnifyKeyboardObserver,
                        UserHandle.USER_CURRENT);
            }

            // Exclude magnification switch button from system gesture area.
            setSystemGestureExclusion();
            mIsVisible = true;
@@ -469,17 +437,12 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest

    @VisibleForTesting
    boolean isMagnifyTypingEnabled() {
        return mSecureSettings.getIntForUser(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED,
                1, UserHandle.USER_CURRENT) == 1;
        return mAllowMagnifyTyping;
    }

    @VisibleForTesting
    boolean isMagnifyKeyboardEnabled() {
        return mSecureSettings.getIntForUser(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME,
                AccessibilityUtils.getMagnificationMagnifyKeyboardDefaultValue(mContext),
                UserHandle.USER_CURRENT) == 1;
        return mAllowMagnifyKeyboard;
    }

    /**
@@ -567,16 +530,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
        mSettingView.requestLayout();
    }

    private void updateMagnifyTypingUI() {
        mMagnifyTypingSwitch.setChecked(isMagnifyTypingEnabled());
        mSettingView.requestLayout();
    }

    private void updateMagnifyKeyboardUI() {
        mMagnifyKeyboardSwitch.setChecked(isMagnifyKeyboardEnabled());
        mSettingView.requestLayout();
    }

    private final BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
@@ -621,7 +574,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
                    (LinearLayout) mSettingView.findViewById(R.id.magnifier_typing_view);
            mMagnifyTypingSwitch =
                    (MaterialSwitch) mSettingView.findViewById(R.id.magnifier_typing_switch);
            mMagnifyTypingSwitch.setChecked(isMagnifyTypingEnabled());
            mMagnifyTypingSwitch.setChecked(mAllowMagnifyTyping);
            mMagnifyTypingSwitch.setOnCheckedChangeListener(
                    (view, isChecked) -> setMagnifyTyping(isChecked));

@@ -629,7 +582,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
                    (LinearLayout) mSettingView.findViewById(R.id.magnifier_keyboard_view);
            mMagnifyKeyboardSwitch =
                    (MaterialSwitch) mSettingView.findViewById(R.id.magnifier_keyboard_switch);
            mMagnifyKeyboardSwitch.setChecked(isMagnifyKeyboardEnabled());
            mMagnifyKeyboardSwitch.setChecked(mAllowMagnifyKeyboard);
            mMagnifyKeyboardSwitch.setOnCheckedChangeListener(
                    (view, isChecked) -> setMagnifyKeyboard(isChecked));
        }
+3 −128
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@
package com.android.systemui.accessibility;

import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
@@ -77,8 +75,6 @@ import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarW
import com.android.systemui.res.R;
import com.android.systemui.util.settings.SecureSettings;

import com.google.android.material.materialswitch.MaterialSwitch;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -99,8 +95,6 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {

    private ViewGroup mSettingView;
    private SeekBarWithIconButtonsView mZoomSeekbar;
    private MaterialSwitch mMagnifyTypingSwitch;
    private MaterialSwitch mMagnifyKeyboardSwitch;
    @Mock
    private AccessibilityManager mAccessibilityManager;
    @Mock
@@ -136,10 +130,6 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {

        mSettingView = mWindowMagnificationSettings.getSettingView();
        mZoomSeekbar = mSettingView.findViewById(R.id.magnifier_zoom_slider);
        mMagnifyTypingSwitch =
                (MaterialSwitch) mSettingView.findViewById(R.id.magnifier_typing_switch);
        mMagnifyKeyboardSwitch =
                (MaterialSwitch) mSettingView.findViewById(R.id.magnifier_keyboard_switch);
        mCallbackMagnifierScaleCaptor = ArgumentCaptor.forClass(Float.class);
    }

@@ -464,7 +454,7 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
    }

    @Test
    public void showSettingsPanel_magnificationCapabilityObserverRegistered() {
    public void showSettingsPanel_observerRegistered() {
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
@@ -478,51 +468,7 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void showSettingsPanel_MagnifyTypingObserverRegistered() {
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        mWindowMagnificationSettings.showSettingPanel();

        verify(mSecureSettings).registerContentObserverForUserSync(
                eq(ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED),
                any(ContentObserver.class),
                eq(UserHandle.USER_CURRENT));
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void showSettingsPanel_MagnifyKeyboardObserverRegistered() {
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        mWindowMagnificationSettings.showSettingPanel();

        verify(mSecureSettings).registerContentObserverForUserSync(
                eq(ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME),
                any(ContentObserver.class),
                eq(UserHandle.USER_CURRENT));
    }

    @Test
    public void hideSettingsPanel_MagnificationCapabilityObserverUnregistered() {
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        mWindowMagnificationSettings.showSettingPanel();
        mWindowMagnificationSettings.hideSettingPanel();

        verify(mSecureSettings).unregisterContentObserverSync(
                mWindowMagnificationSettings.mMagnificationCapabilityObserver);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void hideSettingsPanel_magnifyTypingObserverUnregistered() {
    public void hideSettingsPanel_observerUnregistered() {
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
@@ -530,78 +476,7 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
        mWindowMagnificationSettings.showSettingPanel();
        mWindowMagnificationSettings.hideSettingPanel();

        verify(mSecureSettings).unregisterContentObserverSync(
                mWindowMagnificationSettings.mMagnifyTypingObserver);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void hideSettingsPanel_magnifyKeyboardObserverUnregistered() {
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        mWindowMagnificationSettings.showSettingPanel();
        mWindowMagnificationSettings.hideSettingPanel();

        verify(mSecureSettings).unregisterContentObserverSync(
                mWindowMagnificationSettings.mMagnifyKeyboardObserver);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void magnifyTypingSwitch_settingsValueIsTrue_switchIsChecked() {
        when(mSecureSettings.getIntForUser(eq(ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED),
                anyInt(), eq(UserHandle.USER_CURRENT))).thenReturn(1);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        mWindowMagnificationSettings.showSettingPanel();

        assertThat(mMagnifyTypingSwitch.isChecked()).isEqualTo(true);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void magnifyTypingSwitch_settingsValueIsFalse_switchIsUnchecked() {
        when(mSecureSettings.getIntForUser(eq(ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED),
                anyInt(), eq(UserHandle.USER_CURRENT))).thenReturn(0);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        mWindowMagnificationSettings.showSettingPanel();

        assertThat(mMagnifyTypingSwitch.isChecked()).isEqualTo(false);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void magnifyKeyboardSwitch_settingsValueIsTrue_switchIsChecked() {
        when(mSecureSettings.getIntForUser(eq(ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME),
                anyInt(), eq(UserHandle.USER_CURRENT))).thenReturn(1);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);

        mWindowMagnificationSettings.showSettingPanel();

        assertThat(mMagnifyKeyboardSwitch.isChecked()).isEqualTo(true);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MAGNIFICATION_MAGNIFY_NAV_BAR_AND_IME)
    public void magnifyKeyboardSwitch_settingsValueIsFalse_switchIsUnchecked() {
        when(mSecureSettings.getIntForUser(eq(ACCESSIBILITY_MAGNIFICATION_MAGNIFY_NAV_AND_IME),
                anyInt(), eq(UserHandle.USER_CURRENT))).thenReturn(0);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);

        mWindowMagnificationSettings.showSettingPanel();

        assertThat(mMagnifyKeyboardSwitch.isChecked()).isEqualTo(false);
        verify(mSecureSettings).unregisterContentObserverSync(any(ContentObserver.class));
    }

    @Test