Merge changes from topics "presubmit-am-6d6a4b4f29394bb498818c2f4488d08d", "presubmit-am-b0e37416e8c743989854206f0e1f2acb" into tm-dev

* changes:
  Add a condition of ime should be visible on tracking typing focus.
  Disables tracking focus on move a11y actions.
This commit is contained in:
Daniel Hsieh
2022-03-02 06:28:44 +00:00
committed by Android (Google) Code Review
14 changed files with 104 additions and 48 deletions

View File

@@ -68,12 +68,10 @@ import android.graphics.Rect;
void onAccessibilityActionPerformed(int displayId); void onAccessibilityActionPerformed(int displayId);
/** /**
* Called when the user is performing dragging gesture. It is started after the offset * Called when the user is performing move action.
* between the down location and the move event location exceed
* {@link ViewConfiguration#getScaledTouchSlop()}.
* *
* @param displayId The logical display id. * @param displayId The logical display id.
*/ */
void onDrag(int displayId); void onMove(int displayId);
} }

View File

@@ -221,9 +221,9 @@ public class WindowMagnification extends CoreStartable implements WindowMagnifie
} }
@Override @Override
public void onDrag(int displayId) { public void onMove(int displayId) {
if (mWindowMagnificationConnectionImpl != null) { if (mWindowMagnificationConnectionImpl != null) {
mWindowMagnificationConnectionImpl.onDrag(displayId); mWindowMagnificationConnectionImpl.onMove(displayId);
} }
} }

View File

@@ -150,10 +150,10 @@ class WindowMagnificationConnectionImpl extends IWindowMagnificationConnection.S
} }
} }
void onDrag(int displayId) { void onMove(int displayId) {
if (mConnectionCallback != null) { if (mConnectionCallback != null) {
try { try {
mConnectionCallback.onDrag(displayId); mConnectionCallback.onMove(displayId);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Failed to inform taking control by a user", e); Log.e(TAG, "Failed to inform taking control by a user", e);
} }

View File

@@ -852,6 +852,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
@Override @Override
public void move(int xOffset, int yOffset) { public void move(int xOffset, int yOffset) {
moveWindowMagnifier(xOffset, yOffset); moveWindowMagnifier(xOffset, yOffset);
mWindowMagnifierCallback.onMove(mDisplayId);
} }
/** /**
@@ -1045,8 +1046,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
@Override @Override
public boolean onDrag(float offsetX, float offsetY) { public boolean onDrag(float offsetX, float offsetY) {
moveWindowMagnifier(offsetX, offsetY); move((int) offsetX, (int) offsetY);
mWindowMagnifierCallback.onDrag(mDisplayId);
return true; return true;
} }

View File

@@ -17,7 +17,6 @@
package com.android.systemui.accessibility; package com.android.systemui.accessibility;
import android.graphics.Rect; import android.graphics.Rect;
import android.view.ViewConfiguration;
/** /**
* A callback to inform {@link com.android.server.accessibility.AccessibilityManagerService} about * A callback to inform {@link com.android.server.accessibility.AccessibilityManagerService} about
@@ -56,11 +55,9 @@ interface WindowMagnifierCallback {
void onAccessibilityActionPerformed(int displayId); void onAccessibilityActionPerformed(int displayId);
/** /**
* Called when the user is performing dragging gesture. It is started after the offset * Called when the user is performing a move action.
* between the down location and the move event location exceed
* {@link ViewConfiguration#getScaledTouchSlop()}.
* *
* @param displayId The logical display id. * @param displayId The logical display id.
*/ */
void onDrag(int displayId); void onMove(int displayId);
} }

View File

@@ -40,6 +40,7 @@ import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -566,6 +567,7 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
mirrorView.performAccessibilityAction(R.id.accessibility_action_move_right, null)); mirrorView.performAccessibilityAction(R.id.accessibility_action_move_right, null));
assertTrue( assertTrue(
mirrorView.performAccessibilityAction(R.id.accessibility_action_move_left, null)); mirrorView.performAccessibilityAction(R.id.accessibility_action_move_left, null));
verify(mWindowMagnifierCallback, times(4)).onMove(eq(displayId));
} }
@Test @Test

View File

