1 /*
2  * Copyright (C) 2024 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.communal.domain.interactor
18 
19 import android.content.testableContext
20 import android.os.userManager
21 import com.android.systemui.broadcast.broadcastDispatcher
22 import com.android.systemui.communal.data.repository.communalMediaRepository
23 import com.android.systemui.communal.data.repository.communalSmartspaceRepository
24 import com.android.systemui.communal.data.repository.communalWidgetRepository
25 import com.android.systemui.communal.widgets.EditWidgetsActivityStarter
26 import com.android.systemui.flags.Flags
27 import com.android.systemui.flags.fakeFeatureFlagsClassic
28 import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
29 import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
30 import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
31 import com.android.systemui.kosmos.Kosmos
32 import com.android.systemui.kosmos.Kosmos.Fixture
33 import com.android.systemui.kosmos.applicationCoroutineScope
34 import com.android.systemui.kosmos.testDispatcher
35 import com.android.systemui.kosmos.testScope
36 import com.android.systemui.log.logcatLogBuffer
37 import com.android.systemui.plugins.activityStarter
38 import com.android.systemui.res.R
39 import com.android.systemui.scene.domain.interactor.sceneInteractor
40 import com.android.systemui.settings.userTracker
41 import com.android.systemui.statusbar.phone.fakeManagedProfileController
42 import com.android.systemui.user.data.repository.fakeUserRepository
43 import com.android.systemui.util.mockito.mock
44 
<lambda>null45 val Kosmos.communalInteractor by Fixture {
46     CommunalInteractor(
47         applicationScope = applicationCoroutineScope,
48         bgDispatcher = testDispatcher,
49         bgScope = testScope.backgroundScope,
50         broadcastDispatcher = broadcastDispatcher,
51         communalSceneInteractor = communalSceneInteractor,
52         widgetRepository = communalWidgetRepository,
53         communalPrefsInteractor = communalPrefsInteractor,
54         mediaRepository = communalMediaRepository,
55         smartspaceRepository = communalSmartspaceRepository,
56         keyguardInteractor = keyguardInteractor,
57         keyguardTransitionInteractor = keyguardTransitionInteractor,
58         communalSettingsInteractor = communalSettingsInteractor,
59         editWidgetsActivityStarter = editWidgetsActivityStarter,
60         userTracker = userTracker,
61         activityStarter = activityStarter,
62         userManager = userManager,
63         sceneInteractor = sceneInteractor,
64         logBuffer = logcatLogBuffer("CommunalInteractor"),
65         tableLogBuffer = mock(),
66         managedProfileController = fakeManagedProfileController,
67     )
68 }
69 
<lambda>null70 val Kosmos.editWidgetsActivityStarter by Fixture<EditWidgetsActivityStarter> { mock() }
71 
setCommunalV2ConfigEnablednull72 fun Kosmos.setCommunalV2ConfigEnabled(enabled: Boolean) {
73     testableContext.orCreateTestableResources.addOverride(
74         com.android.internal.R.bool.config_glanceableHubEnabled,
75         enabled,
76     )
77 }
78 
setCommunalEnablednull79 suspend fun Kosmos.setCommunalEnabled(enabled: Boolean) {
80     fakeFeatureFlagsClassic.set(Flags.COMMUNAL_SERVICE_ENABLED, enabled)
81     if (enabled) {
82         fakeUserRepository.asMainUser()
83     } else {
84         fakeUserRepository.asDefaultUser()
85     }
86 }
87 
setCommunalV2Enablednull88 suspend fun Kosmos.setCommunalV2Enabled(enabled: Boolean) {
89     setCommunalV2ConfigEnabled(true)
90     if (enabled) {
91         fakeUserRepository.asMainUser()
92     } else {
93         fakeUserRepository.asDefaultUser()
94     }
95 }
96 
setCommunalAvailablenull97 suspend fun Kosmos.setCommunalAvailable(available: Boolean) {
98     setCommunalEnabled(available)
99     with(fakeKeyguardRepository) {
100         setIsEncryptedOrLockdown(!available)
101         setKeyguardShowing(available)
102     }
103 }
104 
setCommunalV2Availablenull105 suspend fun Kosmos.setCommunalV2Available(available: Boolean) {
106     setCommunalV2ConfigEnabled(true)
107     setCommunalEnabled(available)
108     with(fakeKeyguardRepository) {
109         setIsEncryptedOrLockdown(!available)
110         setKeyguardShowing(available)
111     }
112 }
113