1 /*
2  * Copyright (C) 2020 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.statusbar.policy.dagger;
18 
19 import android.content.Context;
20 import android.content.res.Resources;
21 import android.os.UserManager;
22 
23 import com.android.internal.R;
24 import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
25 import com.android.systemui.dagger.SysUISingleton;
26 import com.android.systemui.dagger.qualifiers.Main;
27 import com.android.systemui.settings.UserTracker;
28 import com.android.systemui.statusbar.connectivity.AccessPointController;
29 import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl;
30 import com.android.systemui.statusbar.connectivity.NetworkController;
31 import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
32 import com.android.systemui.statusbar.connectivity.WifiPickerTrackerFactory;
33 import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
34 import com.android.systemui.statusbar.policy.BluetoothController;
35 import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
36 import com.android.systemui.statusbar.policy.CastController;
37 import com.android.systemui.statusbar.policy.CastControllerImpl;
38 import com.android.systemui.statusbar.policy.ConfigurationController;
39 import com.android.systemui.statusbar.policy.DataSaverController;
40 import com.android.systemui.statusbar.policy.DeviceControlsController;
41 import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl;
42 import com.android.systemui.statusbar.policy.DevicePostureController;
43 import com.android.systemui.statusbar.policy.DevicePostureControllerImpl;
44 import com.android.systemui.statusbar.policy.ExtensionController;
45 import com.android.systemui.statusbar.policy.ExtensionControllerImpl;
46 import com.android.systemui.statusbar.policy.FlashlightController;
47 import com.android.systemui.statusbar.policy.FlashlightControllerImpl;
48 import com.android.systemui.statusbar.policy.HotspotController;
49 import com.android.systemui.statusbar.policy.HotspotControllerImpl;
50 import com.android.systemui.statusbar.policy.KeyguardStateController;
51 import com.android.systemui.statusbar.policy.KeyguardStateControllerImpl;
52 import com.android.systemui.statusbar.policy.LocationController;
53 import com.android.systemui.statusbar.policy.LocationControllerImpl;
54 import com.android.systemui.statusbar.policy.NextAlarmController;
55 import com.android.systemui.statusbar.policy.NextAlarmControllerImpl;
56 import com.android.systemui.statusbar.policy.RotationLockController;
57 import com.android.systemui.statusbar.policy.RotationLockControllerImpl;
58 import com.android.systemui.statusbar.policy.SecurityController;
59 import com.android.systemui.statusbar.policy.SecurityControllerImpl;
60 import com.android.systemui.statusbar.policy.UserInfoController;
61 import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
62 import com.android.systemui.statusbar.policy.WalletController;
63 import com.android.systemui.statusbar.policy.WalletControllerImpl;
64 import com.android.systemui.statusbar.policy.ZenModeController;
65 import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
66 import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepository;
67 import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepositoryImpl;
68 
69 import dagger.Binds;
70 import dagger.Module;
71 import dagger.Provides;
72 
73 import java.util.concurrent.Executor;
74 
75 import javax.inject.Named;
76 
77 /** Dagger Module for code in the statusbar.policy package. */
78 @Module
79 public interface StatusBarPolicyModule {
80 
81     String DEVICE_STATE_ROTATION_LOCK_DEFAULTS = "DEVICE_STATE_ROTATION_LOCK_DEFAULTS";
82 
83     /** */
84     @Binds
provideBluetoothController(BluetoothControllerImpl controllerImpl)85     BluetoothController provideBluetoothController(BluetoothControllerImpl controllerImpl);
86 
87     /** */
88     @Binds
provideBluetoothRepository(BluetoothRepositoryImpl impl)89     BluetoothRepository provideBluetoothRepository(BluetoothRepositoryImpl impl);
90 
91     /** */
92     @Binds
provideCastController(CastControllerImpl controllerImpl)93     CastController provideCastController(CastControllerImpl controllerImpl);
94 
95     /** */
96     @Binds
bindConfigurationController(ConfigurationControllerImpl impl)97     ConfigurationController bindConfigurationController(ConfigurationControllerImpl impl);
98 
99     /** */
100     @Binds
provideExtensionController(ExtensionControllerImpl controllerImpl)101     ExtensionController provideExtensionController(ExtensionControllerImpl controllerImpl);
102 
103     /** */
104     @Binds
provideFlashlightController(FlashlightControllerImpl controllerImpl)105     FlashlightController provideFlashlightController(FlashlightControllerImpl controllerImpl);
106 
107     /** */
108     @Binds
provideKeyguardMonitor(KeyguardStateControllerImpl controllerImpl)109     KeyguardStateController provideKeyguardMonitor(KeyguardStateControllerImpl controllerImpl);
110 
111     /** */
112     @Binds
provideHotspotController(HotspotControllerImpl controllerImpl)113     HotspotController provideHotspotController(HotspotControllerImpl controllerImpl);
114 
115     /** */
116     @Binds
provideLocationController(LocationControllerImpl controllerImpl)117     LocationController provideLocationController(LocationControllerImpl controllerImpl);
118 
119     /** */
120     @Binds
provideNetworkController(NetworkControllerImpl controllerImpl)121     NetworkController provideNetworkController(NetworkControllerImpl controllerImpl);
122 
123     /** */
124     @Binds
provideNextAlarmController(NextAlarmControllerImpl controllerImpl)125     NextAlarmController provideNextAlarmController(NextAlarmControllerImpl controllerImpl);
126 
127     /** */
128     @Binds
provideRotationLockController(RotationLockControllerImpl controllerImpl)129     RotationLockController provideRotationLockController(RotationLockControllerImpl controllerImpl);
130 
131     /** */
132     @Binds
provideSecurityController(SecurityControllerImpl controllerImpl)133     SecurityController provideSecurityController(SecurityControllerImpl controllerImpl);
134 
135     /** */
136     @Binds
provideUserInfoContrller(UserInfoControllerImpl controllerImpl)137     UserInfoController provideUserInfoContrller(UserInfoControllerImpl controllerImpl);
138 
139     /** */
140     @Binds
provideZenModeController(ZenModeControllerImpl controllerImpl)141     ZenModeController provideZenModeController(ZenModeControllerImpl controllerImpl);
142 
143     /** */
144     @Binds
provideDeviceControlsController( DeviceControlsControllerImpl controllerImpl)145     DeviceControlsController provideDeviceControlsController(
146             DeviceControlsControllerImpl controllerImpl);
147 
148     /** */
149     @Binds
provideWalletController(WalletControllerImpl controllerImpl)150     WalletController provideWalletController(WalletControllerImpl controllerImpl);
151 
152     /** */
153     @Binds
provideAccessPointController( AccessPointControllerImpl accessPointControllerImpl)154     AccessPointController provideAccessPointController(
155             AccessPointControllerImpl accessPointControllerImpl);
156 
157     /** */
158     @Binds
provideDevicePostureController( DevicePostureControllerImpl devicePostureControllerImpl)159     DevicePostureController provideDevicePostureController(
160             DevicePostureControllerImpl devicePostureControllerImpl);
161 
162     /** */
163     @SysUISingleton
164     @Provides
provideAccessPointControllerImpl( UserManager userManager, UserTracker userTracker, @Main Executor mainExecutor, WifiPickerTrackerFactory wifiPickerTrackerFactory )165     static AccessPointControllerImpl  provideAccessPointControllerImpl(
166             UserManager userManager,
167             UserTracker userTracker,
168             @Main Executor mainExecutor,
169             WifiPickerTrackerFactory wifiPickerTrackerFactory
170     ) {
171         AccessPointControllerImpl controller = new AccessPointControllerImpl(
172                 userManager,
173                 userTracker,
174                 mainExecutor,
175                 wifiPickerTrackerFactory
176         );
177         controller.init();
178         return controller;
179     }
180 
181     /** Returns a singleton instance of DeviceStateRotationLockSettingsManager */
182     @SysUISingleton
183     @Provides
provideAutoRotateSettingsManager( Context context)184     static DeviceStateRotationLockSettingsManager provideAutoRotateSettingsManager(
185             Context context) {
186         return DeviceStateRotationLockSettingsManager.getInstance(context);
187     }
188 
189     /**
190      * Default values for per-device state rotation lock settings.
191      */
192     @Provides
193     @Named(DEVICE_STATE_ROTATION_LOCK_DEFAULTS)
providesDeviceStateRotationLockDefaults(@ain Resources resources)194     static String[] providesDeviceStateRotationLockDefaults(@Main Resources resources) {
195         return resources.getStringArray(
196                 R.array.config_perDeviceStateRotationLockDefaults);
197     }
198 
199     /** */
200     @Provides
201     @SysUISingleton
provideDataSaverController(NetworkController networkController)202     static DataSaverController provideDataSaverController(NetworkController networkController) {
203         return networkController.getDataSaverController();
204     }
205 }
206