@@ -148,13 +148,13 @@ public class WindowMagnificationTest extends SysuiTestCase {
} }
@Test @Test
public void onDrag_enabled_notifyCallback() throws RemoteException { public void onMove_enabled_notifyCallback() throws RemoteException {
mCommandQueue.requestWindowMagnificationConnection(true); mCommandQueue.requestWindowMagnificationConnection(true);
waitForIdleSync(); waitForIdleSync();
mWindowMagnification.onDrag(TEST_DISPLAY); mWindowMagnification.onMove(TEST_DISPLAY);
verify(mConnectionCallback).onDrag(TEST_DISPLAY); verify(mConnectionCallback).onMove(TEST_DISPLAY);
} }
@Test @Test

View File

@@ -303,7 +303,7 @@ public class FullScreenMagnificationController implements
public void onImeWindowVisibilityChanged(boolean shown) { public void onImeWindowVisibilityChanged(boolean shown) {
final Message m = PooledLambda.obtainMessage( final Message m = PooledLambda.obtainMessage(
FullScreenMagnificationController::notifyImeWindowVisibilityChanged, FullScreenMagnificationController::notifyImeWindowVisibilityChanged,
FullScreenMagnificationController.this, shown); FullScreenMagnificationController.this, mDisplayId, shown);
mControllerCtx.getHandler().sendMessage(m); mControllerCtx.getHandler().sendMessage(m);
} }
@@ -1215,11 +1215,12 @@ public class FullScreenMagnificationController implements
/** /**
* Notifies that the IME window visibility changed. * Notifies that the IME window visibility changed.
* *
* @param displayId the logical display id
* @param shown {@code true} means the IME window shows on the screen. Otherwise it's * @param shown {@code true} means the IME window shows on the screen. Otherwise it's
* hidden. * hidden.
*/ */
void notifyImeWindowVisibilityChanged(boolean shown) { void notifyImeWindowVisibilityChanged(int displayId, boolean shown) {
mMagnificationInfoChangedCallback.onImeWindowVisibilityChanged(shown); mMagnificationInfoChangedCallback.onImeWindowVisibilityChanged(displayId, shown);
} }
/** /**
@@ -1609,17 +1610,19 @@ public class FullScreenMagnificationController implements
* Called when the state of the magnification activation is changed. * Called when the state of the magnification activation is changed.
* It is for the logging data of the magnification activation state. * It is for the logging data of the magnification activation state.
* *
* @param displayId The logical display id. * @param displayId the logical display id
* @param activated {@code true} if the magnification is activated, otherwise {@code false}. * @param activated {@code true} if the magnification is activated, otherwise {@code false}.
*/ */
void onFullScreenMagnificationActivationState(int displayId, boolean activated); void onFullScreenMagnificationActivationState(int displayId, boolean activated);
/** /**
* Called when the IME window visibility changed. * Called when the IME window visibility changed.
*
* @param displayId the logical display id
* @param shown {@code true} means the IME window shows on the screen. Otherwise it's * @param shown {@code true} means the IME window shows on the screen. Otherwise it's
* hidden. * hidden.
*/ */
void onImeWindowVisibilityChanged(boolean shown); void onImeWindowVisibilityChanged(int displayId, boolean shown);
/** /**
* Called when the magnification spec changed. * Called when the magnification spec changed.

View File

@@ -39,6 +39,7 @@ import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
import android.util.Slog; import android.util.Slog;
import android.util.SparseArray; import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.view.accessibility.MagnificationAnimationCallback; import android.view.accessibility.MagnificationAnimationCallback;
import com.android.internal.accessibility.util.AccessibilityStatsLogUtils; import com.android.internal.accessibility.util.AccessibilityStatsLogUtils;
@@ -102,7 +103,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
// Track the active user to reset the magnification and get the associated user settings. // Track the active user to reset the magnification and get the associated user settings.
private @UserIdInt int mUserId = UserHandle.USER_SYSTEM; private @UserIdInt int mUserId = UserHandle.USER_SYSTEM;
@GuardedBy("mLock") @GuardedBy("mLock")
private boolean mImeWindowVisible = false; private final SparseBooleanArray mIsImeVisibleArray = new SparseBooleanArray();
private long mWindowModeEnabledTime = 0; private long mWindowModeEnabledTime = 0;
private long mFullScreenModeEnabledTime = 0; private long mFullScreenModeEnabledTime = 0;
@@ -387,7 +388,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
setActivatedModeAndSwitchDelegate(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); setActivatedModeAndSwitchDelegate(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
mLastActivatedMode = mActivatedMode; mLastActivatedMode = mActivatedMode;
} }
logMagnificationModeWithImeOnIfNeeded(); logMagnificationModeWithImeOnIfNeeded(displayId);
disableFullScreenMagnificationIfNeeded(displayId); disableFullScreenMagnificationIfNeeded(displayId);
} else { } else {
logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
@@ -442,7 +443,7 @@ public class MagnificationController implements WindowMagnificationManager.Callb
setActivatedModeAndSwitchDelegate(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); setActivatedModeAndSwitchDelegate(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
mLastActivatedMode = mActivatedMode; mLastActivatedMode = mActivatedMode;
} }
logMagnificationModeWithImeOnIfNeeded(); logMagnificationModeWithImeOnIfNeeded(displayId);
disableWindowMagnificationIfNeeded(displayId); disableWindowMagnificationIfNeeded(displayId);
} else { } else {
logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, logMagnificationUsageState(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN,
@@ -464,12 +465,12 @@ public class MagnificationController implements WindowMagnificationManager.Callb
} }
@Override @Override
public void onImeWindowVisibilityChanged(boolean shown) { public void onImeWindowVisibilityChanged(int displayId, boolean shown) {
synchronized (mLock) { synchronized (mLock) {
mImeWindowVisible = shown; mIsImeVisibleArray.put(displayId, shown);
} }
getWindowMagnificationMgr().onImeWindowVisibilityChanged(shown); getWindowMagnificationMgr().onImeWindowVisibilityChanged(displayId, shown);
logMagnificationModeWithImeOnIfNeeded(); logMagnificationModeWithImeOnIfNeeded(displayId);
} }
/** /**
@@ -585,11 +586,12 @@ public class MagnificationController implements WindowMagnificationManager.Callb
} }
} }
private void logMagnificationModeWithImeOnIfNeeded() { private void logMagnificationModeWithImeOnIfNeeded(int displayId) {
final int mode; final int mode;
synchronized (mLock) { synchronized (mLock) {
if (!mImeWindowVisible || mActivatedMode == ACCESSIBILITY_MAGNIFICATION_MODE_NONE) { if (!mIsImeVisibleArray.get(displayId, false)
|| mActivatedMode == ACCESSIBILITY_MAGNIFICATION_MODE_NONE) {
return; return;
} }
mode = mActivatedMode; mode = mActivatedMode;

View File

@@ -39,6 +39,7 @@ import android.os.RemoteException;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.Slog; import android.util.Slog;
import android.util.SparseArray; import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.accessibility.IWindowMagnificationConnection; import android.view.accessibility.IWindowMagnificationConnection;
import android.view.accessibility.IWindowMagnificationConnectionCallback; import android.view.accessibility.IWindowMagnificationConnectionCallback;
@@ -124,6 +125,7 @@ public class WindowMagnificationManager implements
private SparseArray<WindowMagnifier> mWindowMagnifiers = new SparseArray<>(); private SparseArray<WindowMagnifier> mWindowMagnifiers = new SparseArray<>();
// Whether the following typing focus feature for magnification is enabled. // Whether the following typing focus feature for magnification is enabled.
private boolean mMagnificationFollowTypingEnabled = true; private boolean mMagnificationFollowTypingEnabled = true;
private final SparseBooleanArray mIsImeVisibleArray = new SparseBooleanArray();
private boolean mReceiverRegistered = false; private boolean mReceiverRegistered = false;
@VisibleForTesting @VisibleForTesting
@@ -384,7 +386,8 @@ public class WindowMagnificationManager implements
float toCenterY = (float) (top + bottom) / 2; float toCenterY = (float) (top + bottom) / 2;
synchronized (mLock) { synchronized (mLock) {
if (!isPositionInSourceBounds(displayId, toCenterX, toCenterY) if (mIsImeVisibleArray.get(displayId, false)
&& !isPositionInSourceBounds(displayId, toCenterX, toCenterY)
&& isTrackingTypingFocusEnabled(displayId)) { && isTrackingTypingFocusEnabled(displayId)) {
moveWindowMagnifierToPositionInternal(displayId, toCenterX, toCenterY, moveWindowMagnifierToPositionInternal(displayId, toCenterX, toCenterY,
STUB_ANIMATION_CALLBACK); STUB_ANIMATION_CALLBACK);
@@ -456,7 +459,8 @@ public class WindowMagnificationManager implements
* *
* @param shown {@code true} means the IME window shows on the screen. Otherwise, it's hidden. * @param shown {@code true} means the IME window shows on the screen. Otherwise, it's hidden.
*/ */
void onImeWindowVisibilityChanged(boolean shown) { void onImeWindowVisibilityChanged(int displayId, boolean shown) {
mIsImeVisibleArray.put(displayId, shown);
if (shown) { if (shown) {
enableAllTrackingTypingFocus(); enableAllTrackingTypingFocus();
} }
@@ -903,10 +907,10 @@ public class WindowMagnificationManager implements
} }
@Override @Override
public void onDrag(int displayId) { public void onMove(int displayId) {
if (mTrace.isA11yTracingEnabledForTypes( if (mTrace.isA11yTracingEnabledForTypes(
FLAGS_WINDOW_MAGNIFICATION_CONNECTION_CALLBACK)) { FLAGS_WINDOW_MAGNIFICATION_CONNECTION_CALLBACK)) {
mTrace.logTrace(TAG + "ConnectionCallback.onDrag", mTrace.logTrace(TAG + "ConnectionCallback.onMove",
FLAGS_WINDOW_MAGNIFICATION_CONNECTION_CALLBACK, FLAGS_WINDOW_MAGNIFICATION_CONNECTION_CALLBACK,
"displayId=" + displayId); "displayId=" + displayId);
} }

View File

@@ -79,6 +79,7 @@ import android.util.ArraySet;
import android.util.Pair; import android.util.Pair;
import android.util.Slog; import android.util.Slog;
import android.util.SparseArray; import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.TypedValue; import android.util.TypedValue;
import android.util.proto.ProtoOutputStream; import android.util.proto.ProtoOutputStream;
import android.view.Display; import android.view.Display;
@@ -138,7 +139,7 @@ final class AccessibilityController {
new SparseArray<>(); new SparseArray<>();
private SparseArray<IBinder> mFocusedWindow = new SparseArray<>(); private SparseArray<IBinder> mFocusedWindow = new SparseArray<>();
private int mFocusedDisplay = -1; private int mFocusedDisplay = -1;
private boolean mIsImeVisible = false; private final SparseBooleanArray mIsImeVisibleArray = new SparseBooleanArray();
// Set to true if initializing window population complete. // Set to true if initializing window population complete.
private boolean mAllObserversInitialized = true; private boolean mAllObserversInitialized = true;
private final AccessibilityWindowsPopulator mAccessibilityWindowsPopulator; private final AccessibilityWindowsPopulator mAccessibilityWindowsPopulator;
@@ -167,8 +168,11 @@ final class AccessibilityController {
if (dc != null) { if (dc != null) {
final Display display = dc.getDisplay(); final Display display = dc.getDisplay();
if (display != null && display.getType() != Display.TYPE_OVERLAY) { if (display != null && display.getType() != Display.TYPE_OVERLAY) {
mDisplayMagnifiers.put(displayId, new DisplayMagnifier( final DisplayMagnifier magnifier = new DisplayMagnifier(
mService, dc, display, callbacks)); mService, dc, display, callbacks);
magnifier.notifyImeWindowVisibilityChanged(
mIsImeVisibleArray.get(displayId, false));
mDisplayMagnifiers.put(displayId, magnifier);
result = true; result = true;
} }
} }
@@ -494,11 +498,13 @@ final class AccessibilityController {
mAccessibilityTracing.logTrace(TAG + ".updateImeVisibilityIfNeeded", mAccessibilityTracing.logTrace(TAG + ".updateImeVisibilityIfNeeded",
FLAGS_MAGNIFICATION_CALLBACK, "displayId=" + displayId + ";shown=" + shown); FLAGS_MAGNIFICATION_CALLBACK, "displayId=" + displayId + ";shown=" + shown);
} }
if (mIsImeVisible == shown) {
final boolean isDisplayImeVisible = mIsImeVisibleArray.get(displayId, false);
if (isDisplayImeVisible == shown) {
return; return;
} }
mIsImeVisible = shown; mIsImeVisibleArray.put(displayId, shown);
final DisplayMagnifier displayMagnifier = mDisplayMagnifiers.get(displayId); final DisplayMagnifier displayMagnifier = mDisplayMagnifiers.get(displayId);
if (displayMagnifier != null) { if (displayMagnifier != null) {
displayMagnifier.notifyImeWindowVisibilityChanged(shown); displayMagnifier.notifyImeWindowVisibilityChanged(shown);
@@ -534,6 +540,7 @@ final class AccessibilityController {
} }
public void onDisplayRemoved(int displayId) { public void onDisplayRemoved(int displayId) {
mIsImeVisibleArray.delete(displayId);
mFocusedWindow.remove(displayId); mFocusedWindow.remove(displayId);
} }

View File

@@ -1158,7 +1158,7 @@ public class FullScreenMagnificationControllerTest {
MagnificationCallbacks callbacks = getMagnificationCallbacks(DISPLAY_0); MagnificationCallbacks callbacks = getMagnificationCallbacks(DISPLAY_0);
callbacks.onImeWindowVisibilityChanged(true); callbacks.onImeWindowVisibilityChanged(true);
mMessageCapturingHandler.sendAllMessages(); mMessageCapturingHandler.sendAllMessages();
verify(mRequestObserver).onImeWindowVisibilityChanged(eq(true)); verify(mRequestObserver).onImeWindowVisibilityChanged(eq(DISPLAY_0), eq(true));
} }
private void setScaleToMagnifying() { private void setScaleToMagnifying() {

View File

@@ -752,7 +752,7 @@ public class MagnificationControllerTest {
MagnificationController spyController = spy(mMagnificationController); MagnificationController spyController = spy(mMagnificationController);
spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true); spyController.onWindowMagnificationActivationState(TEST_DISPLAY, true);
spyController.onImeWindowVisibilityChanged(true); spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
verify(spyController).logMagnificationModeWithIme( verify(spyController).logMagnificationModeWithIme(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW)); eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW));
@@ -763,7 +763,7 @@ public class MagnificationControllerTest {
MagnificationController spyController = spy(mMagnificationController); MagnificationController spyController = spy(mMagnificationController);
spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true); spyController.onFullScreenMagnificationActivationState(TEST_DISPLAY, true);
spyController.onImeWindowVisibilityChanged(true); spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
verify(spyController).logMagnificationModeWithIme( verify(spyController).logMagnificationModeWithIme(
eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN)); eq(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN));
@@ -772,7 +772,7 @@ public class MagnificationControllerTest {
@Test @Test
public void imeWindowStateShown_noMagnifying_noLogAnyMode() { public void imeWindowStateShown_noMagnifying_noLogAnyMode() {
MagnificationController spyController = spy(mMagnificationController); MagnificationController spyController = spy(mMagnificationController);
spyController.onImeWindowVisibilityChanged(true); spyController.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
verify(spyController, never()).logMagnificationModeWithIme(anyInt()); verify(spyController, never()).logMagnificationModeWithIme(anyInt());
} }

View File

@@ -297,11 +297,12 @@ public class WindowMagnificationManagerTest {
throws RemoteException { throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
final Region outRegion = new Region(); final Region outRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion); mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion);
final Rect requestedRect = outRegion.getBounds(); final Rect requestedRect = outRegion.getBounds();
requestedRect.offsetTo(requestedRect.right + 10, requestedRect.bottom + 10); requestedRect.offsetTo(requestedRect.right + 10, requestedRect.bottom + 10);
mMockConnection.getConnectionCallback().onDrag(TEST_DISPLAY); mMockConnection.getConnectionCallback().onMove(TEST_DISPLAY);
mWindowMagnificationManager.onRectangleOnScreenRequested(TEST_DISPLAY, mWindowMagnificationManager.onRectangleOnScreenRequested(TEST_DISPLAY,
requestedRect.left, requestedRect.top, requestedRect.right, requestedRect.bottom); requestedRect.left, requestedRect.top, requestedRect.right, requestedRect.bottom);
@@ -318,6 +319,7 @@ public class WindowMagnificationManagerTest {
final float distanceY = 10f; final float distanceY = 10f;
mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
final Region outRegion = new Region(); final Region outRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion); mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion);
final Rect requestedRect = outRegion.getBounds(); final Rect requestedRect = outRegion.getBounds();
@@ -336,6 +338,7 @@ public class WindowMagnificationManagerTest {
throws RemoteException { throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
final Region outRegion = new Region(); final Region outRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion); mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion);
final Rect requestedRect = outRegion.getBounds(); final Rect requestedRect = outRegion.getBounds();
@@ -347,12 +350,29 @@ public class WindowMagnificationManagerTest {
verify(mMockConnection.getConnection(), never()) verify(mMockConnection.getConnection(), never())
.moveWindowMagnifierToPosition(anyInt(), anyFloat(), anyFloat(), any()); .moveWindowMagnifierToPosition(anyInt(), anyFloat(), anyFloat(), any());
} }
@Test
public void onRectangleOnScreenRequested_imeVisibilityDefaultInvisible_withoutMovingMagnifier()
throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
final Region outRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion);
final Rect requestedRect = outRegion.getBounds();
requestedRect.offsetTo(requestedRect.right + 10, requestedRect.bottom + 10);
mWindowMagnificationManager.onRectangleOnScreenRequested(TEST_DISPLAY,
requestedRect.left, requestedRect.top, requestedRect.right, requestedRect.bottom);
verify(mMockConnection.getConnection(), never())
.moveWindowMagnifierToPosition(anyInt(), anyFloat(), anyFloat(), any());
}
@Test @Test
public void onRectangleOnScreenRequested_trackingEnabledByDefault_movingMagnifier() public void onRectangleOnScreenRequested_trackingEnabledByDefault_movingMagnifier()
throws RemoteException { throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
final Region outRegion = new Region(); final Region outRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion); mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion);
final Rect requestedRect = outRegion.getBounds(); final Rect requestedRect = outRegion.getBounds();
@@ -366,13 +386,33 @@ public class WindowMagnificationManagerTest {
any(IRemoteMagnificationAnimationCallback.class)); any(IRemoteMagnificationAnimationCallback.class));
} }
@Test
public void onRectangleOnScreenRequested_imeInvisible_withoutMovingMagnifier()
throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
final Region outRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion);
final Rect requestedRect = outRegion.getBounds();
requestedRect.offsetTo(requestedRect.right + 10, requestedRect.bottom + 10);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, false);
mWindowMagnificationManager.onRectangleOnScreenRequested(TEST_DISPLAY,
requestedRect.left, requestedRect.top, requestedRect.right, requestedRect.bottom);
verify(mMockConnection.getConnection(), never())
.moveWindowMagnifierToPosition(anyInt(), anyFloat(), anyFloat(), any());
}
@Test @Test
public void onRectangleOnScreenRequested_trackingEnabledByDragAndReset_movingMagnifier() public void onRectangleOnScreenRequested_trackingEnabledByDragAndReset_movingMagnifier()
throws RemoteException { throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mMockConnection.getConnectionCallback().onDrag(TEST_DISPLAY); mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
mWindowMagnificationManager.onImeWindowVisibilityChanged(true); mMockConnection.getConnectionCallback().onMove(TEST_DISPLAY);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
final Region outRegion = new Region(); final Region outRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion); mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, outRegion);
final Rect requestedRect = outRegion.getBounds(); final Rect requestedRect = outRegion.getBounds();
@@ -390,6 +430,7 @@ public class WindowMagnificationManagerTest {
public void onRectangleOnScreenRequested_followTypingIsDisabled_withoutMovingMagnifier() { public void onRectangleOnScreenRequested_followTypingIsDisabled_withoutMovingMagnifier() {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
final Region beforeRegion = new Region(); final Region beforeRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion); mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion);
final Rect requestedRect = beforeRegion.getBounds(); final Rect requestedRect = beforeRegion.getBounds();
@@ -408,6 +449,7 @@ public class WindowMagnificationManagerTest {
public void onRectangleOnScreenRequested_trackingDisabled_withoutMovingMagnifier() { public void onRectangleOnScreenRequested_trackingDisabled_withoutMovingMagnifier() {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
mWindowMagnificationManager.setTrackingTypingFocusEnabled(TEST_DISPLAY, false); mWindowMagnificationManager.setTrackingTypingFocusEnabled(TEST_DISPLAY, false);
final Region beforeRegion = new Region(); final Region beforeRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion); mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion);
@@ -427,6 +469,7 @@ public class WindowMagnificationManagerTest {
throws RemoteException { throws RemoteException {
mWindowMagnificationManager.setConnection(mMockConnection.getConnection()); mWindowMagnificationManager.setConnection(mMockConnection.getConnection());
mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f); mWindowMagnificationManager.enableWindowMagnification(TEST_DISPLAY, 3.0f, 50f, 50f);
mWindowMagnificationManager.onImeWindowVisibilityChanged(TEST_DISPLAY, true);
mWindowMagnificationManager.setTrackingTypingFocusEnabled(TEST_DISPLAY, false); mWindowMagnificationManager.setTrackingTypingFocusEnabled(TEST_DISPLAY, false);
final Region beforeRegion = new Region(); final Region beforeRegion = new Region();
mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion); mWindowMagnificationManager.getMagnificationSourceBounds(TEST_DISPLAY, beforeRegion);