• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.hardware.devicestate.DeviceStateManager;
22 import android.os.Handler;
23 import android.os.UserManager;
24 
25 import com.android.internal.R;
26 import com.android.settingslib.devicestate.AndroidSecureSettings;
27 import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManager;
28 import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManagerProvider;
29 import com.android.settingslib.devicestate.PosturesHelper;
30 import com.android.settingslib.devicestate.SecureSettings;
31 import com.android.settingslib.notification.modes.ZenIconLoader;
32 import com.android.systemui.dagger.SysUISingleton;
33 import com.android.systemui.dagger.qualifiers.Application;
34 import com.android.systemui.dagger.qualifiers.Background;
35 import com.android.systemui.dagger.qualifiers.Main;
36 import com.android.systemui.dagger.qualifiers.UiBackground;
37 import com.android.systemui.log.LogBuffer;
38 import com.android.systemui.log.LogBufferFactory;
39 import com.android.systemui.settings.UserTracker;
40 import com.android.systemui.statusbar.connectivity.AccessPointController;
41 import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl;
42 import com.android.systemui.statusbar.connectivity.NetworkController;
43 import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
44 import com.android.systemui.statusbar.connectivity.WifiPickerTrackerFactory;
45 import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
46 import com.android.systemui.statusbar.phone.ConfigurationForwarder;
47 import com.android.systemui.statusbar.policy.BatteryControllerLogger;
48 import com.android.systemui.statusbar.policy.BluetoothController;
49 import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
50 import com.android.systemui.statusbar.policy.CastController;
51 import com.android.systemui.statusbar.policy.CastControllerImpl;
52 import com.android.systemui.statusbar.policy.ConfigurationController;
53 import com.android.systemui.statusbar.policy.DataSaverController;
54 import com.android.systemui.statusbar.policy.DeviceControlsController;
55 import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl;
56 import com.android.systemui.statusbar.policy.DevicePostureController;
57 import com.android.systemui.statusbar.policy.DevicePostureControllerImpl;
58 import com.android.systemui.statusbar.policy.ExtensionController;
59 import com.android.systemui.statusbar.policy.ExtensionControllerImpl;
60 import com.android.systemui.statusbar.policy.FlashlightController;
61 import com.android.systemui.statusbar.policy.FlashlightControllerImpl;
62 import com.android.systemui.statusbar.policy.HotspotController;
63 import com.android.systemui.statusbar.policy.HotspotControllerImpl;
64 import com.android.systemui.statusbar.policy.KeyguardStateController;
65 import com.android.systemui.statusbar.policy.KeyguardStateControllerImpl;
66 import com.android.systemui.statusbar.policy.LocationController;
67 import com.android.systemui.statusbar.policy.LocationControllerImpl;
68 import com.android.systemui.statusbar.policy.NextAlarmController;
69 import com.android.systemui.statusbar.policy.NextAlarmControllerImpl;
70 import com.android.systemui.statusbar.policy.RotationLockController;
71 import com.android.systemui.statusbar.policy.RotationLockControllerImpl;
72 import com.android.systemui.statusbar.policy.SecurityController;
73 import com.android.systemui.statusbar.policy.SecurityControllerImpl;
74 import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController;
75 import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionControllerImpl;
76 import com.android.systemui.statusbar.policy.SplitShadeStateController;
77 import com.android.systemui.statusbar.policy.SplitShadeStateControllerImpl;
78 import com.android.systemui.statusbar.policy.UserInfoController;
79 import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
80 import com.android.systemui.statusbar.policy.WalletController;
81 import com.android.systemui.statusbar.policy.WalletControllerImpl;
82 import com.android.systemui.statusbar.policy.ZenModeController;
83 import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
84 import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepository;
85 import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepositoryImpl;
86 import com.android.systemui.statusbar.policy.data.repository.DeviceProvisioningRepositoryModule;
87 
88 import dagger.Binds;
89 import dagger.Module;
90 import dagger.Provides;
91 
92 import java.util.concurrent.Executor;
93 import java.util.concurrent.ExecutorService;
94 
95 import javax.inject.Named;
96 
97 /** Dagger Module for code in the statusbar.policy package. */
98 @Module(includes = {DeviceProvisioningRepositoryModule.class})
99 public interface StatusBarPolicyModule {
100 
101     String DEVICE_STATE_ROTATION_LOCK_DEFAULTS = "DEVICE_STATE_ROTATION_LOCK_DEFAULTS";
102 
103     /** */
104     @Binds
provideBluetoothController(BluetoothControllerImpl controllerImpl)105     BluetoothController provideBluetoothController(BluetoothControllerImpl controllerImpl);
106 
107     /** */
108     @Binds
provideBluetoothRepository(BluetoothRepositoryImpl impl)109     BluetoothRepository provideBluetoothRepository(BluetoothRepositoryImpl impl);
110 
111     /** */
112     @Binds
provideCastController(CastControllerImpl controllerImpl)113     CastController provideCastController(CastControllerImpl controllerImpl);
114 
115     /**
116      * @deprecated: unscoped configuration controller shouldn't be injected as it might lead to
117      * wrong updates in case of secondary displays.
118      */
119     @Binds
bindConfigurationController(@ain ConfigurationController impl)120     ConfigurationController bindConfigurationController(@Main ConfigurationController impl);
121 
122     /** */
123     @Binds
provideExtensionController(ExtensionControllerImpl controllerImpl)124     ExtensionController provideExtensionController(ExtensionControllerImpl controllerImpl);
125 
126     /** */
127     @Binds
provideFlashlightController(FlashlightControllerImpl controllerImpl)128     FlashlightController provideFlashlightController(FlashlightControllerImpl controllerImpl);
129 
130     /** */
131     @Binds
provideKeyguardMonitor(KeyguardStateControllerImpl controllerImpl)132     KeyguardStateController provideKeyguardMonitor(KeyguardStateControllerImpl controllerImpl);
133 
134     /** */
135     @Binds
provideSplitShadeStateController( SplitShadeStateControllerImpl splitShadeStateControllerImpl)136     SplitShadeStateController provideSplitShadeStateController(
137             SplitShadeStateControllerImpl splitShadeStateControllerImpl);
138 
139     /** */
140     @Binds
provideHotspotController(HotspotControllerImpl controllerImpl)141     HotspotController provideHotspotController(HotspotControllerImpl controllerImpl);
142 
143     /** */
144     @Binds
provideLocationController(LocationControllerImpl controllerImpl)145     LocationController provideLocationController(LocationControllerImpl controllerImpl);
146 
147     /** */
148     @Binds
provideNetworkController(NetworkControllerImpl controllerImpl)149     NetworkController provideNetworkController(NetworkControllerImpl controllerImpl);
150 
151     /** */
152     @Binds
provideNextAlarmController(NextAlarmControllerImpl controllerImpl)153     NextAlarmController provideNextAlarmController(NextAlarmControllerImpl controllerImpl);
154 
155     /** */
156     @Binds
provideRotationLockController(RotationLockControllerImpl controllerImpl)157     RotationLockController provideRotationLockController(RotationLockControllerImpl controllerImpl);
158 
159     /** */
160     @Binds
provideSecurityController(SecurityControllerImpl controllerImpl)161     SecurityController provideSecurityController(SecurityControllerImpl controllerImpl);
162 
163     /** */
164     @Binds
provideSensitiveNotificationProtectionController( SensitiveNotificationProtectionControllerImpl controllerImpl)165     SensitiveNotificationProtectionController provideSensitiveNotificationProtectionController(
166             SensitiveNotificationProtectionControllerImpl controllerImpl);
167 
168     /** */
169     @Binds
provideUserInfoContrller(UserInfoControllerImpl controllerImpl)170     UserInfoController provideUserInfoContrller(UserInfoControllerImpl controllerImpl);
171 
172     /** */
173     @Binds
provideZenModeController(ZenModeControllerImpl controllerImpl)174     ZenModeController provideZenModeController(ZenModeControllerImpl controllerImpl);
175 
176     /** */
177     @Binds
provideDeviceControlsController( DeviceControlsControllerImpl controllerImpl)178     DeviceControlsController provideDeviceControlsController(
179             DeviceControlsControllerImpl controllerImpl);
180 
181     /** */
182     @Binds
provideWalletController(WalletControllerImpl controllerImpl)183     WalletController provideWalletController(WalletControllerImpl controllerImpl);
184 
185     /** */
186     @Binds
provideAccessPointController( AccessPointControllerImpl accessPointControllerImpl)187     AccessPointController provideAccessPointController(
188             AccessPointControllerImpl accessPointControllerImpl);
189 
190     /** */
191     @Binds
provideDevicePostureController( DevicePostureControllerImpl devicePostureControllerImpl)192     DevicePostureController provideDevicePostureController(
193             DevicePostureControllerImpl devicePostureControllerImpl);
194 
195     /** */
196     @Binds
197     @SysUISingleton
198     @Main
provideGlobalConfigurationForwarder( @ain ConfigurationController configurationController)199     ConfigurationForwarder provideGlobalConfigurationForwarder(
200             @Main ConfigurationController configurationController);
201 
202     /** */
203     @Provides
204     @SysUISingleton
205     @Main
provideGlobalConfigurationController( @pplication Context context, ConfigurationControllerImpl.Factory factory)206     static ConfigurationController provideGlobalConfigurationController(
207             @Application Context context, ConfigurationControllerImpl.Factory factory) {
208         return factory.create(context);
209     }
210 
211     /** */
212     @SysUISingleton
213     @Provides
provideAccessPointControllerImpl( @pplication Context context, UserManager userManager, UserTracker userTracker, @Main Executor mainExecutor, WifiPickerTrackerFactory wifiPickerTrackerFactory )214     static AccessPointControllerImpl  provideAccessPointControllerImpl(
215             @Application Context context,
216             UserManager userManager,
217             UserTracker userTracker,
218             @Main Executor mainExecutor,
219             WifiPickerTrackerFactory wifiPickerTrackerFactory
220     ) {
221         AccessPointControllerImpl controller = new AccessPointControllerImpl(
222                 context,
223                 userManager,
224                 userTracker,
225                 mainExecutor,
226                 wifiPickerTrackerFactory
227         );
228         controller.init();
229         return controller;
230     }
231 
232     /** */
233     @SysUISingleton
234     @Provides
provideAndroidSecureSettings(Context context)235     static SecureSettings provideAndroidSecureSettings(Context context) {
236         return new AndroidSecureSettings(context.getContentResolver());
237     }
238 
239     /**  */
240     @SysUISingleton
241     @Provides
providePosturesHelper(Context context, DeviceStateManager deviceStateManager)242     static PosturesHelper providePosturesHelper(Context context,
243             DeviceStateManager deviceStateManager) {
244         return new PosturesHelper(context, deviceStateManager);
245     }
246 
247     /** Returns a singleton instance of DeviceStateAutoRotateSettingManager based on auto-rotate
248      * refactor flag. */
249     @SysUISingleton
250     @Provides
provideAutoRotateSettingsManager( Context context, @Background Executor bgExecutor, SecureSettings secureSettings, @Main Handler mainHandler, PosturesHelper posturesHelper )251     static DeviceStateAutoRotateSettingManager provideAutoRotateSettingsManager(
252             Context context,
253             @Background Executor bgExecutor,
254             SecureSettings secureSettings,
255             @Main Handler mainHandler,
256             PosturesHelper posturesHelper
257     ) {
258         return DeviceStateAutoRotateSettingManagerProvider.createInstance(context, bgExecutor,
259                 secureSettings, mainHandler, posturesHelper);
260     }
261 
262     /**
263      * Default values for per-device state rotation lock settings.
264      */
265     @Provides
266     @Named(DEVICE_STATE_ROTATION_LOCK_DEFAULTS)
providesDeviceStateRotationLockDefaults(@ain Resources resources)267     static String[] providesDeviceStateRotationLockDefaults(@Main Resources resources) {
268         return resources.getStringArray(
269                 R.array.config_perDeviceStateRotationLockDefaults);
270     }
271 
272     /** */
273     @Provides
274     @SysUISingleton
provideDataSaverController(NetworkController networkController)275     static DataSaverController provideDataSaverController(NetworkController networkController) {
276         return networkController.getDataSaverController();
277     }
278 
279     /** Provides a log buffer for BatteryControllerImpl */
280     @Provides
281     @SysUISingleton
282     @BatteryControllerLog
provideBatteryControllerLog(LogBufferFactory factory)283     static LogBuffer provideBatteryControllerLog(LogBufferFactory factory) {
284         return factory.create(BatteryControllerLogger.TAG, 30);
285     }
286 
287     /** Provides a log buffer for CastControllerImpl */
288     @Provides
289     @SysUISingleton
290     @CastControllerLog
provideCastControllerLog(LogBufferFactory factory)291     static LogBuffer provideCastControllerLog(LogBufferFactory factory) {
292         return factory.create("CastControllerLog", 50);
293     }
294 
295     /** Provides a {@link ZenIconLoader} that fetches icons in a background thread. */
296     @Provides
297     @SysUISingleton
provideZenIconLoader( @iBackground ExecutorService backgroundExecutorService)298     static ZenIconLoader provideZenIconLoader(
299             @UiBackground ExecutorService backgroundExecutorService) {
300         return new ZenIconLoader(backgroundExecutorService);
301     }
302 }
303