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

Commit da4376df authored by Minche Li's avatar Minche Li Committed by Android (Google) Code Review
Browse files

Merge "Excludes magnification switch button from system gesture area"

parents d908ae2c 3a0b5582
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -19,8 +19,8 @@
        <shape android:shape="rectangle">
            <solid android:color="@color/magnification_switch_button_color" />
            <size
                android:width="40dp"
                android:height="40dp" />
                android:width="48dp"
                android:height="48dp" />
        </shape>
    </item>

+2 −2
Original line number Diff line number Diff line
@@ -19,8 +19,8 @@
        <shape android:shape="rectangle">
            <solid android:color="@color/magnification_switch_button_color" />
            <size
                android:width="40dp"
                android:height="40dp" />
                android:width="48dp"
                android:height="48dp" />
        </shape>
    </item>

+2 −2
Original line number Diff line number Diff line
@@ -1194,8 +1194,8 @@
    <dimen name="magnification_frame_move_long">25dp</dimen>
    <dimen name="magnification_drag_view_size">38dp</dimen>
    <dimen name="magnification_controls_size">90dp</dimen>
    <dimen name="magnification_switch_button_size">32dp</dimen>
    <dimen name="magnification_switch_button_padding">8dp</dimen>
    <dimen name="magnification_switch_button_size">60dp</dimen>
    <dimen name="magnification_switch_button_padding">12dp</dimen>
    <dimen name="magnifier_left_right_controls_width">35dp</dimen>
    <dimen name="magnifier_left_right_controls_height">45dp</dimen>
    <dimen name="magnifier_up_down_controls_width">45dp</dimen>
+20 −3
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.graphics.PointF;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
@@ -41,6 +42,8 @@ import android.widget.ImageView;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;

import java.util.Collections;

/**
 * Shows/hides a {@link android.widget.ImageView} on the screen and changes the values of
 * {@link Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE} when the UI is toggled.
@@ -85,7 +88,6 @@ class MagnificationModeSwitch {
        mImageView = imageView;
        mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
        applyResourcesValues();
        mImageView.setImageResource(getIconResId(mMagnificationMode));
        mImageView.setOnTouchListener(this::onTouch);
        mImageView.setAccessibilityDelegate(new View.AccessibilityDelegate() {
            @Override
@@ -138,6 +140,7 @@ class MagnificationModeSwitch {
        final int padding = mContext.getResources().getDimensionPixelSize(
                R.dimen.magnification_switch_button_padding);
        mImageView.setPadding(padding, padding, padding, padding);
        mImageView.setImageResource(getIconResId(mMagnificationMode));
    }

    private boolean onTouch(View v, MotionEvent event) {
@@ -205,6 +208,8 @@ class MagnificationModeSwitch {
        }
        if (!mIsVisible) {
            mWindowManager.addView(mImageView, mParams);
            // Exclude magnification switch button from system gesture area.
            setSystemGestureExclusion();
            mIsVisible = true;
            mImageView.postOnAnimation(mFadeInAnimationTask);
            mUiTimeout = mAccessibilityManager.getRecommendedTimeoutMillis(
@@ -224,7 +229,11 @@ class MagnificationModeSwitch {
    void onConfigurationChanged(int configDiff) {
        if ((configDiff & ActivityInfo.CONFIG_DENSITY) != 0) {
            applyResourcesValues();
            mImageView.setImageResource(getIconResId(mMagnificationMode));
            if (mIsVisible) {
                mWindowManager.updateViewLayout(mImageView, mParams);
                // Exclude magnification switch button from system gesture area.
                setSystemGestureExclusion();
            }
            return;
        }
        if ((configDiff & ActivityInfo.CONFIG_LOCALE) != 0) {
@@ -261,7 +270,6 @@ class MagnificationModeSwitch {
        ImageView imageView = new ImageView(context);
        imageView.setClickable(true);
        imageView.setFocusable(true);
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        imageView.setAlpha(0f);
        return imageView;
    }
@@ -288,4 +296,13 @@ class MagnificationModeSwitch {
    private static String getAccessibilityWindowTitle(Context context) {
        return context.getString(com.android.internal.R.string.android_system_label);
    }

    private void setSystemGestureExclusion() {
        mImageView.post(() -> {
            mImageView.setSystemGestureExclusionRects(
                    Collections.singletonList(
                            new Rect(0, 0, mImageView.getWidth(), mImageView.getHeight())));
        });
    }

}
+16 −1
Original line number Diff line number Diff line
@@ -142,6 +142,13 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
        assertShowFadingAnimation(FADE_OUT_ALPHA);
    }

    @Test
    public void showButton_excludeSystemGestureArea() {
        mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        verify(mSpyImageView).setSystemGestureExclusionRects(any(List.class));
    }

    @Test
    public void showMagnificationButton_setA11yTimeout_postDelayedAnimationWithA11yTimeout() {
        final int a11yTimeout = 12345;
@@ -178,14 +185,17 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
    }

    @Test
    public void onConfigurationChanged_buttonIsShowing_setImageResource() {
    public void onConfigurationChanged_buttonIsShowing_updateResourcesAndLayout() {
        mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
        resetAndStubMockImageViewAndAnimator();

        mMagnificationModeSwitch.onConfigurationChanged(ActivityInfo.CONFIG_DENSITY);

        verify(mSpyImageView).setPadding(anyInt(), anyInt(), anyInt(), anyInt());
        verify(mSpyImageView).setImageResource(
                getIconResId(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN));
        verify(mWindowManager).updateViewLayout(eq(mSpyImageView), any());
        verify(mSpyImageView).setSystemGestureExclusionRects(any(List.class));
    }

    @Test
@@ -368,6 +378,11 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
    private void resetAndStubMockImageViewAndAnimator() {
        resetAndStubMockAnimator();
        Mockito.reset(mSpyImageView);
        doAnswer(invocation -> {
            final Runnable runnable = invocation.getArgument(0);
            runnable.run();
            return null;
        }).when(mSpyImageView).post(any(Runnable.class));
        doReturn(mViewPropertyAnimator).when(mSpyImageView).animate();
    }