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

Commit d338e257 authored by Roy Chou's avatar Roy Chou Committed by Android (Google) Code Review
Browse files

Merge "feat(#AlwaysOnMagnifier)!: Supports activated field in MagnificationConfig"

parents b10a28f6 9831851f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3538,6 +3538,7 @@ package android.accessibilityservice {
    method public float getCenterY();
    method public int getMode();
    method public float getScale();
    method public boolean isActivated();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.accessibilityservice.MagnificationConfig> CREATOR;
    field public static final int MAGNIFICATION_MODE_DEFAULT = 0; // 0x0
@@ -3548,6 +3549,7 @@ package android.accessibilityservice {
  public static final class MagnificationConfig.Builder {
    ctor public MagnificationConfig.Builder();
    method @NonNull public android.accessibilityservice.MagnificationConfig build();
    method @NonNull public android.accessibilityservice.MagnificationConfig.Builder setActivated(boolean);
    method @NonNull public android.accessibilityservice.MagnificationConfig.Builder setCenterX(float);
    method @NonNull public android.accessibilityservice.MagnificationConfig.Builder setCenterY(float);
    method @NonNull public android.accessibilityservice.MagnificationConfig.Builder setMode(int);
+33 −7
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ public final class MagnificationConfig implements Parcelable {
    }

    private int mMode = MAGNIFICATION_MODE_DEFAULT;
    private boolean mActivated = false;
    private float mScale = Float.NaN;
    private float mCenterX = Float.NaN;
    private float mCenterY = Float.NaN;
@@ -86,6 +87,7 @@ public final class MagnificationConfig implements Parcelable {

    private MagnificationConfig(@NonNull Parcel parcel) {
        mMode = parcel.readInt();
        mActivated = parcel.readBoolean();
        mScale = parcel.readFloat();
        mCenterX = parcel.readFloat();
        mCenterY = parcel.readFloat();
@@ -101,10 +103,21 @@ public final class MagnificationConfig implements Parcelable {
        return mMode;
    }

    /**
     * Returns the activated state of the controlling magnifier. The controlling magnifier can be
     * activated even if the scale returned by {@link MagnificationConfig#getScale()} equals to 1.0.
     *
     * @return {@code true} if the magnifier is showing on screen,
     *         {@code false} otherwise.
     */
    public boolean isActivated() {
        return mActivated;
    }

    /**
     * Returns the magnification scale of the controlling magnifier
     *
     * @return the scale If the controlling magnifier is not activated, it returns 1 by default
     * @return The magnification scale
     */
    public float getScale() {
        return mScale;
@@ -113,9 +126,7 @@ public final class MagnificationConfig implements Parcelable {
    /**
     * Returns the screen-relative X coordinate of the center of the magnification viewport.
     *
     * @return the X coordinate. If the controlling magnifier is {@link #MAGNIFICATION_MODE_WINDOW}
     * but not enabled, it returns {@link Float#NaN}. If the controlling magnifier is {@link
     * #MAGNIFICATION_MODE_FULLSCREEN} but not enabled, it returns 0
     * @return The X coordinate
     */
    public float getCenterX() {
        return mCenterX;
@@ -124,9 +135,7 @@ public final class MagnificationConfig implements Parcelable {
    /**
     * Returns the screen-relative Y coordinate of the center of the magnification viewport.
     *
     * @return the Y coordinate If the controlling magnifier is {@link #MAGNIFICATION_MODE_WINDOW}
     * but not enabled, it returns {@link Float#NaN}. If the controlling magnifier is {@link
     * #MAGNIFICATION_MODE_FULLSCREEN} but not enabled, it returns 0
     * @return The Y coordinate
     */
    public float getCenterY() {
        return mCenterY;
@@ -138,6 +147,8 @@ public final class MagnificationConfig implements Parcelable {
        StringBuilder stringBuilder = new StringBuilder("MagnificationConfig[");
        stringBuilder.append("mode: ").append(getMode());
        stringBuilder.append(", ");
        stringBuilder.append("activated: ").append(isActivated());
        stringBuilder.append(", ");
        stringBuilder.append("scale: ").append(getScale());
        stringBuilder.append(", ");
        stringBuilder.append("centerX: ").append(getCenterX());
@@ -155,6 +166,7 @@ public final class MagnificationConfig implements Parcelable {
    @Override
    public void writeToParcel(@NonNull Parcel parcel, int flags) {
        parcel.writeInt(mMode);
        parcel.writeBoolean(mActivated);
        parcel.writeFloat(mScale);
        parcel.writeFloat(mCenterX);
        parcel.writeFloat(mCenterY);
@@ -166,6 +178,7 @@ public final class MagnificationConfig implements Parcelable {
    public static final class Builder {

        private int mMode = MAGNIFICATION_MODE_DEFAULT;
        private boolean mActivated = true;
        private float mScale = Float.NaN;
        private float mCenterX = Float.NaN;
        private float mCenterY = Float.NaN;
@@ -188,6 +201,18 @@ public final class MagnificationConfig implements Parcelable {
            return this;
        }

        /**
         * Sets magnification activated state.
         *
         * @param activated The magnification activated state
         * @return This builder
         */
        @NonNull
        public MagnificationConfig.Builder setActivated(boolean activated) {
            mActivated = activated;
            return this;
        }

        /**
         * Sets the magnification scale.
         *
@@ -237,6 +262,7 @@ public final class MagnificationConfig implements Parcelable {
        public MagnificationConfig build() {
            MagnificationConfig magnificationConfig = new MagnificationConfig();
            magnificationConfig.mMode = mMode;
            magnificationConfig.mActivated = mActivated;
            magnificationConfig.mScale = mScale;
            magnificationConfig.mCenterX = mCenterX;
            magnificationConfig.mCenterY = mCenterY;
+1 −0
Original line number Diff line number Diff line
@@ -371,6 +371,7 @@ public class FullScreenMagnificationController implements

            final MagnificationConfig config = new MagnificationConfig.Builder()
                    .setMode(MAGNIFICATION_MODE_FULLSCREEN)
                    .setActivated(mMagnificationActivated)
                    .setScale(scale)
                    .setCenterX(getCenterX())
                    .setCenterY(getCenterY()).build();
+22 −9
Original line number Diff line number Diff line
@@ -284,6 +284,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
        }
        synchronized (mLock) {
            final int targetMode = config.getMode();
            final boolean targetActivated = config.isActivated();
            final PointF currentCenter = getCurrentMagnificationCenterLocked(displayId, targetMode);
            final PointF magnificationCenter = new PointF(config.getCenterX(), config.getCenterY());
            if (currentCenter != null) {
@@ -310,20 +311,30 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                    : config.getScale();
            try {
                setTransitionState(displayId, targetMode);

                // Activate or deactivate target mode depending on config activated value
                if (targetMode == MAGNIFICATION_MODE_WINDOW) {
                    screenMagnificationController.reset(displayId, false);
                    if (targetActivated) {
                        windowMagnificationMgr.enableWindowMagnification(displayId,
                                targetScale, magnificationCenter.x, magnificationCenter.y,
                                animate ? STUB_ANIMATION_CALLBACK : null, id);
                    } else {
                        windowMagnificationMgr.disableWindowMagnification(displayId, false);
                    }
                } else if (targetMode == MAGNIFICATION_MODE_FULLSCREEN) {
                    windowMagnificationMgr.disableWindowMagnification(displayId, false, null);
                    if (targetActivated) {
                        if (!screenMagnificationController.isRegistered(displayId)) {
                            screenMagnificationController.register(displayId);
                        }
                        screenMagnificationController.setScaleAndCenter(displayId, targetScale,
                                magnificationCenter.x, magnificationCenter.y, animate,
                                id);
                    } else {
                        if (screenMagnificationController.isRegistered(displayId)) {
                            screenMagnificationController.reset(displayId, false);
                        }
                    }
                }
            } finally {
                // Reset transition state after enabling target mode.
@@ -454,6 +465,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
        if (shouldNotifyMagnificationChange(displayId, MAGNIFICATION_MODE_WINDOW)) {
            final MagnificationConfig config = new MagnificationConfig.Builder()
                    .setMode(MAGNIFICATION_MODE_WINDOW)
                    .setActivated(getWindowMagnificationMgr().isWindowMagnifierEnabled(displayId))
                    .setScale(getWindowMagnificationMgr().getScale(displayId))
                    .setCenterX(bounds.exactCenterX())
                    .setCenterY(bounds.exactCenterY()).build();
@@ -834,6 +846,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                                new MagnificationConfig.Builder();
                        Region region = new Region();
                        configBuilder.setMode(MAGNIFICATION_MODE_FULLSCREEN)
                                .setActivated(screenMagnificationController.isActivated(mDisplayId))
                                .setScale(screenMagnificationController.getScale(mDisplayId))
                                .setCenterX(screenMagnificationController.getCenterX(mDisplayId))
                                .setCenterY(screenMagnificationController.getCenterY(mDisplayId));
+23 −7
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ public class MagnificationProcessor {
            final FullScreenMagnificationController fullScreenMagnificationController =
                    mController.getFullScreenMagnificationController();
            builder.setMode(mode)
                    .setActivated(mController.isActivated(displayId, MAGNIFICATION_MODE_FULLSCREEN))
                    .setScale(fullScreenMagnificationController.getScale(displayId))
                    .setCenterX(fullScreenMagnificationController.getCenterX(displayId))
                    .setCenterY(fullScreenMagnificationController.getCenterY(displayId));
@@ -86,9 +87,13 @@ public class MagnificationProcessor {
            final WindowMagnificationManager windowMagnificationManager =
                    mController.getWindowMagnificationMgr();
            builder.setMode(mode)
                    .setActivated(mController.isActivated(displayId, MAGNIFICATION_MODE_WINDOW))
                    .setScale(windowMagnificationManager.getScale(displayId))
                    .setCenterX(windowMagnificationManager.getCenterX(displayId))
                    .setCenterY(windowMagnificationManager.getCenterY(displayId));
        } else {
            // For undefined mode, set enabled to false
            builder.setActivated(false);
        }
        return builder.build();
    }
@@ -118,15 +123,26 @@ public class MagnificationProcessor {
        if (configMode == MAGNIFICATION_MODE_DEFAULT) {
            configMode = getControllingMode(displayId);
        }
        // Check should activate or deactivate the target mode in config
        boolean configActivated = config.isActivated();
        if (configMode == MAGNIFICATION_MODE_FULLSCREEN) {
            if (configActivated) {
                return setScaleAndCenterForFullScreenMagnification(displayId, config.getScale(),
                        config.getCenterX(), config.getCenterY(),
                        animate, id);
            } else {
                return resetFullscreenMagnification(displayId, animate);
            }
        } else if (configMode == MAGNIFICATION_MODE_WINDOW) {
            if (configActivated) {
                return mController.getWindowMagnificationMgr().enableWindowMagnification(displayId,
                        config.getScale(), config.getCenterX(), config.getCenterY(),
                        animate ? STUB_ANIMATION_CALLBACK : null,
                        id);
            } else {
                return mController.getWindowMagnificationMgr()
                        .disableWindowMagnification(displayId, false);
            }
        }
        return false;
    }
Loading