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

Commit 64240b7f authored by Candice Lo's avatar Candice Lo
Browse files

Hide fullscreen button in partial only mode

The fullscreen button is hidden when the capability of magnification is
set to magnifying partial screen only. The logic for updating UI control
is to check the capbility of magnification first to decide if we would
like to show or hide the fullscreen button. If the capability is
ACCESSIBILITY_MAGNIFICATION_MODE_ALL, we check the current mode in the next step to
decide if we would like to show or hide the edit button and the diagonal scrolling view.
We also register a content observer for modifying the layout immediately
when there is a capability or mode change in magnification.

Bug: 280520144
Test: Manually - attach video with the bug
Test: atest WindowMagnificationSettingsTest WindowMagnificationTest MagnificationSettingsControllerTest
Change-Id: Ie43fdbc5bf598130097deb3db718f0c1535afbb4
parent efc69469
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -87,19 +87,14 @@ public class MagnificationSettingsController implements ComponentCallbacks {
    }

    /**
     * Shows magnification settings panel {@link WindowMagnificationSettings}. The panel ui would be
     * various for different magnification mode.
     *
     * @param mode      The magnification mode
     * @see android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
     * @see android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN
     * Shows magnification settings panel {@link WindowMagnificationSettings}.
     */
    void showMagnificationSettings(int mode) {
    void showMagnificationSettings() {
        if (!mWindowMagnificationSettings.isSettingPanelShowing()) {
            onConfigurationChanged(mContext.getResources().getConfiguration());
            mContext.registerComponentCallbacks(this);
        }
        mWindowMagnificationSettings.showSettingPanel(mode);
        mWindowMagnificationSettings.showSettingPanel();
    }

    void closeMagnificationSettings() {
+4 −6
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.accessibility;

import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY;

@@ -169,8 +168,7 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback

        mModeSwitchesController.setClickListenerDelegate(
                displayId -> mHandler.post(() -> {
                    showMagnificationSettingsPanel(displayId,
                            ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
                    showMagnificationSettingsPanel(displayId);
                }));
    }

@@ -253,11 +251,11 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback
    }

    @MainThread
    void showMagnificationSettingsPanel(int displayId, int mode) {
    void showMagnificationSettingsPanel(int displayId) {
        final MagnificationSettingsController magnificationSettingsController =
                mMagnificationSettingsSupplier.get(displayId);
        if (magnificationSettingsController != null) {
            magnificationSettingsController.showMagnificationSettings(mode);
            magnificationSettingsController.showMagnificationSettings();
        }
    }

@@ -334,7 +332,7 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback
        @Override
        public void onClickSettingsButton(int displayId) {
            mHandler.post(() -> {
                showMagnificationSettingsPanel(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
                showMagnificationSettingsPanel(displayId);
            });
        }
    };
+83 −38
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.accessibility;

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_NONE;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
@@ -27,6 +28,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.database.ContentObserver;
import android.graphics.Insets;
import android.graphics.PixelFormat;
import android.graphics.Rect;
@@ -101,8 +103,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    private static final float A11Y_SCALE_MIN_VALUE = 1.0f;
    private WindowMagnificationSettingsCallback mCallback;

    // the magnification mode that triggers showing the panel
    private int mTriggeringMode = ACCESSIBILITY_MAGNIFICATION_MODE_NONE;
    private ContentObserver mMagnificationCapabilityObserver;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
@@ -142,6 +143,16 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest

        mGestureDetector = new MagnificationGestureDetector(context,
                context.getMainThreadHandler(), this);

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

    private class ZoomSeekbarChangeListener implements SeekBar.OnSeekBarChangeListener {
@@ -257,7 +268,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    @Override
    public boolean onFinish(float xOffset, float yOffset) {
        if (!mSingleTapDetected) {
            showSettingPanel(mTriggeringMode);
            showSettingPanel();
        }
        mSingleTapDetected = false;
        return true;
@@ -285,7 +296,8 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
            return;
        }

        // Reset button status.
        // Unregister observer before removing view
        mSecureSettings.unregisterContentObserver(mMagnificationCapabilityObserver);
        mWindowManager.removeView(mSettingView);
        mIsVisible = false;
        if (resetPosition) {
@@ -297,16 +309,8 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
        mCallback.onSettingsPanelVisibilityChanged(/* shown= */ false);
    }

    /**
     * Shows magnification settings panel. The panel ui would be various for
     * different magnification mode.
     *
     * @param mode      The magnification mode
     * @see android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
     * @see android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN
     */
    public void showSettingPanel(int mode) {
        showSettingPanel(mode, true);
    public void showSettingPanel() {
        showSettingPanel(true);
    }

    public boolean isSettingPanelShowing() {
@@ -322,18 +326,15 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    }

    /**
     * Shows magnification panel for set magnification.
     * Shows the panel for magnification settings.
     * When the panel is going to be visible by calling this method, the layout position can be
     * reset depending on the flag.
     *
     * @param mode The magnification mode
     * @param resetPosition if the button position needs be reset
     * @param resetPosition if the panel position needs to be reset
     */
    private void showSettingPanel(int mode, boolean resetPosition) {
    private void showSettingPanel(boolean resetPosition) {
        if (!mIsVisible) {
            updateUIControlsIfNeed(mode);
            mTriggeringMode = mode;

            updateUIControlsIfNeeded();
            if (resetPosition) {
                mDraggableWindowBounds.set(getDraggableWindowBounds());
                mParams.x = mDraggableWindowBounds.right;
@@ -342,6 +343,11 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest

            mWindowManager.addView(mSettingView, mParams);

            mSecureSettings.registerContentObserverForUser(
                    Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY,
                    mMagnificationCapabilityObserver,
                    UserHandle.USER_CURRENT);

            // Exclude magnification switch button from system gesture area.
            setSystemGestureExclusion();
            mIsVisible = true;
@@ -359,35 +365,74 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
        mContext.registerReceiver(mScreenOffReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
    }

    private void updateUIControlsIfNeed(int mode) {
        if (mode == mTriggeringMode) {
            return;
    private int getMagnificationMode() {
        return mSecureSettings.getIntForUser(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE,
                ACCESSIBILITY_MAGNIFICATION_MODE_NONE,
                UserHandle.USER_CURRENT);
    }

    private int getMagnificationCapability() {
        return mSecureSettings.getIntForUser(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY,
                ACCESSIBILITY_MAGNIFICATION_MODE_NONE,
                UserHandle.USER_CURRENT);
    }

    private void updateUIControlsIfNeeded() {
        int capability = getMagnificationCapability();

        int selectedButtonIndex = mLastSelectedButtonIndex;
        switch (mode) {
            case ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN:
                // set the edit button visibility to View.INVISIBLE to keep the height, to prevent
                // the size title from too close to the size buttons
        switch (capability) {
            case ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW:
                mEditButton.setVisibility(View.VISIBLE);
                mAllowDiagonalScrollingView.setVisibility(View.VISIBLE);
                mFullScreenButton.setVisibility(View.GONE);
                if (selectedButtonIndex == MagnificationSize.FULLSCREEN) {
                    selectedButtonIndex = MagnificationSize.NONE;
                }
                break;

            case ACCESSIBILITY_MAGNIFICATION_MODE_ALL:
                int mode = getMagnificationMode();
                mFullScreenButton.setVisibility(View.VISIBLE);
                if (mode == ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN) {
                    // set the edit button visibility to View.INVISIBLE to keep the height, to
                    // prevent the size title from too close to the size buttons
                    mEditButton.setVisibility(View.INVISIBLE);
                    mAllowDiagonalScrollingView.setVisibility(View.GONE);
                    // force the fullscreen button showing
                    selectedButtonIndex = MagnificationSize.FULLSCREEN;
                break;

            case ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW:
                } else { // mode = ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
                    mEditButton.setVisibility(View.VISIBLE);
                    mAllowDiagonalScrollingView.setVisibility(View.VISIBLE);
                if (selectedButtonIndex == MagnificationSize.FULLSCREEN) {
                    selectedButtonIndex = MagnificationSize.NONE;
                }
                break;

            case ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN:
                // We will never fall into this case since we never show settings panel when
                // capability equals to ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN.
                // Currently, the case follows the UI controls when capability equals to
                // ACCESSIBILITY_MAGNIFICATION_MODE_ALL and mode equals to
                // ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, but we could also consider to
                // remove the whole icon button selections int the future since they are no use
                // for fullscreen only capability.

                mFullScreenButton.setVisibility(View.VISIBLE);
                // set the edit button visibility to View.INVISIBLE to keep the height, to
                // prevent the size title from too close to the size buttons
                mEditButton.setVisibility(View.INVISIBLE);
                mAllowDiagonalScrollingView.setVisibility(View.GONE);
                // force the fullscreen button showing
                selectedButtonIndex = MagnificationSize.FULLSCREEN;
                break;

            default:
                break;
        }

        updateSelectedButton(selectedButtonIndex);
        mSettingView.requestLayout();
    }

    private final BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
@@ -474,11 +519,11 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest

            mParams.accessibilityTitle = getAccessibilityWindowTitle(mContext);

            boolean showSettingPanelAfterThemeChange = mIsVisible;
            boolean showSettingPanelAfterConfigChange = mIsVisible;
            hideSettingPanel(/* resetPosition= */ false);
            inflateView();
            if (showSettingPanelAfterThemeChange) {
                showSettingPanel(mTriggeringMode, /* resetPosition= */ false);
            if (showSettingPanelAfterConfigChange) {
                showSettingPanel(/* resetPosition= */ false);
            }
            return;
        }
+2 −4
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.systemui.accessibility;

import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;

import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
@@ -74,10 +73,9 @@ public class MagnificationSettingsControllerTest extends SysuiTestCase {

    @Test
    public void testShowSettingsPanel() {
        final int mode = ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
        mMagnificationSettingsController.showMagnificationSettings(mode);
        mMagnificationSettingsController.showMagnificationSettings();

        verify(mWindowMagnificationSettings).showSettingPanel(eq(mode));
        verify(mWindowMagnificationSettings).showSettingPanel();
    }

    @Test
+96 −17
Original line number Diff line number Diff line
@@ -16,7 +16,10 @@

package com.android.systemui.accessibility;

import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY;
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_NONE;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;

import static com.google.common.truth.Truth.assertThat;
@@ -24,12 +27,17 @@ import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.annotation.IdRes;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.database.ContentObserver;
import android.os.UserHandle;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -102,7 +110,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {

    @Test
    public void showSettingPanel_hasAccessibilityWindowTitle() {
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        final WindowManager.LayoutParams layoutPrams =
                mWindowManager.getLayoutParamsFromAttachedView();
@@ -114,7 +125,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {

    @Test
    public void showSettingPanel_windowMode_showEditButtonAndDiagonalView() {
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        final Button editButton = getInternalView(R.id.magnifier_edit_button);
        assertEquals(editButton.getVisibility(), View.VISIBLE);
@@ -125,7 +139,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {

    @Test
    public void showSettingPanel_fullScreenMode_hideEditButtonAndDiagonalView() {
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
        mWindowMagnificationSettings.showSettingPanel();

        final Button editButton = getInternalView(R.id.magnifier_edit_button);
        assertEquals(editButton.getVisibility(), View.INVISIBLE);
@@ -134,10 +151,23 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
        assertEquals(diagonalView.getVisibility(), View.GONE);
    }

    @Test
    public void showSettingPanel_windowOnlyCapability_hideFullscreenButton() {
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        final View fullscreenButton = getInternalView(R.id.magnifier_full_button);
        assertThat(fullscreenButton.getVisibility()).isEqualTo(View.GONE);
    }

    @Test
    public void performClick_smallSizeButton_changeMagnifierSizeSmallAndSwitchToWindowMode() {
        // Open view
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        verifyOnSetMagnifierSizeAndOnModeSwitch(
                R.id.magnifier_small_button, MAGNIFICATION_SIZE_SMALL);
@@ -145,8 +175,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {

    @Test
    public void performClick_mediumSizeButton_changeMagnifierSizeMediumAndSwitchToWindowMode() {
        // Open view
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        verifyOnSetMagnifierSizeAndOnModeSwitch(
                R.id.magnifier_medium_button, MAGNIFICATION_SIZE_MEDIUM);
@@ -154,8 +186,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {

    @Test
    public void performClick_largeSizeButton_changeMagnifierSizeLargeAndSwitchToWindowMode() {
        // Open view
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        verifyOnSetMagnifierSizeAndOnModeSwitch(
                R.id.magnifier_large_button, MAGNIFICATION_SIZE_LARGE);
@@ -178,8 +212,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
        View fullScreenModeButton = getInternalView(R.id.magnifier_full_button);
        getInternalView(R.id.magnifier_panel_view);

        // Open view
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        // Perform click
        fullScreenModeButton.performClick();
@@ -192,8 +228,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
    public void performClick_editButton_setEditMagnifierSizeMode() {
        View editButton = getInternalView(R.id.magnifier_edit_button);

        // Open view
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        // Perform click
        editButton.performClick();
@@ -208,8 +246,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
                getInternalView(R.id.magnifier_horizontal_lock_switch);
        final boolean currentCheckedState = diagonalScrollingSwitch.isChecked();

        // Open view
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        // Perform click
        diagonalScrollingSwitch.performClick();
@@ -219,8 +259,10 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {

    @Test
    public void onConfigurationChanged_selectedButtonIsStillSelected() {
        // Open view
        mWindowMagnificationSettings.showSettingPanel(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();
        View magnifierMediumButton = getInternalView(R.id.magnifier_medium_button);
        magnifierMediumButton.performClick();

@@ -232,9 +274,46 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
        assertThat(magnifierMediumButton.isSelected()).isTrue();
    }

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

        mWindowMagnificationSettings.showSettingPanel();

        verify(mSecureSettings).registerContentObserverForUser(
                eq(ACCESSIBILITY_MAGNIFICATION_CAPABILITY),
                any(ContentObserver.class),
                eq(UserHandle.USER_CURRENT));
    }

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

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

        verify(mSecureSettings).unregisterContentObserver(any(ContentObserver.class));
    }

    private <T extends View> T getInternalView(@IdRes int idRes) {
        T view = mSettingView.findViewById(idRes);
        assertNotNull(view);
        return view;
    }

    private void setupMagnificationCapabilityAndMode(int capability, int mode) {
        when(mSecureSettings.getIntForUser(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY,
                ACCESSIBILITY_MAGNIFICATION_MODE_NONE,
                UserHandle.USER_CURRENT)).thenReturn(capability);
        when(mSecureSettings.getIntForUser(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE,
                ACCESSIBILITY_MAGNIFICATION_MODE_NONE,
                UserHandle.USER_CURRENT)).thenReturn(mode);
    }
}
Loading