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); - } }