From 96261a5373386831df7f8286096f0d920c29d221 Mon Sep 17 00:00:00 2001 From: Roy Chou Date: Fri, 9 Jun 2023 14:59:43 +0000 Subject: [PATCH] chore(#MagSettingsPanel): make seekbar index reflect the controlling magnifier scale Originally the panel has content observer to let seekbar progress sync with Settings persisted scale. With previous cl that we notify WindowMagnification the controlling magnifier scale updated, we can make the seekbar index update with notified new scale. Therefore, the seekbar index could reflect the actual controlling magnifier scale. Also, if the seekbar triggers onProgressChanged with fromUser false, which means the progress changed is not by the user interaction but by the notifying of the magnifier scale changed, we don't need to trigger the callback to change the magnifier scale. Besides, we remove the persisting scale logic in WindowMagnificationSettings. Since the persisted scale would be updated when the callback onPerformScaleAction is triggered in framework service side, we don't need the duplicated update in sysui side. Bug: 286340381 Bug: 286342154 Test: manually atest IWindowMagnificationConnectionTest atest MagnificationSettingsControllerTest atest WindowMagnificationControllerTest atest WindowMagnificationSettingsTest atest MagnificationControllerTest Change-Id: Ibf78c90bc282225c2cd7670a52cb3a5e686d7d3f Merged-In: Ibf78c90bc282225c2cd7670a52cb3a5e686d7d3f --- .../MagnificationSettingsController.java | 4 + .../accessibility/WindowMagnification.java | 4 + .../WindowMagnificationController.java | 13 +- .../WindowMagnificationSettings.java | 58 +++---- .../ui/view/SeekBarWithIconButtonsView.java | 16 ++ .../IWindowMagnificationConnectionTest.java | 1 + .../MagnificationSettingsControllerTest.java | 8 + .../WindowMagnificationSettingsTest.java | 142 +++++++----------- 8 files changed, 115 insertions(+), 131 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java index fd3c158898227..4052c9a772126 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java @@ -107,6 +107,10 @@ public class MagnificationSettingsController implements ComponentCallbacks { return mWindowMagnificationSettings.isSettingPanelShowing(); } + void setMagnificationScale(float scale) { + mWindowMagnificationSettings.setMagnificationScale(scale); + } + @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { final int configDiff = newConfig.diff(mConfiguration); diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java index 1739ba4b3a012..dd5f1400ba90b 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java @@ -310,6 +310,10 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback return; } scales.put(displayId, scale); + + final MagnificationSettingsController magnificationSettingsController = + mMagnificationSettingsSupplier.get(displayId); + magnificationSettingsController.setMagnificationScale(scale); } @VisibleForTesting diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index e7eab7e462e1f..2fc0c2674d7fc 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -1491,13 +1491,9 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold // Simulate tapping the drag view so it opens the Settings. handleSingleTap(mDragView); } else if (action == R.id.accessibility_action_zoom_in) { - final float scale = mScale + A11Y_CHANGE_SCALE_DIFFERENCE; - mWindowMagnifierCallback.onPerformScaleAction(mDisplayId, - A11Y_ACTION_SCALE_RANGE.clamp(scale)); + performScale(mScale + A11Y_CHANGE_SCALE_DIFFERENCE); } else if (action == R.id.accessibility_action_zoom_out) { - final float scale = mScale - A11Y_CHANGE_SCALE_DIFFERENCE; - mWindowMagnifierCallback.onPerformScaleAction(mDisplayId, - A11Y_ACTION_SCALE_RANGE.clamp(scale)); + performScale(mScale - A11Y_CHANGE_SCALE_DIFFERENCE); } else if (action == R.id.accessibility_action_move_up) { move(0, -mSourceBounds.height()); } else if (action == R.id.accessibility_action_move_down) { @@ -1512,5 +1508,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold mWindowMagnifierCallback.onAccessibilityActionPerformed(mDisplayId); return true; } + + private void performScale(float scale) { + scale = A11Y_ACTION_SCALE_RANGE.clamp(scale); + mWindowMagnifierCallback.onPerformScaleAction(mDisplayId, scale); + } } } \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java index 1e1d4b7b2e5b2..916584b94a9cd 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java @@ -57,7 +57,6 @@ import android.widget.SeekBar; import android.widget.Switch; import android.widget.TextView; -import com.android.internal.accessibility.common.MagnificationConstants; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.systemui.R; @@ -89,14 +88,12 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest private final MagnificationGestureDetector mGestureDetector; private boolean mSingleTapDetected = false; - @VisibleForTesting - SeekBarWithIconButtonsView mZoomSeekbar; + private SeekBarWithIconButtonsView mZoomSeekbar; private LinearLayout mAllowDiagonalScrollingView; private TextView mAllowDiagonalScrollingTitle; private Switch mAllowDiagonalScrollingSwitch; private LinearLayout mPanelView; private LinearLayout mSettingView; - private LinearLayout mButtonView; private ImageButton mSmallButton; private ImageButton mMediumButton; private ImageButton mLargeButton; @@ -110,10 +107,11 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest * magnitude = 10 means, for every 1 scale increase, 10 progress increase in seekbar. */ private int mSeekBarMagnitude; + private float mScale = SCALE_MIN_VALUE; + private WindowMagnificationSettingsCallback mCallback; private ContentObserver mMagnificationCapabilityObserver; - private ContentObserver mMagnificationScaleObserver; @Retention(RetentionPolicy.SOURCE) @IntDef({ @@ -163,30 +161,18 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest }); } }; - mMagnificationScaleObserver = new ContentObserver( - mContext.getMainThreadHandler()) { - @Override - public void onChange(boolean selfChange) { - setScaleSeekbar(getMagnificationScale()); - } - }; } private class ZoomSeekbarChangeListener implements SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - float scale = (progress / (float) mSeekBarMagnitude) + SCALE_MIN_VALUE; - // Update persisted scale only when scale >= PERSISTED_SCALE_MIN_VALUE const. - // We assume if the scale is lower than the PERSISTED_SCALE_MIN_VALUE, there will be - // no obvious magnification effect. - if (scale >= MagnificationConstants.PERSISTED_SCALE_MIN_VALUE) { - mSecureSettings.putFloatForUser( - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, - scale, - UserHandle.USER_CURRENT); + // Notify the service to update the magnifier scale only when the progress changed is + // triggered by user interaction on seekbar + if (fromUser) { + float scale = (progress / (float) mSeekBarMagnitude) + SCALE_MIN_VALUE; + mCallback.onMagnifierScale(scale); } - mCallback.onMagnifierScale(scale); } @Override @@ -322,7 +308,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest // Unregister observer before removing view mSecureSettings.unregisterContentObserver(mMagnificationCapabilityObserver); - mSecureSettings.unregisterContentObserver(mMagnificationScaleObserver); mWindowManager.removeView(mSettingView); mIsVisible = false; if (resetPosition) { @@ -374,7 +359,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest private void showSettingPanel(boolean resetPosition) { if (!mIsVisible) { updateUIControlsIfNeeded(); - setScaleSeekbar(getMagnificationScale()); + setScaleSeekbar(mScale); if (resetPosition) { mDraggableWindowBounds.set(getDraggableWindowBounds()); mParams.x = mDraggableWindowBounds.right; @@ -387,10 +372,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY, mMagnificationCapabilityObserver, UserHandle.USER_CURRENT); - mSecureSettings.registerContentObserverForUser( - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, - mMagnificationScaleObserver, - UserHandle.USER_CURRENT); // Exclude magnification switch button from system gesture area. setSystemGestureExclusion(); @@ -430,11 +411,17 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest UserHandle.USER_CURRENT); } - private float getMagnificationScale() { - return mSecureSettings.getFloatForUser( - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, - SCALE_MIN_VALUE, - UserHandle.USER_CURRENT); + /** + * Only called from outside to notify the controlling magnifier scale changed + * + * @param scale The new controlling magnifier scale + */ + public void setMagnificationScale(float scale) { + mScale = scale; + + if (isSettingPanelShowing()) { + setScaleSeekbar(scale); + } } private void updateUIControlsIfNeeded() { @@ -523,10 +510,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest mZoomSeekbar.setMax((int) (mZoomSeekbar.getChangeMagnitude() * (SCALE_MAX_VALUE - SCALE_MIN_VALUE))); mSeekBarMagnitude = mZoomSeekbar.getChangeMagnitude(); - float scale = mSecureSettings.getFloatForUser( - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, 0, - UserHandle.USER_CURRENT); - setScaleSeekbar(scale); + setScaleSeekbar(mScale); mZoomSeekbar.setOnSeekBarWithIconButtonsChangeListener(new ZoomSeekbarChangeListener()); mAllowDiagonalScrollingView = diff --git a/packages/SystemUI/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsView.java b/packages/SystemUI/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsView.java index 277b4274bb827..f362831e8c883 100644 --- a/packages/SystemUI/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsView.java +++ b/packages/SystemUI/src/com/android/systemui/common/ui/view/SeekBarWithIconButtonsView.java @@ -170,6 +170,22 @@ public class SeekBarWithIconButtonsView extends LinearLayout { mSeekBarListener.setOnSeekBarWithIconButtonsChangeListener(onSeekBarChangeListener); } + /** + * Only for testing. Get previous set mOnSeekBarChangeListener to the seekbar. + */ + @VisibleForTesting + public OnSeekBarWithIconButtonsChangeListener getOnSeekBarWithIconButtonsChangeListener() { + return mSeekBarListener.mOnSeekBarChangeListener; + } + + /** + * Only for testing. Get {@link #mSeekbar} in the layout. + */ + @VisibleForTesting + public SeekBar getSeekbar() { + return mSeekbar; + } + /** * Start and End icons might need to be updated when there is a change in seekbar progress. * Icon Start will need to be enabled when the seekbar progress is larger than 0. diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java index caf230d4e7931..67d6aa8e98cf5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java @@ -198,6 +198,7 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase { assertTrue(mWindowMagnification.mUsersScales.contains(testUserId)); assertEquals(mWindowMagnification.mUsersScales.get(testUserId).get(TEST_DISPLAY), (Float) testScale); + verify(mMagnificationSettingsController).setMagnificationScale(eq(testScale)); } private class FakeControllerSupplier extends 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 62a176c94d677..5bb25f82e7e29 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java @@ -85,6 +85,14 @@ public class MagnificationSettingsControllerTest extends SysuiTestCase { verify(mWindowMagnificationSettings).hideSettingPanel(); } + @Test + public void testSetMagnificationScale() { + final float scale = 3.0f; + mMagnificationSettingsController.setMagnificationScale(scale); + + verify(mWindowMagnificationSettings).setMagnificationScale(eq(scale)); + } + @Test public void testOnConfigurationChanged_notifySettingsPanel() { mMagnificationSettingsController.onConfigurationChanged(ActivityInfo.CONFIG_DENSITY); 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 275723be3859b..1da072f815c1d 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,6 @@ package com.android.systemui.accessibility; -import static android.provider.Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE; 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; @@ -28,10 +27,11 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -55,10 +55,11 @@ import android.widget.LinearLayout; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; -import com.android.internal.accessibility.common.MagnificationConstants; import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; +import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView; +import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView.OnSeekBarWithIconButtonsChangeListener; import com.android.systemui.util.settings.SecureSettings; import org.junit.After; @@ -79,6 +80,7 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { private static final int MAGNIFICATION_SIZE_LARGE = 3; private ViewGroup mSettingView; + private SeekBarWithIconButtonsView mZoomSeekbar; @Mock private AccessibilityManager mAccessibilityManager; @Mock @@ -111,6 +113,7 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { mSecureSettings); mSettingView = mWindowMagnificationSettings.getSettingView(); + mZoomSeekbar = mSettingView.findViewById(R.id.magnifier_zoom_slider); mSecureSettingsScaleCaptor = ArgumentCaptor.forClass(Float.class); mSecureSettingsNameCaptor = ArgumentCaptor.forClass(String.class); mSecureSettingsUserHandleCaptor = ArgumentCaptor.forClass(Integer.class); @@ -336,20 +339,6 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { eq(UserHandle.USER_CURRENT)); } - @Test - public void showSettingsPanel_observerForMagnificationScaleRegistered() { - setupMagnificationCapabilityAndMode( - /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL, - /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); - - mWindowMagnificationSettings.showSettingPanel(); - - verify(mSecureSettings).registerContentObserverForUser( - eq(ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE), - any(ContentObserver.class), - eq(UserHandle.USER_CURRENT)); - } - @Test public void hideSettingsPanel_observerUnregistered() { setupMagnificationCapabilityAndMode( @@ -359,19 +348,25 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { mWindowMagnificationSettings.showSettingPanel(); mWindowMagnificationSettings.hideSettingPanel(); - verify(mSecureSettings, times(2)).unregisterContentObserver(any(ContentObserver.class)); + verify(mSecureSettings).unregisterContentObserver(any(ContentObserver.class)); } @Test public void seekbarProgress_justInflated_maxValueAndProgressSetCorrectly() { - setupScaleInSecureSettings(0f); - assertThat(mWindowMagnificationSettings.mZoomSeekbar.getProgress()).isEqualTo(0); - assertThat(mWindowMagnificationSettings.mZoomSeekbar.getMax()).isEqualTo(70); + mWindowMagnificationSettings.setMagnificationScale(2f); + mWindowMagnificationSettings.inflateView(); + + // inflateView() would create new settingsView in WindowMagnificationSettings so we + // need to retrieve the new mZoomSeekbar + mSettingView = mWindowMagnificationSettings.getSettingView(); + mZoomSeekbar = mSettingView.findViewById(R.id.magnifier_zoom_slider); + assertThat(mZoomSeekbar.getProgress()).isEqualTo(10); + assertThat(mZoomSeekbar.getMax()).isEqualTo(70); } @Test public void seekbarProgress_minMagnification_seekbarProgressIsCorrect() { - setupScaleInSecureSettings(0f); + mWindowMagnificationSettings.setMagnificationScale(1f); setupMagnificationCapabilityAndMode( /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); @@ -379,24 +374,24 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { mWindowMagnificationSettings.showSettingPanel(); // Seekbar index from 0 to 70. 1.0f scale (A11Y_SCALE_MIN_VALUE) would correspond to 0. - assertThat(mWindowMagnificationSettings.mZoomSeekbar.getProgress()).isEqualTo(0); + assertThat(mZoomSeekbar.getProgress()).isEqualTo(0); } @Test public void seekbarProgress_belowMinMagnification_seekbarProgressIsZero() { - setupScaleInSecureSettings(0f); + mWindowMagnificationSettings.setMagnificationScale(0f); setupMagnificationCapabilityAndMode( /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); mWindowMagnificationSettings.showSettingPanel(); - assertThat(mWindowMagnificationSettings.mZoomSeekbar.getProgress()).isEqualTo(0); + assertThat(mZoomSeekbar.getProgress()).isEqualTo(0); } @Test public void seekbarProgress_magnificationBefore_seekbarProgressIsHalf() { - setupScaleInSecureSettings(4f); + mWindowMagnificationSettings.setMagnificationScale(4f); setupMagnificationCapabilityAndMode( /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); @@ -405,12 +400,12 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { // float scale : from 1.0f to 8.0f, seekbar index from 0 to 70. // 4.0f would correspond to 30. - assertThat(mWindowMagnificationSettings.mZoomSeekbar.getProgress()).isEqualTo(30); + assertThat(mZoomSeekbar.getProgress()).isEqualTo(30); } @Test public void seekbarProgress_maxMagnificationBefore_seekbarProgressIsMax() { - setupScaleInSecureSettings(8f); + mWindowMagnificationSettings.setMagnificationScale(8f); setupMagnificationCapabilityAndMode( /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); @@ -419,12 +414,12 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { // 8.0f is max magnification {@link MagnificationScaleProvider#MAX_SCALE}. // Max zoom seek bar is 70. - assertThat(mWindowMagnificationSettings.mZoomSeekbar.getProgress()).isEqualTo(70); + assertThat(mZoomSeekbar.getProgress()).isEqualTo(70); } @Test public void seekbarProgress_aboveMaxMagnificationBefore_seekbarProgressIsMax() { - setupScaleInSecureSettings(9f); + mWindowMagnificationSettings.setMagnificationScale(9f); setupMagnificationCapabilityAndMode( /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); @@ -432,51 +427,47 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { mWindowMagnificationSettings.showSettingPanel(); // Max zoom seek bar is 70. - assertThat(mWindowMagnificationSettings.mZoomSeekbar.getProgress()).isEqualTo(70); + assertThat(mZoomSeekbar.getProgress()).isEqualTo(70); } @Test - public void seekbarProgress_progressChangedRoughlyHalf_scaleAndCallbackUpdated() { - setupMagnificationCapabilityAndMode( - /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, - /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); - mWindowMagnificationSettings.showSettingPanel(); + public void onSeekBarProgressChanged_fromUserFalse_callbackNotTriggered() { + OnSeekBarWithIconButtonsChangeListener onChangeListener = + mZoomSeekbar.getOnSeekBarWithIconButtonsChangeListener(); + onChangeListener.onProgressChanged( + mZoomSeekbar.getSeekbar(), /* progress= */ 30, /* fromUser= */ false); - mWindowMagnificationSettings.mZoomSeekbar.setProgress(30); + verify(mWindowMagnificationSettingsCallback, never()) + .onMagnifierScale(/* scale= */ anyFloat()); + } + + @Test + public void onSeekBarProgressChangedToRoughlyHalf_fromUserTrue_callbackUpdated() { + OnSeekBarWithIconButtonsChangeListener onChangeListener = + mZoomSeekbar.getOnSeekBarWithIconButtonsChangeListener(); + onChangeListener.onProgressChanged( + mZoomSeekbar.getSeekbar(), /* progress= */ 30, /* fromUser= */ true); - verifyScaleUpdatedInSecureSettings(4f); verifyCallbackOnMagnifierScale(4f); } @Test - public void seekbarProgress_minProgress_callbackUpdated() { - setupMagnificationCapabilityAndMode( - /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, - /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); - mWindowMagnificationSettings.showSettingPanel(); - // Set progress to non-zero first so onProgressChanged can be triggered upon setting to 0. - mWindowMagnificationSettings.mZoomSeekbar.setProgress(30); + public void onSeekBarProgressChangedToMin_fromUserTrue_callbackUpdated() { + OnSeekBarWithIconButtonsChangeListener onChangeListener = + mZoomSeekbar.getOnSeekBarWithIconButtonsChangeListener(); + onChangeListener.onProgressChanged( + mZoomSeekbar.getSeekbar(), /* progress= */ 0, /* fromUser= */ true); - mWindowMagnificationSettings.mZoomSeekbar.setProgress(0); - - // For now, secure settings will not be updated for values < 1.3f. Follow up on this later. - verify(mWindowMagnificationSettingsCallback, times(2)) - .onMagnifierScale(mCallbackMagnifierScaleCaptor.capture()); - var capturedArgs = mCallbackMagnifierScaleCaptor.getAllValues(); - assertThat(capturedArgs).hasSize(2); - assertThat(capturedArgs.get(1)).isWithin(0.01f).of(1f); + verifyCallbackOnMagnifierScale(1f); } @Test - public void seekbarProgress_maxProgress_scaleAndCallbackUpdated() { - setupMagnificationCapabilityAndMode( - /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, - /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); - mWindowMagnificationSettings.showSettingPanel(); + public void onSeekBarProgressChangedToMax_fromUserTrue_callbackUpdated() { + OnSeekBarWithIconButtonsChangeListener onChangeListener = + mZoomSeekbar.getOnSeekBarWithIconButtonsChangeListener(); + onChangeListener.onProgressChanged( + mZoomSeekbar.getSeekbar(), /* progress= */ 70, /* fromUser= */ true); - mWindowMagnificationSettings.mZoomSeekbar.setProgress(70); - - verifyScaleUpdatedInSecureSettings(8f); verifyCallbackOnMagnifierScale(8f); } @@ -485,30 +476,12 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { setupMagnificationCapabilityAndMode( /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL, /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); - var contentObserverCaptor = ArgumentCaptor.forClass(ContentObserver.class); mWindowMagnificationSettings.showSettingPanel(); - verify(mSecureSettings).registerContentObserverForUser( - eq(ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE), - contentObserverCaptor.capture(), - eq(UserHandle.USER_CURRENT)); // Simulate outside changes. - setupScaleInSecureSettings(4f); - // Simulate callback due to outside change. - contentObserverCaptor.getValue().onChange(/* selfChange= */ false); + mWindowMagnificationSettings.setMagnificationScale(4f); - assertThat(mWindowMagnificationSettings.mZoomSeekbar.getProgress()).isEqualTo(30); - } - - private void verifyScaleUpdatedInSecureSettings(float scale) { - verify(mSecureSettings).putFloatForUser( - mSecureSettingsNameCaptor.capture(), - mSecureSettingsScaleCaptor.capture(), - mSecureSettingsUserHandleCaptor.capture()); - assertThat(mSecureSettingsScaleCaptor.getValue()).isWithin(0.01f).of(scale); - assertThat(mSecureSettingsNameCaptor.getValue()) - .isEqualTo(Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE); - assertThat(mSecureSettingsUserHandleCaptor.getValue()).isEqualTo(UserHandle.USER_CURRENT); + assertThat(mZoomSeekbar.getProgress()).isEqualTo(30); } private void verifyCallbackOnMagnifierScale(float scale) { @@ -533,11 +506,4 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { anyInt(), eq(UserHandle.USER_CURRENT))).thenReturn(mode); } - - private void setupScaleInSecureSettings(float scale) { - when(mSecureSettings.getFloatForUser( - ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, - MagnificationConstants.SCALE_MIN_VALUE, - UserHandle.USER_CURRENT)).thenReturn(scale); - } }