Loading services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java +4 −4 Original line number Diff line number Diff line Loading @@ -534,11 +534,11 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo MagnificationGestureHandler magnificationGestureHandler; if (mAms.getMagnificationMode(displayId) == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW && triggerable) { magnificationGestureHandler = new WindowMagnificationGestureHandler( displayContext, mAms.getWindowMagnificationMgr(), displayId); magnificationGestureHandler = new WindowMagnificationGestureHandler(displayContext, mAms.getWindowMagnificationMgr(), mAms::onMagnificationScaleChanged, displayId); } else { magnificationGestureHandler = new FullScreenMagnificationGestureHandler( displayContext, mAms.getMagnificationController(), magnificationGestureHandler = new FullScreenMagnificationGestureHandler(displayContext, mAms.getMagnificationController(), mAms::onMagnificationScaleChanged, detectControlGestures, triggerable, displayId); } return magnificationGestureHandler; Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +30 −2 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.IntPair; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.accessibility.magnification.MagnificationGestureHandler; import com.android.server.accessibility.magnification.WindowMagnificationManager; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.WindowManagerInternal; Loading Loading @@ -147,6 +148,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilityUserState.ServiceInfoChangeListener, AccessibilityWindowManager.AccessibilityEventSender, AccessibilitySecurityPolicy.AccessibilityUserManager, MagnificationGestureHandler.ScaleChangedListener, SystemActionPerformer.SystemActionsChangedListener { private static final boolean DEBUG = false; Loading Loading @@ -237,7 +239,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub private final RemoteCallbackList<IAccessibilityManagerClient> mGlobalClients = new RemoteCallbackList<>(); private final SparseArray<AccessibilityUserState> mUserStates = new SparseArray<>(); @VisibleForTesting final SparseArray<AccessibilityUserState> mUserStates = new SparseArray<>(); private final UiAutomationManager mUiAutomationManager = new UiAutomationManager(mLock); Loading Loading @@ -278,7 +281,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilitySecurityPolicy securityPolicy, SystemActionPerformer systemActionPerformer, AccessibilityWindowManager a11yWindowManager, AccessibilityDisplayListener a11yDisplayListener) { AccessibilityDisplayListener a11yDisplayListener, WindowMagnificationManager windowMagnificationMgr) { mContext = context; mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mWindowManagerService = LocalServices.getService(WindowManagerInternal.class); Loading @@ -289,6 +293,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mSystemActionPerformer = systemActionPerformer; mA11yWindowManager = a11yWindowManager; mA11yDisplayListener = a11yDisplayListener; mWindowMagnificationMgr = windowMagnificationMgr; init(); } Loading Loading @@ -989,6 +994,17 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } @Override public void onMagnificationScaleChanged(int displayId, int mode) { synchronized (mLock) { final int capabilities = getCurrentUserStateLocked().getMagnificationCapabilitiesLocked(); if (capabilities == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL) { getWindowMagnificationMgr().showMagnificationButton(displayId, mode); } } } /** * Called by AccessibilityInputFilter when it creates or destroys the motionEventInjector. * Not using a getter because the AccessibilityInputFilter isn't thread-safe Loading Loading @@ -3275,6 +3291,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub updateMagnificationModeChangeSettingsLocked(userState); } updateWindowMagnificationConnectionIfNeeded(userState); // Remove magnification button UI when the magnification capability is not all mode or // magnification is disabled. if (!(userState.isDisplayMagnificationEnabledLocked() || userState.isShortcutMagnificationEnabledLocked()) || userState.getMagnificationCapabilitiesLocked() != Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL) { final ArrayList<Display> displays = getValidDisplayList(); for (int i = 0; i < displays.size(); i++) { final int displayId = displays.get(i).getDisplayId(); getWindowMagnificationMgr().removeMagnificationButton(displayId); } } } private boolean fallBackMagnificationModeSettingsLocked(AccessibilityUserState userState) { Loading services/accessibility/java/com/android/server/accessibility/FullScreenMagnificationGestureHandler.java +3 −2 Original line number Diff line number Diff line Loading @@ -173,15 +173,16 @@ class FullScreenMagnificationGestureHandler extends MagnificationGestureHandler */ FullScreenMagnificationGestureHandler(Context context, MagnificationController magnificationController, MagnificationGestureHandler.ScaleChangedListener listener, boolean detectTripleTap, boolean detectShortcutTrigger, int displayId) { super(listener); if (DEBUG_ALL) { Log.i(LOG_TAG, "FullScreenMagnificationGestureHandler(detectTripleTap = " + detectTripleTap + ", detectShortcutTrigger = " + detectShortcutTrigger + ")"); } mMagnificationController = magnificationController; mDisplayId = displayId; Loading Loading @@ -452,7 +453,6 @@ class FullScreenMagnificationGestureHandler extends MagnificationGestureHandler mScaling = abs(deltaScale) > mScalingThreshold; return mScaling; } final float initialScale = mMagnificationController.getScale(mDisplayId); final float targetScale = initialScale * detector.getScaleFactor(); Loading @@ -477,6 +477,7 @@ class FullScreenMagnificationGestureHandler extends MagnificationGestureHandler if (DEBUG_PANNING_SCALING) Slog.i(LOG_TAG, "Scaled content to: " + scale + "x"); mMagnificationController.setScale(mDisplayId, scale, pivotX, pivotY, false, AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID); mListener.onMagnificationScaleChanged(mDisplayId, getMode()); return /* handled: */ true; } Loading services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGestureHandler.java +19 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,25 @@ import com.android.server.accessibility.BaseEventStreamTransformation; */ public abstract class MagnificationGestureHandler extends BaseEventStreamTransformation { protected final MagnificationGestureHandler.ScaleChangedListener mListener; protected MagnificationGestureHandler(ScaleChangedListener listener) { mListener = listener; } /** * Interface for listening to the magnification scaling gesture. */ public interface ScaleChangedListener { /** * Called when the magnification scale is changed by users. * * @param displayId The logical display id * @param mode The magnification mode */ void onMagnificationScaleChanged(int displayId, int mode); } /** * Called when the shortcut target is magnification. */ Loading services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java +22 −2 Original line number Diff line number Diff line Loading @@ -96,7 +96,9 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl * @param displayId The logical display id. */ public WindowMagnificationGestureHandler(Context context, WindowMagnificationManager windowMagnificationMgr, int displayId) { WindowMagnificationManager windowMagnificationMgr, MagnificationGestureHandler.ScaleChangedListener listener, int displayId) { super(listener); if (DEBUG_ALL) { Slog.i(LOG_TAG, "WindowMagnificationGestureHandler() , displayId = " + displayId + ")"); Loading @@ -111,7 +113,25 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl mDetectingState = new DetectingState(context); mObservePanningScalingState = new PanningScalingGestureState( new PanningScalingHandler(context, MAX_SCALE, MIN_SCALE, true, mWindowMagnificationMgr)); new PanningScalingHandler.MagnificationDelegate() { @Override public boolean processScroll(int displayId, float distanceX, float distanceY) { return mWindowMagnificationMgr.processScroll(displayId, distanceX, distanceY); } @Override public void setScale(int displayId, float scale) { mWindowMagnificationMgr.setScale(displayId, scale); mListener.onMagnificationScaleChanged(displayId, getMode()); } @Override public float getScale(int displayId) { return mWindowMagnificationMgr.getScale(displayId); } })); mDebugOutputEventHistory = DEBUG_EVENT_STREAM ? new ArrayDeque<>() : null; Loading Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java +4 −4 Original line number Diff line number Diff line Loading @@ -534,11 +534,11 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo MagnificationGestureHandler magnificationGestureHandler; if (mAms.getMagnificationMode(displayId) == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW && triggerable) { magnificationGestureHandler = new WindowMagnificationGestureHandler( displayContext, mAms.getWindowMagnificationMgr(), displayId); magnificationGestureHandler = new WindowMagnificationGestureHandler(displayContext, mAms.getWindowMagnificationMgr(), mAms::onMagnificationScaleChanged, displayId); } else { magnificationGestureHandler = new FullScreenMagnificationGestureHandler( displayContext, mAms.getMagnificationController(), magnificationGestureHandler = new FullScreenMagnificationGestureHandler(displayContext, mAms.getMagnificationController(), mAms::onMagnificationScaleChanged, detectControlGestures, triggerable, displayId); } return magnificationGestureHandler; Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +30 −2 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.IntPair; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.accessibility.magnification.MagnificationGestureHandler; import com.android.server.accessibility.magnification.WindowMagnificationManager; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.WindowManagerInternal; Loading Loading @@ -147,6 +148,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilityUserState.ServiceInfoChangeListener, AccessibilityWindowManager.AccessibilityEventSender, AccessibilitySecurityPolicy.AccessibilityUserManager, MagnificationGestureHandler.ScaleChangedListener, SystemActionPerformer.SystemActionsChangedListener { private static final boolean DEBUG = false; Loading Loading @@ -237,7 +239,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub private final RemoteCallbackList<IAccessibilityManagerClient> mGlobalClients = new RemoteCallbackList<>(); private final SparseArray<AccessibilityUserState> mUserStates = new SparseArray<>(); @VisibleForTesting final SparseArray<AccessibilityUserState> mUserStates = new SparseArray<>(); private final UiAutomationManager mUiAutomationManager = new UiAutomationManager(mLock); Loading Loading @@ -278,7 +281,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilitySecurityPolicy securityPolicy, SystemActionPerformer systemActionPerformer, AccessibilityWindowManager a11yWindowManager, AccessibilityDisplayListener a11yDisplayListener) { AccessibilityDisplayListener a11yDisplayListener, WindowMagnificationManager windowMagnificationMgr) { mContext = context; mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mWindowManagerService = LocalServices.getService(WindowManagerInternal.class); Loading @@ -289,6 +293,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mSystemActionPerformer = systemActionPerformer; mA11yWindowManager = a11yWindowManager; mA11yDisplayListener = a11yDisplayListener; mWindowMagnificationMgr = windowMagnificationMgr; init(); } Loading Loading @@ -989,6 +994,17 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } @Override public void onMagnificationScaleChanged(int displayId, int mode) { synchronized (mLock) { final int capabilities = getCurrentUserStateLocked().getMagnificationCapabilitiesLocked(); if (capabilities == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL) { getWindowMagnificationMgr().showMagnificationButton(displayId, mode); } } } /** * Called by AccessibilityInputFilter when it creates or destroys the motionEventInjector. * Not using a getter because the AccessibilityInputFilter isn't thread-safe Loading Loading @@ -3275,6 +3291,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub updateMagnificationModeChangeSettingsLocked(userState); } updateWindowMagnificationConnectionIfNeeded(userState); // Remove magnification button UI when the magnification capability is not all mode or // magnification is disabled. if (!(userState.isDisplayMagnificationEnabledLocked() || userState.isShortcutMagnificationEnabledLocked()) || userState.getMagnificationCapabilitiesLocked() != Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL) { final ArrayList<Display> displays = getValidDisplayList(); for (int i = 0; i < displays.size(); i++) { final int displayId = displays.get(i).getDisplayId(); getWindowMagnificationMgr().removeMagnificationButton(displayId); } } } private boolean fallBackMagnificationModeSettingsLocked(AccessibilityUserState userState) { Loading
services/accessibility/java/com/android/server/accessibility/FullScreenMagnificationGestureHandler.java +3 −2 Original line number Diff line number Diff line Loading @@ -173,15 +173,16 @@ class FullScreenMagnificationGestureHandler extends MagnificationGestureHandler */ FullScreenMagnificationGestureHandler(Context context, MagnificationController magnificationController, MagnificationGestureHandler.ScaleChangedListener listener, boolean detectTripleTap, boolean detectShortcutTrigger, int displayId) { super(listener); if (DEBUG_ALL) { Log.i(LOG_TAG, "FullScreenMagnificationGestureHandler(detectTripleTap = " + detectTripleTap + ", detectShortcutTrigger = " + detectShortcutTrigger + ")"); } mMagnificationController = magnificationController; mDisplayId = displayId; Loading Loading @@ -452,7 +453,6 @@ class FullScreenMagnificationGestureHandler extends MagnificationGestureHandler mScaling = abs(deltaScale) > mScalingThreshold; return mScaling; } final float initialScale = mMagnificationController.getScale(mDisplayId); final float targetScale = initialScale * detector.getScaleFactor(); Loading @@ -477,6 +477,7 @@ class FullScreenMagnificationGestureHandler extends MagnificationGestureHandler if (DEBUG_PANNING_SCALING) Slog.i(LOG_TAG, "Scaled content to: " + scale + "x"); mMagnificationController.setScale(mDisplayId, scale, pivotX, pivotY, false, AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID); mListener.onMagnificationScaleChanged(mDisplayId, getMode()); return /* handled: */ true; } Loading
services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGestureHandler.java +19 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,25 @@ import com.android.server.accessibility.BaseEventStreamTransformation; */ public abstract class MagnificationGestureHandler extends BaseEventStreamTransformation { protected final MagnificationGestureHandler.ScaleChangedListener mListener; protected MagnificationGestureHandler(ScaleChangedListener listener) { mListener = listener; } /** * Interface for listening to the magnification scaling gesture. */ public interface ScaleChangedListener { /** * Called when the magnification scale is changed by users. * * @param displayId The logical display id * @param mode The magnification mode */ void onMagnificationScaleChanged(int displayId, int mode); } /** * Called when the shortcut target is magnification. */ Loading
services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java +22 −2 Original line number Diff line number Diff line Loading @@ -96,7 +96,9 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl * @param displayId The logical display id. */ public WindowMagnificationGestureHandler(Context context, WindowMagnificationManager windowMagnificationMgr, int displayId) { WindowMagnificationManager windowMagnificationMgr, MagnificationGestureHandler.ScaleChangedListener listener, int displayId) { super(listener); if (DEBUG_ALL) { Slog.i(LOG_TAG, "WindowMagnificationGestureHandler() , displayId = " + displayId + ")"); Loading @@ -111,7 +113,25 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl mDetectingState = new DetectingState(context); mObservePanningScalingState = new PanningScalingGestureState( new PanningScalingHandler(context, MAX_SCALE, MIN_SCALE, true, mWindowMagnificationMgr)); new PanningScalingHandler.MagnificationDelegate() { @Override public boolean processScroll(int displayId, float distanceX, float distanceY) { return mWindowMagnificationMgr.processScroll(displayId, distanceX, distanceY); } @Override public void setScale(int displayId, float scale) { mWindowMagnificationMgr.setScale(displayId, scale); mListener.onMagnificationScaleChanged(displayId, getMode()); } @Override public float getScale(int displayId) { return mWindowMagnificationMgr.getScale(displayId); } })); mDebugOutputEventHistory = DEBUG_EVENT_STREAM ? new ArrayDeque<>() : null; Loading