summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2021-04-07 03:25:32 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-04-07 03:25:32 +0000
commit7d8ae59fee9f4b88fe86fed843e5dc8a49ba9afd (patch)
tree8caf6db910b55d481cebf2552838f925cdb4e103
parent086a0be6b2a360f9c823a596cba50867101a5a0f (diff)
parent80a35549c84d053efa9df0d74958db0f79bda7b9 (diff)
Merge "Updates magnification button after an accessibility action is performed" into sc-dev
-rw-r--r--core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl7
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java26
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java13
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java10
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java37
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java16
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java23
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java11
11 files changed, 138 insertions, 29 deletions
diff --git a/core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl b/core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl
index d0ab004d6cf3..1cb6825e426e 100644
--- a/core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl
+++ b/core/java/android/view/accessibility/IWindowMagnificationConnectionCallback.aidl
@@ -60,4 +60,11 @@ import android.graphics.Rect;
*/
void onPerformScaleAction(int displayId, float scale);
+ /**
+ * Called when the accessibility action is performed.
+ *
+ * @param displayId The logical display id.
+ */
+ void onAccessibilityActionPerformed(int displayId);
+
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
index cdd69429132a..4f5fdc90e929 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
@@ -195,6 +195,13 @@ public class WindowMagnification extends SystemUI implements WindowMagnifierCall
}
@Override
+ public void onAccessibilityActionPerformed(int displayId) {
+ if (mWindowMagnificationConnectionImpl != null) {
+ mWindowMagnificationConnectionImpl.onAccessibilityActionPerformed(displayId);
+ }
+ }
+
+ @Override
public void requestWindowMagnificationConnection(boolean connect) {
if (connect) {
setWindowMagnificationConnection();
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java
index be7d75724442..2d620ab9e3c9 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationConnectionImpl.java
@@ -120,4 +120,14 @@ class WindowMagnificationConnectionImpl extends IWindowMagnificationConnection.S
}
}
}
+
+ void onAccessibilityActionPerformed(int displayId) {
+ if (mConnectionCallback != null) {
+ try {
+ mConnectionCallback.onAccessibilityActionPerformed(displayId);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to inform an accessibility action is already performed", e);
+ }
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
index 2b666f13efcc..48beea3804a4 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
@@ -756,31 +756,23 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
final float scale = mScale + A11Y_CHANGE_SCALE_DIFFERENCE;
mWindowMagnifierCallback.onPerformScaleAction(mDisplayId,
A11Y_ACTION_SCALE_RANGE.clamp(scale));
- return true;
- }
- if (action == R.id.accessibility_action_zoom_out) {
+ } else if (action == R.id.accessibility_action_zoom_out) {
final float scale = mScale - A11Y_CHANGE_SCALE_DIFFERENCE;
mWindowMagnifierCallback.onPerformScaleAction(mDisplayId,
A11Y_ACTION_SCALE_RANGE.clamp(scale));
- return true;
- }
- if (action == R.id.accessibility_action_move_up) {
+ } else if (action == R.id.accessibility_action_move_up) {
move(0, -mSourceBounds.height());
- return true;
- }
- if (action == R.id.accessibility_action_move_down) {
+ } else if (action == R.id.accessibility_action_move_down) {
move(0, mSourceBounds.height());
- return true;
- }
- if (action == R.id.accessibility_action_move_left) {
+ } else if (action == R.id.accessibility_action_move_left) {
move(-mSourceBounds.width(), 0);
- return true;
- }
- if (action == R.id.accessibility_action_move_right) {
+ } else if (action == R.id.accessibility_action_move_right) {
move(mSourceBounds.width(), 0);
- return true;
+ } else {
+ return false;
}
- return false;
+ mWindowMagnifierCallback.onAccessibilityActionPerformed(mDisplayId);
+ return true;
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java
index fb1d1b6d7816..628a5e88b89e 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnifierCallback.java
@@ -46,4 +46,11 @@ interface WindowMagnifierCallback {
* @param scale the target scale, or {@link Float#NaN} to leave unchanged
*/
void onPerformScaleAction(int displayId, float scale);
+
+ /**
+ * Called when the accessibility action is performed.
+ *
+ * @param displayId The logical display id.
+ */
+ void onAccessibilityActionPerformed(int displayId);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
index 9659610e7115..d3a2d2e3b5cc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
@@ -303,6 +303,19 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
}
@Test
+ public void performA11yActions_visible_notifyAccessibilityActionPerformed() {
+ final int displayId = mContext.getDisplayId();
+ mInstrumentation.runOnMainSync(() -> {
+ mWindowMagnificationController.enableWindowMagnification(2.5f, Float.NaN,
+ Float.NaN);
+ });
+
+ mMirrorView.performAccessibilityAction(R.id.accessibility_action_move_up, null);
+
+ verify(mWindowMagnifierCallback).onAccessibilityActionPerformed(eq(displayId));
+ }
+
+ @Test
public void onNavigationModeChanged_updateMirrorViewLayout() {
mInstrumentation.runOnMainSync(() -> {
mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java
index ad1ce76cc36c..78331143af94 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java
@@ -118,6 +118,16 @@ public class WindowMagnificationTest extends SysuiTestCase {
}
@Test
+ public void onAccessibilityActionPerformed_enabled_notifyCallback() throws RemoteException {
+ mCommandQueue.requestWindowMagnificationConnection(true);
+ waitForIdleSync();
+
+ mWindowMagnification.onAccessibilityActionPerformed(Display.DEFAULT_DISPLAY);
+
+ verify(mConnectionCallback).onAccessibilityActionPerformed(eq(Display.DEFAULT_DISPLAY));
+ }
+
+ @Test
public void onConfigurationChanged_updateModeSwitches() {
final Configuration config = new Configuration();
config.densityDpi = Configuration.DENSITY_DPI_ANY;
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 80408518d84e..f9aecd739d33 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
@@ -119,6 +119,11 @@ public class MagnificationController implements WindowMagnificationManager.Callb
}
@Override
+ public void onAccessibilityActionPerformed(int displayId) {
+ updateMagnificationButton(displayId, ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
+ }
+
+ @Override
public void onTouchInteractionStart(int displayId, int mode) {
handleUserInteractionChanged(displayId, mode);
}
@@ -148,8 +153,13 @@ public class MagnificationController implements WindowMagnificationManager.Callb
}
private void updateMagnificationButton(int displayId, int mode) {
- if (isActivated(displayId, mode) && mMagnificationCapabilities
- == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL) {
+ final boolean isActivated = isActivated(displayId, mode);
+ final boolean showButton;
+ synchronized (mLock) {
+ showButton = isActivated && mMagnificationCapabilities
+ == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL;
+ }
+ if (showButton) {
getWindowMagnificationMgr().showMagnificationButton(displayId, mode);
} else {
getWindowMagnificationMgr().removeMagnificationButton(displayId);
@@ -430,13 +440,22 @@ public class MagnificationController implements WindowMagnificationManager.Callb
private boolean isActivated(int displayId, int mode) {
boolean isActivated = false;
- if (mode == ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN
- && mFullScreenMagnificationController != null) {
- isActivated = mFullScreenMagnificationController.isMagnifying(displayId)
- || mFullScreenMagnificationController.isForceShowMagnifiableBounds(displayId);
- } else if (mode == ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
- && mWindowMagnificationMgr != null) {
- isActivated = mWindowMagnificationMgr.isWindowMagnifierEnabled(displayId);
+ if (mode == ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN) {
+ synchronized (mLock) {
+ if (mFullScreenMagnificationController == null) {
+ return false;
+ }
+ isActivated = mFullScreenMagnificationController.isMagnifying(displayId)
+ || mFullScreenMagnificationController.isForceShowMagnifiableBounds(
+ displayId);
+ }
+ } else if (mode == ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW) {
+ synchronized (mLock) {
+ if (mWindowMagnificationMgr == null) {
+ return false;
+ }
+ isActivated = mWindowMagnificationMgr.isWindowMagnifierEnabled(displayId);
+ }
}
return isActivated;
}
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 86f61eef2e7a..938cb73dac79 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationManager.java
@@ -95,6 +95,13 @@ public class WindowMagnificationManager implements
void onPerformScaleAction(int displayId, float scale);
/**
+ * Called when the accessibility action is performed.
+ *
+ * @param displayId The logical display id.
+ */
+ void onAccessibilityActionPerformed(int displayId);
+
+ /**
* Called when the state of the magnification activation is changed.
*
* @param displayId The logical display id.
@@ -536,9 +543,12 @@ public class WindowMagnificationManager implements
@Override
public void onPerformScaleAction(int displayId, float scale) {
- synchronized (mLock) {
- mCallback.onPerformScaleAction(displayId, scale);
- }
+ mCallback.onPerformScaleAction(displayId, scale);
+ }
+
+ @Override
+ public void onAccessibilityActionPerformed(int displayId) {
+ mCallback.onAccessibilityActionPerformed(displayId);
}
@Override
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 81be2e7d8cea..b7f5f4da9d9d 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
@@ -331,6 +331,29 @@ public class MagnificationControllerTest {
}
@Test
+ public void onAccessibilityActionPerformed_magnifierEnabled_showMagnificationButton()
+ throws RemoteException {
+ setMagnificationEnabled(MODE_WINDOW);
+
+ mMagnificationController.onAccessibilityActionPerformed(TEST_DISPLAY);
+
+ verify(mWindowMagnificationManager).showMagnificationButton(eq(TEST_DISPLAY),
+ eq(MODE_WINDOW));
+ }
+
+ @Test
+ public void onAccessibilityActionPerformed_capabilityNotAll_removeMagnificationButton()
+ throws RemoteException {
+ mMagnificationController.setMagnificationCapabilities(
+ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
+ setMagnificationEnabled(MODE_WINDOW);
+
+ mMagnificationController.onAccessibilityActionPerformed(TEST_DISPLAY);
+
+ verify(mWindowMagnificationManager).removeMagnificationButton(eq(TEST_DISPLAY));
+ }
+
+ @Test
public void onWindowMagnificationActivationState_windowActivated_logWindowDuration() {
mMagnificationController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
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 ffa0185b4542..a20272ab438d 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
@@ -313,6 +313,17 @@ public class WindowMagnificationManagerTest {
}
@Test
+ public void onAccessibilityActionPerformed_magnifierEnabled_notifyAction()
+ throws RemoteException {
+ mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
+ mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, NaN, NaN);
+
+ mMockConnection.getConnectionCallback().onAccessibilityActionPerformed(TEST_DISPLAY);
+
+ verify(mMockCallback).onAccessibilityActionPerformed(eq(TEST_DISPLAY));
+ }
+
+ @Test
public void binderDied_windowMagnifierIsEnabled_resetState() throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3f, NaN, NaN);