Merge "Refactor to use WindowManager#getCurrentWindowMetrics() instead of using Display#getRealSize()" into sc-dev

This commit is contained in:
Jason Chang
2021-03-06 08:04:52 +00:00
committed by Android (Google) Code Review
12 changed files with 93 additions and 67 deletions

View File

@@ -16,17 +16,14 @@
package com.android.wm.shell.onehanded; package com.android.wm.shell.onehanded;
import static android.view.Display.DEFAULT_DISPLAY;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Handler;
import android.util.Log; import android.util.Log;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.view.SurfaceSession; import android.view.SurfaceSession;
import android.view.WindowManager;
import android.window.DisplayAreaAppearedInfo; import android.window.DisplayAreaAppearedInfo;
import android.window.DisplayAreaInfo; import android.window.DisplayAreaInfo;
import android.window.DisplayAreaOrganizer; import android.window.DisplayAreaOrganizer;
@@ -57,7 +54,7 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer
private final float mAlpha; private final float mAlpha;
private final Rect mRect; private final Rect mRect;
private final Executor mMainExecutor; private final Executor mMainExecutor;
private final Point mDisplaySize = new Point(); private final Rect mDisplaySize;
private final OneHandedSurfaceTransactionHelper.SurfaceControlTransactionFactory private final OneHandedSurfaceTransactionHelper.SurfaceControlTransactionFactory
mSurfaceControlTransactionFactory; mSurfaceControlTransactionFactory;
@@ -85,15 +82,15 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer
mMainExecutor.execute(() -> removeBackgroundPanelLayer()); mMainExecutor.execute(() -> removeBackgroundPanelLayer());
} }
public OneHandedBackgroundPanelOrganizer(Context context, DisplayController displayController, public OneHandedBackgroundPanelOrganizer(Context context, WindowManager windowManager,
Executor executor) { DisplayController displayController, Executor executor) {
super(executor); super(executor);
displayController.getDisplay(DEFAULT_DISPLAY).getRealSize(mDisplaySize); mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds();
final Resources res = context.getResources(); final Resources res = context.getResources();
final float defaultRGB = res.getFloat(R.dimen.config_one_handed_background_rgb); final float defaultRGB = res.getFloat(R.dimen.config_one_handed_background_rgb);
mColor = new float[]{defaultRGB, defaultRGB, defaultRGB}; mColor = new float[]{defaultRGB, defaultRGB, defaultRGB};
mAlpha = res.getFloat(R.dimen.config_one_handed_background_alpha); 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; mMainExecutor = executor;
mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new; mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;
} }

View File

