• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 package com.android.systemui.shade
18 
19 import android.content.Context
20 import android.view.ViewGroup
21 import com.android.systemui.plugins.statusbar.StatusBarStateController
22 import com.android.systemui.res.R
23 import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator
24 import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.Direction.END
25 import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.Direction.START
26 import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.ViewIdToTranslate
27 import com.android.systemui.statusbar.StatusBarState.SHADE
28 import com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED
29 import com.android.systemui.unfold.SysUIUnfoldScope
30 import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider
31 import javax.inject.Inject
32 
33 @SysUIUnfoldScope
34 class NotificationPanelUnfoldAnimationController
35 @Inject
36 constructor(
37     @ShadeDisplayAware private val context: Context,
38     statusBarStateController: StatusBarStateController,
39     progressProvider: NaturalRotationUnfoldProgressProvider,
40 ) {
41 
<lambda>null42     private val filterShade: () -> Boolean = {
43         statusBarStateController.getState() == SHADE ||
44             statusBarStateController.getState() == SHADE_LOCKED
45     }
46 
<lambda>null47     private val translateAnimator by lazy {
48         UnfoldConstantTranslateAnimator(
49             viewsIdToTranslate =
50                 setOf(
51                     ViewIdToTranslate(R.id.quick_settings_panel, START, filterShade),
52                     ViewIdToTranslate(R.id.qs_footer_actions, START, filterShade),
53                     ViewIdToTranslate(R.id.notification_stack_scroller, END, filterShade),
54                 ),
55             progressProvider = progressProvider,
56         )
57     }
58 
<lambda>null59     private val translateAnimatorStatusBar by lazy {
60         UnfoldConstantTranslateAnimator(
61             viewsIdToTranslate =
62                 setOf(
63                     ViewIdToTranslate(R.id.shade_header_system_icons, END, filterShade),
64                     ViewIdToTranslate(R.id.privacy_container, END, filterShade),
65                     ViewIdToTranslate(R.id.carrier_group, END, filterShade),
66                     ViewIdToTranslate(R.id.clock, START, filterShade),
67                     ViewIdToTranslate(R.id.date, START, filterShade),
68                 ),
69             progressProvider = progressProvider,
70         )
71     }
72 
setupnull73     fun setup(root: ViewGroup) {
74         val translationMax =
75             context.resources.getDimensionPixelSize(R.dimen.notification_side_paddings).toFloat()
76         translateAnimator.init(root, translationMax)
77         val splitShadeStatusBarViewGroup: ViewGroup? =
78             root.findViewById(R.id.split_shade_status_bar)
79         if (splitShadeStatusBarViewGroup != null) {
80             translateAnimatorStatusBar.init(splitShadeStatusBarViewGroup, translationMax)
81         }
82     }
83 }
84