diff options
12 files changed, 93 insertions, 67 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java index 37a91d0c121c..d90cc4769286 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java @@ -16,17 +16,14 @@ package com.android.wm.shell.onehanded; -import static android.view.Display.DEFAULT_DISPLAY; - import android.content.Context; import android.content.res.Resources; import android.graphics.PixelFormat; -import android.graphics.Point; import android.graphics.Rect; -import android.os.Handler; import android.util.Log; import android.view.SurfaceControl; import android.view.SurfaceSession; +import android.view.WindowManager; import android.window.DisplayAreaAppearedInfo; import android.window.DisplayAreaInfo; import android.window.DisplayAreaOrganizer; @@ -57,7 +54,7 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer private final float mAlpha; private final Rect mRect; private final Executor mMainExecutor; - private final Point mDisplaySize = new Point(); + private final Rect mDisplaySize; private final OneHandedSurfaceTransactionHelper.SurfaceControlTransactionFactory mSurfaceControlTransactionFactory; @@ -85,15 +82,15 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer mMainExecutor.execute(() -> removeBackgroundPanelLayer()); } - public OneHandedBackgroundPanelOrganizer(Context context, DisplayController displayController, - Executor executor) { + public OneHandedBackgroundPanelOrganizer(Context context, WindowManager windowManager, + DisplayController displayController, Executor executor) { super(executor); - displayController.getDisplay(DEFAULT_DISPLAY).getRealSize(mDisplaySize); + mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds(); final Resources res = context.getResources(); final float defaultRGB = res.getFloat(R.dimen.config_one_handed_background_rgb); mColor = new float[]{defaultRGB, defaultRGB, defaultRGB}; mAlpha = res.getFloat(R.dimen.config_one_handed_background_alpha); - mRect = new Rect(0, 0, mDisplaySize.x, mDisplaySize.y); + mRect = new Rect(0, 0, mDisplaySize.width(), mDisplaySize.height()); mMainExecutor = executor; mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java index a1b1de3faee2..d2eb361d664d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java @@ -17,7 +17,6 @@ package com.android.wm.shell.onehanded; import static android.os.UserHandle.USER_CURRENT; -import static android.view.Display.DEFAULT_DISPLAY; import android.content.ComponentName; import android.content.Context; @@ -25,7 +24,7 @@ import android.content.om.IOverlayManager; import android.content.om.OverlayInfo; import android.content.res.Configuration; import android.database.ContentObserver; -import android.graphics.Point; +import android.graphics.Rect; import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; @@ -33,6 +32,7 @@ import android.os.SystemProperties; import android.provider.Settings; import android.util.Slog; import android.view.ViewConfiguration; +import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; import androidx.annotation.NonNull; @@ -82,6 +82,7 @@ public class OneHandedController { private final ShellExecutor mMainExecutor; private final Handler mMainHandler; private final OneHandedImpl mImpl = new OneHandedImpl(); + private final WindowManager mWindowManager; private OneHandedDisplayAreaOrganizer mDisplayAreaOrganizer; private final AccessibilityManager mAccessibilityManager; @@ -141,7 +142,7 @@ public class OneHandedController { */ @Nullable public static OneHandedController create( - Context context, DisplayController displayController, + Context context, WindowManager windowManager, DisplayController displayController, TaskStackListenerImpl taskStackListener, UiEventLogger uiEventLogger, ShellExecutor mainExecutor, Handler mainHandler) { if (!SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)) { @@ -151,22 +152,24 @@ public class OneHandedController { OneHandedTimeoutHandler timeoutHandler = new OneHandedTimeoutHandler(mainExecutor); OneHandedTutorialHandler tutorialHandler = new OneHandedTutorialHandler(context, - mainExecutor); + windowManager, mainExecutor); OneHandedAnimationController animationController = new OneHandedAnimationController(context); OneHandedTouchHandler touchHandler = new OneHandedTouchHandler(timeoutHandler, mainExecutor); OneHandedGestureHandler gestureHandler = new OneHandedGestureHandler( - context, displayController, ViewConfiguration.get(context), mainExecutor); + context, windowManager, displayController, ViewConfiguration.get(context), + mainExecutor); OneHandedBackgroundPanelOrganizer oneHandedBackgroundPanelOrganizer = - new OneHandedBackgroundPanelOrganizer(context, displayController, mainExecutor); + new OneHandedBackgroundPanelOrganizer(context, windowManager, displayController, + mainExecutor); OneHandedDisplayAreaOrganizer organizer = new OneHandedDisplayAreaOrganizer( - context, displayController, animationController, tutorialHandler, + context, windowManager, displayController, animationController, tutorialHandler, oneHandedBackgroundPanelOrganizer, mainExecutor); OneHandedUiEventLogger oneHandedUiEventsLogger = new OneHandedUiEventLogger(uiEventLogger); IOverlayManager overlayManager = IOverlayManager.Stub.asInterface( ServiceManager.getService(Context.OVERLAY_SERVICE)); - return new OneHandedController(context, displayController, + return new OneHandedController(context, windowManager, displayController, oneHandedBackgroundPanelOrganizer, organizer, touchHandler, tutorialHandler, gestureHandler, timeoutHandler, oneHandedUiEventsLogger, overlayManager, taskStackListener, mainExecutor, mainHandler); @@ -174,6 +177,7 @@ public class OneHandedController { @VisibleForTesting OneHandedController(Context context, + WindowManager windowManager, DisplayController displayController, OneHandedBackgroundPanelOrganizer backgroundPanelOrganizer, OneHandedDisplayAreaOrganizer displayAreaOrganizer, @@ -187,6 +191,7 @@ public class OneHandedController { ShellExecutor mainExecutor, Handler mainHandler) { mContext = context; + mWindowManager = windowManager; mBackgroundPanelOrganizer = backgroundPanelOrganizer; mDisplayAreaOrganizer = displayAreaOrganizer; mDisplayController = displayController; @@ -269,7 +274,7 @@ public class OneHandedController { return; } if (!mDisplayAreaOrganizer.isInOneHanded()) { - final int yOffSet = Math.round(getDisplaySize().y * mOffSetFraction); + final int yOffSet = Math.round(getDisplaySize().height() * mOffSetFraction); mDisplayAreaOrganizer.scheduleOffset(0, yOffSet); mTimeoutHandler.resetTimer(); @@ -426,14 +431,19 @@ public class OneHandedController { } /** - * Query the current display real size from {@link DisplayController} + * Query the current display real size from {@link WindowManager} * - * @return {@link DisplayController#getDisplay(int)#getDisplaySize()} + * @return {@link WindowManager#getCurrentWindowMetrics()#getBounds()} */ - private Point getDisplaySize() { - Point displaySize = new Point(); - if (mDisplayController != null && mDisplayController.getDisplay(DEFAULT_DISPLAY) != null) { - mDisplayController.getDisplay(DEFAULT_DISPLAY).getRealSize(displaySize); + private Rect getDisplaySize() { + if (mWindowManager == null) { + Slog.e(TAG, "WindowManager instance is null! Can not get display size!"); + return new Rect(); + } + final Rect displaySize = mWindowManager.getCurrentWindowMetrics().getBounds(); + if (displaySize.width() == 0 || displaySize.height() == 0) { + Slog.e(TAG, "Display size error! width = " + displaySize.width() + + ", height = " + displaySize.height()); } return displaySize; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java index afc8a097dd05..98516296c473 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java @@ -16,17 +16,16 @@ package com.android.wm.shell.onehanded; -import static android.view.Display.DEFAULT_DISPLAY; - import static com.android.wm.shell.onehanded.OneHandedAnimationController.TRANSITION_DIRECTION_EXIT; import static com.android.wm.shell.onehanded.OneHandedAnimationController.TRANSITION_DIRECTION_TRIGGER; import android.content.Context; -import android.graphics.Point; import android.graphics.Rect; import android.os.SystemProperties; import android.util.ArrayMap; +import android.util.Slog; import android.view.SurfaceControl; +import android.view.WindowManager; import android.window.DisplayAreaAppearedInfo; import android.window.DisplayAreaInfo; import android.window.DisplayAreaOrganizer; @@ -60,6 +59,7 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { private static final String ONE_HANDED_MODE_TRANSLATE_ANIMATION_DURATION = "persist.debug.one_handed_translate_animation_duration"; + private final WindowManager mWindowManager; private final Rect mLastVisualDisplayBounds = new Rect(); private final Rect mDefaultDisplayBounds = new Rect(); @@ -110,12 +110,14 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { * Constructor of OneHandedDisplayAreaOrganizer */ public OneHandedDisplayAreaOrganizer(Context context, + WindowManager windowManager, DisplayController displayController, OneHandedAnimationController animationController, OneHandedTutorialHandler tutorialHandler, OneHandedBackgroundPanelOrganizer oneHandedBackgroundGradientOrganizer, ShellExecutor mainExecutor) { super(mainExecutor); + mWindowManager = windowManager; mAnimationController = animationController; mDisplayController = displayController; mLastVisualDisplayBounds.set(getDisplayBounds()); @@ -290,11 +292,16 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { @Nullable private Rect getDisplayBounds() { - Point realSize = new Point(0, 0); - if (mDisplayController != null && mDisplayController.getDisplay(DEFAULT_DISPLAY) != null) { - mDisplayController.getDisplay(DEFAULT_DISPLAY).getRealSize(realSize); + if (mWindowManager == null) { + Slog.e(TAG, "WindowManager instance is null! Can not get display size!"); + return new Rect(); + } + final Rect displayBounds = mWindowManager.getCurrentWindowMetrics().getBounds(); + if (displayBounds.width() == 0 || displayBounds.height() == 0) { + Slog.e(TAG, "Display size error! width = " + displayBounds.width() + + ", height = " + displayBounds.height()); } - return new Rect(0, 0, realSize.x, realSize.y); + return displayBounds; } @VisibleForTesting diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java index 91e649f98292..b86b954c9eeb 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java @@ -20,7 +20,6 @@ import static android.view.Display.DEFAULT_DISPLAY; import android.annotation.Nullable; import android.content.Context; -import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.hardware.input.InputManager; @@ -34,6 +33,7 @@ import android.view.InputMonitor; import android.view.MotionEvent; import android.view.Surface; import android.view.ViewConfiguration; +import android.view.WindowManager; import android.window.WindowContainerTransaction; import androidx.annotation.VisibleForTesting; @@ -59,8 +59,9 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, private final PointF mDownPos = new PointF(); private final PointF mLastPos = new PointF(); private final PointF mStartDragPos = new PointF(); - private boolean mPassedSlop; + private final WindowManager mWindowManager; + private boolean mPassedSlop; private boolean mAllowGesture; private boolean mIsEnabled; private int mNavGestureHeight; @@ -86,9 +87,10 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, * @param context {@link Context} * @param displayController {@link DisplayController} */ - public OneHandedGestureHandler(Context context, DisplayController displayController, - ViewConfiguration viewConfig, + public OneHandedGestureHandler(Context context, WindowManager windowManager, + DisplayController displayController, ViewConfiguration viewConfig, ShellExecutor mainExecutor) { + mWindowManager = windowManager; mDisplayController = displayController; mMainExecutor = mainExecutor; displayController.addDisplayChangingController(this); @@ -210,16 +212,10 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback, disposeInputChannel(); if (mIsEnabled && mIsThreeButtonModeEnabled) { - final Point displaySize = new Point(); - if (mDisplayController != null) { - final Display display = mDisplayController.getDisplay(DEFAULT_DISPLAY); - if (display != null) { - display.getRealSize(displaySize); - } - } + final Rect displaySize = mWindowManager.getCurrentWindowMetrics().getBounds(); // Register input event receiver to monitor the touch region of NavBar gesture height - mGestureRegion.set(0, displaySize.y - mNavGestureHeight, displaySize.x, - displaySize.y); + mGestureRegion.set(0, displaySize.height() - mNavGestureHeight, displaySize.width(), + displaySize.height()); mInputMonitor = InputManager.getInstance().monitorGestureInput( "onehanded-gesture-offset", DEFAULT_DISPLAY); try { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java index 3f72b80a7dce..d539835da764 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java @@ -20,7 +20,6 @@ import android.content.ContentResolver; import android.content.Context; import android.content.res.Configuration; import android.graphics.PixelFormat; -import android.graphics.Point; import android.graphics.Rect; import android.os.SystemProperties; import android.provider.Settings; @@ -51,14 +50,13 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { private static final String ONE_HANDED_MODE_OFFSET_PERCENTAGE = "persist.debug.one_handed_offset_percentage"; private static final int MAX_TUTORIAL_SHOW_COUNT = 2; - private final Rect mLastUpdatedBounds = new Rect(); private final WindowManager mWindowManager; private final AccessibilityManager mAccessibilityManager; private final String mPackageName; + private final Rect mDisplaySize; private Context mContext; private View mTutorialView; - private Point mDisplaySize = new Point(); private ContentResolver mContentResolver; private boolean mCanShowTutorial; private String mStartOneHandedDescription; @@ -101,14 +99,14 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { } }; - public OneHandedTutorialHandler(Context context, ShellExecutor mainExecutor) { + public OneHandedTutorialHandler(Context context, WindowManager windowManager, + ShellExecutor mainExecutor) { mContext = context; - context.getDisplay().getRealSize(mDisplaySize); + mWindowManager = windowManager; + mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds(); mPackageName = context.getPackageName(); mContentResolver = context.getContentResolver(); - mWindowManager = context.getSystemService(WindowManager.class); mAccessibilityManager = AccessibilityManager.getInstance(context); - mStartOneHandedDescription = context.getResources().getString( R.string.accessibility_action_start_one_handed); mStopOneHandedDescription = context.getResources().getString( @@ -121,7 +119,8 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { R.fraction.config_one_handed_offset, 1, 1); final int sysPropPercentageConfig = SystemProperties.getInt( ONE_HANDED_MODE_OFFSET_PERCENTAGE, Math.round(offsetPercentageConfig * 100.0f)); - mTutorialAreaHeight = Math.round(mDisplaySize.y * (sysPropPercentageConfig / 100.0f)); + mTutorialAreaHeight = Math.round( + mDisplaySize.height() * (sysPropPercentageConfig / 100.0f)); mainExecutor.execute(() -> { recreateTutorialView(mContext); @@ -214,7 +213,7 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { */ private WindowManager.LayoutParams getTutorialTargetLayoutParams() { final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( - mDisplaySize.x, mTutorialAreaHeight, 0, 0, + mDisplaySize.width(), mTutorialAreaHeight, 0, 0, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, @@ -228,9 +227,13 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { void dump(@NonNull PrintWriter pw) { final String innerPrefix = " "; - pw.println(TAG + "states: "); - pw.print(innerPrefix + "mLastUpdatedBounds="); - pw.println(mLastUpdatedBounds); + pw.println(TAG + " states: "); + pw.print(innerPrefix + "mTriggerState="); + pw.println(mTriggerState); + pw.print(innerPrefix + "mDisplaySize="); + pw.println(mDisplaySize); + pw.print(innerPrefix + "mTutorialAreaHeight="); + pw.println(mTutorialAreaHeight); } private boolean canShowTutorial() { diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java index b0f52cf656f8..d6bcf0375f32 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java @@ -69,7 +69,7 @@ public class OneHandedBackgroundPanelOrganizerTest extends OneHandedTestCase { mDisplayAreaInfo = new DisplayAreaInfo(mToken, DEFAULT_DISPLAY, FEATURE_ONE_HANDED_BACKGROUND_PANEL); - mBackgroundPanelOrganizer = new OneHandedBackgroundPanelOrganizer(mContext, + mBackgroundPanelOrganizer = new OneHandedBackgroundPanelOrganizer(mContext, mWindowManager, mMockDisplayController, Runnable::run); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java index 1ad8fd3e7298..c5221dee9216 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java @@ -100,6 +100,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { mSpiedOneHandedController = spy(new OneHandedController( mContext, + mWindowManager, mMockDisplayController, mMockBackgroundOrganizer, mMockDisplayAreaOrganizer, @@ -120,8 +121,8 @@ public class OneHandedControllerTest extends OneHandedTestCase { final OneHandedAnimationController animationController = new OneHandedAnimationController( mContext); OneHandedDisplayAreaOrganizer displayAreaOrganizer = new OneHandedDisplayAreaOrganizer( - mContext, mMockDisplayController, animationController, mMockTutorialHandler, - mMockBackgroundOrganizer, mMockShellMainExecutor); + mContext, mWindowManager, mMockDisplayController, animationController, + mMockTutorialHandler, mMockBackgroundOrganizer, mMockShellMainExecutor); assertThat(displayAreaOrganizer.isInOneHanded()).isFalse(); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java index 7a826c1be4d3..1fa1e2ff69b6 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java @@ -121,6 +121,7 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { when(mMockLeash.getHeight()).thenReturn(DISPLAY_HEIGHT); mSpiedDisplayAreaOrganizer = spy(new OneHandedDisplayAreaOrganizer(mContext, + mWindowManager, mMockDisplayController, mMockAnimationController, mTutorialHandler, diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedGestureHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedGestureHandlerTest.java index b275b701f87a..f58affc60f0b 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedGestureHandlerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedGestureHandlerTest.java @@ -44,8 +44,9 @@ public class OneHandedGestureHandlerTest extends OneHandedTestCase { @Before public void setUp() { MockitoAnnotations.initMocks(this); - mGestureHandler = new OneHandedGestureHandler(mContext, mMockDisplayController, - ViewConfiguration.get(mTestContext), mMockShellMainExecutor); + mGestureHandler = new OneHandedGestureHandler(mContext, mWindowManager, + mMockDisplayController, ViewConfiguration.get(mTestContext), + mMockShellMainExecutor); } @Test diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTestCase.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTestCase.java index 32a188d02cf0..8b03dc58c3bf 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTestCase.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTestCase.java @@ -26,6 +26,7 @@ import android.content.Context; import android.hardware.display.DisplayManager; import android.os.SystemProperties; import android.testing.TestableContext; +import android.view.WindowManager; import androidx.test.platform.app.InstrumentationRegistry; @@ -45,6 +46,9 @@ public abstract class OneHandedTestCase { public TestableContext mTestContext = new TestableContext( InstrumentationRegistry.getInstrumentation().getTargetContext(), null); + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + protected WindowManager mWindowManager; + @Before public void setUpContext() { assumeTrue(SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)); @@ -53,6 +57,12 @@ public abstract class OneHandedTestCase { mContext = getTestContext().createDisplayContext(dm.getDisplay(DEFAULT_DISPLAY)); } + @Before + public void setUpWindowManager() { + assumeTrue(SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)); + mWindowManager = getTestContext().getSystemService(WindowManager.class); + } + /** return testable context */ protected TestableContext getTestContext() { return mTestContext; diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java index 024cf7ffc1f3..69c537c2efbe 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTutorialHandlerTest.java @@ -65,7 +65,6 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { @Mock OneHandedUiEventLogger mMockUiEventLogger; - @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -73,7 +72,8 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase { when(mMockDisplayAreaOrganizer.getDisplayAreaTokenMap()).thenReturn(new ArrayMap<>()); mOneHandedController = new OneHandedController( - getContext(), + mContext, + mWindowManager, mMockDisplayController, mMockBackgroundOrganizer, mMockDisplayAreaOrganizer, diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java index 5d9465904e3b..e6712a5334ad 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java @@ -320,12 +320,12 @@ public abstract class WMShellBaseModule { @WMSingleton @Provides static Optional<OneHandedController> provideOneHandedController(Context context, - DisplayController displayController, TaskStackListenerImpl taskStackListener, - UiEventLogger uiEventLogger, + WindowManager windowManager, DisplayController displayController, + TaskStackListenerImpl taskStackListener, UiEventLogger uiEventLogger, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler) { - return Optional.ofNullable(OneHandedController.create(context, displayController, - taskStackListener, uiEventLogger, mainExecutor, mainHandler)); + return Optional.ofNullable(OneHandedController.create(context, windowManager, + displayController, taskStackListener, uiEventLogger, mainExecutor, mainHandler)); } // |