summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/accessibility/IWindowMagnificationConnection.aidl7
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java29
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java27
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapper.java16
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java25
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java19
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapperTest.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java9
9 files changed, 126 insertions, 17 deletions
diff --git a/core/java/android/view/accessibility/IWindowMagnificationConnection.aidl b/core/java/android/view/accessibility/IWindowMagnificationConnection.aidl
index 62d029bd1be6..8a30f8cebc3d 100644
--- a/core/java/android/view/accessibility/IWindowMagnificationConnection.aidl
+++ b/core/java/android/view/accessibility/IWindowMagnificationConnection.aidl
@@ -103,6 +103,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.
*
* @param callback the interface to be called.
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java
index 18e576e3e611..c081893eac8b 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java
@@ -94,6 +94,11 @@ class WindowMagnificationConnectionImpl extends IWindowMagnificationConnection.S
}
@Override
+ public void removeMagnificationSettingsPanel(int display) {
+ mHandler.post(() -> mWindowMagnification.hideMagnificationSettingsPanel(display));
+ }
+
+ @Override
public void setConnectionCallback(IWindowMagnificationConnectionCallback callback) {
mConnectionCallback = callback;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java
index f32c0eb495ba..eff8c019efb4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java
@@ -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;
+ }
+ }
}
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
index 4753a545adb0..1cd851f5f84a 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
@@ -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);
}
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapper.java b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapper.java
index 041eece5ce48..1202cfadb44e 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapper.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapper.java
@@ -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
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java
index d9391f422dc7..ce18b2cf9bad 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java
@@ -779,8 +779,10 @@ public class WindowMagnificationManager implements
* @return {@code true} if the event was handled, {@code false} otherwise
*/
public boolean showMagnificationButton(int displayId, int magnificationMode) {
- return mConnectionWrapper != null && mConnectionWrapper.showMagnificationButton(
- displayId, magnificationMode);
+ synchronized (mLock) {
+ return mConnectionWrapper != null
+ && mConnectionWrapper.showMagnificationButton(displayId, magnificationMode);
+ }
}
/**
@@ -790,8 +792,23 @@ public class WindowMagnificationManager implements
* @return {@code true} if the event was handled, {@code false} otherwise
*/
public boolean removeMagnificationButton(int displayId) {
- return mConnectionWrapper != null && mConnectionWrapper.removeMagnificationButton(
- displayId);
+ synchronized (mLock) {
+ return mConnectionWrapper != null
+ && mConnectionWrapper.removeMagnificationButton(displayId);
+ }
+ }
+
+ /**
+ * Requests System UI remove magnification settings panel on the specified display.
+ *
+ * @param displayId The logical display id.
+ * @return {@code true} if the event was handled, {@code false} otherwise
+ */
+ public boolean removeMagnificationSettingsPanel(int displayId) {
+ synchronized (mLock) {
+ return mConnectionWrapper != null
+ && mConnectionWrapper.removeMagnificationSettingsPanel(displayId);
+ }
}
/**
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
index bbcb376180b7..d982a711cfdf 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
@@ -1035,6 +1035,25 @@ public class MagnificationControllerTest {
}
@Test
+ public void disableWindowMode_windowEnabled_removeMagnificationSettingsPanel()
+ throws RemoteException {
+ setMagnificationEnabled(MODE_WINDOW);
+
+ mWindowMagnificationManager.disableWindowMagnification(TEST_DISPLAY, false);
+
+ verify(mWindowMagnificationManager).removeMagnificationSettingsPanel(eq(TEST_DISPLAY));
+ }
+
+ @Test
+ public void onFullScreenDeactivated_fullScreenEnabled_removeMagnificationSettingsPanel()
+ throws RemoteException {
+ setMagnificationEnabled(MODE_FULLSCREEN);
+ mScreenMagnificationController.reset(TEST_DISPLAY, /* animate= */ true);
+
+ verify(mWindowMagnificationManager).removeMagnificationSettingsPanel(eq(TEST_DISPLAY));
+ }
+
+ @Test
public void imeWindowStateShown_windowMagnifying_logWindowMode() {
MagnificationController spyController = spy(mMagnificationController);
spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapperTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapperTest.java
index 4b77764c41e5..2357e65871e6 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapperTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationConnectionWrapperTest.java
@@ -116,6 +116,12 @@ public class WindowMagnificationConnectionWrapperTest {
}
@Test
+ public void removeMagnificationSettingsPanel() throws RemoteException {
+ mConnectionWrapper.removeMagnificationSettingsPanel(TEST_DISPLAY);
+ verify(mConnection).removeMagnificationSettingsPanel(eq(TEST_DISPLAY));
+ }
+
+ @Test
public void setMirrorWindowCallback() throws RemoteException {
mConnectionWrapper.setConnectionCallback(mCallback);
verify(mConnection).setConnectionCallback(mCallback);
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java
index d841dfc2d54b..b0fd64976c48 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java
@@ -537,6 +537,15 @@ public class WindowMagnificationManagerTest {
}
@Test
+ public void removeMagnificationSettingsPanel_hasConnection_invokeConnectionMethod()
+ throws RemoteException {
+ mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
+
+ mWindowMagnificationManager.removeMagnificationSettingsPanel(TEST_DISPLAY);
+ verify(mMockConnection.getConnection()).removeMagnificationSettingsPanel(TEST_DISPLAY);
+ }
+
+ @Test
public void pointersInWindow_magnifierEnabled_returnCorrectValue() throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, NaN, NaN);