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

Commit 47b12082 authored by mincheli's avatar mincheli
Browse files

Keeps magnification button StartDelay for 3 secs even remove animations settings is on

When remove animations settings is on, all of the animation would be
out of function and so as the start delay of magnification button
animation. And this bug would make magnification mode unabled to be
changed through magnification button when the settings is on
because magnification button would be dismissed immediately when
starting to show the button.
To fix it, we use handler.postDelayed to handle the animation
start delay.

Bug: 167371292
Test: atest MagnificationModeSwitchTest
Change-Id: Ib4e3afc8fb4dab28283afb7826b4656e113f4723
parent bd3af96c
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ class MagnificationModeSwitch {

    private static final int DURATION_MS = 5000;
    private static final int START_DELAY_MS = 3000;
    private final Runnable mAnimationTask;

    private final Context mContext;
    private final WindowManager mWindowManager;
@@ -70,6 +71,14 @@ class MagnificationModeSwitch {
        applyResourcesValues();
        mImageView.setImageResource(getIconResId(mMagnificationMode));
        mImageView.setOnTouchListener(this::onTouch);

        mAnimationTask = () -> {
            mImageView.animate()
                    .alpha(0f)
                    .setDuration(DURATION_MS)
                    .withEndAction(() -> removeButton())
                    .start();
        };
    }

    private void applyResourcesValues() {
@@ -147,13 +156,8 @@ class MagnificationModeSwitch {
        // Dismiss the magnification switch button after the button is displayed for a period of
        // time.
        mImageView.animate().cancel();
        mImageView.animate()
                .alpha(0f)
                .setStartDelay(START_DELAY_MS)
                .setDuration(DURATION_MS)
                .withEndAction(
                        () -> removeButton())
                .start();
        mImageView.removeCallbacks(mAnimationTask);
        mImageView.postDelayed(mAnimationTask, START_DELAY_MS);
    }

    void onConfigurationChanged(int configDiff) {
+5 −2
Original line number Diff line number Diff line
@@ -231,7 +231,6 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
    private void assertShowButtonAnimation() {
        verify(mViewPropertyAnimator).cancel();
        verify(mViewPropertyAnimator).setDuration(anyLong());
        verify(mViewPropertyAnimator).setStartDelay(anyLong());
        verify(mViewPropertyAnimator).alpha(anyFloat());
        verify(mViewPropertyAnimator).start();
    }
@@ -239,11 +238,15 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
    private void initMockImageViewAndAnimator() {
        when(mViewPropertyAnimator.setDuration(anyLong())).thenReturn(mViewPropertyAnimator);
        when(mViewPropertyAnimator.alpha(anyFloat())).thenReturn(mViewPropertyAnimator);
        when(mViewPropertyAnimator.setStartDelay(anyLong())).thenReturn(mViewPropertyAnimator);
        when(mViewPropertyAnimator.withEndAction(any(Runnable.class))).thenReturn(
                mViewPropertyAnimator);

        when(mSpyImageView.animate()).thenReturn(mViewPropertyAnimator);
        doAnswer(invocation -> {
            Runnable run = invocation.getArgument(0);
            run.run();
            return null;
        }).when(mSpyImageView).postDelayed(any(), anyLong());
    }

    private void resetMockImageViewAndAnimator() {