Merge "fix(#Magnification): magnification gesture handler might not be activated after config transition" into udc-dev
This commit is contained in:
@@ -231,6 +231,12 @@ public class MagnificationController implements WindowMagnificationManager.Callb
|
|||||||
*/
|
*/
|
||||||
public void transitionMagnificationModeLocked(int displayId, int targetMode,
|
public void transitionMagnificationModeLocked(int displayId, int targetMode,
|
||||||
@NonNull TransitionCallBack transitionCallBack) {
|
@NonNull TransitionCallBack transitionCallBack) {
|
||||||
|
// check if target mode is already activated
|
||||||
|
if (isActivated(displayId, targetMode)) {
|
||||||
|
transitionCallBack.onResult(displayId, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final PointF currentCenter = getCurrentMagnificationCenterLocked(displayId, targetMode);
|
final PointF currentCenter = getCurrentMagnificationCenterLocked(displayId, targetMode);
|
||||||
final DisableMagnificationCallback animationCallback =
|
final DisableMagnificationCallback animationCallback =
|
||||||
getDisableMagnificationEndRunnableLocked(displayId);
|
getDisableMagnificationEndRunnableLocked(displayId);
|
||||||
@@ -322,13 +328,16 @@ public class MagnificationController implements WindowMagnificationManager.Callb
|
|||||||
: config.getScale();
|
: config.getScale();
|
||||||
try {
|
try {
|
||||||
setTransitionState(displayId, targetMode);
|
setTransitionState(displayId, targetMode);
|
||||||
|
final MagnificationAnimationCallback magnificationAnimationCallback = animate
|
||||||
|
? success -> mAms.changeMagnificationMode(displayId, targetMode)
|
||||||
|
: null;
|
||||||
// Activate or deactivate target mode depending on config activated value
|
// Activate or deactivate target mode depending on config activated value
|
||||||
if (targetMode == MAGNIFICATION_MODE_WINDOW) {
|
if (targetMode == MAGNIFICATION_MODE_WINDOW) {
|
||||||
screenMagnificationController.reset(displayId, false);
|
screenMagnificationController.reset(displayId, false);
|
||||||
if (targetActivated) {
|
if (targetActivated) {
|
||||||
windowMagnificationMgr.enableWindowMagnification(displayId,
|
windowMagnificationMgr.enableWindowMagnification(displayId,
|
||||||
targetScale, magnificationCenter.x, magnificationCenter.y,
|
targetScale, magnificationCenter.x, magnificationCenter.y,
|
||||||
animate ? STUB_ANIMATION_CALLBACK : null, id);
|
magnificationAnimationCallback, id);
|
||||||
} else {
|
} else {
|
||||||
windowMagnificationMgr.disableWindowMagnification(displayId, false);
|
windowMagnificationMgr.disableWindowMagnification(displayId, false);
|
||||||
}
|
}
|
||||||
@@ -339,8 +348,8 @@ public class MagnificationController implements WindowMagnificationManager.Callb
|
|||||||
screenMagnificationController.register(displayId);
|
screenMagnificationController.register(displayId);
|
||||||
}
|
}
|
||||||
screenMagnificationController.setScaleAndCenter(displayId, targetScale,
|
screenMagnificationController.setScaleAndCenter(displayId, targetScale,
|
||||||
magnificationCenter.x, magnificationCenter.y, animate,
|
magnificationCenter.x, magnificationCenter.y,
|
||||||
id);
|
magnificationAnimationCallback, id);
|
||||||
} else {
|
} else {
|
||||||
if (screenMagnificationController.isRegistered(displayId)) {
|
if (screenMagnificationController.isRegistered(displayId)) {
|
||||||
screenMagnificationController.reset(displayId, false);
|
screenMagnificationController.reset(displayId, false);
|
||||||
@@ -348,6 +357,9 @@ public class MagnificationController implements WindowMagnificationManager.Callb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
if (!animate) {
|
||||||
|
mAms.changeMagnificationMode(displayId, targetMode);
|
||||||
|
}
|
||||||
// Reset transition state after enabling target mode.
|
// Reset transition state after enabling target mode.
|
||||||
setTransitionState(displayId, null);
|
setTransitionState(displayId, null);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import static org.mockito.ArgumentMatchers.nullable;
|
|||||||
import static org.mockito.Mockito.doAnswer;
|
import static org.mockito.Mockito.doAnswer;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.reset;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
@@ -435,9 +436,9 @@ public class MagnificationControllerTest {
|
|||||||
mMockConnection.invokeCallbacks();
|
mMockConnection.invokeCallbacks();
|
||||||
|
|
||||||
assertFalse(mWindowMagnificationManager.isWindowMagnifierEnabled(TEST_DISPLAY));
|
assertFalse(mWindowMagnificationManager.isWindowMagnifierEnabled(TEST_DISPLAY));
|
||||||
verify(mScreenMagnificationController).setScaleAndCenter(TEST_DISPLAY,
|
verify(mScreenMagnificationController).setScaleAndCenter(eq(TEST_DISPLAY),
|
||||||
DEFAULT_SCALE, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y,
|
eq(DEFAULT_SCALE), eq(MAGNIFIED_CENTER_X), eq(MAGNIFIED_CENTER_Y),
|
||||||
animate, TEST_SERVICE_ID);
|
any(MagnificationAnimationCallback.class), eq(TEST_SERVICE_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -503,6 +504,42 @@ public class MagnificationControllerTest {
|
|||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void configTransitionToFullScreenWithAnimation_windowMagnifying_notifyService()
|
||||||
|
throws RemoteException {
|
||||||
|
final boolean animate = true;
|
||||||
|
activateMagnifier(MODE_WINDOW, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y);
|
||||||
|
|
||||||
|
reset(mService);
|
||||||
|
MagnificationConfig config = (new MagnificationConfig.Builder())
|
||||||
|
.setMode(MODE_FULLSCREEN).build();
|
||||||
|
mMagnificationController.transitionMagnificationConfigMode(TEST_DISPLAY,
|
||||||
|
config, animate, TEST_SERVICE_ID);
|
||||||
|
verify(mScreenMagnificationController).setScaleAndCenter(eq(TEST_DISPLAY),
|
||||||
|
/* scale= */ anyFloat(), /* centerX= */ anyFloat(), /* centerY= */ anyFloat(),
|
||||||
|
mCallbackArgumentCaptor.capture(), /* id= */ anyInt());
|
||||||
|
mCallbackArgumentCaptor.getValue().onResult(true);
|
||||||
|
mMockConnection.invokeCallbacks();
|
||||||
|
|
||||||
|
verify(mService).changeMagnificationMode(TEST_DISPLAY, MODE_FULLSCREEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void configTransitionToFullScreenWithoutAnimation_windowMagnifying_notifyService()
|
||||||
|
throws RemoteException {
|
||||||
|
final boolean animate = false;
|
||||||
|
activateMagnifier(MODE_WINDOW, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y);
|
||||||
|
|
||||||
|
reset(mService);
|
||||||
|
MagnificationConfig config = (new MagnificationConfig.Builder())
|
||||||
|
.setMode(MODE_FULLSCREEN).build();
|
||||||
|
mMagnificationController.transitionMagnificationConfigMode(TEST_DISPLAY,
|
||||||
|
config, animate, TEST_SERVICE_ID);
|
||||||
|
mMockConnection.invokeCallbacks();
|
||||||
|
|
||||||
|
verify(mService).changeMagnificationMode(TEST_DISPLAY, MODE_FULLSCREEN);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void interruptDuringTransitionToWindow_disablingFullScreen_discardPreviousTransition()
|
public void interruptDuringTransitionToWindow_disablingFullScreen_discardPreviousTransition()
|
||||||
throws RemoteException {
|
throws RemoteException {
|
||||||
|
|||||||
Reference in New Issue
Block a user