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

Commit 50e35679 authored by Roy Chou's avatar Roy Chou Committed by Automerger Merge Worker
Browse files

Merge "fix(#MagSettingsPanel): fix panel position not correct after...

Merge "fix(#MagSettingsPanel): fix panel position not correct after unfold/rotation" into udc-qpr-dev am: e8056f57

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23232983



Change-Id: Ib3bd4d40c6fe5bc9681396dda358496a0185b746
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 85053674 e8056f57
Loading
Loading
Loading
Loading
+10 −12
Original line number Diff line number Diff line
@@ -79,7 +79,8 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
    private final Runnable mWindowInsetChangeRunnable;
    private final SfVsyncFrameCallbackProvider mSfVsyncFrameProvider;

    private final LayoutParams mParams;
    @VisibleForTesting
    final LayoutParams mParams;
    @VisibleForTesting
    final Rect mDraggableWindowBounds = new Rect();
    private boolean mIsVisible = false;
@@ -529,7 +530,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
            // CONFIG_FONT_SCALE: font size change
            // CONFIG_LOCALE: language change
            // CONFIG_DENSITY: display size change

            mParams.accessibilityTitle = getAccessibilityWindowTitle(mContext);

            boolean showSettingPanelAfterConfigChange = mIsVisible;
@@ -541,16 +541,13 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
            return;
        }

        if ((configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0) {
            final Rect previousDraggableBounds = new Rect(mDraggableWindowBounds);
        if ((configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0
                || (configDiff & ActivityInfo.CONFIG_SCREEN_SIZE) != 0) {
            mDraggableWindowBounds.set(getDraggableWindowBounds());
            // Keep the Y position with the same height ratio before the window bounds and
            // draggable bounds are changed.
            final float windowHeightFraction = (float) (mParams.y - previousDraggableBounds.top)
                    / previousDraggableBounds.height();
            mParams.y = (int) (windowHeightFraction * mDraggableWindowBounds.height())
                    + mDraggableWindowBounds.top;
            return;
            // reset the panel position to the right-bottom corner
            mParams.x = mDraggableWindowBounds.right;
            mParams.y = mDraggableWindowBounds.bottom;
            updateButtonViewLayoutIfNeeded();
        }
    }

@@ -562,7 +559,8 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
        mDraggableWindowBounds.set(newBounds);
    }

    private void updateButtonViewLayoutIfNeeded() {
    @VisibleForTesting
    void updateButtonViewLayoutIfNeeded() {
        if (mIsVisible) {
            mParams.x = MathUtils.constrain(mParams.x, mDraggableWindowBounds.left,
                    mDraggableWindowBounds.right);
+36 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.annotation.IdRes;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.database.ContentObserver;
import android.graphics.Rect;
import android.os.UserHandle;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
@@ -49,6 +50,7 @@ import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.LinearLayout;

import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;

import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
@@ -65,7 +67,7 @@ import org.mockito.MockitoAnnotations;

@SmallTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
@TestableLooper.RunWithLooper
public class WindowMagnificationSettingsTest extends SysuiTestCase {

    private static final int MAGNIFICATION_SIZE_SMALL = 1;
@@ -274,6 +276,39 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase {
        assertThat(magnifierMediumButton.isSelected()).isTrue();
    }

    @Test
    public void onScreenSizeChanged_resetPositionToRightBottomCorner() {
        setupMagnificationCapabilityAndMode(
                /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_ALL,
                /* mode= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        mWindowMagnificationSettings.showSettingPanel();

        // move the panel to the center of draggable window bounds
        mWindowMagnificationSettings.mParams.x =
                mWindowMagnificationSettings.mDraggableWindowBounds.centerX();
        mWindowMagnificationSettings.mParams.y =
                mWindowMagnificationSettings.mDraggableWindowBounds.centerY();
        mWindowMagnificationSettings.updateButtonViewLayoutIfNeeded();

        final Rect testWindowBounds = new Rect(
                mWindowManager.getCurrentWindowMetrics().getBounds());
        testWindowBounds.set(testWindowBounds.left, testWindowBounds.top,
                testWindowBounds.right + 200, testWindowBounds.bottom + 50);
        mWindowManager.setWindowBounds(testWindowBounds);

        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
            mWindowMagnificationSettings.onConfigurationChanged(ActivityInfo.CONFIG_SCREEN_SIZE);
        });

        // the panel position should be reset to the bottom-right corner
        assertEquals(
                mWindowMagnificationSettings.mParams.x,
                mWindowMagnificationSettings.mDraggableWindowBounds.right);
        assertEquals(
                mWindowMagnificationSettings.mParams.y,
                mWindowMagnificationSettings.mDraggableWindowBounds.bottom);
    }

    @Test
    public void showSettingsPanel_observerRegistered() {
        setupMagnificationCapabilityAndMode(