From 64240b7facc1023abde6ace751d78bb9e90a4d69 Mon Sep 17 00:00:00 2001 From: Candice Lo Date: Mon, 8 May 2023 01:40:23 +0000 Subject: [PATCH] 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 --- .../MagnificationSettingsController.java | 11 +- .../accessibility/WindowMagnification.java | 10 +- .../WindowMagnificationSettings.java | 123 ++++++++++++------ .../MagnificationSettingsControllerTest.java | 6 +- .../WindowMagnificationSettingsTest.java | 113 +++++++++++++--- .../WindowMagnificationTest.java | 3 +- 6 files changed, 190 insertions(+), 76 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java index 3349fe5f11472..c3bb423e5e4e4 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java @@ -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() { diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java index 1c030da99e15c..c820e4f105c20 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java @@ -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); }); } }; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java index 155c26d9fe9d3..44b49b8c23865 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java @@ -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) { + 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; + } else { // mode = ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW + mEditButton.setVisibility(View.VISIBLE); + mAllowDiagonalScrollingView.setVisibility(View.VISIBLE); + } + break; + 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 + // 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; - case ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW: - mEditButton.setVisibility(View.VISIBLE); - mAllowDiagonalScrollingView.setVisibility(View.VISIBLE); - if (selectedButtonIndex == MagnificationSize.FULLSCREEN) { - selectedButtonIndex = MagnificationSize.NONE; - } - 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; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java index 30cbc5242a812..665246bd7f7dc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java @@ -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 diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java index c08b5b47cb06f..ce96708039aed 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java @@ -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 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); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java index 239b5bd394300..086f6285f8cf6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java @@ -184,8 +184,7 @@ public class WindowMagnificationTest extends SysuiTestCase { mWindowMagnification.mWindowMagnifierCallback.onClickSettingsButton(TEST_DISPLAY); waitForIdleSync(); - verify(mMagnificationSettingsController).showMagnificationSettings( - eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW)); + verify(mMagnificationSettingsController).showMagnificationSettings(); } @Test