1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 
18 package com.android.systemui.keyguard.ui.view.layout.blueprints
19 
20 import com.android.systemui.communal.ui.view.layout.sections.CommunalTutorialIndicatorSection
21 import com.android.systemui.dagger.SysUISingleton
22 import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
23 import com.android.systemui.keyguard.shared.model.KeyguardSection
24 import com.android.systemui.keyguard.ui.view.layout.sections.AccessibilityActionsSection
25 import com.android.systemui.keyguard.ui.view.layout.sections.AlignShortcutsToUdfpsSection
26 import com.android.systemui.keyguard.ui.view.layout.sections.AodBurnInSection
27 import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection
28 import com.android.systemui.keyguard.ui.view.layout.sections.ClockSection
29 import com.android.systemui.keyguard.ui.view.layout.sections.DefaultDeviceEntrySection
30 import com.android.systemui.keyguard.ui.view.layout.sections.DefaultIndicationAreaSection
31 import com.android.systemui.keyguard.ui.view.layout.sections.DefaultNotificationStackScrollLayoutSection
32 import com.android.systemui.keyguard.ui.view.layout.sections.DefaultSettingsPopupMenuSection
33 import com.android.systemui.keyguard.ui.view.layout.sections.DefaultStatusBarSection
34 import com.android.systemui.keyguard.ui.view.layout.sections.DefaultStatusViewSection
35 import com.android.systemui.keyguard.ui.view.layout.sections.DefaultUdfpsAccessibilityOverlaySection
36 import com.android.systemui.keyguard.ui.view.layout.sections.KeyguardSectionsModule
37 import com.android.systemui.keyguard.ui.view.layout.sections.KeyguardSliceViewSection
38 import com.android.systemui.keyguard.ui.view.layout.sections.SmartspaceSection
39 import com.android.systemui.util.kotlin.getOrNull
40 import java.util.Optional
41 import javax.inject.Inject
42 import javax.inject.Named
43 import kotlinx.coroutines.ExperimentalCoroutinesApi
44 
45 /** Vertically aligns the shortcuts with the udfps. */
46 @ExperimentalCoroutinesApi
47 @SysUISingleton
48 class ShortcutsBesideUdfpsKeyguardBlueprint
49 @Inject
50 constructor(
51     accessibilityActionsSection: AccessibilityActionsSection,
52     alignShortcutsToUdfpsSection: AlignShortcutsToUdfpsSection,
53     defaultIndicationAreaSection: DefaultIndicationAreaSection,
54     defaultDeviceEntrySection: DefaultDeviceEntrySection,
55     @Named(KeyguardSectionsModule.KEYGUARD_AMBIENT_INDICATION_AREA_SECTION)
56     defaultAmbientIndicationAreaSection: Optional<KeyguardSection>,
57     defaultSettingsPopupMenuSection: DefaultSettingsPopupMenuSection,
58     defaultStatusViewSection: DefaultStatusViewSection,
59     defaultStatusBarSection: DefaultStatusBarSection,
60     defaultNotificationStackScrollLayoutSection: DefaultNotificationStackScrollLayoutSection,
61     aodNotificationIconsSection: AodNotificationIconsSection,
62     aodBurnInSection: AodBurnInSection,
63     communalTutorialIndicatorSection: CommunalTutorialIndicatorSection,
64     clockSection: ClockSection,
65     smartspaceSection: SmartspaceSection,
66     keyguardSliceViewSection: KeyguardSliceViewSection,
67     udfpsAccessibilityOverlaySection: DefaultUdfpsAccessibilityOverlaySection,
68 ) : KeyguardBlueprint {
69     override val id: String = SHORTCUTS_BESIDE_UDFPS
70 
71     override val sections =
72         listOfNotNull(
73             accessibilityActionsSection,
74             defaultIndicationAreaSection,
75             alignShortcutsToUdfpsSection,
76             defaultAmbientIndicationAreaSection.getOrNull(),
77             defaultSettingsPopupMenuSection,
78             defaultStatusViewSection,
79             defaultStatusBarSection,
80             defaultNotificationStackScrollLayoutSection,
81             aodNotificationIconsSection,
82             smartspaceSection,
83             aodBurnInSection,
84             communalTutorialIndicatorSection,
85             clockSection,
86             keyguardSliceViewSection,
87             defaultDeviceEntrySection,
88             udfpsAccessibilityOverlaySection, // Add LAST: Intentionally has z-order above others
89         )
90 
91     companion object {
92         const val SHORTCUTS_BESIDE_UDFPS = "shortcuts-besides-udfps"
93     }
94 }
95