Loading packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java +23 −1 Original line number Diff line number Diff line Loading @@ -22,8 +22,10 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M import android.annotation.NonNull; import android.annotation.UiContext; import android.content.ComponentCallbacks; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Insets; import android.graphics.PixelFormat; import android.graphics.Rect; Loading Loading @@ -54,7 +56,8 @@ import java.util.Collections; * The button icon is movable by dragging and it would not overlap navigation bar window. * And the button UI would automatically be dismissed after displaying for a period of time. */ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureListener { class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureListener, ComponentCallbacks { @VisibleForTesting static final long FADING_ANIMATION_DURATION_MS = 300; Loading @@ -75,6 +78,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL private int mMagnificationMode = ACCESSIBILITY_MAGNIFICATION_MODE_NONE; private final LayoutParams mParams; private final SwitchListener mSwitchListener; private final Configuration mConfiguration; @VisibleForTesting final Rect mDraggableWindowBounds = new Rect(); private boolean mIsVisible = false; Loading @@ -101,6 +105,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL MagnificationModeSwitch(Context context, @NonNull ImageView imageView, SfVsyncFrameCallbackProvider sfVsyncFrameProvider, SwitchListener switchListener) { mContext = context; mConfiguration = new Configuration(context.getResources().getConfiguration()); mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class); mWindowManager = mContext.getSystemService(WindowManager.class); mSfVsyncFrameProvider = sfVsyncFrameProvider; Loading Loading @@ -270,6 +275,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL mIsFadeOutAnimating = false; mImageView.setAlpha(0f); mWindowManager.removeView(mImageView); mContext.unregisterComponentCallbacks(this); mIsVisible = false; } Loading @@ -291,6 +297,8 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL mImageView.setImageResource(getIconResId(mode)); } if (!mIsVisible) { onConfigurationChanged(mContext.getResources().getConfiguration()); mContext.registerComponentCallbacks(this); if (resetPosition) { mDraggableWindowBounds.set(getDraggableWindowBounds()); mParams.x = mDraggableWindowBounds.right; Loading Loading @@ -321,7 +329,21 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL } } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { final int configDiff = newConfig.diff(mConfiguration); mConfiguration.setTo(newConfig); onConfigurationChanged(configDiff); } @Override public void onLowMemory() { } void onConfigurationChanged(int configDiff) { if (configDiff == 0) { return; } if ((configDiff & (ActivityInfo.CONFIG_ORIENTATION | ActivityInfo.CONFIG_SCREEN_SIZE)) != 0) { final Rect previousDraggableBounds = new Rect(mDraggableWindowBounds); Loading packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java +0 −15 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_M import android.annotation.MainThread; import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.graphics.Rect; import android.hardware.display.DisplayManager; import android.os.Handler; Loading Loading @@ -65,7 +64,6 @@ public class WindowMagnification extends CoreStartable implements WindowMagnifie private final OverviewProxyService mOverviewProxyService; private WindowMagnificationConnectionImpl mWindowMagnificationConnectionImpl; private Configuration mLastConfiguration; private SysUiState mSysUiState; private static class ControllerSupplier extends Loading Loading @@ -107,7 +105,6 @@ public class WindowMagnification extends CoreStartable implements WindowMagnifie SysUiState sysUiState, OverviewProxyService overviewProxyService) { super(context); mHandler = mainHandler; mLastConfiguration = new Configuration(context.getResources().getConfiguration()); mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class); mCommandQueue = commandQueue; mModeSwitchesController = modeSwitchesController; Loading @@ -117,18 +114,6 @@ public class WindowMagnification extends CoreStartable implements WindowMagnifie mHandler, this, context.getSystemService(DisplayManager.class), sysUiState); } @Override public void onConfigurationChanged(Configuration newConfig) { final int configDiff = newConfig.diff(mLastConfiguration); mLastConfiguration.setTo(newConfig); mMagnificationControllerSupplier.forEach( magnificationController -> magnificationController.onConfigurationChanged( configDiff)); if (mModeSwitchesController != null) { mModeSwitchesController.onConfigurationChanged(configDiff); } } @Override public void start() { mCommandQueue.addCallback(this); Loading packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +25 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.animation.PropertyValuesHolder; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UiContext; import android.content.ComponentCallbacks; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; Loading Loading @@ -76,7 +77,8 @@ import java.util.Locale; * Class to handle adding and removing a window magnification. */ class WindowMagnificationController implements View.OnTouchListener, SurfaceHolder.Callback, MirrorWindowControl.MirrorWindowDelegate, MagnificationGestureDetector.OnGestureListener { MirrorWindowControl.MirrorWindowDelegate, MagnificationGestureDetector.OnGestureListener, ComponentCallbacks { private static final String TAG = "WindowMagnificationController"; @SuppressWarnings("isloggabletaglength") Loading Loading @@ -143,6 +145,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold private View mTopDrag; private View mRightDrag; private View mBottomDrag; private final Configuration mConfiguration; @NonNull private final WindowMagnifierCallback mWindowMagnifierCallback; Loading Loading @@ -191,6 +194,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold mSfVsyncFrameProvider = sfVsyncFrameProvider; mWindowMagnifierCallback = callback; mSysUiState = sysUiState; mConfiguration = new Configuration(context.getResources().getConfiguration()); final Display display = mContext.getDisplay(); mDisplayId = mContext.getDisplayId(); Loading Loading @@ -339,6 +343,18 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } mMirrorViewBounds.setEmpty(); updateSystemUIStateIfNeeded(); mContext.unregisterComponentCallbacks(this); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { final int configDiff = newConfig.diff(mConfiguration); mConfiguration.setTo(newConfig); onConfigurationChanged(configDiff); } @Override public void onLowMemory() { } /** Loading @@ -351,6 +367,9 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold Log.d(TAG, "onConfigurationChanged = " + Configuration.configurationDiffToString( configDiff)); } if (configDiff == 0) { return; } if ((configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0) { onRotate(); } Loading Loading @@ -390,7 +409,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold if (currentWindowBounds.equals(oldWindowBounds)) { if (DEBUG) { Log.d(TAG, "updateMagnificationFrame -- window bounds is not changed"); Log.d(TAG, "handleScreenSizeChanged -- window bounds is not changed"); } return false; } Loading Loading @@ -851,6 +870,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold deleteWindowMagnification(); return; } if (!isWindowVisible()) { onConfigurationChanged(mResources.getConfiguration()); mContext.registerComponentCallbacks(this); } mMagnificationFrameOffsetX = Float.isNaN(magnificationFrameOffsetRatioX) ? mMagnificationFrameOffsetX Loading packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +11 −1 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mContext = Mockito.spy(getContext()); final WindowManager wm = mContext.getSystemService(WindowManager.class); mSwitchListener = new SwitchListenerStub(); mWindowManager = spy(new TestableWindowManager(wm)); Loading Loading @@ -139,16 +140,18 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { public void tearDown() { mFadeOutAnimation = null; mMotionEventHelper.recycleEvents(); mMagnificationModeSwitch.removeButton(); } @Test public void removeButton_buttonIsShowing_removeView() { public void removeButton_buttonIsShowing_removeViewAndUnregisterComponentCallbacks() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); mMagnificationModeSwitch.removeButton(); verify(mWindowManager).removeView(mSpyImageView); verify(mViewPropertyAnimator).cancel(); verify(mContext).unregisterComponentCallbacks(mMagnificationModeSwitch); } @Test Loading Loading @@ -463,6 +466,13 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { layoutPrams.accessibilityTitle); } @Test public void showButton_registerComponentCallbacks() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); verify(mContext).registerComponentCallbacks(mMagnificationModeSwitch); } @Test public void onLocaleChanged_buttonIsShowing_updateA11yWindowTitle() { final String newA11yWindowTitle = "new a11y window title"; Loading packages/SystemUI/tests/src/com/android/systemui/accessibility/ModeSwitchesControllerTest.java +0 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,6 @@ public class ModeSwitchesControllerTest extends SysuiTestCase { verify(mModeSwitch).onConfigurationChanged(ActivityInfo.CONFIG_DENSITY); } @Test public void testOnSwitchClick_showWindowModeButton_invokeListener() { mModeSwitchesController.showButton(Display.DEFAULT_DISPLAY, Loading Loading
packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java +23 −1 Original line number Diff line number Diff line Loading @@ -22,8 +22,10 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M import android.annotation.NonNull; import android.annotation.UiContext; import android.content.ComponentCallbacks; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Insets; import android.graphics.PixelFormat; import android.graphics.Rect; Loading Loading @@ -54,7 +56,8 @@ import java.util.Collections; * The button icon is movable by dragging and it would not overlap navigation bar window. * And the button UI would automatically be dismissed after displaying for a period of time. */ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureListener { class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureListener, ComponentCallbacks { @VisibleForTesting static final long FADING_ANIMATION_DURATION_MS = 300; Loading @@ -75,6 +78,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL private int mMagnificationMode = ACCESSIBILITY_MAGNIFICATION_MODE_NONE; private final LayoutParams mParams; private final SwitchListener mSwitchListener; private final Configuration mConfiguration; @VisibleForTesting final Rect mDraggableWindowBounds = new Rect(); private boolean mIsVisible = false; Loading @@ -101,6 +105,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL MagnificationModeSwitch(Context context, @NonNull ImageView imageView, SfVsyncFrameCallbackProvider sfVsyncFrameProvider, SwitchListener switchListener) { mContext = context; mConfiguration = new Configuration(context.getResources().getConfiguration()); mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class); mWindowManager = mContext.getSystemService(WindowManager.class); mSfVsyncFrameProvider = sfVsyncFrameProvider; Loading Loading @@ -270,6 +275,7 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL mIsFadeOutAnimating = false; mImageView.setAlpha(0f); mWindowManager.removeView(mImageView); mContext.unregisterComponentCallbacks(this); mIsVisible = false; } Loading @@ -291,6 +297,8 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL mImageView.setImageResource(getIconResId(mode)); } if (!mIsVisible) { onConfigurationChanged(mContext.getResources().getConfiguration()); mContext.registerComponentCallbacks(this); if (resetPosition) { mDraggableWindowBounds.set(getDraggableWindowBounds()); mParams.x = mDraggableWindowBounds.right; Loading Loading @@ -321,7 +329,21 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL } } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { final int configDiff = newConfig.diff(mConfiguration); mConfiguration.setTo(newConfig); onConfigurationChanged(configDiff); } @Override public void onLowMemory() { } void onConfigurationChanged(int configDiff) { if (configDiff == 0) { return; } if ((configDiff & (ActivityInfo.CONFIG_ORIENTATION | ActivityInfo.CONFIG_SCREEN_SIZE)) != 0) { final Rect previousDraggableBounds = new Rect(mDraggableWindowBounds); Loading
packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java +0 −15 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_M import android.annotation.MainThread; import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.graphics.Rect; import android.hardware.display.DisplayManager; import android.os.Handler; Loading Loading @@ -65,7 +64,6 @@ public class WindowMagnification extends CoreStartable implements WindowMagnifie private final OverviewProxyService mOverviewProxyService; private WindowMagnificationConnectionImpl mWindowMagnificationConnectionImpl; private Configuration mLastConfiguration; private SysUiState mSysUiState; private static class ControllerSupplier extends Loading Loading @@ -107,7 +105,6 @@ public class WindowMagnification extends CoreStartable implements WindowMagnifie SysUiState sysUiState, OverviewProxyService overviewProxyService) { super(context); mHandler = mainHandler; mLastConfiguration = new Configuration(context.getResources().getConfiguration()); mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class); mCommandQueue = commandQueue; mModeSwitchesController = modeSwitchesController; Loading @@ -117,18 +114,6 @@ public class WindowMagnification extends CoreStartable implements WindowMagnifie mHandler, this, context.getSystemService(DisplayManager.class), sysUiState); } @Override public void onConfigurationChanged(Configuration newConfig) { final int configDiff = newConfig.diff(mLastConfiguration); mLastConfiguration.setTo(newConfig); mMagnificationControllerSupplier.forEach( magnificationController -> magnificationController.onConfigurationChanged( configDiff)); if (mModeSwitchesController != null) { mModeSwitchesController.onConfigurationChanged(configDiff); } } @Override public void start() { mCommandQueue.addCallback(this); Loading
packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +25 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.animation.PropertyValuesHolder; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UiContext; import android.content.ComponentCallbacks; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; Loading Loading @@ -76,7 +77,8 @@ import java.util.Locale; * Class to handle adding and removing a window magnification. */ class WindowMagnificationController implements View.OnTouchListener, SurfaceHolder.Callback, MirrorWindowControl.MirrorWindowDelegate, MagnificationGestureDetector.OnGestureListener { MirrorWindowControl.MirrorWindowDelegate, MagnificationGestureDetector.OnGestureListener, ComponentCallbacks { private static final String TAG = "WindowMagnificationController"; @SuppressWarnings("isloggabletaglength") Loading Loading @@ -143,6 +145,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold private View mTopDrag; private View mRightDrag; private View mBottomDrag; private final Configuration mConfiguration; @NonNull private final WindowMagnifierCallback mWindowMagnifierCallback; Loading Loading @@ -191,6 +194,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold mSfVsyncFrameProvider = sfVsyncFrameProvider; mWindowMagnifierCallback = callback; mSysUiState = sysUiState; mConfiguration = new Configuration(context.getResources().getConfiguration()); final Display display = mContext.getDisplay(); mDisplayId = mContext.getDisplayId(); Loading Loading @@ -339,6 +343,18 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } mMirrorViewBounds.setEmpty(); updateSystemUIStateIfNeeded(); mContext.unregisterComponentCallbacks(this); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { final int configDiff = newConfig.diff(mConfiguration); mConfiguration.setTo(newConfig); onConfigurationChanged(configDiff); } @Override public void onLowMemory() { } /** Loading @@ -351,6 +367,9 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold Log.d(TAG, "onConfigurationChanged = " + Configuration.configurationDiffToString( configDiff)); } if (configDiff == 0) { return; } if ((configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0) { onRotate(); } Loading Loading @@ -390,7 +409,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold if (currentWindowBounds.equals(oldWindowBounds)) { if (DEBUG) { Log.d(TAG, "updateMagnificationFrame -- window bounds is not changed"); Log.d(TAG, "handleScreenSizeChanged -- window bounds is not changed"); } return false; } Loading Loading @@ -851,6 +870,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold deleteWindowMagnification(); return; } if (!isWindowVisible()) { onConfigurationChanged(mResources.getConfiguration()); mContext.registerComponentCallbacks(this); } mMagnificationFrameOffsetX = Float.isNaN(magnificationFrameOffsetRatioX) ? mMagnificationFrameOffsetX Loading
packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +11 −1 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mContext = Mockito.spy(getContext()); final WindowManager wm = mContext.getSystemService(WindowManager.class); mSwitchListener = new SwitchListenerStub(); mWindowManager = spy(new TestableWindowManager(wm)); Loading Loading @@ -139,16 +140,18 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { public void tearDown() { mFadeOutAnimation = null; mMotionEventHelper.recycleEvents(); mMagnificationModeSwitch.removeButton(); } @Test public void removeButton_buttonIsShowing_removeView() { public void removeButton_buttonIsShowing_removeViewAndUnregisterComponentCallbacks() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); mMagnificationModeSwitch.removeButton(); verify(mWindowManager).removeView(mSpyImageView); verify(mViewPropertyAnimator).cancel(); verify(mContext).unregisterComponentCallbacks(mMagnificationModeSwitch); } @Test Loading Loading @@ -463,6 +466,13 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { layoutPrams.accessibilityTitle); } @Test public void showButton_registerComponentCallbacks() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); verify(mContext).registerComponentCallbacks(mMagnificationModeSwitch); } @Test public void onLocaleChanged_buttonIsShowing_updateA11yWindowTitle() { final String newA11yWindowTitle = "new a11y window title"; Loading
packages/SystemUI/tests/src/com/android/systemui/accessibility/ModeSwitchesControllerTest.java +0 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,6 @@ public class ModeSwitchesControllerTest extends SysuiTestCase { verify(mModeSwitch).onConfigurationChanged(ActivityInfo.CONFIG_DENSITY); } @Test public void testOnSwitchClick_showWindowModeButton_invokeListener() { mModeSwitchesController.showButton(Display.DEFAULT_DISPLAY, Loading