summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-08-06 17:48:49 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-08-06 17:48:49 +0000
commitd40ac08a3fd3a47627b5248a47b000bb5cf780eb (patch)
tree75df995fa8565d509c0760c93fbebf792d9a26f5
parent2f0e2f4dc1f04aa1a3aff5b17c273c772cafdc93 (diff)
parent53ffbd5c68a4e339ddbc5bcc170b1a9dfb896864 (diff)
Merge "Revert "Add WindowMagnificationBridge for animation""
-rw-r--r--core/java/android/view/accessibility/IWindowMagnificationConnection.aidl8
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java35
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationAnimationController.java272
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java43
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java362
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java20
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java2
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java15
9 files changed, 44 insertions, 728 deletions
diff --git a/core/java/android/view/accessibility/IWindowMagnificationConnection.aidl b/core/java/android/view/accessibility/IWindowMagnificationConnection.aidl
index eb67191e5f54..e814ec649087 100644
--- a/core/java/android/view/accessibility/IWindowMagnificationConnection.aidl
+++ b/core/java/android/view/accessibility/IWindowMagnificationConnection.aidl
@@ -29,7 +29,7 @@ import android.view.accessibility.IWindowMagnificationConnectionCallback;
oneway interface IWindowMagnificationConnection {
/**
- * Enables window magnification on specified display with given center and scale and animation.
+ * Enables window magnification on specifed display with specified center and scale.
*
* @param displayId The logical display id.
* @param scale magnification scale.
@@ -41,7 +41,7 @@ oneway interface IWindowMagnificationConnection {
void enableWindowMagnification(int displayId, float scale, float centerX, float centerY);
/**
- * Sets the scale of the window magnifier on specified display.
+ * Sets the scale of the window magnifier on specifed display.
*
* @param displayId The logical display id.
* @param scale magnification scale.
@@ -49,14 +49,14 @@ oneway interface IWindowMagnificationConnection {
void setScale(int displayId, float scale);
/**
- * Disables window magnification on specified display with animation.
+ * Disables window magnification on specifed display.
*
* @param displayId The logical display id.
*/
void disableWindowMagnification(int displayId);
/**
- * Moves the window magnifier on the specified display. It has no effect while animating.
+ * Moves the window magnifier on the specifed display.
*
* @param offsetX the amount in pixels to offset the window magnifier in the X direction, in
* current screen pixels.
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
index d5f74a86fd94..816bcf8f274b 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
@@ -53,8 +53,8 @@ public class WindowMagnification extends SystemUI implements WindowMagnifierCall
ActivityInfo.CONFIG_DENSITY | ActivityInfo.CONFIG_ORIENTATION;
@VisibleForTesting
- protected WindowMagnificationAnimationController mWindowMagnificationAnimationController;
- private final ModeSwitchesController mModeSwitchesController;
+ protected WindowMagnificationController mWindowMagnificationController;
+ protected final ModeSwitchesController mModeSwitchesController;
private final Handler mHandler;
private final AccessibilityManager mAccessibilityManager;
private final CommandQueue mCommandQueue;
@@ -72,11 +72,6 @@ public class WindowMagnification extends SystemUI implements WindowMagnifierCall
Context.ACCESSIBILITY_SERVICE);
mCommandQueue = commandQueue;
mModeSwitchesController = modeSwitchesController;
- final WindowMagnificationController controller = new WindowMagnificationController(mContext,
- mHandler, new SfVsyncFrameCallbackProvider(), null,
- new SurfaceControl.Transaction(), this);
- mWindowMagnificationAnimationController = new WindowMagnificationAnimationController(
- mContext, controller);
}
@Override
@@ -86,7 +81,9 @@ public class WindowMagnification extends SystemUI implements WindowMagnifierCall
return;
}
mLastConfiguration.setTo(newConfig);
- mWindowMagnificationAnimationController.onConfigurationChanged(configDiff);
+ if (mWindowMagnificationController != null) {
+ mWindowMagnificationController.onConfigurationChanged(configDiff);
+ }
if (mModeSwitchesController != null) {
mModeSwitchesController.onConfigurationChanged(configDiff);
}
@@ -100,25 +97,39 @@ public class WindowMagnification extends SystemUI implements WindowMagnifierCall
@MainThread
void enableWindowMagnification(int displayId, float scale, float centerX, float centerY) {
//TODO: b/144080869 support multi-display.
- mWindowMagnificationAnimationController.enableWindowMagnification(scale, centerX, centerY);
+ if (mWindowMagnificationController == null) {
+ mWindowMagnificationController = new WindowMagnificationController(mContext,
+ mHandler,
+ new SfVsyncFrameCallbackProvider(),
+ null, new SurfaceControl.Transaction(),
+ this);
+ }
+ mWindowMagnificationController.enableWindowMagnification(scale, centerX, centerY);
}
@MainThread
void setScale(int displayId, float scale) {
//TODO: b/144080869 support multi-display.
- mWindowMagnificationAnimationController.setScale(scale);
+ if (mWindowMagnificationController != null) {
+ mWindowMagnificationController.setScale(scale);
+ }
}
@MainThread
void moveWindowMagnifier(int displayId, float offsetX, float offsetY) {
//TODO: b/144080869 support multi-display.
- mWindowMagnificationAnimationController.moveWindowMagnifier(offsetX, offsetY);
+ if (mWindowMagnificationController != null) {
+ mWindowMagnificationController.moveWindowMagnifier(offsetX, offsetY);
+ }
}
@MainThread
void disableWindowMagnification(int displayId) {
//TODO: b/144080869 support multi-display.
- mWindowMagnificationAnimationController.deleteWindowMagnification();
+ if (mWindowMagnificationController != null) {
+ mWindowMagnificationController.deleteWindowMagnification();
+ }
+ mWindowMagnificationController = null;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationAnimationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationAnimationController.java
deleted file mode 100644
index ae51623f3dc2..000000000000
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationAnimationController.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.accessibility;
-
-import android.animation.Animator;
-import android.animation.ValueAnimator;
-import android.annotation.IntDef;
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.Log;
-import android.view.animation.AccelerateInterpolator;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.R;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Provides same functionality of {@link WindowMagnificationController}. Some methods run with
- * the animation.
- */
-class WindowMagnificationAnimationController implements ValueAnimator.AnimatorUpdateListener,
- Animator.AnimatorListener {
-
- private static final String TAG = "WindowMagnificationBridge";
- private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({STATE_DISABLED, STATE_ENABLED, STATE_DISABLING, STATE_ENABLING})
- @interface MagnificationState {}
-
- //The window magnification is disabled.
- private static final int STATE_DISABLED = 0;
- //The window magnification is enabled.
- private static final int STATE_ENABLED = 1;
- //The window magnification is going to be disabled when the animation is end.
- private static final int STATE_DISABLING = 2;
- //The animation is running for enabling the window magnification.
- private static final int STATE_ENABLING = 3;
-
- private final WindowMagnificationController mController;
- private final ValueAnimator mValueAnimator;
- private final AnimationSpec mStartSpec = new AnimationSpec();
- private final AnimationSpec mEndSpec = new AnimationSpec();
- private final Context mContext;
-
- @MagnificationState
- private int mState = STATE_DISABLED;
-
- WindowMagnificationAnimationController(
- Context context, WindowMagnificationController controller) {
- this(context, controller, newValueAnimator(context.getResources()));
- }
-
- @VisibleForTesting
- WindowMagnificationAnimationController(Context context,
- WindowMagnificationController controller, ValueAnimator valueAnimator) {
- mContext = context;
- mController = controller;
- mValueAnimator = valueAnimator;
- mValueAnimator.addUpdateListener(this);
- mValueAnimator.addListener(this);
- }
-
- /**
- * Wraps {@link WindowMagnificationController#enableWindowMagnification(float, float, float)}
- * with transition animation. If the window magnification is not enabled, the scale will start
- * from 1.0 and the center won't be changed during the animation. If {@link #mState} is
- * {@code STATE_DISABLING}, the animation runs in reverse.
- *
- * @param scale the target scale, or {@link Float#NaN} to leave unchanged.
- * @param centerX the screen-relative X coordinate around which to center,
- * or {@link Float#NaN} to leave unchanged.
- * @param centerY the screen-relative Y coordinate around which to center,
- * or {@link Float#NaN} to leave unchanged.
- *
- * @see #onAnimationUpdate(ValueAnimator)
- */
- void enableWindowMagnification(float scale, float centerX, float centerY) {
- if (mState == STATE_ENABLING) {
- mValueAnimator.cancel();
- }
- setupEnableAnimationSpecs(scale, centerX, centerY);
-
- if (mEndSpec.equals(mStartSpec)) {
- setState(STATE_ENABLED);
- } else {
- if (mState == STATE_DISABLING) {
- mValueAnimator.reverse();
- } else {
- mValueAnimator.start();
- }
- setState(STATE_ENABLING);
- }
- }
-
- private void setupEnableAnimationSpecs(float scale, float centerX, float centerY) {
- final float currentScale = mController.getScale();
- final float currentCenterX = mController.getCenterX();
- final float currentCenterY = mController.getCenterY();
-
- if (mState == STATE_DISABLED) {
- //We don't need to offset the center during the animation.
- mStartSpec.set(/* scale*/ 1.0f, centerX, centerY);
- mEndSpec.set(Float.isNaN(scale) ? mContext.getResources().getInteger(
- R.integer.magnification_default_scale) : scale, centerX, centerY);
- } else {
- mStartSpec.set(currentScale, currentCenterX, currentCenterY);
- mEndSpec.set(Float.isNaN(scale) ? currentScale : scale,
- Float.isNaN(centerX) ? currentCenterX : centerX,
- Float.isNaN(centerY) ? currentCenterY : centerY);
- }
- if (DEBUG) {
- Log.d(TAG, "SetupEnableAnimationSpecs : mStartSpec = " + mStartSpec + ", endSpec = "
- + mEndSpec);
- }
- }
-
- /**
- * Wraps {@link WindowMagnificationController#setScale(float)}. If the animation is
- * running, it has no effect.
- */
- void setScale(float scale) {
- if (mValueAnimator.isRunning()) {
- return;
- }
- mController.setScale(scale);
- }
-
- /**
- * Wraps {@link WindowMagnificationController#deleteWindowMagnification()}} with transition
- * animation. If the window magnification is enabling, it runs the animation in reverse.
- */
- void deleteWindowMagnification() {
- if (mState == STATE_DISABLED || mState == STATE_DISABLING) {
- return;
- }
- mStartSpec.set(/* scale*/ 1.0f, Float.NaN, Float.NaN);
- mEndSpec.set(/* scale*/ mController.getScale(), Float.NaN, Float.NaN);
-
- mValueAnimator.reverse();
- setState(STATE_DISABLING);
- }
-
- /**
- * Wraps {@link WindowMagnificationController#moveWindowMagnifier(float, float)}. If the
- * animation is running, it has no effect.
- * @param offsetX the amount in pixels to offset the window magnifier in the X direction, in
- * current screen pixels.
- * @param offsetY the amount in pixels to offset the window magnifier in the Y direction, in
- * current screen pixels.
- */
- void moveWindowMagnifier(float offsetX, float offsetY) {
- if (mValueAnimator.isRunning()) {
- return;
- }
- mController.moveWindowMagnifier(offsetX, offsetY);
- }
-
- void onConfigurationChanged(int configDiff) {
- mController.onConfigurationChanged(configDiff);
- }
-
- private void setState(@MagnificationState int state) {
- if (DEBUG) {
- Log.d(TAG, "setState from " + mState + " to " + state);
- }
- mState = state;
- }
-
- @Override
- public void onAnimationStart(Animator animation) {
- }
-
- @Override
- public void onAnimationEnd(Animator animation) {
- if (mState == STATE_DISABLING) {
- mController.deleteWindowMagnification();
- setState(STATE_DISABLED);
- } else if (mState == STATE_ENABLING) {
- setState(STATE_ENABLED);
- } else {
- Log.w(TAG, "onAnimationEnd unexpected state:" + mState);
- }
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {
- }
-
- @Override
- public void onAnimationRepeat(Animator animation) {
- }
-
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- final float fract = animation.getAnimatedFraction();
- final float sentScale = mStartSpec.mScale + (mEndSpec.mScale - mStartSpec.mScale) * fract;
- final float centerX =
- mStartSpec.mCenterX + (mEndSpec.mCenterX - mStartSpec.mCenterX) * fract;
- final float centerY =
- mStartSpec.mCenterY + (mEndSpec.mCenterY - mStartSpec.mCenterY) * fract;
- mController.enableWindowMagnification(sentScale, centerX, centerY);
- }
-
- private static ValueAnimator newValueAnimator(Resources resources) {
- final ValueAnimator valueAnimator = new ValueAnimator();
- valueAnimator.setDuration(
- resources.getInteger(com.android.internal.R.integer.config_longAnimTime));
- valueAnimator.setInterpolator(new AccelerateInterpolator(2.5f));
- valueAnimator.setFloatValues(0.0f, 1.0f);
- return valueAnimator;
- }
-
- private static class AnimationSpec {
- private float mScale = Float.NaN;
- private float mCenterX = Float.NaN;
- private float mCenterY = Float.NaN;
-
- @Override
- public boolean equals(Object other) {
- if (this == other) {
- return true;
- }
-
- if (other == null || getClass() != other.getClass()) {
- return false;
- }
-
- final AnimationSpec s = (AnimationSpec) other;
- return mScale == s.mScale && mCenterX == s.mCenterX && mCenterY == s.mCenterY;
- }
-
- @Override
- public int hashCode() {
- int result = (mScale != +0.0f ? Float.floatToIntBits(mScale) : 0);
- result = 31 * result + (mCenterX != +0.0f ? Float.floatToIntBits(mCenterX) : 0);
- result = 31 * result + (mCenterY != +0.0f ? Float.floatToIntBits(mCenterY) : 0);
- return result;
- }
-
- void set(float scale, float centerX, float centerY) {
- mScale = scale;
- mCenterX = centerX;
- mCenterY = centerY;
- }
-
- @Override
- public String toString() {
- return "AnimationSpec{"
- + "mScale=" + mScale
- + ", mCenterX=" + mCenterX
- + ", mCenterY=" + mCenterY
- + '}';
- }
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
index 6d3e8ba68395..798b751c03ee 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
@@ -150,7 +150,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
mMirrorViewGeometryVsyncCallback =
l -> {
- if (isWindowVisible() && mMirrorSurface != null) {
+ if (mMirrorView != null && mMirrorSurface != null) {
calculateSourceBounds(mMagnificationFrame, mScale);
// The final destination for the magnification surface should be at 0,0
// since the ViewRootImpl's position will change
@@ -502,7 +502,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
/**
* Enables window magnification with specified parameters.
*
- * @param scale the target scale, or {@link Float#NaN} to leave unchanged
+ * @param scale the target scale
* @param centerX the screen-relative X coordinate around which to center,
* or {@link Float#NaN} to leave unchanged.
* @param centerY the screen-relative Y coordinate around which to center,
@@ -513,10 +513,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
: centerX - mMagnificationFrame.exactCenterX();
final float offsetY = Float.isNaN(centerY) ? 0
: centerY - mMagnificationFrame.exactCenterY();
- mScale = Float.isNaN(scale) ? mScale : scale;
+ mScale = scale;
setMagnificationFrameBoundary();
updateMagnificationFramePosition((int) offsetX, (int) offsetY);
- if (!isWindowVisible()) {
+ if (mMirrorView == null) {
createMirrorWindow();
showControls();
} else {
@@ -527,10 +527,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
/**
* Sets the scale of the magnified region if it's visible.
*
- * @param scale the target scale, or {@link Float#NaN} to leave unchanged
+ * @param scale the target scale
*/
void setScale(float scale) {
- if (!isWindowVisible() || mScale == scale) {
+ if (mMirrorView == null || mScale == scale) {
return;
}
enableWindowMagnification(scale, Float.NaN, Float.NaN);
@@ -552,35 +552,4 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
modifyWindowMagnification(mTransaction);
}
}
-
- /**
- * Gets the scale.
- * @return {@link Float#NaN} if the window is invisible.
- */
- float getScale() {
- return isWindowVisible() ? mScale : Float.NaN;
- }
-
- /**
- * Returns the screen-relative X coordinate of the center of the magnified bounds.
- *
- * @return the X coordinate. {@link Float#NaN} if the window is invisible.
- */
- float getCenterX() {
- return isWindowVisible() ? mMagnificationFrame.exactCenterX() : Float.NaN;
- }
-
- /**
- * Returns the screen-relative Y coordinate of the center of the magnified bounds.
- *
- * @return the Y coordinate. {@link Float#NaN} if the window is invisible.
- */
- float getCenterY() {
- return isWindowVisible() ? mMagnificationFrame.exactCenterY() : Float.NaN;
- }
-
- //The window is visible when it is existed.
- private boolean isWindowVisible() {
- return mMirrorView != null;
- }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java
index ac567e0ae67d..fbc8e9d8de79 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/IWindowMagnificationConnectionTest.java
@@ -25,7 +25,6 @@ import android.content.Context;
import android.os.RemoteException;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
import android.view.Display;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.IWindowMagnificationConnection;
@@ -48,7 +47,6 @@ import org.mockito.MockitoAnnotations;
*/
@SmallTest
@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
public class IWindowMagnificationConnectionTest extends SysuiTestCase {
private static final int TEST_DISPLAY = Display.DEFAULT_DISPLAY;
@@ -59,7 +57,7 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
@Mock
private IWindowMagnificationConnectionCallback mConnectionCallback;
@Mock
- private WindowMagnificationAnimationController mWindowMagnificationAnimationController;
+ private WindowMagnificationController mWindowMagnificationController;
@Mock
private ModeSwitchesController mModeSwitchesController;
private IWindowMagnificationConnection mIWindowMagnificationConnection;
@@ -76,8 +74,7 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
any(IWindowMagnificationConnection.class));
mWindowMagnification = new WindowMagnification(getContext(),
getContext().getMainThreadHandler(), mCommandQueue, mModeSwitchesController);
- mWindowMagnification.mWindowMagnificationAnimationController =
- mWindowMagnificationAnimationController;
+ mWindowMagnification.mWindowMagnificationController = mWindowMagnificationController;
mWindowMagnification.requestWindowMagnificationConnection(true);
assertNotNull(mIWindowMagnificationConnection);
mIWindowMagnificationConnection.setConnectionCallback(mConnectionCallback);
@@ -89,7 +86,7 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
Float.NaN);
waitForIdleSync();
- verify(mWindowMagnificationAnimationController).enableWindowMagnification(3.0f, Float.NaN,
+ verify(mWindowMagnificationController).enableWindowMagnification(3.0f, Float.NaN,
Float.NaN);
}
@@ -102,7 +99,7 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
mIWindowMagnificationConnection.disableWindowMagnification(TEST_DISPLAY);
waitForIdleSync();
- verify(mWindowMagnificationAnimationController).deleteWindowMagnification();
+ verify(mWindowMagnificationController).deleteWindowMagnification();
}
@Test
@@ -110,7 +107,7 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
mIWindowMagnificationConnection.setScale(TEST_DISPLAY, 3.0f);
waitForIdleSync();
- verify(mWindowMagnificationAnimationController).setScale(3.0f);
+ verify(mWindowMagnificationController).setScale(3.0f);
}
@Test
@@ -118,7 +115,7 @@ public class IWindowMagnificationConnectionTest extends SysuiTestCase {
mIWindowMagnificationConnection.moveWindowMagnifier(TEST_DISPLAY, 100f, 200f);
waitForIdleSync();
- verify(mWindowMagnificationAnimationController).moveWindowMagnifier(100f, 200f);
+ verify(mWindowMagnificationController).moveWindowMagnifier(100f, 200f);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java
deleted file mode 100644
index add0843c2994..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.accessibility;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.anyFloat;
-import static org.mockito.Mockito.atLeast;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-import android.animation.ValueAnimator;
-import android.app.Instrumentation;
-import android.content.Context;
-import android.os.Handler;
-import android.os.SystemClock;
-import android.testing.AndroidTestingRunner;
-import android.view.SurfaceControl;
-import android.view.animation.AccelerateInterpolator;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.MediumTest;
-
-import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
-import com.android.systemui.SysuiTestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-import java.util.concurrent.atomic.AtomicReference;
-
-
-@MediumTest
-@RunWith(AndroidTestingRunner.class)
-public class WindowMagnificationAnimationControllerTest extends SysuiTestCase {
-
- private static final float DEFAULT_SCALE = 3.0f;
- private static final float DEFAULT_CENTER_X = 400.0f;
- private static final float DEFAULT_CENTER_Y = 500.0f;
- private static final long ANIMATION_DURATION_MS = 100;
-
- private AtomicReference<Float> mCurrentScale = new AtomicReference<>((float) 0);
- private AtomicReference<Float> mCurrentCenterX = new AtomicReference<>((float) 0);
- private AtomicReference<Float> mCurrentCenterY = new AtomicReference<>((float) 0);
- private ArgumentCaptor<Float> mScaleCaptor = ArgumentCaptor.forClass(Float.class);
- private ArgumentCaptor<Float> mCenterXCaptor = ArgumentCaptor.forClass(Float.class);
- private ArgumentCaptor<Float> mCenterYCaptor = ArgumentCaptor.forClass(Float.class);
-
- @Mock
- Handler mHandler;
- @Mock
- SfVsyncFrameCallbackProvider mSfVsyncFrameProvider;
- @Mock
- WindowMagnifierCallback mWindowMagnifierCallback;
-
- private SpyWindowMagnificationController mController;
- private WindowMagnificationController mSpyController;
- private WindowMagnificationAnimationController mWindowMagnificationAnimationController;
- private Instrumentation mInstrumentation;
- private long mWaitingAnimationPeriod;
- private long mWaitIntermediateAnimationPeriod;
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
- mInstrumentation = InstrumentationRegistry.getInstrumentation();
- mWaitingAnimationPeriod = ANIMATION_DURATION_MS + 50;
- mWaitIntermediateAnimationPeriod = ANIMATION_DURATION_MS / 2;
- mController = new SpyWindowMagnificationController(mContext, mHandler,
- mSfVsyncFrameProvider, null, new SurfaceControl.Transaction(),
- mWindowMagnifierCallback);
- mSpyController = mController.getSpyController();
- mWindowMagnificationAnimationController = new WindowMagnificationAnimationController(
- mContext, mController, newValueAnimator());
- }
-
- @Test
- public void enableWindowMagnification_disabled_expectedStartAndEndValues() {
- enableWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- verify(mSpyController, atLeast(2)).enableWindowMagnification(
- mScaleCaptor.capture(),
- mCenterXCaptor.capture(), mCenterYCaptor.capture());
- verifyStartValue(mScaleCaptor, 1.0f);
- verifyStartValue(mCenterXCaptor, DEFAULT_CENTER_X);
- verifyStartValue(mCenterYCaptor, DEFAULT_CENTER_Y);
- verifyFinalSpec(DEFAULT_SCALE, DEFAULT_CENTER_X, DEFAULT_CENTER_Y);
- }
-
- @Test
- public void enableWindowMagnification_enabling_expectedStartAndEndValues() {
- enableWindowMagnificationAndWaitAnimating(mWaitIntermediateAnimationPeriod);
- final float targetScale = DEFAULT_SCALE + 1.0f;
- final float targetCenterX = DEFAULT_CENTER_X + 100;
- final float targetCenterY = DEFAULT_CENTER_Y + 100;
-
- mInstrumentation.runOnMainSync(() -> {
- Mockito.reset(mSpyController);
- mWindowMagnificationAnimationController.enableWindowMagnification(targetScale,
- targetCenterX, targetCenterY);
- mCurrentScale.set(mController.getScale());
- mCurrentCenterX.set(mController.getCenterX());
- mCurrentCenterY.set(mController.getCenterY());
- });
-
- SystemClock.sleep(mWaitingAnimationPeriod);
-
- verify(mSpyController, atLeast(2)).enableWindowMagnification(mScaleCaptor.capture(),
- mCenterXCaptor.capture(), mCenterYCaptor.capture());
- verifyStartValue(mScaleCaptor, mCurrentScale.get());
- verifyStartValue(mCenterXCaptor, mCurrentCenterX.get());
- verifyStartValue(mCenterYCaptor, mCurrentCenterY.get());
- verifyFinalSpec(targetScale, targetCenterX, targetCenterY);
- }
-
- @Test
- public void enableWindowMagnification_disabling_expectedStartAndEndValues() {
- enableWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
- deleteWindowMagnificationAndWaitAnimating(mWaitIntermediateAnimationPeriod);
- final float targetScale = DEFAULT_SCALE + 1.0f;
- final float targetCenterX = DEFAULT_CENTER_X + 100;
- final float targetCenterY = DEFAULT_CENTER_Y + 100;
-
- mInstrumentation.runOnMainSync(
- () -> {
- Mockito.reset(mSpyController);
- mWindowMagnificationAnimationController.enableWindowMagnification(targetScale,
- targetCenterX, targetCenterY);
- mCurrentScale.set(mController.getScale());
- mCurrentCenterX.set(mController.getCenterX());
- mCurrentCenterY.set(mController.getCenterY());
- });
- SystemClock.sleep(mWaitingAnimationPeriod);
-
- verify(mSpyController, atLeast(2)).enableWindowMagnification(
- mScaleCaptor.capture(),
- mCenterXCaptor.capture(), mCenterYCaptor.capture());
- //Animating in reverse, so we only check if the start values are greater than current.
- assertTrue(mScaleCaptor.getAllValues().get(0) > mCurrentScale.get());
- assertEquals(targetScale, mScaleCaptor.getValue(), 0f);
- assertTrue(mCenterXCaptor.getAllValues().get(0) > mCurrentCenterX.get());
- assertEquals(targetCenterX, mCenterXCaptor.getValue(), 0f);
- assertTrue(mCenterYCaptor.getAllValues().get(0) > mCurrentCenterY.get());
- assertEquals(targetCenterY, mCenterYCaptor.getValue(), 0f);
- verifyFinalSpec(targetScale, targetCenterX, targetCenterY);
- }
-
- @Test
- public void enableWindowMagnificationWithSameScale_doNothing() {
- enableWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- enableWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- verify(mSpyController, never()).enableWindowMagnification(anyFloat(), anyFloat(),
- anyFloat());
- }
-
- @Test
- public void setScale_enabled_expectedScale() {
- enableWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- mInstrumentation.runOnMainSync(
- () -> mWindowMagnificationAnimationController.setScale(DEFAULT_SCALE + 1));
-
- verify(mSpyController).setScale(DEFAULT_SCALE + 1);
- verifyFinalSpec(DEFAULT_SCALE + 1, DEFAULT_CENTER_X, DEFAULT_CENTER_Y);
- }
-
- @Test
- public void deleteWindowMagnification_enabled_expectedStartAndEndValues() {
- enableWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- deleteWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- verify(mSpyController, atLeast(2)).enableWindowMagnification(mScaleCaptor.capture(),
- mCenterXCaptor.capture(), mCenterYCaptor.capture());
- verify(mSpyController).deleteWindowMagnification();
- verifyStartValue(mScaleCaptor, DEFAULT_SCALE);
- verifyStartValue(mCenterXCaptor, Float.NaN);
- verifyStartValue(mCenterYCaptor, Float.NaN);
- verifyFinalSpec(Float.NaN, Float.NaN, Float.NaN);
- }
-
- @Test
- public void deleteWindowMagnification_disabled_doNothing() {
- deleteWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- Mockito.verifyNoMoreInteractions(mSpyController);
- }
-
- @Test
- public void deleteWindowMagnification_enabling_checkStartAndEndValues() {
- enableWindowMagnificationAndWaitAnimating(mWaitIntermediateAnimationPeriod);
-
- //It just reverse the animation, so we don't need to wait the whole duration.
- mInstrumentation.runOnMainSync(
- () -> {
- Mockito.reset(mSpyController);
- mWindowMagnificationAnimationController.deleteWindowMagnification();
- mCurrentScale.set(mController.getScale());
- mCurrentCenterX.set(mController.getCenterX());
- mCurrentCenterY.set(mController.getCenterY());
- });
- SystemClock.sleep(mWaitingAnimationPeriod);
-
- verify(mSpyController, atLeast(2)).enableWindowMagnification(mScaleCaptor.capture(),
- mCenterXCaptor.capture(), mCenterYCaptor.capture());
- verify(mSpyController).deleteWindowMagnification();
-
- //The animation is in verse, so we only check the start values should no be greater than
- // the current one.
- assertTrue(mScaleCaptor.getAllValues().get(0) <= mCurrentScale.get());
- assertEquals(1.0f, mScaleCaptor.getValue(), 0f);
- verifyStartValue(mCenterXCaptor, Float.NaN);
- verifyStartValue(mCenterYCaptor, Float.NaN);
- verifyFinalSpec(Float.NaN, Float.NaN, Float.NaN);
- }
-
- @Test
- public void deleteWindowMagnification_disabling_checkStartAndValues() {
- enableWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
- deleteWindowMagnificationAndWaitAnimating(mWaitIntermediateAnimationPeriod);
-
- deleteWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- verify(mSpyController, atLeast(2)).enableWindowMagnification(mScaleCaptor.capture(),
- mCenterXCaptor.capture(), mCenterYCaptor.capture());
- verify(mSpyController).deleteWindowMagnification();
- assertEquals(1.0f, mScaleCaptor.getValue(), 0f);
- verifyFinalSpec(Float.NaN, Float.NaN, Float.NaN);
- }
-
- @Test
- public void moveWindowMagnifier_enabled() {
- enableWindowMagnificationAndWaitAnimating(mWaitingAnimationPeriod);
-
- mInstrumentation.runOnMainSync(
- () -> mWindowMagnificationAnimationController.moveWindowMagnifier(100f, 200f));
-
- verify(mSpyController).moveWindowMagnifier(100f, 200f);
- verifyFinalSpec(DEFAULT_SCALE, DEFAULT_CENTER_X + 100f, DEFAULT_CENTER_Y + 100f);
- }
-
- @Test
- public void onConfigurationChanged_passThrough() {
- mWindowMagnificationAnimationController.onConfigurationChanged(100);
-
- verify(mSpyController).onConfigurationChanged(100);
- }
- private void verifyFinalSpec(float expectedScale, float expectedCenterX,
- float expectedCenterY) {
- assertEquals(expectedScale, mController.getScale(), 0f);
- assertEquals(expectedCenterX, mController.getCenterX(), 0f);
- assertEquals(expectedCenterY, mController.getCenterY(), 0f);
- }
-
- private void enableWindowMagnificationAndWaitAnimating(long duration) {
- mInstrumentation.runOnMainSync(
- () -> {
- Mockito.reset(mSpyController);
- mWindowMagnificationAnimationController.enableWindowMagnification(DEFAULT_SCALE,
- DEFAULT_CENTER_X, DEFAULT_CENTER_Y);
- });
- SystemClock.sleep(duration);
- }
-
- private void deleteWindowMagnificationAndWaitAnimating(long duration) {
- mInstrumentation.runOnMainSync(
- () -> {
- resetMockObjects();
- mWindowMagnificationAnimationController.deleteWindowMagnification();
- });
- SystemClock.sleep(duration);
- }
-
- private void verifyStartValue(ArgumentCaptor<Float> captor, float startValue) {
- assertEquals(startValue, captor.getAllValues().get(0), 0f);
- }
-
- private void resetMockObjects() {
- Mockito.reset(mSpyController);
- }
-
- /**
- * It observes the methods in {@link WindowMagnificationController} since we couldn't spy it
- * directly.
- */
- private static class SpyWindowMagnificationController extends WindowMagnificationController {
- private WindowMagnificationController mSpyController;
-
- SpyWindowMagnificationController(Context context, Handler handler,
- SfVsyncFrameCallbackProvider sfVsyncFrameProvider,
- MirrorWindowControl mirrorWindowControl, SurfaceControl.Transaction transaction,
- WindowMagnifierCallback callback) {
- super(context, handler, sfVsyncFrameProvider, mirrorWindowControl, transaction,
- callback);
- mSpyController = Mockito.mock(WindowMagnificationController.class);
- }
-
- WindowMagnificationController getSpyController() {
- return mSpyController;
- }
-
- @Override
- void enableWindowMagnification(float scale, float centerX, float centerY) {
- super.enableWindowMagnification(scale, centerX, centerY);
- mSpyController.enableWindowMagnification(scale, centerX, centerY);
- }
-
- @Override
- void deleteWindowMagnification() {
- super.deleteWindowMagnification();
- mSpyController.deleteWindowMagnification();
- }
-
- @Override
- void moveWindowMagnifier(float offsetX, float offsetY) {
- super.moveWindowMagnifier(offsetX, offsetX);
- mSpyController.moveWindowMagnifier(offsetX, offsetY);
- }
-
- @Override
- void setScale(float scale) {
- super.setScale(scale);
- mSpyController.setScale(scale);
- }
-
- @Override
- void onConfigurationChanged(int configDiff) {
- super.onConfigurationChanged(configDiff);
- mSpyController.onConfigurationChanged(configDiff);
- }
-
- }
-
- private static ValueAnimator newValueAnimator() {
- final ValueAnimator valueAnimator = new ValueAnimator();
- valueAnimator.setDuration(ANIMATION_DURATION_MS);
- valueAnimator.setInterpolator(new AccelerateInterpolator(2.5f));
- valueAnimator.setFloatValues(0.0f, 1.0f);
- return valueAnimator;
- }
-}
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 1515cec4c9e2..2007fbb8fc6c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
@@ -18,7 +18,6 @@ package com.android.systemui.accessibility;
import static android.view.Choreographer.FrameCallback;
-import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.atLeastOnce;
@@ -84,8 +83,9 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
@After
public void tearDown() {
- mInstrumentation.runOnMainSync(
- () -> mWindowMagnificationController.deleteWindowMagnification());
+ mInstrumentation.runOnMainSync(() -> {
+ mWindowMagnificationController.deleteWindowMagnification();
+ });
}
@Test
@@ -121,18 +121,4 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
verify(mSfVsyncFrameProvider, atLeastOnce()).postFrameCallback(any());
}
-
- @Test
- public void setScale_expectedValue() {
- mInstrumentation.runOnMainSync(() -> {
- mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN,
- Float.NaN);
- });
-
- mInstrumentation.runOnMainSync(() -> {
- mWindowMagnificationController.setScale(3.0f);
- });
-
- assertEquals(3.0f, mWindowMagnificationController.getScale(), 0);
- }
}
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 936558bca2d2..41360130ac65 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java
@@ -26,7 +26,6 @@ import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.RemoteException;
import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
import android.view.Display;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.IWindowMagnificationConnection;
@@ -46,7 +45,6 @@ import org.mockito.MockitoAnnotations;
@SmallTest
@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
public class WindowMagnificationTest extends SysuiTestCase {
@Mock
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java
index 3ee5b28ee338..bd25f2bea881 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/WindowMagnificationGestureHandler.java
@@ -25,12 +25,10 @@ import static java.util.Arrays.copyOfRange;
import android.annotation.Nullable;
import android.content.Context;
-import android.graphics.Point;
import android.provider.Settings;
import android.util.Log;
import android.util.MathUtils;
import android.util.Slog;
-import android.view.Display;
import android.view.MotionEvent;
import com.android.internal.annotations.VisibleForTesting;
@@ -92,8 +90,6 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
private MotionEventDispatcherDelegate mMotionEventDispatcherDelegate;
private final int mDisplayId;
- private final Context mContext;
- private final Point mTempPoint = new Point();
private final Queue<MotionEvent> mDebugOutputEventHistory;
@@ -111,7 +107,7 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
Slog.i(LOG_TAG,
"WindowMagnificationGestureHandler() , displayId = " + displayId + ")");
}
- mContext = context;
+
mWindowMagnificationMgr = windowMagnificationMgr;
mDetectShortcutTrigger = detectShortcutTrigger;
mDisplayId = displayId;
@@ -188,14 +184,7 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl
if (!mDetectShortcutTrigger) {
return;
}
- final Point screenSize = mTempPoint;
- getScreenSize(mTempPoint);
- toggleMagnification(screenSize.x / 2.0f, screenSize.y / 2.0f);
- }
-
- private void getScreenSize(Point outSize) {
- final Display display = mContext.getDisplay();
- display.getRealSize(outSize);
+ toggleMagnification(Float.NaN, Float.NaN);
}
@Override