diff options
author | 2023-11-01 14:45:20 +0800 | |
---|---|---|
committer | 2023-11-01 15:47:59 +0800 | |
commit | 2372dbfea68698aa35f32e011b15d2214fa5264c (patch) | |
tree | 80226e8b21028c0b9170528653ccb70ce826e716 | |
parent | 06693f0ad77fe7db1dc58d4450741ca7cb013f36 (diff) |
feat(MultiFingerMultiTap): Request connection and keep the mag button when two finger triple tap is enabled
Bug: 297805269
Test: manual
Test: atest AccessibilityManagerServiceTest
Change-Id: Iccc65e4a615607b375c4a3ed8222655008e4d2ed
2 files changed, 137 insertions, 2 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 32666e76372b..bb50a991d9c1 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3406,7 +3406,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // displays in one display. It's not a real display and there's no input events for it. final ArrayList<Display> displays = getValidDisplayList(); if (userState.isMagnificationSingleFingerTripleTapEnabledLocked() - || userState.isMagnificationTwoFingerTripleTapEnabledLocked() + || (Flags.enableMagnificationMultipleFingerMultipleTapGesture() + && userState.isMagnificationTwoFingerTripleTapEnabledLocked()) || userState.isShortcutMagnificationEnabledLocked()) { for (int i = 0; i < displays.size(); i++) { final Display display = displays.get(i); @@ -3435,7 +3436,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return; } final boolean connect = (userState.isShortcutMagnificationEnabledLocked() - || userState.isMagnificationSingleFingerTripleTapEnabledLocked()) + || userState.isMagnificationSingleFingerTripleTapEnabledLocked() + || (Flags.enableMagnificationMultipleFingerMultipleTapGesture() + && userState.isMagnificationTwoFingerTripleTapEnabledLocked())) && (userState.getMagnificationCapabilitiesLocked() != Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN) || userHasMagnificationServicesLocked(userState); @@ -5133,6 +5136,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // Remove magnification button UI when the magnification capability is not all mode or // magnification is disabled. if (!(userState.isMagnificationSingleFingerTripleTapEnabledLocked() + || (Flags.enableMagnificationMultipleFingerMultipleTapGesture() + && userState.isMagnificationTwoFingerTripleTapEnabledLocked()) || userState.isShortcutMagnificationEnabledLocked()) || userState.getMagnificationCapabilitiesLocked() != Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL) { diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java index b9e45bab7ab3..82efdd3ce40a 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java @@ -535,6 +535,78 @@ public class AccessibilityManagerServiceTest { @SmallTest @Test + public void testOnClientChange_magnificationTripleTapEnabled_requestConnection() { + when(mProxyManager.canRetrieveInteractiveWindowsLocked()).thenReturn(false); + + final AccessibilityUserState userState = mA11yms.mUserStates.get( + mA11yms.getCurrentUserIdLocked()); + userState.setMagnificationCapabilitiesLocked( + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL); + userState.setMagnificationSingleFingerTripleTapEnabledLocked(true); + + // Invokes client change to trigger onUserStateChanged. + mA11yms.onClientChangeLocked(/* serviceInfoChanged= */false); + + verify(mMockWindowMagnificationMgr).requestConnection(true); + } + + @SmallTest + @Test + public void testOnClientChange_magnificationTripleTapDisabled_requestDisconnection() { + when(mProxyManager.canRetrieveInteractiveWindowsLocked()).thenReturn(false); + + final AccessibilityUserState userState = mA11yms.mUserStates.get( + mA11yms.getCurrentUserIdLocked()); + userState.setMagnificationCapabilitiesLocked( + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL); + //userState.setMagnificationSingleFingerTripleTapEnabledLocked(false); + userState.setMagnificationSingleFingerTripleTapEnabledLocked(false); + + // Invokes client change to trigger onUserStateChanged. + mA11yms.onClientChangeLocked(/* serviceInfoChanged= */false); + + verify(mMockWindowMagnificationMgr).requestConnection(false); + } + + @SmallTest + @Test + @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE) + public void testOnClientChange_magnificationTwoFingerTripleTapEnabled_requestConnection() { + when(mProxyManager.canRetrieveInteractiveWindowsLocked()).thenReturn(false); + + final AccessibilityUserState userState = mA11yms.mUserStates.get( + mA11yms.getCurrentUserIdLocked()); + userState.setMagnificationCapabilitiesLocked( + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL); + userState.setMagnificationTwoFingerTripleTapEnabledLocked(true); + + // Invokes client change to trigger onUserStateChanged. + mA11yms.onClientChangeLocked(/* serviceInfoChanged= */false); + + verify(mMockWindowMagnificationMgr).requestConnection(true); + } + + @SmallTest + @Test + @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE) + public void testOnClientChange_magnificationTwoFingerTripleTapDisabled_requestDisconnection() { + when(mProxyManager.canRetrieveInteractiveWindowsLocked()).thenReturn(false); + + final AccessibilityUserState userState = mA11yms.mUserStates.get( + mA11yms.getCurrentUserIdLocked()); + userState.setMagnificationCapabilitiesLocked( + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL); + //userState.setMagnificationSingleFingerTripleTapEnabledLocked(false); + userState.setMagnificationTwoFingerTripleTapEnabledLocked(false); + + // Invokes client change to trigger onUserStateChanged. + mA11yms.onClientChangeLocked(/* serviceInfoChanged= */false); + + verify(mMockWindowMagnificationMgr).requestConnection(false); + } + + @SmallTest + @Test public void testOnClientChange_boundServiceCanControlMagnification_requestConnection() { when(mProxyManager.canRetrieveInteractiveWindowsLocked()).thenReturn(false); @@ -547,6 +619,64 @@ public class AccessibilityManagerServiceTest { verify(mMockWindowMagnificationMgr).requestConnection(true); } + @SmallTest + @Test + public void testOnClientChange_magnificationTripleTapDisabled_removeMagnificationButton() { + final AccessibilityUserState userState = mA11yms.mUserStates.get( + mA11yms.getCurrentUserIdLocked()); + userState.setMagnificationCapabilitiesLocked(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); + userState.setMagnificationSingleFingerTripleTapEnabledLocked(false); + + // Invokes client change to trigger onUserStateChanged. + mA11yms.onClientChangeLocked(/* serviceInfoChanged= */false); + + verify(mMockWindowMagnificationMgr, atLeastOnce()).removeMagnificationButton(anyInt()); + } + + @SmallTest + @Test + public void testOnClientChange_magnificationTripleTapEnabled_keepMagnificationButton() { + final AccessibilityUserState userState = mA11yms.mUserStates.get( + mA11yms.getCurrentUserIdLocked()); + userState.setMagnificationCapabilitiesLocked(ACCESSIBILITY_MAGNIFICATION_MODE_ALL); + userState.setMagnificationSingleFingerTripleTapEnabledLocked(true); + + // Invokes client change to trigger onUserStateChanged. + mA11yms.onClientChangeLocked(/* serviceInfoChanged= */false); + + verify(mMockWindowMagnificationMgr, never()).removeMagnificationButton(anyInt()); + } + + @SmallTest + @Test + @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE) + public void onClientChange_magnificationTwoFingerTripleTapDisabled_removeMagnificationButton() { + final AccessibilityUserState userState = mA11yms.mUserStates.get( + mA11yms.getCurrentUserIdLocked()); + userState.setMagnificationCapabilitiesLocked(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); + userState.setMagnificationTwoFingerTripleTapEnabledLocked(false); + + // Invokes client change to trigger onUserStateChanged. + mA11yms.onClientChangeLocked(/* serviceInfoChanged= */false); + + verify(mMockWindowMagnificationMgr, atLeastOnce()).removeMagnificationButton(anyInt()); + } + + @SmallTest + @Test + @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE) + public void onClientChange_magnificationTwoFingerTripleTapEnabled_keepMagnificationButton() { + final AccessibilityUserState userState = mA11yms.mUserStates.get( + mA11yms.getCurrentUserIdLocked()); + userState.setMagnificationCapabilitiesLocked(ACCESSIBILITY_MAGNIFICATION_MODE_ALL); + userState.setMagnificationTwoFingerTripleTapEnabledLocked(true); + + // Invokes client change to trigger onUserStateChanged. + mA11yms.onClientChangeLocked(/* serviceInfoChanged= */false); + + verify(mMockWindowMagnificationMgr, never()).removeMagnificationButton(anyInt()); + } + @Test public void testUnbindIme_whenServiceUnbinds() { setupAccessibilityServiceConnection(AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR); |