From 850ee61de68f20e9bdd38ebec2eed31cbe070804 Mon Sep 17 00:00:00 2001 From: Saumya Prakash Date: Thu, 13 Mar 2025 06:14:24 +0000 Subject: Ensure back button shows up in Simple View for SUW This change adds support for the dynamic changing of navigation modes in SUW such that the back button will be visible in both states. Previously there was no way to switch navigation modes during Setup Wizard, before the introduction of Simple View. The buttons were not being drawn correctly (or at all). Fix: 381016997 Fix: 381363853 Test: Rerun SUW, enable simple view and ensure that the back buttons works in both orientations and that the SUW buttons are unaffected Flag: EXEMPT bugfix Change-Id: Ifbdf0c9cd06f1347e6c2c9a943711cefbf6bff2c --- .../launcher3/taskbar/TaskbarInsetsController.kt | 4 +++ .../navbutton/AbstractNavButtonLayoutter.kt | 29 ++++++++++------ .../taskbar/navbutton/NavButtonLayoutFactory.kt | 39 +++++++++++----------- .../taskbar/navbutton/PhoneGestureLayoutter.kt | 31 ++--------------- .../taskbar/navbutton/SetupNavLayoutter.kt | 25 +++++++------- 5 files changed, 56 insertions(+), 72 deletions(-) (limited to 'quickstep') diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt index 3af2ab6d3c..6c01255e81 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt @@ -349,13 +349,17 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas controllers.bubbleControllers.isPresent && controllers.bubbleControllers.get().bubbleBarViewController.isBubbleBarVisible() var insetsIsTouchableRegion = true + // Prevents the taskbar from taking touches and conflicting with setup wizard if ( context.isPhoneButtonNavMode && + context.isUserSetupComplete && (!controllers.navbarButtonsViewController.isImeVisible || !controllers.navbarButtonsViewController.isImeRenderingNavButtons) ) { insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_FRAME) insetsIsTouchableRegion = false + debugTouchableRegion.lastSetTouchableReason = + "Phone button nav mode: Fullscreen touchable, IME not affecting nav buttons" } else if (context.dragLayer.alpha < AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD) { // Let touches pass through us. insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_REGION) diff --git a/quickstep/src/com/android/launcher3/taskbar/navbutton/AbstractNavButtonLayoutter.kt b/quickstep/src/com/android/launcher3/taskbar/navbutton/AbstractNavButtonLayoutter.kt index e487f9fd40..3712a76eab 100644 --- a/quickstep/src/com/android/launcher3/taskbar/navbutton/AbstractNavButtonLayoutter.kt +++ b/quickstep/src/com/android/launcher3/taskbar/navbutton/AbstractNavButtonLayoutter.kt @@ -27,7 +27,6 @@ import android.widget.Space import com.android.launcher3.DeviceProfile import com.android.launcher3.R import com.android.launcher3.Utilities -import com.android.launcher3.taskbar.TaskbarActivityContext import com.android.launcher3.taskbar.navbutton.NavButtonLayoutFactory.NavButtonLayoutter /** @@ -48,7 +47,7 @@ abstract class AbstractNavButtonLayoutter( protected val startContextualContainer: ViewGroup, protected val imeSwitcher: ImageView?, protected val a11yButton: ImageView?, - protected val space: Space? + protected val space: Space?, ) : NavButtonLayoutter { protected val homeButton: ImageView? = navButtonContainer.findViewById(R.id.home) protected val recentsButton: ImageView? = navButtonContainer.findViewById(R.id.recent_apps) @@ -69,26 +68,34 @@ abstract class AbstractNavButtonLayoutter( val params = FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT + ViewGroup.LayoutParams.MATCH_PARENT, ) params.gravity = Gravity.CENTER return params } + /** + * Adjusts the layout parameters of the nav bar container for setup in phone mode. + * + * @param nearestTouchFrameLayoutParams The layout parameters of the navButtonsView, which is + * the ViewGroup that contains start, end, nav button ViewGroups + * @param deviceProfile The device profile containing information about the device's + * configuration. + */ fun adjustForSetupInPhoneMode( - navButtonsLayoutParams: FrameLayout.LayoutParams, - navButtonsViewLayoutParams: FrameLayout.LayoutParams, - deviceProfile: DeviceProfile + nearestTouchFrameLayoutParams: FrameLayout.LayoutParams, + deviceProfile: DeviceProfile, ) { val phoneOrPortraitSetupMargin = resources.getDimensionPixelSize(R.dimen.taskbar_contextual_button_suw_margin) - navButtonsLayoutParams.marginStart = phoneOrPortraitSetupMargin - navButtonsLayoutParams.bottomMargin = + nearestTouchFrameLayoutParams.marginStart = phoneOrPortraitSetupMargin + nearestTouchFrameLayoutParams.bottomMargin = if (!deviceProfile.isLandscape) 0 else phoneOrPortraitSetupMargin - - resources.getDimensionPixelSize(R.dimen.taskbar_nav_buttons_size) / 2 - navButtonsViewLayoutParams.height = + resources.getDimensionPixelSize(R.dimen.taskbar_nav_buttons_size) / 2 + + nearestTouchFrameLayoutParams.height = resources.getDimensionPixelSize(R.dimen.taskbar_contextual_button_suw_height) } @@ -97,7 +104,7 @@ abstract class AbstractNavButtonLayoutter( buttonSize: Int, barAxisMarginStart: Int, barAxisMarginEnd: Int, - gravity: Int + gravity: Int, ) { val contextualContainerParams = FrameLayout.LayoutParams(buttonSize, ViewGroup.LayoutParams.MATCH_PARENT) diff --git a/quickstep/src/com/android/launcher3/taskbar/navbutton/NavButtonLayoutFactory.kt b/quickstep/src/com/android/launcher3/taskbar/navbutton/NavButtonLayoutFactory.kt index 2497fbb98e..a199dba0bd 100644 --- a/quickstep/src/com/android/launcher3/taskbar/navbutton/NavButtonLayoutFactory.kt +++ b/quickstep/src/com/android/launcher3/taskbar/navbutton/NavButtonLayoutFactory.kt @@ -66,7 +66,7 @@ class NavButtonLayoutFactory { isInSetup: Boolean, isThreeButtonNav: Boolean, phoneMode: Boolean, - @Rotation surfaceRotation: Int + @Rotation surfaceRotation: Int, ): NavButtonLayoutter { val navButtonContainer = navButtonsView.requireViewById(ID_END_NAV_BUTTONS) @@ -77,6 +77,18 @@ class NavButtonLayoutFactory { val isPhoneNavMode = phoneMode && isThreeButtonNav val isPhoneGestureMode = phoneMode && !isThreeButtonNav return when { + isInSetup -> { + SetupNavLayoutter( + resources, + navButtonsView, + navButtonContainer, + endContextualContainer, + startContextualContainer, + imeSwitcher, + a11yButton, + space, + ) + } isPhoneNavMode -> { if (!deviceProfile.isLandscape) { navButtonsView.setIsVertical(false) @@ -87,7 +99,7 @@ class NavButtonLayoutFactory { startContextualContainer, imeSwitcher, a11yButton, - space + space, ) } else if (surfaceRotation == ROTATION_90) { navButtonsView.setIsVertical(true) @@ -98,7 +110,7 @@ class NavButtonLayoutFactory { startContextualContainer, imeSwitcher, a11yButton, - space + space, ) } else { navButtonsView.setIsVertical(true) @@ -109,36 +121,23 @@ class NavButtonLayoutFactory { startContextualContainer, imeSwitcher, a11yButton, - space + space, ) } } isPhoneGestureMode -> { PhoneGestureLayoutter( resources, - navButtonsView, navButtonContainer, endContextualContainer, startContextualContainer, imeSwitcher, a11yButton, - space + space, ) } deviceProfile.isTaskbarPresent -> { return when { - isInSetup -> { - SetupNavLayoutter( - resources, - navButtonsView, - navButtonContainer, - endContextualContainer, - startContextualContainer, - imeSwitcher, - a11yButton, - space - ) - } isKidsMode -> { KidsNavLayoutter( resources, @@ -147,7 +146,7 @@ class NavButtonLayoutFactory { startContextualContainer, imeSwitcher, a11yButton, - space + space, ) } else -> @@ -158,7 +157,7 @@ class NavButtonLayoutFactory { startContextualContainer, imeSwitcher, a11yButton, - space + space, ) } } diff --git a/quickstep/src/com/android/launcher3/taskbar/navbutton/PhoneGestureLayoutter.kt b/quickstep/src/com/android/launcher3/taskbar/navbutton/PhoneGestureLayoutter.kt index 390ec342e1..e0f2a22b2c 100644 --- a/quickstep/src/com/android/launcher3/taskbar/navbutton/PhoneGestureLayoutter.kt +++ b/quickstep/src/com/android/launcher3/taskbar/navbutton/PhoneGestureLayoutter.kt @@ -17,25 +17,21 @@ package com.android.launcher3.taskbar.navbutton import android.content.res.Resources -import android.view.Gravity import android.view.ViewGroup -import android.widget.FrameLayout import android.widget.ImageView import android.widget.LinearLayout import android.widget.Space -import com.android.launcher3.DeviceProfile import com.android.launcher3.taskbar.TaskbarActivityContext /** Layoutter for showing gesture navigation on phone screen. No buttons here, no-op container */ class PhoneGestureLayoutter( resources: Resources, - navButtonsView: NearestTouchFrame, navBarContainer: LinearLayout, endContextualContainer: ViewGroup, startContextualContainer: ViewGroup, imeSwitcher: ImageView?, a11yButton: ImageView?, - space: Space? + space: Space?, ) : AbstractNavButtonLayoutter( resources, @@ -44,33 +40,10 @@ class PhoneGestureLayoutter( startContextualContainer, imeSwitcher, a11yButton, - space + space, ) { - private val mNavButtonsView = navButtonsView override fun layoutButtons(context: TaskbarActivityContext, isA11yButtonPersistent: Boolean) { - // TODO: look into if we should use SetupNavLayoutter instead. - if (!context.isUserSetupComplete) { - // Since setup wizard only has back button enabled, it looks strange to be - // end-aligned, so start-align instead. - val navButtonsLayoutParams = navButtonContainer.layoutParams as FrameLayout.LayoutParams - val navButtonsViewLayoutParams = - mNavButtonsView.layoutParams as FrameLayout.LayoutParams - val deviceProfile: DeviceProfile = context.deviceProfile - - navButtonsLayoutParams.marginEnd = 0 - navButtonsLayoutParams.gravity = Gravity.START - context.setTaskbarWindowSize(context.setupWindowSize) - - adjustForSetupInPhoneMode( - navButtonsLayoutParams, - navButtonsViewLayoutParams, - deviceProfile - ) - mNavButtonsView.layoutParams = navButtonsViewLayoutParams - navButtonContainer.layoutParams = navButtonsLayoutParams - } - endContextualContainer.removeAllViews() startContextualContainer.removeAllViews() } diff --git a/quickstep/src/com/android/launcher3/taskbar/navbutton/SetupNavLayoutter.kt b/quickstep/src/com/android/launcher3/taskbar/navbutton/SetupNavLayoutter.kt index e032430c1d..eb3fdeb99e 100644 --- a/quickstep/src/com/android/launcher3/taskbar/navbutton/SetupNavLayoutter.kt +++ b/quickstep/src/com/android/launcher3/taskbar/navbutton/SetupNavLayoutter.kt @@ -29,12 +29,15 @@ import com.android.launcher3.DeviceProfile import com.android.launcher3.R import com.android.launcher3.taskbar.TaskbarActivityContext +const val SUW_THEME_SYSTEM_PROPERTY = "setupwizard.theme" +const val GLIF_EXPRESSIVE_THEME = "glif_expressive" +const val GLIF_EXPRESSIVE_LIGHT_THEME = "glif_expressive_light" const val SQUARE_ASPECT_RATIO_BOTTOM_BOUND = 0.95 const val SQUARE_ASPECT_RATIO_UPPER_BOUND = 1.05 class SetupNavLayoutter( resources: Resources, - navButtonsView: NearestTouchFrame, + nearestTouchFrame: NearestTouchFrame, navButtonContainer: LinearLayout, endContextualContainer: ViewGroup, startContextualContainer: ViewGroup, @@ -51,17 +54,19 @@ class SetupNavLayoutter( a11yButton, space, ) { - private val mNavButtonsView = navButtonsView + // mNearestTouchFrame is a ViewGroup that contains start, end, nav button ViewGroups + private val mNearestTouchFrame = nearestTouchFrame override fun layoutButtons(context: TaskbarActivityContext, isA11yButtonPersistent: Boolean) { - val SUWTheme = SystemProperties.get("setupwizard.theme", "") - if (SUWTheme == "glif_expressive" || SUWTheme == "glif_expressive_light") { + val SUWTheme = SystemProperties.get(SUW_THEME_SYSTEM_PROPERTY, "") + if (SUWTheme == GLIF_EXPRESSIVE_THEME || SUWTheme == GLIF_EXPRESSIVE_LIGHT_THEME) { return } // Since setup wizard only has back button enabled, it looks strange to be // end-aligned, so start-align instead. val navButtonsLayoutParams = navButtonContainer.layoutParams as FrameLayout.LayoutParams - val navButtonsViewLayoutParams = mNavButtonsView.layoutParams as FrameLayout.LayoutParams + val navButtonsOverallViewGroupLayoutParams = + mNearestTouchFrame.layoutParams as FrameLayout.LayoutParams val deviceProfile: DeviceProfile = context.deviceProfile navButtonsLayoutParams.marginEnd = 0 @@ -77,18 +82,14 @@ class SetupNavLayoutter( ) { navButtonsLayoutParams.marginStart = resources.getDimensionPixelSize(R.dimen.taskbar_back_button_suw_start_margin) - navButtonsViewLayoutParams.bottomMargin = + navButtonsOverallViewGroupLayoutParams.bottomMargin = resources.getDimensionPixelSize(R.dimen.taskbar_back_button_suw_bottom_margin) navButtonsLayoutParams.height = resources.getDimensionPixelSize(R.dimen.taskbar_back_button_suw_height) } else { - adjustForSetupInPhoneMode( - navButtonsLayoutParams, - navButtonsViewLayoutParams, - deviceProfile, - ) + adjustForSetupInPhoneMode(navButtonsOverallViewGroupLayoutParams, deviceProfile) } - mNavButtonsView.layoutParams = navButtonsViewLayoutParams + mNearestTouchFrame.layoutParams = navButtonsOverallViewGroupLayoutParams navButtonContainer.layoutParams = navButtonsLayoutParams endContextualContainer.removeAllViews() -- cgit v1.2.3-59-g8ed1b