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

Commit d9dd026e authored by Candice Lo's avatar Candice Lo
Browse files

(refactor) Move MagnificationSpec from MagnifiedViewport to DisplayMagnifier

MagnifiedViewport will be handling the UI stuffs like border drawing and
magnified area computation only after refactoring. MagnificationSpec will be
handled by DisplayMagnifier where we deal with magnification logics.

Bug: 291891390
Test: atest frameworks/base/services/tests/servicestests/src/com/android/server/accessibility/magnification
Flag: N/A
Change-Id: I5efde3fdd563ccd7769f96661b1b4c225efc58d4
parent 0bfa4b4b
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();