From 1ee6bd7bb6eab7ce2c09663c9494c8fa6ef98520 Mon Sep 17 00:00:00 2001 From: ryanlwlin Date: Thu, 7 Oct 2021 21:54:01 +0800 Subject: [PATCH] Fix the cutout of magnification border If the window is unmagnifiable, it might cause the cutout of magnification region. To fix it, we set the flag when the touchable region is not the entier window frame. To fix NexusLauncherTests, we add a flag to avoid updateViewLayout too frequently that would impact memory test and have the performance issue. Bug: 196510717 Test: manual test on gestural and 3-button navigation presumbit test pass run atest NexusLauncherTests with foldables Change-Id: Ifef81640fe6c08ee1b0dcd3915227fba3002ea43 Merged-In: Ifef81640fe6c08ee1b0dcd3915227fba3002ea43 (cherry picked from commit c8d588cff6697ad2bd7eedd7e668f67a8d1ba9c1) --- .../taskbar/TaskbarActivityContext.java | 24 ++++++++++++++++++- .../taskbar/TaskbarDragLayerController.java | 4 ++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index a2e4c225d9..cc83431bf4 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -61,7 +61,6 @@ import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; -import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.touch.ItemClickHandler; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.SettingsCache; @@ -108,6 +107,8 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ private final boolean mIsSafeModeEnabled; private final boolean mIsUserSetupComplete; private boolean mIsDestroyed = false; + // The flag to know if the window is excluded from magnification region computation. + private boolean mIsExcludeFromMagnificationRegion = false; public TaskbarActivityContext(Context windowContext, DeviceProfile dp, TaskbarNavButtonController buttonController, ScopedUnfoldTransitionProgressProvider @@ -520,4 +521,25 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ protected boolean isUserSetupComplete() { return mIsUserSetupComplete; } + + /** + * Called when we determine the touchable region. + * + * @param exclude {@code true} then the magnification region computation will omit the window. + */ + public void excludeFromMagnificationRegion(boolean exclude) { + if (mIsExcludeFromMagnificationRegion == exclude) { + return; + } + + mIsExcludeFromMagnificationRegion = exclude; + if (exclude) { + mWindowLayoutParams.privateFlags |= + WindowManager.LayoutParams.PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; + } else { + mWindowLayoutParams.privateFlags &= + ~WindowManager.LayoutParams.PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; + } + mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); + } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java index cec892f7a7..8c6185cb0f 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java @@ -137,12 +137,14 @@ public class TaskbarDragLayerController { // Always have nav buttons be touchable mControllers.navbarButtonsViewController.addVisibleButtonsRegion( mTaskbarDragLayer, insetsInfo.touchableRegion); + boolean insetsIsTouchableRegion = true; if (mTaskbarDragLayer.getAlpha() < AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD) { // Let touches pass through us. insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_REGION); } else if (mControllers.navbarButtonsViewController.isImeVisible()) { insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_CONTENT); + insetsIsTouchableRegion = false; } else if (!mControllers.uiController.isTaskbarTouchable()) { // Let touches pass through us. insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_REGION); @@ -151,9 +153,11 @@ public class TaskbarDragLayerController { // Taskbar has some touchable elements, take over the full taskbar area insetsInfo.setTouchableInsets(mActivity.isTaskbarWindowFullscreen() ? TOUCHABLE_INSETS_FRAME : TOUCHABLE_INSETS_CONTENT); + insetsIsTouchableRegion = false; } else { insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_REGION); } + mActivity.excludeFromMagnificationRegion(insetsIsTouchableRegion); } /**