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

Commit c415ebcd authored by Candice Lo's avatar Candice Lo Committed by Android (Google) Code Review
Browse files

Merge "(refactor) Move MagnificationSpec from MagnifiedViewport to DisplayMagnifier" into main

parents 7ee5bdd3 d9dd026e
Loading
Loading
Loading
Loading
+34 −37
Original line number Diff line number Diff line
@@ -626,6 +626,8 @@ final class AccessibilityController {

        private boolean mForceShowMagnifiableBounds = false;

        private final MagnificationSpec mMagnificationSpec = new MagnificationSpec();

        DisplayMagnifier(WindowManagerService windowManagerService,
                DisplayContent displayContent,
                Display display,
@@ -655,13 +657,28 @@ final class AccessibilityController {
                mAccessibilityTracing.logTrace(LOG_TAG + ".setMagnificationSpec",
                        FLAGS_MAGNIFICATION_CALLBACK, "spec={" + spec + "}");
            }
            mMagnifedViewport.updateMagnificationSpec(spec);
            updateMagnificationSpec(spec);
            mMagnifedViewport.recomputeBounds();

            mService.applyMagnificationSpecLocked(mDisplay.getDisplayId(), spec);
            mService.scheduleAnimationLocked();
        }

        void updateMagnificationSpec(MagnificationSpec spec) {
            if (spec != null) {
                mMagnificationSpec.initialize(spec.scale, spec.offsetX, spec.offsetY);
            } else {
                mMagnificationSpec.clear();
            }
            // If this message is pending we are in a rotation animation and do not want
            // to show the border. We will do so when the pending message is handled.
            if (!mHandler.hasMessages(
                    MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED)) {
                mMagnifedViewport.setMagnifiedRegionBorderShown(
                        isForceShowingMagnifiableBounds(), true);
            }
        }

        void setForceShowMagnifiableBounds(boolean show) {
            if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) {
                mAccessibilityTracing.logTrace(LOG_TAG + ".setForceShowMagnifiableBounds",
@@ -800,8 +817,7 @@ final class AccessibilityController {
                        case WindowManager.LayoutParams.TYPE_QS_DIALOG:
                        case WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL: {
                            Rect magnifiedRegionBounds = mTempRect2;
                            mMagnifedViewport.getMagnifiedFrameInContentCoords(
                                    magnifiedRegionBounds);
                            getMagnifiedFrameInContentCoords(magnifiedRegionBounds);
                            Rect touchableRegionBounds = mTempRect1;
                            windowState.getTouchableRegion(mTempRegion1);
                            mTempRegion1.getBounds(touchableRegionBounds);
@@ -818,6 +834,14 @@ final class AccessibilityController {
            }
        }

        void getMagnifiedFrameInContentCoords(Rect rect) {
            Region magnificationRegion = new Region();
            mMagnifedViewport.getMagnificationRegion(magnificationRegion);
            magnificationRegion.getBounds(rect);
            rect.offset((int) -mMagnificationSpec.offsetX, (int) -mMagnificationSpec.offsetY);
            rect.scale(1.0f / mMagnificationSpec.scale);
        }

        void notifyImeWindowVisibilityChanged(boolean shown) {
            if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) {
                mAccessibilityTracing.logTrace(LOG_TAG + ".notifyImeWindowVisibilityChanged",
@@ -832,13 +856,13 @@ final class AccessibilityController {
                mAccessibilityTracing.logTrace(LOG_TAG + ".getMagnificationSpecForWindow",
                        FLAGS_MAGNIFICATION_CALLBACK, "windowState={" + windowState + "}");
            }
            MagnificationSpec spec = mMagnifedViewport.getMagnificationSpec();
            if (spec != null && !spec.isNop()) {

            if (mMagnificationSpec != null && !mMagnificationSpec.isNop()) {
                if (!windowState.shouldMagnify()) {
                    return null;
                }
            }
            return spec;
            return mMagnificationSpec;
        }

        void getMagnificationRegion(Region outMagnificationRegion) {
@@ -852,6 +876,10 @@ final class AccessibilityController {
            mMagnifedViewport.getMagnificationRegion(outMagnificationRegion);
        }

        boolean isMagnifying() {
            return mMagnificationSpec.scale > 1.0f;
        }

        void destroy() {
            if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) {
                mAccessibilityTracing.logTrace(LOG_TAG + ".destroy", FLAGS_MAGNIFICATION_CALLBACK);
@@ -897,8 +925,6 @@ final class AccessibilityController {

            private final Path mCircularPath;

            private final MagnificationSpec mMagnificationSpec = new MagnificationSpec();

            private final float mBorderWidth;
            private final int mHalfBorderWidth;
            private final int mDrawBorderInset;
@@ -932,20 +958,6 @@ final class AccessibilityController {
                outMagnificationRegion.set(mMagnificationRegion);
            }

            void updateMagnificationSpec(MagnificationSpec spec) {
                if (spec != null) {
                    mMagnificationSpec.initialize(spec.scale, spec.offsetX, spec.offsetY);
                } else {
                    mMagnificationSpec.clear();
                }
                // If this message is pending we are in a rotation animation and do not want
                // to show the border. We will do so when the pending message is handled.
                if (!mHandler.hasMessages(
                        MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED)) {
                    setMagnifiedRegionBorderShown(isForceShowingMagnifiableBounds(), true);
                }
            }

            void recomputeBounds() {
                getDisplaySizeLocked(mScreenSize);
                final int screenWidth = mScreenSize.x;
@@ -1127,21 +1139,6 @@ final class AccessibilityController {
                }
            }

            void getMagnifiedFrameInContentCoords(Rect rect) {
                MagnificationSpec spec = mMagnificationSpec;
                mMagnificationRegion.getBounds(rect);
                rect.offset((int) -spec.offsetX, (int) -spec.offsetY);
                rect.scale(1.0f / spec.scale);
            }

            boolean isMagnifying() {
                return mMagnificationSpec.scale > 1.0f;
            }

            MagnificationSpec getMagnificationSpec() {
                return mMagnificationSpec;
            }

            void drawWindowIfNeeded() {
                recomputeBounds();
                mWindow.postDrawIfNeeded();