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

Commit 2b073bd3 authored by chihtinglo's avatar chihtinglo
Browse files

fix(fullscreen magnification): Create connecting methods between SystemServer...

fix(fullscreen magnification): Create connecting methods between SystemServer and SystemUI for fullscreen mode

1. Creating the methods onFullscreenMagnificationActivationChanged to notify the fullscreen magnification activation change.
2. Allow establishing the magnification connection in fullscreen only mode.

Bug: 291891390
Test: adb shell device_config put accessibility com.android.window.flags.magnification_always_draw_fullscreen_border true
      atest MagnificationConnectionManagerTest
      atest MagnificationControllerTest
      atest MagnificationConnectionWrapperTest
      atest AccessibilityManagerServiceTest
      atest frameworks/base/services/tests/servicestests/src/com/android/server/accessibility/magnification
Flag: ACONFIG com.android.window.flags.magnification_always_draw_fullscreen_border DEVELOPMENT
Change-Id: I0bae5a074af6c0546bdb204c34656182d686a0df
parent ea6d4a33
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -124,4 +124,9 @@ oneway interface IMagnificationConnection {
     * @param scale magnification scale.
     */
    void onUserMagnificationScaleChanged(int userId, int displayId, float scale);

    /**
     * Notify the changes of fullscreen magnification activation on the specified display
     */
    void onFullscreenMagnificationActivationChanged(int displayId, boolean activated);
}
+4 −0
Original line number Diff line number Diff line
@@ -273,6 +273,10 @@ public class Magnification implements CoreStartable, CommandQueue.Callbacks {
        }
    }

    void onFullscreenMagnificationActivationChanged(int displayId, boolean activated) {
        // Do nothing
    }

    @MainThread
    void toggleSettingsPanelVisibility(int displayId) {
        final MagnificationSettingsController magnificationSettingsController =
+6 −0
Original line number Diff line number Diff line
@@ -46,6 +46,12 @@ class MagnificationConnectionImpl extends IMagnificationConnection.Stub {
        mHandler = mainHandler;
    }

    @Override
    public void onFullscreenMagnificationActivationChanged(int displayId, boolean activated) {
        mHandler.post(() -> mMagnification
                .onFullscreenMagnificationActivationChanged(displayId, activated));
    }

    @Override
    public void enableWindowMagnification(int displayId, float scale, float centerX, float centerY,
            float magnificationFrameOffsetRatioX, float magnificationFrameOffsetRatioY,
+11 −4
Original line number Diff line number Diff line
@@ -3460,13 +3460,20 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        if (!mMagnificationController.supportWindowMagnification()) {
            return;
        }
        final boolean connect = (userState.isShortcutMagnificationEnabledLocked()

        final boolean shortcutEnabled = (userState.isShortcutMagnificationEnabledLocked()
                || userState.isMagnificationSingleFingerTripleTapEnabledLocked()
                || (Flags.enableMagnificationMultipleFingerMultipleTapGesture()
                && userState.isMagnificationTwoFingerTripleTapEnabledLocked()))
                && (userState.getMagnificationCapabilitiesLocked()
                != Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN)
                    && userState.isMagnificationTwoFingerTripleTapEnabledLocked()));

        final boolean createConnectionForCurrentCapability =
                com.android.window.flags.Flags.magnificationAlwaysDrawFullscreenBorder()
                        || (userState.getMagnificationCapabilitiesLocked()
                                != Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);

        final boolean connect = (shortcutEnabled && createConnectionForCurrentCapability)
                || userHasMagnificationServicesLocked(userState);

        getMagnificationConnectionManager().requestConnection(connect);
    }

+30 −9
Original line number Diff line number Diff line
@@ -673,6 +673,23 @@ public class MagnificationConnectionManager implements
        return disabled;
    }

    /**
     * Notify Fullscreen magnification activation changes.
     */
    public boolean onFullscreenMagnificationActivationChanged(int displayId, boolean activated) {
        synchronized (mLock) {
            waitForConnectionIfNeeded();
            if (mConnectionWrapper == null) {
                Slog.w(TAG,
                        "onFullscreenMagnificationActivationChanged mConnectionWrapper is null. "
                                + "mConnectionState=" + connectionStateToString(mConnectionState));
                return false;
            }
            return mConnectionWrapper
                    .onFullscreenMagnificationActivationChanged(displayId, activated);
        }
    }

    /**
     * Calculates the number of fingers in the window.
     *
@@ -1267,15 +1284,7 @@ public class MagnificationConnectionManager implements
            float centerY, float magnificationFrameOffsetRatioX,
            float magnificationFrameOffsetRatioY,
            MagnificationAnimationCallback animationCallback) {
        // Wait for the connection with a timeout.
        final long endMillis = SystemClock.uptimeMillis() + WAIT_CONNECTION_TIMEOUT_MILLIS;
        while (mConnectionState == CONNECTING && (SystemClock.uptimeMillis() < endMillis)) {
            try {
                mLock.wait(endMillis - SystemClock.uptimeMillis());
            } catch (InterruptedException ie) {
                /* ignore */
            }
        }
        waitForConnectionIfNeeded();
        if (mConnectionWrapper == null) {
            Slog.w(TAG,
                    "enableWindowMagnificationInternal mConnectionWrapper is null. "
@@ -1317,4 +1326,16 @@ public class MagnificationConnectionManager implements
        return mConnectionWrapper != null && mConnectionWrapper.moveWindowMagnifierToPosition(
                displayId, positionX, positionY, animationCallback);
    }

    private void waitForConnectionIfNeeded() {
        // Wait for the connection with a timeout.
        final long endMillis = SystemClock.uptimeMillis() + WAIT_CONNECTION_TIMEOUT_MILLIS;
        while (mConnectionState == CONNECTING && (SystemClock.uptimeMillis() < endMillis)) {
            try {
                mLock.wait(endMillis - SystemClock.uptimeMillis());
            } catch (InterruptedException ie) {
                /* ignore */
            }
        }
    }
}
Loading