diff options
| author | 2024-05-07 16:04:10 +0000 | |
|---|---|---|
| committer | 2024-05-07 16:04:10 +0000 | |
| commit | fe42feb5b72faab4bc5989ea9352015a1987d0d7 (patch) | |
| tree | 8db694067ae3349246f3e1db77ebd672743afc1d | |
| parent | 97bedb91b2581aeedab703affcb5ec391d63852d (diff) | |
| parent | 77cdc1f71baceb5d3d9527da478f115bd782e7d7 (diff) | |
Merge "Shortcuts should move to avoid device inset upon rotation" into main
2 files changed, 38 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceViewBinder.kt index abd79ab793d5..b9a79dccf76b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardQuickAffordanceViewBinder.kt @@ -118,6 +118,7 @@ object KeyguardQuickAffordanceViewBinder { } override fun destroy() { + view.setOnApplyWindowInsetsListener(null) disposableHandle.dispose() } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultShortcutsSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultShortcutsSection.kt index 45b82576c6c4..9146c605ab63 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultShortcutsSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultShortcutsSection.kt @@ -18,6 +18,7 @@ package com.android.systemui.keyguard.ui.view.layout.sections import android.content.res.Resources +import android.view.WindowInsets import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.constraintlayout.widget.ConstraintSet.BOTTOM @@ -25,15 +26,19 @@ import androidx.constraintlayout.widget.ConstraintSet.LEFT import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.RIGHT import androidx.constraintlayout.widget.ConstraintSet.VISIBILITY_MODE_IGNORE +import com.android.systemui.animation.view.LaunchableImageView import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.KeyguardBottomAreaRefactor +import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder +import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel import com.android.systemui.plugins.FalsingManager import com.android.systemui.res.R import com.android.systemui.statusbar.KeyguardIndicationController import com.android.systemui.statusbar.VibratorHelper +import dagger.Lazy import javax.inject.Inject class DefaultShortcutsSection @@ -46,11 +51,29 @@ constructor( private val falsingManager: FalsingManager, private val indicationController: KeyguardIndicationController, private val vibratorHelper: VibratorHelper, + private val keyguardBlueprintInteractor: Lazy<KeyguardBlueprintInteractor>, ) : BaseShortcutSection() { + + // Amount to increase the bottom margin by to avoid colliding with inset + private var safeInsetBottom = 0 + override fun addViews(constraintLayout: ConstraintLayout) { if (KeyguardBottomAreaRefactor.isEnabled) { addLeftShortcut(constraintLayout) addRightShortcut(constraintLayout) + + constraintLayout + .requireViewById<LaunchableImageView>(R.id.start_button) + .setOnApplyWindowInsetsListener { _, windowInsets -> + val tempSafeInset = windowInsets?.displayCutout?.safeInsetBottom ?: 0 + if (safeInsetBottom != tempSafeInset) { + safeInsetBottom = tempSafeInset + keyguardBlueprintInteractor + .get() + .refreshBlueprint(IntraBlueprintTransition.Type.DefaultTransition) + } + WindowInsets.CONSUMED + } } } @@ -91,12 +114,24 @@ constructor( constrainWidth(R.id.start_button, width) constrainHeight(R.id.start_button, height) connect(R.id.start_button, LEFT, PARENT_ID, LEFT, horizontalOffsetMargin) - connect(R.id.start_button, BOTTOM, PARENT_ID, BOTTOM, verticalOffsetMargin) + connect( + R.id.start_button, + BOTTOM, + PARENT_ID, + BOTTOM, + verticalOffsetMargin + safeInsetBottom + ) constrainWidth(R.id.end_button, width) constrainHeight(R.id.end_button, height) connect(R.id.end_button, RIGHT, PARENT_ID, RIGHT, horizontalOffsetMargin) - connect(R.id.end_button, BOTTOM, PARENT_ID, BOTTOM, verticalOffsetMargin) + connect( + R.id.end_button, + BOTTOM, + PARENT_ID, + BOTTOM, + verticalOffsetMargin + safeInsetBottom + ) // The constraint set visibility for start and end button are default visible, set to // ignore so the view's own initial visibility (invisible) is used |