@@ -17,7 +17,6 @@
package com.android.wm.shell.onehanded; package com.android.wm.shell.onehanded;
import static android.os.UserHandle.USER_CURRENT; import static android.os.UserHandle.USER_CURRENT;
import static android.view.Display.DEFAULT_DISPLAY;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@@ -25,7 +24,7 @@ import android.content.om.IOverlayManager;
import android.content.om.OverlayInfo; import android.content.om.OverlayInfo;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.graphics.Point; import android.graphics.Rect;
import android.os.Handler; import android.os.Handler;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
@@ -33,6 +32,7 @@ import android.os.SystemProperties;
import android.provider.Settings; import android.provider.Settings;
import android.util.Slog; import android.util.Slog;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -82,6 +82,7 @@ public class OneHandedController {
private final ShellExecutor mMainExecutor; private final ShellExecutor mMainExecutor;
private final Handler mMainHandler; private final Handler mMainHandler;
private final OneHandedImpl mImpl = new OneHandedImpl(); private final OneHandedImpl mImpl = new OneHandedImpl();
private final WindowManager mWindowManager;
private OneHandedDisplayAreaOrganizer mDisplayAreaOrganizer; private OneHandedDisplayAreaOrganizer mDisplayAreaOrganizer;
private final AccessibilityManager mAccessibilityManager; private final AccessibilityManager mAccessibilityManager;
@@ -141,7 +142,7 @@ public class OneHandedController {
*/ */
@Nullable @Nullable
public static OneHandedController create( public static OneHandedController create(
Context context, DisplayController displayController, Context context, WindowManager windowManager, DisplayController displayController,
TaskStackListenerImpl taskStackListener, UiEventLogger uiEventLogger, TaskStackListenerImpl taskStackListener, UiEventLogger uiEventLogger,
ShellExecutor mainExecutor, Handler mainHandler) { ShellExecutor mainExecutor, Handler mainHandler) {
if (!SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)) { if (!SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)) {
@@ -151,22 +152,24 @@ public class OneHandedController {
OneHandedTimeoutHandler timeoutHandler = new OneHandedTimeoutHandler(mainExecutor); OneHandedTimeoutHandler timeoutHandler = new OneHandedTimeoutHandler(mainExecutor);
OneHandedTutorialHandler tutorialHandler = new OneHandedTutorialHandler(context, OneHandedTutorialHandler tutorialHandler = new OneHandedTutorialHandler(context,
mainExecutor); windowManager, mainExecutor);
OneHandedAnimationController animationController = OneHandedAnimationController animationController =
new OneHandedAnimationController(context); new OneHandedAnimationController(context);
OneHandedTouchHandler touchHandler = new OneHandedTouchHandler(timeoutHandler, OneHandedTouchHandler touchHandler = new OneHandedTouchHandler(timeoutHandler,
mainExecutor); mainExecutor);
OneHandedGestureHandler gestureHandler = new OneHandedGestureHandler( OneHandedGestureHandler gestureHandler = new OneHandedGestureHandler(
context, displayController, ViewConfiguration.get(context), mainExecutor); context, windowManager, displayController, ViewConfiguration.get(context),
mainExecutor);
OneHandedBackgroundPanelOrganizer oneHandedBackgroundPanelOrganizer = OneHandedBackgroundPanelOrganizer oneHandedBackgroundPanelOrganizer =
new OneHandedBackgroundPanelOrganizer(context, displayController, mainExecutor); new OneHandedBackgroundPanelOrganizer(context, windowManager, displayController,
mainExecutor);
OneHandedDisplayAreaOrganizer organizer = new OneHandedDisplayAreaOrganizer( OneHandedDisplayAreaOrganizer organizer = new OneHandedDisplayAreaOrganizer(
context, displayController, animationController, tutorialHandler, context, windowManager, displayController, animationController, tutorialHandler,
oneHandedBackgroundPanelOrganizer, mainExecutor); oneHandedBackgroundPanelOrganizer, mainExecutor);
OneHandedUiEventLogger oneHandedUiEventsLogger = new OneHandedUiEventLogger(uiEventLogger); OneHandedUiEventLogger oneHandedUiEventsLogger = new OneHandedUiEventLogger(uiEventLogger);
IOverlayManager overlayManager = IOverlayManager.Stub.asInterface( IOverlayManager overlayManager = IOverlayManager.Stub.asInterface(
ServiceManager.getService(Context.OVERLAY_SERVICE)); ServiceManager.getService(Context.OVERLAY_SERVICE));
return new OneHandedController(context, displayController, return new OneHandedController(context, windowManager, displayController,
oneHandedBackgroundPanelOrganizer, organizer, touchHandler, tutorialHandler, oneHandedBackgroundPanelOrganizer, organizer, touchHandler, tutorialHandler,
gestureHandler, timeoutHandler, oneHandedUiEventsLogger, overlayManager, gestureHandler, timeoutHandler, oneHandedUiEventsLogger, overlayManager,
taskStackListener, mainExecutor, mainHandler); taskStackListener, mainExecutor, mainHandler);
@@ -174,6 +177,7 @@ public class OneHandedController {
@VisibleForTesting @VisibleForTesting
OneHandedController(Context context, OneHandedController(Context context,
WindowManager windowManager,
DisplayController displayController, DisplayController displayController,
OneHandedBackgroundPanelOrganizer backgroundPanelOrganizer, OneHandedBackgroundPanelOrganizer backgroundPanelOrganizer,
OneHandedDisplayAreaOrganizer displayAreaOrganizer, OneHandedDisplayAreaOrganizer displayAreaOrganizer,
@@ -187,6 +191,7 @@ public class OneHandedController {
ShellExecutor mainExecutor, ShellExecutor mainExecutor,
Handler mainHandler) { Handler mainHandler) {
mContext = context; mContext = context;
mWindowManager = windowManager;
mBackgroundPanelOrganizer = backgroundPanelOrganizer; mBackgroundPanelOrganizer = backgroundPanelOrganizer;
mDisplayAreaOrganizer = displayAreaOrganizer; mDisplayAreaOrganizer = displayAreaOrganizer;
mDisplayController = displayController; mDisplayController = displayController;
@@ -269,7 +274,7 @@ public class OneHandedController {
return; return;
} }
if (!mDisplayAreaOrganizer.isInOneHanded()) { if (!mDisplayAreaOrganizer.isInOneHanded()) {
final int yOffSet = Math.round(getDisplaySize().y * mOffSetFraction); final int yOffSet = Math.round(getDisplaySize().height() * mOffSetFraction);
mDisplayAreaOrganizer.scheduleOffset(0, yOffSet); mDisplayAreaOrganizer.scheduleOffset(0, yOffSet);
mTimeoutHandler.resetTimer(); 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() { private Rect getDisplaySize() {
Point displaySize = new Point(); if (mWindowManager == null) {
if (mDisplayController != null && mDisplayController.getDisplay(DEFAULT_DISPLAY) != null) { Slog.e(TAG, "WindowManager instance is null! Can not get display size!");
mDisplayController.getDisplay(DEFAULT_DISPLAY).getRealSize(displaySize); 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; return displaySize;
} }

View File

@@ -16,17 +16,16 @@
package com.android.wm.shell.onehanded; 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_EXIT;
import static com.android.wm.shell.onehanded.OneHandedAnimationController.TRANSITION_DIRECTION_TRIGGER; import static com.android.wm.shell.onehanded.OneHandedAnimationController.TRANSITION_DIRECTION_TRIGGER;
import android.content.Context; import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.Slog;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.DisplayAreaAppearedInfo; import android.window.DisplayAreaAppearedInfo;
import android.window.DisplayAreaInfo; import android.window.DisplayAreaInfo;
import android.window.DisplayAreaOrganizer; import android.window.DisplayAreaOrganizer;
@@ -60,6 +59,7 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer {
private static final String ONE_HANDED_MODE_TRANSLATE_ANIMATION_DURATION = private static final String ONE_HANDED_MODE_TRANSLATE_ANIMATION_DURATION =
"persist.debug.one_handed_translate_animation_duration"; "persist.debug.one_handed_translate_animation_duration";
private final WindowManager mWindowManager;
private final Rect mLastVisualDisplayBounds = new Rect(); private final Rect mLastVisualDisplayBounds = new Rect();
private final Rect mDefaultDisplayBounds = new Rect(); private final Rect mDefaultDisplayBounds = new Rect();
@@ -110,12 +110,14 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer {
* Constructor of OneHandedDisplayAreaOrganizer * Constructor of OneHandedDisplayAreaOrganizer
*/ */
public OneHandedDisplayAreaOrganizer(Context context, public OneHandedDisplayAreaOrganizer(Context context,
WindowManager windowManager,
DisplayController displayController, DisplayController displayController,
OneHandedAnimationController animationController, OneHandedAnimationController animationController,
OneHandedTutorialHandler tutorialHandler, OneHandedTutorialHandler tutorialHandler,
OneHandedBackgroundPanelOrganizer oneHandedBackgroundGradientOrganizer, OneHandedBackgroundPanelOrganizer oneHandedBackgroundGradientOrganizer,
ShellExecutor mainExecutor) { ShellExecutor mainExecutor) {
super(mainExecutor); super(mainExecutor);
mWindowManager = windowManager;
mAnimationController = animationController; mAnimationController = animationController;
mDisplayController = displayController; mDisplayController = displayController;
mLastVisualDisplayBounds.set(getDisplayBounds()); mLastVisualDisplayBounds.set(getDisplayBounds());
@@ -292,11 +294,16 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer {
@Nullable @Nullable
private Rect getDisplayBounds() { private Rect getDisplayBounds() {
Point realSize = new Point(0, 0); if (mWindowManager == null) {
if (mDisplayController != null && mDisplayController.getDisplay(DEFAULT_DISPLAY) != null) { Slog.e(TAG, "WindowManager instance is null! Can not get display size!");
mDisplayController.getDisplay(DEFAULT_DISPLAY).getRealSize(realSize); return new Rect();
} }
return new Rect(0, 0, realSize.x, realSize.y); 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 displayBounds;
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -20,7 +20,6 @@ import static android.view.Display.DEFAULT_DISPLAY;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.content.Context; import android.content.Context;
import android.graphics.Point;
import android.graphics.PointF; import android.graphics.PointF;
import android.graphics.Rect; import android.graphics.Rect;
import android.hardware.input.InputManager; import android.hardware.input.InputManager;
@@ -34,6 +33,7 @@ import android.view.InputMonitor;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.Surface; import android.view.Surface;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.window.WindowContainerTransaction; import android.window.WindowContainerTransaction;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
@@ -59,8 +59,9 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback,
private final PointF mDownPos = new PointF(); private final PointF mDownPos = new PointF();
private final PointF mLastPos = new PointF(); private final PointF mLastPos = new PointF();
private final PointF mStartDragPos = new PointF(); private final PointF mStartDragPos = new PointF();
private boolean mPassedSlop; private final WindowManager mWindowManager;
private boolean mPassedSlop;
private boolean mAllowGesture; private boolean mAllowGesture;
private boolean mIsEnabled; private boolean mIsEnabled;
private int mNavGestureHeight; private int mNavGestureHeight;
@@ -86,9 +87,10 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback,
* @param context {@link Context} * @param context {@link Context}
* @param displayController {@link DisplayController} * @param displayController {@link DisplayController}
*/ */
public OneHandedGestureHandler(Context context, DisplayController displayController, public OneHandedGestureHandler(Context context, WindowManager windowManager,
ViewConfiguration viewConfig, DisplayController displayController, ViewConfiguration viewConfig,
ShellExecutor mainExecutor) { ShellExecutor mainExecutor) {
mWindowManager = windowManager;
mDisplayController = displayController; mDisplayController = displayController;
mMainExecutor = mainExecutor; mMainExecutor = mainExecutor;
displayController.addDisplayChangingController(this); displayController.addDisplayChangingController(this);
@@ -210,16 +212,10 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback,
disposeInputChannel(); disposeInputChannel();
if (mIsEnabled && mIsThreeButtonModeEnabled) { if (mIsEnabled && mIsThreeButtonModeEnabled) {
final Point displaySize = new Point(); final Rect displaySize = mWindowManager.getCurrentWindowMetrics().getBounds();
if (mDisplayController != null) {
final Display display = mDisplayController.getDisplay(DEFAULT_DISPLAY);
if (display != null) {
display.getRealSize(displaySize);
}
}
// Register input event receiver to monitor the touch region of NavBar gesture height // Register input event receiver to monitor the touch region of NavBar gesture height
mGestureRegion.set(0, displaySize.y - mNavGestureHeight, displaySize.x, mGestureRegion.set(0, displaySize.height() - mNavGestureHeight, displaySize.width(),
displaySize.y); displaySize.height());
mInputMonitor = InputManager.getInstance().monitorGestureInput( mInputMonitor = InputManager.getInstance().monitorGestureInput(
"onehanded-gesture-offset", DEFAULT_DISPLAY); "onehanded-gesture-offset", DEFAULT_DISPLAY);
try { try {

View File

@@ -20,7 +20,6 @@ import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.provider.Settings; import android.provider.Settings;
@@ -51,14 +50,13 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
private static final String ONE_HANDED_MODE_OFFSET_PERCENTAGE = private static final String ONE_HANDED_MODE_OFFSET_PERCENTAGE =
"persist.debug.one_handed_offset_percentage"; "persist.debug.one_handed_offset_percentage";
private static final int MAX_TUTORIAL_SHOW_COUNT = 2; private static final int MAX_TUTORIAL_SHOW_COUNT = 2;
private final Rect mLastUpdatedBounds = new Rect();
private final WindowManager mWindowManager; private final WindowManager mWindowManager;
private final AccessibilityManager mAccessibilityManager; private final AccessibilityManager mAccessibilityManager;
private final String mPackageName; private final String mPackageName;
private final Rect mDisplaySize;
private Context mContext; private Context mContext;
private View mTutorialView; private View mTutorialView;
private Point mDisplaySize = new Point();
private ContentResolver mContentResolver; private ContentResolver mContentResolver;
private boolean mCanShowTutorial; private boolean mCanShowTutorial;
private String mStartOneHandedDescription; 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; mContext = context;
context.getDisplay().getRealSize(mDisplaySize); mWindowManager = windowManager;
mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds();
mPackageName = context.getPackageName(); mPackageName = context.getPackageName();
mContentResolver = context.getContentResolver(); mContentResolver = context.getContentResolver();
mWindowManager = context.getSystemService(WindowManager.class);
mAccessibilityManager = AccessibilityManager.getInstance(context); mAccessibilityManager = AccessibilityManager.getInstance(context);
mStartOneHandedDescription = context.getResources().getString( mStartOneHandedDescription = context.getResources().getString(
R.string.accessibility_action_start_one_handed); R.string.accessibility_action_start_one_handed);
mStopOneHandedDescription = context.getResources().getString( mStopOneHandedDescription = context.getResources().getString(
@@ -121,7 +119,8 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
R.fraction.config_one_handed_offset, 1, 1); R.fraction.config_one_handed_offset, 1, 1);
final int sysPropPercentageConfig = SystemProperties.getInt( final int sysPropPercentageConfig = SystemProperties.getInt(
ONE_HANDED_MODE_OFFSET_PERCENTAGE, Math.round(offsetPercentageConfig * 100.0f)); 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(() -> { mainExecutor.execute(() -> {
recreateTutorialView(mContext); recreateTutorialView(mContext);
@@ -214,7 +213,7 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
*/ */
private WindowManager.LayoutParams getTutorialTargetLayoutParams() { private WindowManager.LayoutParams getTutorialTargetLayoutParams() {
final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( 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.TYPE_NAVIGATION_BAR_PANEL,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
@@ -229,8 +228,12 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
void dump(@NonNull PrintWriter pw) { void dump(@NonNull PrintWriter pw) {
final String innerPrefix = " "; final String innerPrefix = " ";
pw.println(TAG + " states: "); pw.println(TAG + " states: ");
pw.print(innerPrefix + "mLastUpdatedBounds="); pw.print(innerPrefix + "mTriggerState=");
pw.println(mLastUpdatedBounds); pw.println(mTriggerState);
pw.print(innerPrefix + "mDisplaySize=");
pw.println(mDisplaySize);
pw.print(innerPrefix + "mTutorialAreaHeight=");
pw.println(mTutorialAreaHeight);
} }
private boolean canShowTutorial() { private boolean canShowTutorial() {

View File

@@ -69,7 +69,7 @@ public class OneHandedBackgroundPanelOrganizerTest extends OneHandedTestCase {
mDisplayAreaInfo = new DisplayAreaInfo(mToken, DEFAULT_DISPLAY, mDisplayAreaInfo = new DisplayAreaInfo(mToken, DEFAULT_DISPLAY,
FEATURE_ONE_HANDED_BACKGROUND_PANEL); FEATURE_ONE_HANDED_BACKGROUND_PANEL);
mBackgroundPanelOrganizer = new OneHandedBackgroundPanelOrganizer(mContext, mBackgroundPanelOrganizer = new OneHandedBackgroundPanelOrganizer(mContext, mWindowManager,
mMockDisplayController, Runnable::run); mMockDisplayController, Runnable::run);
} }

View File

@@ -100,6 +100,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
mSpiedOneHandedController = spy(new OneHandedController( mSpiedOneHandedController = spy(new OneHandedController(
mContext, mContext,
mWindowManager,
mMockDisplayController, mMockDisplayController,
mMockBackgroundOrganizer, mMockBackgroundOrganizer,
mMockDisplayAreaOrganizer, mMockDisplayAreaOrganizer,
@@ -120,8 +121,8 @@ public class OneHandedControllerTest extends OneHandedTestCase {
final OneHandedAnimationController animationController = new OneHandedAnimationController( final OneHandedAnimationController animationController = new OneHandedAnimationController(
mContext); mContext);
OneHandedDisplayAreaOrganizer displayAreaOrganizer = new OneHandedDisplayAreaOrganizer( OneHandedDisplayAreaOrganizer displayAreaOrganizer = new OneHandedDisplayAreaOrganizer(
mContext, mMockDisplayController, animationController, mMockTutorialHandler, mContext, mWindowManager, mMockDisplayController, animationController,
mMockBackgroundOrganizer, mMockShellMainExecutor); mMockTutorialHandler, mMockBackgroundOrganizer, mMockShellMainExecutor);
assertThat(displayAreaOrganizer.isInOneHanded()).isFalse(); assertThat(displayAreaOrganizer.isInOneHanded()).isFalse();
} }

View File

@@ -121,6 +121,7 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase {
when(mMockLeash.getHeight()).thenReturn(DISPLAY_HEIGHT); when(mMockLeash.getHeight()).thenReturn(DISPLAY_HEIGHT);
mSpiedDisplayAreaOrganizer = spy(new OneHandedDisplayAreaOrganizer(mContext, mSpiedDisplayAreaOrganizer = spy(new OneHandedDisplayAreaOrganizer(mContext,
mWindowManager,
mMockDisplayController, mMockDisplayController,
mMockAnimationController, mMockAnimationController,
mTutorialHandler, mTutorialHandler,

View File

@@ -44,8 +44,9 @@ public class OneHandedGestureHandlerTest extends OneHandedTestCase {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mGestureHandler = new OneHandedGestureHandler(mContext, mMockDisplayController, mGestureHandler = new OneHandedGestureHandler(mContext, mWindowManager,
ViewConfiguration.get(mTestContext), mMockShellMainExecutor); mMockDisplayController, ViewConfiguration.get(mTestContext),
mMockShellMainExecutor);
} }
@Test @Test

View File

@@ -26,6 +26,7 @@ import android.content.Context;
import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.testing.TestableContext; import android.testing.TestableContext;
import android.view.WindowManager;
import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.platform.app.InstrumentationRegistry;
@@ -45,6 +46,9 @@ public abstract class OneHandedTestCase {
public TestableContext mTestContext = new TestableContext( public TestableContext mTestContext = new TestableContext(
InstrumentationRegistry.getInstrumentation().getTargetContext(), null); InstrumentationRegistry.getInstrumentation().getTargetContext(), null);
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
protected WindowManager mWindowManager;
@Before @Before
public void setUpContext() { public void setUpContext() {
assumeTrue(SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)); assumeTrue(SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false));
@@ -53,6 +57,12 @@ public abstract class OneHandedTestCase {
mContext = getTestContext().createDisplayContext(dm.getDisplay(DEFAULT_DISPLAY)); 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 */ /** return testable context */
protected TestableContext getTestContext() { protected TestableContext getTestContext() {
return mTestContext; return mTestContext;

View File

@@ -65,7 +65,6 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase {
@Mock @Mock
OneHandedUiEventLogger mMockUiEventLogger; OneHandedUiEventLogger mMockUiEventLogger;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
@@ -73,7 +72,8 @@ public class OneHandedTutorialHandlerTest extends OneHandedTestCase {
when(mMockDisplayAreaOrganizer.getDisplayAreaTokenMap()).thenReturn(new ArrayMap<>()); when(mMockDisplayAreaOrganizer.getDisplayAreaTokenMap()).thenReturn(new ArrayMap<>());
mOneHandedController = new OneHandedController( mOneHandedController = new OneHandedController(
getContext(), mContext,
mWindowManager,
mMockDisplayController, mMockDisplayController,
mMockBackgroundOrganizer, mMockBackgroundOrganizer,
mMockDisplayAreaOrganizer, mMockDisplayAreaOrganizer,

View File

@@ -328,12 +328,12 @@ public abstract class WMShellBaseModule {
@WMSingleton @WMSingleton
@Provides @Provides
static Optional<OneHandedController> provideOneHandedController(Context context, static Optional<OneHandedController> provideOneHandedController(Context context,
DisplayController displayController, TaskStackListenerImpl taskStackListener, WindowManager windowManager, DisplayController displayController,
UiEventLogger uiEventLogger, TaskStackListenerImpl taskStackListener, UiEventLogger uiEventLogger,
@ShellMainThread ShellExecutor mainExecutor, @ShellMainThread ShellExecutor mainExecutor,
@ShellMainThread Handler mainHandler) { @ShellMainThread Handler mainHandler) {
return Optional.ofNullable(OneHandedController.create(context, displayController, return Optional.ofNullable(OneHandedController.create(context, windowManager,
taskStackListener, uiEventLogger, mainExecutor, mainHandler)); displayController, taskStackListener, uiEventLogger, mainExecutor, mainHandler));
} }
// //