diff options
| author | 2023-09-05 16:54:44 +0000 | |
|---|---|---|
| committer | 2023-09-08 00:12:17 +0000 | |
| commit | da20fdfb9b9044e764d2f0932f60aca1b1189401 (patch) | |
| tree | fcc6e83178f49ca881f2b6999c76113beab8799c | |
| parent | 91f73c2169c055898d1f83f6f2ad168c6218fec5 (diff) | |
Separate AOD shelf from status view
Create a new section for the aod shelf, and align it in different
locations based on split shade. Also use a placeholder view in order
to get proper sizes for NSSL.
Bug: 288242803
Fixes: 288237177
Test: atest SystemUITests
Test: all migration flags off/on
Change-Id: Ic0438db1f60e34908c7db56f4cc4b8f6f444be4a
11 files changed, 199 insertions, 26 deletions
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml index d8c808054fff..e48901ee0bb5 100644 --- a/packages/SystemUI/res/values/ids.xml +++ b/packages/SystemUI/res/values/ids.xml @@ -207,13 +207,14 @@ <!-- keyboard backlight indicator--> <item type="id" name="backlight_icon" /> + <!-- IDs for use in the keyguard/lockscreen scene --> <item type="id" name="keyguard_root_view" /> <item type="id" name="keyguard_indication_area" /> <item type="id" name="keyguard_indication_text" /> <item type="id" name="keyguard_indication_text_bottom" /> <item type="id" name="nssl_guideline" /> - <item type="id" name="nssl_top_barrier" /> - <item type="id" name="nssl_bottom_barrier" /> + <item type="id" name="nssl_placeholder" /> + <item type="id" name="aod_notification_icon_container" /> <item type="id" name="split_shade_guideline" /> <item type="id" name="lock_icon" /> <item type="id" name="lock_icon_bg" /> diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index d89796005e25..11f95895338a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -18,7 +18,6 @@ package com.android.keyguard; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; - import static com.android.keyguard.KeyguardClockSwitch.LARGE; import static com.android.keyguard.KeyguardClockSwitch.SMALL; import static com.android.systemui.flags.Flags.LOCKSCREEN_WALLPAPER_DREAM_ENABLED; @@ -42,6 +41,7 @@ import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.flags.Flags; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; import com.android.systemui.log.LogBuffer; @@ -240,7 +240,9 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS View nic = mView.findViewById( R.id.left_aligned_notification_icon_container); - nic.setVisibility(View.GONE); + if (nic != null) { + nic.setVisibility(View.GONE); + } } @Override @@ -307,7 +309,11 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS } int getNotificationIconAreaHeight() { - return mNotificationIconAreaController.getHeight(); + if (mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { + return 0; + } else { + return mNotificationIconAreaController.getHeight(); + } } @Override @@ -518,10 +524,12 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS } private void updateAodIcons() { - NotificationIconContainer nic = (NotificationIconContainer) - mView.findViewById( - com.android.systemui.R.id.left_aligned_notification_icon_container); - mNotificationIconAreaController.setupAodIcons(nic); + if (!mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { + NotificationIconContainer nic = (NotificationIconContainer) + mView.findViewById( + com.android.systemui.R.id.left_aligned_notification_icon_container); + mNotificationIconAreaController.setupAodIcons(nic); + } } private void setClock(ClockController clock) { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt index 8b0b0ae543a7..9503f2c75052 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt @@ -177,14 +177,13 @@ object KeyguardRootViewBinder { oldRight: Int, oldBottom: Int ) { - val ksv = v.findViewById(R.id.keyguard_status_view) as View? - val lockIcon = v.findViewById(R.id.lock_icon_view) as View? + val nsslPlaceholder = v.findViewById(R.id.nssl_placeholder) as View? - if (ksv != null && lockIcon != null) { + if (nsslPlaceholder != null) { // After layout, ensure the notifications are positioned correctly viewModel.onSharedNotificationContainerPositionChanged( - ksv!!.top.toFloat() + ksv!!.height, - lockIcon!!.y + nsslPlaceholder.top.toFloat(), + nsslPlaceholder.bottom.toFloat(), ) } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt index 85b2b82cd44a..d32be6ee2c4b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt @@ -22,6 +22,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardBlueprint +import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLockIconSection @@ -50,6 +51,7 @@ constructor( defaultStatusViewSection: DefaultStatusViewSection, defaultNotificationStackScrollLayoutSection: DefaultNotificationStackScrollLayoutSection, splitShadeGuidelines: SplitShadeGuidelines, + aodNotificationIconsSection: AodNotificationIconsSection, private val featureFlags: FeatureFlags, ) : KeyguardBlueprint { override val id: String = DEFAULT @@ -64,6 +66,7 @@ constructor( defaultStatusViewSection, defaultNotificationStackScrollLayoutSection, splitShadeGuidelines, + aodNotificationIconsSection, ) override fun addViews( diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/ShortcutsBesideUdfpsKeyguardBlueprint.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/ShortcutsBesideUdfpsKeyguardBlueprint.kt index bb3af6cc86a2..79a97fbd19df 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/ShortcutsBesideUdfpsKeyguardBlueprint.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/ShortcutsBesideUdfpsKeyguardBlueprint.kt @@ -20,6 +20,7 @@ package com.android.systemui.keyguard.ui.view.layout.blueprints import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.KeyguardBlueprint import com.android.systemui.keyguard.ui.view.layout.sections.AlignShortcutsToUdfpsSection +import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLockIconSection @@ -42,6 +43,7 @@ constructor( defaultStatusViewSection: DefaultStatusViewSection, splitShadeGuidelines: SplitShadeGuidelines, defaultNotificationStackScrollLayoutSection: DefaultNotificationStackScrollLayoutSection, + aodNotificationIconsSection: AodNotificationIconsSection, ) : KeyguardBlueprint { override val id: String = SHORTCUTS_BESIDE_UDFPS @@ -55,6 +57,7 @@ constructor( defaultStatusViewSection, defaultNotificationStackScrollLayoutSection, splitShadeGuidelines, + aodNotificationIconsSection, ) companion object { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt new file mode 100644 index 000000000000..ac11ba5b5ec6 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/AodNotificationIconsSection.kt @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.android.systemui.keyguard.ui.view.layout.sections + +import android.content.Context +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintSet +import androidx.constraintlayout.widget.ConstraintSet.BOTTOM +import androidx.constraintlayout.widget.ConstraintSet.END +import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID +import androidx.constraintlayout.widget.ConstraintSet.START +import androidx.constraintlayout.widget.ConstraintSet.TOP +import com.android.systemui.R +import com.android.systemui.flags.FeatureFlags +import com.android.systemui.flags.Flags +import com.android.systemui.keyguard.shared.model.KeyguardSection +import com.android.systemui.shade.NotificationPanelView +import com.android.systemui.statusbar.phone.NotificationIconAreaController +import com.android.systemui.statusbar.phone.NotificationIconContainer +import javax.inject.Inject + +class AodNotificationIconsSection +@Inject +constructor( + private val context: Context, + private val featureFlags: FeatureFlags, + private val notificationPanelView: NotificationPanelView, + private val notificationIconAreaController: NotificationIconAreaController, +) : KeyguardSection() { + private val nicId = R.id.aod_notification_icon_container + private lateinit var nic: NotificationIconContainer + + override fun addViews(constraintLayout: ConstraintLayout) { + if (!featureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { + return + } + nic = + NotificationIconContainer(context, null).apply { + id = nicId + setPaddingRelative( + resources.getDimensionPixelSize(R.dimen.below_clock_padding_start_icons), + 0, + 0, + 0 + ) + setVisibility(View.INVISIBLE) + } + + constraintLayout.addView(nic) + } + + override fun bindData(constraintLayout: ConstraintLayout) { + if (!featureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { + return + } + + notificationIconAreaController.setupAodIcons(nic) + } + + override fun applyConstraints(constraintSet: ConstraintSet) { + if (!featureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) { + return + } + val bottomMargin = + context.resources.getDimensionPixelSize(R.dimen.keyguard_status_view_bottom_margin) + + val useSplitShade = context.resources.getBoolean(R.bool.config_use_split_notification_shade) + + val topAlignment = + if (useSplitShade) { + TOP + } else { + BOTTOM + } + + constraintSet.apply { + connect(nicId, TOP, R.id.keyguard_status_view, topAlignment, bottomMargin) + connect(nicId, START, PARENT_ID, START) + connect(nicId, END, PARENT_ID, END) + constrainHeight( + nicId, + context.resources.getDimensionPixelSize(R.dimen.notification_shelf_height) + ) + } + } + + override fun removeViews(constraintLayout: ConstraintLayout) { + constraintLayout.removeView(nicId) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSection.kt index 3e91d9336b13..9c6e953ad2d5 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultLockIconSection.kt @@ -54,15 +54,15 @@ constructor( if (!featureFlags.isEnabled(Flags.MIGRATE_LOCK_ICON)) { return } - notificationPanelView.findViewById<View>(R.id.lock_icon_view).let { + notificationPanelView.findViewById<View>(lockIconViewId).let { notificationPanelView.removeView(it) } - val view = LockIconView(context, null).apply { id = R.id.lock_icon_view } + val view = LockIconView(context, null).apply { id = lockIconViewId } constraintLayout.addView(view) } override fun bindData(constraintLayout: ConstraintLayout) { - constraintLayout.findViewById<LockIconView?>(R.id.lock_icon_view)?.let { + constraintLayout.findViewById<LockIconView?>(lockIconViewId)?.let { lockIconViewController.setLockIconView(it) } } @@ -97,7 +97,7 @@ constructor( } override fun removeViews(constraintLayout: ConstraintLayout) { - constraintLayout.removeView(R.id.lock_icon_view) + constraintLayout.removeView(lockIconViewId) } @VisibleForTesting diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt index 59c5d78bfce8..7fff43b82e93 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt @@ -17,10 +17,16 @@ package com.android.systemui.keyguard.ui.view.layout.sections +import android.content.Context import android.view.View import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet +import androidx.constraintlayout.widget.ConstraintSet.BOTTOM +import androidx.constraintlayout.widget.ConstraintSet.END +import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID +import androidx.constraintlayout.widget.ConstraintSet.START +import androidx.constraintlayout.widget.ConstraintSet.TOP import com.android.systemui.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags @@ -35,12 +41,15 @@ import javax.inject.Inject class DefaultNotificationStackScrollLayoutSection @Inject constructor( + private val context: Context, private val featureFlags: FeatureFlags, private val notificationPanelView: NotificationPanelView, private val sharedNotificationContainer: SharedNotificationContainer, private val sharedNotificationContainerViewModel: SharedNotificationContainerViewModel, private val controller: NotificationStackScrollLayoutController, ) : KeyguardSection() { + private val placeHolderId = R.id.nssl_placeholder + override fun addViews(constraintLayout: ConstraintLayout) { if (!featureFlags.isEnabled(Flags.MIGRATE_NSSL)) { return @@ -51,19 +60,52 @@ constructor( (it.parent as ViewGroup).removeView(it) sharedNotificationContainer.addNotificationStackScrollLayout(it) } + + val view = View(context, null).apply { id = placeHolderId } + constraintLayout.addView(view) } override fun bindData(constraintLayout: ConstraintLayout) { - if (featureFlags.isEnabled(Flags.MIGRATE_NSSL)) { - SharedNotificationContainerBinder.bind( - sharedNotificationContainer, - sharedNotificationContainerViewModel, - controller, - ) + if (!featureFlags.isEnabled(Flags.MIGRATE_NSSL)) { + return } + SharedNotificationContainerBinder.bind( + sharedNotificationContainer, + sharedNotificationContainerViewModel, + controller, + ) } - override fun applyConstraints(constraintSet: ConstraintSet) {} + override fun applyConstraints(constraintSet: ConstraintSet) { + if (!featureFlags.isEnabled(Flags.MIGRATE_NSSL)) { + return + } + constraintSet.apply { + val bottomMargin = + context.resources.getDimensionPixelSize(R.dimen.keyguard_status_view_bottom_margin) + val useSplitShade = + context.resources.getBoolean(R.bool.config_use_split_notification_shade) + + val topAlignment = + if (useSplitShade) { + TOP + } else { + BOTTOM + } + connect( + R.id.nssl_placeholder, + TOP, + R.id.keyguard_status_view, + topAlignment, + bottomMargin + ) + connect(R.id.nssl_placeholder, START, PARENT_ID, START) + connect(R.id.nssl_placeholder, END, PARENT_ID, END) + connect(R.id.nssl_placeholder, BOTTOM, R.id.lock_icon_view, TOP) + } + } - override fun removeViews(constraintLayout: ConstraintLayout) {} + override fun removeViews(constraintLayout: ConstraintLayout) { + constraintLayout.removeView(placeHolderId) + } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusViewSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusViewSection.kt index b144f7ae6906..b1dd373a7657 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusViewSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultStatusViewSection.kt @@ -72,6 +72,11 @@ constructor( .inflate(R.layout.keyguard_status_view, constraintLayout, false) as KeyguardStatusView) .apply { clipChildren = false } + + // This is diassembled and moved to [AodNotificationIconsSection] + keyguardStatusView.findViewById<View>(R.id.left_aligned_notification_icon_container)?.let { + it.setVisibility(View.GONE) + } constraintLayout.addView(keyguardStatusView) } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java index 1be87463250f..3d8719656a1e 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java @@ -20,6 +20,7 @@ import static android.view.View.INVISIBLE; import static com.android.systemui.flags.Flags.FACE_AUTH_REFACTOR; import static com.android.systemui.flags.Flags.LOCKSCREEN_WALLPAPER_DREAM_ENABLED; +import static com.android.systemui.flags.Flags.MIGRATE_KEYGUARD_STATUS_VIEW; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeast; @@ -165,6 +166,7 @@ public class KeyguardClockSwitchControllerBaseTest extends SysuiTestCase { mFakeFeatureFlags = new FakeFeatureFlags(); mFakeFeatureFlags.set(FACE_AUTH_REFACTOR, false); mFakeFeatureFlags.set(LOCKSCREEN_WALLPAPER_DREAM_ENABLED, false); + mFakeFeatureFlags.set(MIGRATE_KEYGUARD_STATUS_VIEW, false); mController = new KeyguardClockSwitchController( mView, mStatusBarStateController, diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt index bf57ecb41091..b906f8d98041 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt @@ -27,6 +27,7 @@ import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.shared.model.KeyguardBlueprint import com.android.systemui.keyguard.ui.view.KeyguardRootView +import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection import com.android.systemui.keyguard.ui.view.layout.sections.DefaultLockIconSection @@ -60,6 +61,8 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { @Mock private lateinit var defaultStatusViewSection: DefaultStatusViewSection @Mock private lateinit var defaultNSSLSection: DefaultNotificationStackScrollLayoutSection @Mock private lateinit var splitShadeGuidelines: SplitShadeGuidelines + @Mock private lateinit var aodNotificationIconsSection: AodNotificationIconsSection + private val featureFlags = FakeFeatureFlags() @Before @@ -76,6 +79,7 @@ class DefaultKeyguardBlueprintTest : SysuiTestCase() { defaultStatusViewSection, defaultNSSLSection, splitShadeGuidelines, + aodNotificationIconsSection, featureFlags, ) featureFlags.set(Flags.LAZY_INFLATE_KEYGUARD, false) |