1 /*
2  * Copyright (C) 2021 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.qs
18 
19 import android.os.UserManager
20 import com.android.internal.logging.MetricsLogger
21 import com.android.internal.logging.UiEventLogger
22 import com.android.systemui.globalactions.GlobalActionsDialogLite
23 import com.android.systemui.plugins.ActivityStarter
24 import com.android.systemui.plugins.FalsingManager
25 import com.android.systemui.qs.FooterActionsController.ExpansionState
26 import com.android.systemui.qs.dagger.QSFlagsModule
27 import com.android.systemui.statusbar.phone.MultiUserSwitchController
28 import com.android.systemui.statusbar.policy.DeviceProvisionedController
29 import com.android.systemui.statusbar.policy.UserInfoController
30 import com.android.systemui.tuner.TunerService
31 import javax.inject.Inject
32 import javax.inject.Named
33 
34 class FooterActionsControllerBuilder @Inject constructor(
35     private val qsPanelController: QSPanelController,
36     private val activityStarter: ActivityStarter,
37     private val userManager: UserManager,
38     private val userInfoController: UserInfoController,
39     private val multiUserSwitchControllerFactory: MultiUserSwitchController.Factory,
40     private val deviceProvisionedController: DeviceProvisionedController,
41     private val falsingManager: FalsingManager,
42     private val metricsLogger: MetricsLogger,
43     private val tunerService: TunerService,
44     private val globalActionsDialog: GlobalActionsDialogLite,
45     private val uiEventLogger: UiEventLogger,
46     @Named(QSFlagsModule.PM_LITE_ENABLED) private val showPMLiteButton: Boolean
47 ) {
48     private lateinit var view: FooterActionsView
49     private lateinit var buttonsVisibleState: ExpansionState
50 
51     fun withView(view: FooterActionsView): FooterActionsControllerBuilder {
52         this.view = view
53         return this
54     }
55 
56     fun withButtonsVisibleWhen(state: ExpansionState): FooterActionsControllerBuilder {
57         buttonsVisibleState = state
58         return this
59     }
60 
61     fun build(): FooterActionsController {
62         return FooterActionsController(view, qsPanelController, activityStarter, userManager,
63                 userInfoController, multiUserSwitchControllerFactory.create(view),
64                 deviceProvisionedController, falsingManager, metricsLogger, tunerService,
65                 globalActionsDialog, uiEventLogger, showPMLiteButton, buttonsVisibleState)
66     }
67 }