Loading packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +101 −70 Original line number Diff line number Diff line Loading @@ -29,20 +29,23 @@ import static com.android.systemui.accessibility.MagnificationModeSwitch.FADING_ import static com.android.systemui.accessibility.MagnificationModeSwitch.getIconResId; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.ActivityInfo; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; import android.testing.AndroidTestingRunner; Loading @@ -60,15 +63,18 @@ import androidx.test.filters.SmallTest; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.List; @SmallTest @RunWith(AndroidTestingRunner.class) public class MagnificationModeSwitchTest extends SysuiTestCase { Loading @@ -81,11 +87,10 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { private AccessibilityManager mAccessibilityManager; @Mock private WindowManager mWindowManager; @Mock private ViewPropertyAnimator mViewPropertyAnimator; private MagnificationModeSwitch mMagnificationModeSwitch; @Captor private ArgumentCaptor<View.OnTouchListener> mTouchListenerCaptor; private View.OnTouchListener mTouchListener; private List<MotionEvent> mMotionEvents = new ArrayList<>(); @Before public void setUp() throws Exception { Loading @@ -97,9 +102,23 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { mContext.addMockSystemService(Context.WINDOW_SERVICE, mWindowManager); mContext.addMockSystemService(Context.ACCESSIBILITY_SERVICE, mAccessibilityManager); mSpyImageView = Mockito.spy(new ImageView(mContext)); resetMockImageViewAndAnimator(); mViewPropertyAnimator = Mockito.spy(mSpyImageView.animate()); resetAndStubMockImageViewAndAnimator(); doAnswer((invocation) -> { mTouchListener = invocation.getArgument(0); return null; }).when(mSpyImageView).setOnTouchListener( any(View.OnTouchListener.class)); mMagnificationModeSwitch = new MagnificationModeSwitch(mContext, mSpyImageView); assertNotNull(mTouchListener); } @After public void tearDown() { for (MotionEvent event:mMotionEvents) { event.recycle(); } mMotionEvents.clear(); } @Test Loading @@ -124,7 +143,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { } @Test public void showMagnificationButton_a11yTimeout_autoFadeOut() { public void showMagnificationButton_setA11yTimeout_postDelayedAnimationWithA11yTimeout() { final int a11yTimeout = 12345; when(mAccessibilityManager.getRecommendedTimeoutMillis(anyInt(), anyInt())).thenReturn( a11yTimeout); Loading @@ -134,14 +153,21 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { verify(mAccessibilityManager).getRecommendedTimeoutMillis( DEFAULT_FADE_OUT_ANIMATION_DELAY_MS, AccessibilityManager.FLAG_CONTENT_ICONS | AccessibilityManager.FLAG_CONTENT_CONTROLS); final ArgumentCaptor<Runnable> fadeOutCaptor = ArgumentCaptor.forClass(Runnable.class); final ArgumentCaptor<Long> fadeOutDelay = ArgumentCaptor.forClass(Long.class); verify(mSpyImageView).postOnAnimationDelayed(fadeOutCaptor.capture(), fadeOutDelay.capture()); assertEquals(a11yTimeout, (long) fadeOutDelay.getValue()); verify(mSpyImageView).postOnAnimationDelayed(any(Runnable.class), eq((long) a11yTimeout)); } @Test public void showMagnificationButton_windowMode_verifyAnimationEndAction() { // Execute the runnable immediately to run the animation. doAnswer((invocation) -> { final Runnable action = invocation.getArgument(0); action.run(); return null; }).when(mSpyImageView).postOnAnimationDelayed(any(Runnable.class), anyLong()); mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); // Verify the end action after fade-out. fadeOutCaptor.getValue().run(); final ArgumentCaptor<Runnable> endActionCaptor = ArgumentCaptor.forClass(Runnable.class); verify(mViewPropertyAnimator).withEndAction(endActionCaptor.capture()); Loading @@ -154,7 +180,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void onConfigurationChanged_buttonIsShowing_setImageResource() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); resetAndStubMockImageViewAndAnimator(); mMagnificationModeSwitch.onConfigurationChanged(ActivityInfo.CONFIG_DENSITY); Loading @@ -165,42 +191,46 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void performSingleTap_fullscreenMode_removeViewAndChangeSettingsValue() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); resetAndStubMockImageViewAndAnimator(); // Perform a single-tap final View.OnTouchListener listener = mTouchListenerCaptor.getValue(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, 0, ACTION_DOWN, 100, 100, 0)); final long downTime = SystemClock.uptimeMillis(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(downTime, 0, ACTION_DOWN, 100, 100)); verify(mViewPropertyAnimator).cancel(); resetMockImageViewAndAnimator(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_UP, 100, 100, 0)); resetAndStubMockImageViewAndAnimator(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(downTime, downTime, ACTION_UP, 100, 100)); verifyTapAction(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); } @Test public void showMagnificationButton_performDragging_updateViewLayout() { public void performDragging_showMagnificationButton_updateViewLayout() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); // Perform dragging final View.OnTouchListener listener = mTouchListenerCaptor.getValue(); final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop(); resetAndStubMockImageViewAndAnimator(); final int previousMode = Settings.Secure.getIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0, UserHandle.USER_CURRENT); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, 0, ACTION_DOWN, 100, 100, 0)); // Perform dragging final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop() + 10; final long downTime = SystemClock.uptimeMillis(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, 0, ACTION_DOWN, 100, 100)); verify(mViewPropertyAnimator).cancel(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_MOVE, 100 + offset, 100, 0)); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(downTime, downTime, ACTION_MOVE, 100 + offset, 100)); verify(mWindowManager).updateViewLayout(eq(mSpyImageView), any(WindowManager.LayoutParams.class)); resetMockImageViewAndAnimator(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout() + 10, ACTION_UP, 100 + offset, 100, 0)); resetAndStubMockImageViewAndAnimator(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_UP, 100 + offset, 100)); assertModeUnchanged(previousMode); assertShowFadingAnimation(FADE_OUT_ALPHA); } Loading @@ -208,18 +238,17 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void performSingleTapActionCanceled_showButtonAnimation() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); // Perform single tap final View.OnTouchListener listener = mTouchListenerCaptor.getValue(); resetAndStubMockImageViewAndAnimator(); final int previousMode = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, 0, ACTION_DOWN, 100, 100, 0)); resetMockImageViewAndAnimator(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_CANCEL, 100, 100, 0)); final long downTime = SystemClock.uptimeMillis(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_DOWN, 100, 100)); resetAndStubMockImageViewAndAnimator(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_CANCEL, 100, 100)); assertModeUnchanged(previousMode); assertShowFadingAnimation(FADE_OUT_ALPHA); } Loading @@ -227,21 +256,21 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void performDraggingActionCanceled_showButtonAnimation() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); // Perform dragging final View.OnTouchListener listener = mTouchListenerCaptor.getValue(); final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop(); resetAndStubMockImageViewAndAnimator(); final int previousMode = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, 0, ACTION_DOWN, 100, 100, 0)); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_MOVE, 100 + offset, 100, 0)); resetMockImageViewAndAnimator(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_CANCEL, 100 + offset, 100, 0)); // Perform dragging final long downTime = SystemClock.uptimeMillis(); final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop() + 10; mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( 0, 0, ACTION_DOWN, 100, 100)); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_MOVE, 100 + offset, 100)); resetAndStubMockImageViewAndAnimator(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_CANCEL, 100 + offset, 100)); assertModeUnchanged(previousMode); assertShowFadingAnimation(FADE_OUT_ALPHA); } Loading @@ -266,7 +295,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void performA11yActions_showWindowModeButton_verifyTapAction() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); resetMockImageViewAndAnimator(); resetAndStubMockImageViewAndAnimator(); mSpyImageView.performAccessibilityAction( ACTION_CLICK.getId(), null); Loading @@ -278,7 +307,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { public void showButton_showFadeOutAnimation_fadeOutAnimationCanceled() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); assertShowFadingAnimation(FADE_OUT_ALPHA); resetMockImageViewAndAnimator(); resetAndStubMockImageViewAndAnimator(); mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); Loading Loading @@ -327,7 +356,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { } else { // Fade-out verify(mSpyImageView).postOnAnimationDelayed(runnableCaptor.capture(), anyLong()); } resetMockAnimator(); resetAndStubMockAnimator(); runnableCaptor.getValue().run(); Loading @@ -336,20 +365,15 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { verify(mViewPropertyAnimator).start(); } private void resetMockImageViewAndAnimator() { private void resetAndStubMockImageViewAndAnimator() { resetAndStubMockAnimator(); Mockito.reset(mSpyImageView); doAnswer(invocation -> null).when(mSpyImageView).setOnTouchListener( mTouchListenerCaptor.capture()); resetMockAnimator(); doReturn(mViewPropertyAnimator).when(mSpyImageView).animate(); } private void resetMockAnimator() { private void resetAndStubMockAnimator() { Mockito.reset(mViewPropertyAnimator); when(mViewPropertyAnimator.setDuration(anyLong())).thenReturn(mViewPropertyAnimator); when(mViewPropertyAnimator.alpha(anyFloat())).thenReturn(mViewPropertyAnimator); when(mViewPropertyAnimator.withEndAction(any(Runnable.class))).thenReturn( mViewPropertyAnimator); when(mSpyImageView.animate()).thenReturn(mViewPropertyAnimator); doNothing().when(mViewPropertyAnimator).start(); } /** Loading @@ -366,4 +390,11 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0, UserHandle.USER_CURRENT); assertEquals(expectedMode, actualMode); } private MotionEvent obtainMotionEvent(long downTime, long eventTime, int action, float x, float y) { MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, 0); mMotionEvents.add(event); return event; } } Loading
packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +101 −70 Original line number Diff line number Diff line Loading @@ -29,20 +29,23 @@ import static com.android.systemui.accessibility.MagnificationModeSwitch.FADING_ import static com.android.systemui.accessibility.MagnificationModeSwitch.getIconResId; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.ActivityInfo; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; import android.testing.AndroidTestingRunner; Loading @@ -60,15 +63,18 @@ import androidx.test.filters.SmallTest; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.List; @SmallTest @RunWith(AndroidTestingRunner.class) public class MagnificationModeSwitchTest extends SysuiTestCase { Loading @@ -81,11 +87,10 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { private AccessibilityManager mAccessibilityManager; @Mock private WindowManager mWindowManager; @Mock private ViewPropertyAnimator mViewPropertyAnimator; private MagnificationModeSwitch mMagnificationModeSwitch; @Captor private ArgumentCaptor<View.OnTouchListener> mTouchListenerCaptor; private View.OnTouchListener mTouchListener; private List<MotionEvent> mMotionEvents = new ArrayList<>(); @Before public void setUp() throws Exception { Loading @@ -97,9 +102,23 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { mContext.addMockSystemService(Context.WINDOW_SERVICE, mWindowManager); mContext.addMockSystemService(Context.ACCESSIBILITY_SERVICE, mAccessibilityManager); mSpyImageView = Mockito.spy(new ImageView(mContext)); resetMockImageViewAndAnimator(); mViewPropertyAnimator = Mockito.spy(mSpyImageView.animate()); resetAndStubMockImageViewAndAnimator(); doAnswer((invocation) -> { mTouchListener = invocation.getArgument(0); return null; }).when(mSpyImageView).setOnTouchListener( any(View.OnTouchListener.class)); mMagnificationModeSwitch = new MagnificationModeSwitch(mContext, mSpyImageView); assertNotNull(mTouchListener); } @After public void tearDown() { for (MotionEvent event:mMotionEvents) { event.recycle(); } mMotionEvents.clear(); } @Test Loading @@ -124,7 +143,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { } @Test public void showMagnificationButton_a11yTimeout_autoFadeOut() { public void showMagnificationButton_setA11yTimeout_postDelayedAnimationWithA11yTimeout() { final int a11yTimeout = 12345; when(mAccessibilityManager.getRecommendedTimeoutMillis(anyInt(), anyInt())).thenReturn( a11yTimeout); Loading @@ -134,14 +153,21 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { verify(mAccessibilityManager).getRecommendedTimeoutMillis( DEFAULT_FADE_OUT_ANIMATION_DELAY_MS, AccessibilityManager.FLAG_CONTENT_ICONS | AccessibilityManager.FLAG_CONTENT_CONTROLS); final ArgumentCaptor<Runnable> fadeOutCaptor = ArgumentCaptor.forClass(Runnable.class); final ArgumentCaptor<Long> fadeOutDelay = ArgumentCaptor.forClass(Long.class); verify(mSpyImageView).postOnAnimationDelayed(fadeOutCaptor.capture(), fadeOutDelay.capture()); assertEquals(a11yTimeout, (long) fadeOutDelay.getValue()); verify(mSpyImageView).postOnAnimationDelayed(any(Runnable.class), eq((long) a11yTimeout)); } @Test public void showMagnificationButton_windowMode_verifyAnimationEndAction() { // Execute the runnable immediately to run the animation. doAnswer((invocation) -> { final Runnable action = invocation.getArgument(0); action.run(); return null; }).when(mSpyImageView).postOnAnimationDelayed(any(Runnable.class), anyLong()); mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); // Verify the end action after fade-out. fadeOutCaptor.getValue().run(); final ArgumentCaptor<Runnable> endActionCaptor = ArgumentCaptor.forClass(Runnable.class); verify(mViewPropertyAnimator).withEndAction(endActionCaptor.capture()); Loading @@ -154,7 +180,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void onConfigurationChanged_buttonIsShowing_setImageResource() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); resetAndStubMockImageViewAndAnimator(); mMagnificationModeSwitch.onConfigurationChanged(ActivityInfo.CONFIG_DENSITY); Loading @@ -165,42 +191,46 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void performSingleTap_fullscreenMode_removeViewAndChangeSettingsValue() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); resetAndStubMockImageViewAndAnimator(); // Perform a single-tap final View.OnTouchListener listener = mTouchListenerCaptor.getValue(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, 0, ACTION_DOWN, 100, 100, 0)); final long downTime = SystemClock.uptimeMillis(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(downTime, 0, ACTION_DOWN, 100, 100)); verify(mViewPropertyAnimator).cancel(); resetMockImageViewAndAnimator(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_UP, 100, 100, 0)); resetAndStubMockImageViewAndAnimator(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(downTime, downTime, ACTION_UP, 100, 100)); verifyTapAction(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); } @Test public void showMagnificationButton_performDragging_updateViewLayout() { public void performDragging_showMagnificationButton_updateViewLayout() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); // Perform dragging final View.OnTouchListener listener = mTouchListenerCaptor.getValue(); final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop(); resetAndStubMockImageViewAndAnimator(); final int previousMode = Settings.Secure.getIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0, UserHandle.USER_CURRENT); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, 0, ACTION_DOWN, 100, 100, 0)); // Perform dragging final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop() + 10; final long downTime = SystemClock.uptimeMillis(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, 0, ACTION_DOWN, 100, 100)); verify(mViewPropertyAnimator).cancel(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_MOVE, 100 + offset, 100, 0)); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(downTime, downTime, ACTION_MOVE, 100 + offset, 100)); verify(mWindowManager).updateViewLayout(eq(mSpyImageView), any(WindowManager.LayoutParams.class)); resetMockImageViewAndAnimator(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout() + 10, ACTION_UP, 100 + offset, 100, 0)); resetAndStubMockImageViewAndAnimator(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_UP, 100 + offset, 100)); assertModeUnchanged(previousMode); assertShowFadingAnimation(FADE_OUT_ALPHA); } Loading @@ -208,18 +238,17 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void performSingleTapActionCanceled_showButtonAnimation() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); // Perform single tap final View.OnTouchListener listener = mTouchListenerCaptor.getValue(); resetAndStubMockImageViewAndAnimator(); final int previousMode = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, 0, ACTION_DOWN, 100, 100, 0)); resetMockImageViewAndAnimator(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_CANCEL, 100, 100, 0)); final long downTime = SystemClock.uptimeMillis(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_DOWN, 100, 100)); resetAndStubMockImageViewAndAnimator(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_CANCEL, 100, 100)); assertModeUnchanged(previousMode); assertShowFadingAnimation(FADE_OUT_ALPHA); } Loading @@ -227,21 +256,21 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void performDraggingActionCanceled_showButtonAnimation() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); resetMockImageViewAndAnimator(); // Perform dragging final View.OnTouchListener listener = mTouchListenerCaptor.getValue(); final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop(); resetAndStubMockImageViewAndAnimator(); final int previousMode = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, 0, ACTION_DOWN, 100, 100, 0)); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_MOVE, 100 + offset, 100, 0)); resetMockImageViewAndAnimator(); listener.onTouch(mSpyImageView, MotionEvent.obtain( 0, ViewConfiguration.getTapTimeout(), ACTION_CANCEL, 100 + offset, 100, 0)); // Perform dragging final long downTime = SystemClock.uptimeMillis(); final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop() + 10; mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( 0, 0, ACTION_DOWN, 100, 100)); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_MOVE, 100 + offset, 100)); resetAndStubMockImageViewAndAnimator(); mTouchListener.onTouch(mSpyImageView, obtainMotionEvent( downTime, downTime, ACTION_CANCEL, 100 + offset, 100)); assertModeUnchanged(previousMode); assertShowFadingAnimation(FADE_OUT_ALPHA); } Loading @@ -266,7 +295,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Test public void performA11yActions_showWindowModeButton_verifyTapAction() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); resetMockImageViewAndAnimator(); resetAndStubMockImageViewAndAnimator(); mSpyImageView.performAccessibilityAction( ACTION_CLICK.getId(), null); Loading @@ -278,7 +307,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { public void showButton_showFadeOutAnimation_fadeOutAnimationCanceled() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); assertShowFadingAnimation(FADE_OUT_ALPHA); resetMockImageViewAndAnimator(); resetAndStubMockImageViewAndAnimator(); mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); Loading Loading @@ -327,7 +356,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { } else { // Fade-out verify(mSpyImageView).postOnAnimationDelayed(runnableCaptor.capture(), anyLong()); } resetMockAnimator(); resetAndStubMockAnimator(); runnableCaptor.getValue().run(); Loading @@ -336,20 +365,15 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { verify(mViewPropertyAnimator).start(); } private void resetMockImageViewAndAnimator() { private void resetAndStubMockImageViewAndAnimator() { resetAndStubMockAnimator(); Mockito.reset(mSpyImageView); doAnswer(invocation -> null).when(mSpyImageView).setOnTouchListener( mTouchListenerCaptor.capture()); resetMockAnimator(); doReturn(mViewPropertyAnimator).when(mSpyImageView).animate(); } private void resetMockAnimator() { private void resetAndStubMockAnimator() { Mockito.reset(mViewPropertyAnimator); when(mViewPropertyAnimator.setDuration(anyLong())).thenReturn(mViewPropertyAnimator); when(mViewPropertyAnimator.alpha(anyFloat())).thenReturn(mViewPropertyAnimator); when(mViewPropertyAnimator.withEndAction(any(Runnable.class))).thenReturn( mViewPropertyAnimator); when(mSpyImageView.animate()).thenReturn(mViewPropertyAnimator); doNothing().when(mViewPropertyAnimator).start(); } /** Loading @@ -366,4 +390,11 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0, UserHandle.USER_CURRENT); assertEquals(expectedMode, actualMode); } private MotionEvent obtainMotionEvent(long downTime, long eventTime, int action, float x, float y) { MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, 0); mMotionEvents.add(event); return event; } }