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.qs
18 
19 import com.android.systemui.animation.Expandable
20 import com.android.systemui.qs.FgsManagerController.OnDialogDismissedListener
21 import com.android.systemui.qs.FgsManagerController.OnNumberOfPackagesChangedListener
22 import kotlinx.coroutines.flow.MutableStateFlow
23 
24 /** A fake [FgsManagerController] to be used in tests. */
25 class FakeFgsManagerController(
26     showFooterDot: Boolean = false,
27     numRunningPackages: Int = 0,
28 ) : FgsManagerController {
29 
30     var initialized = false
31         private set
32 
33     override var numRunningPackages = numRunningPackages
34         set(value) {
35             if (value != field) {
36                 field = value
37                 newChangesSinceDialogWasDismissed = true
<lambda>null38                 numRunningPackagesListeners.forEach { it.onNumberOfPackagesChanged(value) }
39             }
40         }
41 
42     override var newChangesSinceDialogWasDismissed = false
43         private set
44 
45     override val showFooterDot: MutableStateFlow<Boolean> = MutableStateFlow(showFooterDot)
46 
47     override var includesUserVisibleJobs = false
48         private set
49 
50     private val numRunningPackagesListeners = LinkedHashSet<OnNumberOfPackagesChangedListener>()
51     private val dialogDismissedListeners = LinkedHashSet<OnDialogDismissedListener>()
52 
53     /** Simulate that a fgs dialog was just dismissed. */
simulateDialogDismissnull54     fun simulateDialogDismiss() {
55         newChangesSinceDialogWasDismissed = false
56         dialogDismissedListeners.forEach { it.onDialogDismissed() }
57     }
58 
initnull59     override fun init() {
60         initialized = true
61     }
62 
showDialognull63     override fun showDialog(expandable: Expandable?) {}
64 
addOnNumberOfPackagesChangedListenernull65     override fun addOnNumberOfPackagesChangedListener(listener: OnNumberOfPackagesChangedListener) {
66         numRunningPackagesListeners.add(listener)
67     }
68 
removeOnNumberOfPackagesChangedListenernull69     override fun removeOnNumberOfPackagesChangedListener(
70         listener: OnNumberOfPackagesChangedListener
71     ) {
72         numRunningPackagesListeners.remove(listener)
73     }
74 
addOnDialogDismissedListenernull75     override fun addOnDialogDismissedListener(listener: OnDialogDismissedListener) {
76         dialogDismissedListeners.add(listener)
77     }
78 
removeOnDialogDismissedListenernull79     override fun removeOnDialogDismissedListener(listener: OnDialogDismissedListener) {
80         dialogDismissedListeners.remove(listener)
81     }
82 
visibleButtonsCountnull83     override fun visibleButtonsCount(): Int = 0
84 }
85