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

Commit 672511cf authored by Roy Chou's avatar Roy Chou
Browse files

feat(#MagSettingsPanel): add removeMagnificationSettingsPanel method in...

feat(#MagSettingsPanel): add removeMagnificationSettingsPanel method in WindowMagnificationConnection

Support removeMagnificationSettingsPanel method in connection between framework service and system ui sides. Therefore, when MagnificationController detects the controlling magnifer is deactivated, it can trigger the method to hide the magnification settings panel.

Bug: 271127581
Test: manually
      atest IWindowMagnificationConnectionTest
      atest MagnificationControllerTest
      atest WindowMagnificationConnectionWrapperTest
      atest WindowMagnificationManagerTest
Change-Id: I07a290d59b1fb1d51dee1ff70b77e2c56c617797
parent b7c20172
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -102,6 +102,13 @@ oneway interface IWindowMagnificationConnection {
     */
    void removeMagnificationButton(int displayId);

    /**
     * Requests System UI remove magnification settings panel on the specified display.
     *
     * @param displayId the logical display id.
     */
    void removeMagnificationSettingsPanel(int displayId);

    /**
     * Sets {@link IWindowMagnificationConnectionCallback} to receive the request or the callback.
     *
+5 −0
Original line number Diff line number Diff line
@@ -93,6 +93,11 @@ class WindowMagnificationConnectionImpl extends IWindowMagnificationConnection.S
                () -> mWindowMagnification.removeMagnificationButton(displayId));
    }

    @Override
    public void removeMagnificationSettingsPanel(int display) {
        mHandler.post(() -> mWindowMagnification.hideMagnificationSettingsPanel(display));
    }

    @Override
    public void setConnectionCallback(IWindowMagnificationConnectionCallback callback) {
        mConnectionCallback = callback;
+29 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.accessibility;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
@@ -68,6 +69,8 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
    @Mock
    private WindowMagnificationController mWindowMagnificationController;
    @Mock
    private MagnificationSettingsController mMagnificationSettingsController;
    @Mock
    private ModeSwitchesController mModeSwitchesController;
    @Mock
    private SysUiState mSysUiState;
@@ -97,6 +100,8 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
                mDisplayTracker, getContext().getSystemService(DisplayManager.class));
        mWindowMagnification.mMagnificationControllerSupplier = new FakeControllerSupplier(
                mContext.getSystemService(DisplayManager.class));
        mWindowMagnification.mMagnificationSettingsSupplier = new FakeSettingsSupplier(
                mContext.getSystemService(DisplayManager.class));

        mWindowMagnification.requestWindowMagnificationConnection(true);
        assertNotNull(mIWindowMagnificationConnection);
@@ -151,6 +156,9 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {

    @Test
    public void showMagnificationButton() throws RemoteException {
        // magnification settings panel should not be showing
        assertFalse(mWindowMagnification.isMagnificationSettingsPanelShowing(TEST_DISPLAY));

        mIWindowMagnificationConnection.showMagnificationButton(TEST_DISPLAY,
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
        waitForIdleSync();
@@ -167,6 +175,14 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
        verify(mModeSwitchesController).removeButton(TEST_DISPLAY);
    }

    @Test
    public void removeMagnificationSettingsPanel() throws RemoteException {
        mIWindowMagnificationConnection.removeMagnificationSettingsPanel(TEST_DISPLAY);
        waitForIdleSync();

        verify(mMagnificationSettingsController).closeMagnificationSettings();
    }

    private class FakeControllerSupplier extends
            DisplayIdIndexSupplier<WindowMagnificationController> {

@@ -179,5 +195,18 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
            return mWindowMagnificationController;
        }
    }

    private class FakeSettingsSupplier extends
            DisplayIdIndexSupplier<MagnificationSettingsController> {

        FakeSettingsSupplier(DisplayManager displayManager) {
            super(displayManager);
        }

        @Override
        protected MagnificationSettingsController createInstance(Display display) {
            return mMagnificationSettingsController;
        }
    }
}
+14 −13
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb

    @Override
    public void onAccessibilityActionPerformed(int displayId) {
        updateMagnificationButton(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        updateMagnificationUIControls(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
    }

    @Override
@@ -190,21 +190,22 @@ public class MagnificationController implements WindowMagnificationManager.Callb
        if (mMagnificationCapabilities != Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL) {
            return;
        }
        if (isActivated(displayId, mode)) {
            getWindowMagnificationMgr().showMagnificationButton(displayId, mode);
        }
        updateMagnificationUIControls(displayId, mode);
    }

    private void updateMagnificationButton(int displayId, int mode) {
    private void updateMagnificationUIControls(int displayId, int mode) {
        final boolean isActivated = isActivated(displayId, mode);
        final boolean showButton;
        final boolean showUIControls;
        synchronized (mLock) {
            showButton = isActivated && mMagnificationCapabilities
            showUIControls = isActivated && mMagnificationCapabilities
                    == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL;
        }
        if (showButton) {
        if (showUIControls) {
            // we only need to show magnification button, the settings panel showing should be
            // triggered only on sysui side.
            getWindowMagnificationMgr().showMagnificationButton(displayId, mode);
        } else {
            getWindowMagnificationMgr().removeMagnificationSettingsPanel(displayId);
            getWindowMagnificationMgr().removeMagnificationButton(displayId);
        }
    }
@@ -427,7 +428,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
    public void onRequestMagnificationSpec(int displayId, int serviceId) {
        final WindowMagnificationManager windowMagnificationManager;
        synchronized (mLock) {
            updateMagnificationButton(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
            updateMagnificationUIControls(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
            windowMagnificationManager = mWindowMagnificationMgr;
        }
        if (windowMagnificationManager != null) {
@@ -456,7 +457,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
            }
            logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, duration);
        }
        updateMagnificationButton(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        updateMagnificationUIControls(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
    }

    @Override
@@ -554,7 +555,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
            }
            logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, duration);
        }
        updateMagnificationButton(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
        updateMagnificationUIControls(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
    }

    private void disableWindowMagnificationIfNeeded(int displayId) {
@@ -872,7 +873,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                        mAms.notifyMagnificationChanged(mDisplayId, region, configBuilder.build());
                    }
                }
                updateMagnificationButton(mDisplayId, mTargetMode);
                updateMagnificationUIControls(mDisplayId, mTargetMode);
                if (mTransitionCallBack != null) {
                    mTransitionCallBack.onResult(mDisplayId, success);
                }
@@ -900,7 +901,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
                setExpiredAndRemoveFromListLocked();
                setTransitionState(mDisplayId, null);
                applyMagnificationModeLocked(mCurrentMode);
                updateMagnificationButton(mDisplayId, mCurrentMode);
                updateMagnificationUIControls(mDisplayId, mCurrentMode);
                if (mTransitionCallBack != null) {
                    mTransitionCallBack.onResult(mDisplayId, true);
                }
+16 −0
Original line number Diff line number Diff line
@@ -185,6 +185,22 @@ class WindowMagnificationConnectionWrapper {
        return true;
    }

    boolean removeMagnificationSettingsPanel(int displayId) {
        if (mTrace.isA11yTracingEnabledForTypes(FLAGS_WINDOW_MAGNIFICATION_CONNECTION)) {
            mTrace.logTrace(TAG + ".removeMagnificationSettingsPanel",
                    FLAGS_WINDOW_MAGNIFICATION_CONNECTION, "displayId=" + displayId);
        }
        try {
            mConnection.removeMagnificationSettingsPanel(displayId);
        } catch (RemoteException e) {
            if (DBG) {
                Slog.e(TAG, "Error calling removeMagnificationSettingsPanel()", e);
            }
            return false;
        }
        return true;
    }

    boolean setConnectionCallback(IWindowMagnificationConnectionCallback connectionCallback) {
        if (mTrace.isA11yTracingEnabledForTypes(
                FLAGS_WINDOW_MAGNIFICATION_CONNECTION
Loading