Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java +6 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +25 −15 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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)) { Loading @@ -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); Loading @@ -174,6 +177,7 @@ public class OneHandedController { @VisibleForTesting OneHandedController(Context context, WindowManager windowManager, DisplayController displayController, OneHandedBackgroundPanelOrganizer backgroundPanelOrganizer, OneHandedDisplayAreaOrganizer displayAreaOrganizer, Loading @@ -187,6 +191,7 @@ public class OneHandedController { ShellExecutor mainExecutor, Handler mainHandler) { mContext = context; mWindowManager = windowManager; mBackgroundPanelOrganizer = backgroundPanelOrganizer; mDisplayAreaOrganizer = displayAreaOrganizer; mDisplayController = displayController; Loading Loading @@ -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(); Loading Loading @@ -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; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java +14 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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()); Loading Loading @@ -292,11 +294,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 Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java +9 −13 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading Loading @@ -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 { Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java +15 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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( Loading @@ -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); Loading Loading @@ -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, Loading @@ -229,8 +228,12 @@ 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.print(innerPrefix + "mTriggerState="); pw.println(mTriggerState); pw.print(innerPrefix + "mDisplaySize="); pw.println(mDisplaySize); pw.print(innerPrefix + "mTutorialAreaHeight="); pw.println(mTutorialAreaHeight); } private boolean canShowTutorial() { Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java +6 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +25 −15 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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)) { Loading @@ -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); Loading @@ -174,6 +177,7 @@ public class OneHandedController { @VisibleForTesting OneHandedController(Context context, WindowManager windowManager, DisplayController displayController, OneHandedBackgroundPanelOrganizer backgroundPanelOrganizer, OneHandedDisplayAreaOrganizer displayAreaOrganizer, Loading @@ -187,6 +191,7 @@ public class OneHandedController { ShellExecutor mainExecutor, Handler mainHandler) { mContext = context; mWindowManager = windowManager; mBackgroundPanelOrganizer = backgroundPanelOrganizer; mDisplayAreaOrganizer = displayAreaOrganizer; mDisplayController = displayController; Loading Loading @@ -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(); Loading Loading @@ -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; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java +14 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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()); Loading Loading @@ -292,11 +294,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 Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedGestureHandler.java +9 −13 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading Loading @@ -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 { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java +15 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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( Loading @@ -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); Loading Loading @@ -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, Loading @@ -229,8 +228,12 @@ 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.print(innerPrefix + "mTriggerState="); pw.println(mTriggerState); pw.print(innerPrefix + "mDisplaySize="); pw.println(mDisplaySize); pw.print(innerPrefix + "mTutorialAreaHeight="); pw.println(mTutorialAreaHeight); } private boolean canShowTutorial() { Loading