Home | History | Annotate | Download | only in systemui
      1 /*
      2  * Copyright (C) 2018 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;
     18 
     19 import static com.android.systemui.Dependency.BG_HANDLER_NAME;
     20 import static com.android.systemui.Dependency.BG_LOOPER_NAME;
     21 import static com.android.systemui.Dependency.MAIN_HANDLER_NAME;
     22 import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
     23 
     24 import android.annotation.Nullable;
     25 import android.app.INotificationManager;
     26 import android.content.Context;
     27 import android.hardware.SensorPrivacyManager;
     28 import android.hardware.display.NightDisplayListener;
     29 import android.os.Handler;
     30 import android.os.HandlerThread;
     31 import android.os.Looper;
     32 import android.os.Process;
     33 import android.os.ServiceManager;
     34 import android.os.UserHandle;
     35 import android.util.DisplayMetrics;
     36 import android.view.IWindowManager;
     37 import android.view.WindowManagerGlobal;
     38 
     39 import com.android.internal.logging.MetricsLogger;
     40 import com.android.internal.statusbar.IStatusBarService;
     41 import com.android.settingslib.bluetooth.LocalBluetoothManager;
     42 import com.android.systemui.plugins.PluginInitializerImpl;
     43 import com.android.systemui.shared.plugins.PluginManager;
     44 import com.android.systemui.shared.plugins.PluginManagerImpl;
     45 import com.android.systemui.shared.system.ActivityManagerWrapper;
     46 import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
     47 import com.android.systemui.shared.system.PackageManagerWrapper;
     48 import com.android.systemui.statusbar.NavigationBarController;
     49 import com.android.systemui.statusbar.phone.AutoHideController;
     50 import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
     51 import com.android.systemui.statusbar.policy.ConfigurationController;
     52 import com.android.systemui.statusbar.policy.DataSaverController;
     53 import com.android.systemui.statusbar.policy.NetworkController;
     54 import com.android.systemui.util.leak.LeakDetector;
     55 
     56 import javax.inject.Named;
     57 import javax.inject.Singleton;
     58 
     59 import dagger.Module;
     60 import dagger.Provides;
     61 
     62 /**
     63  * Provides dependencies for the root component of sysui injection.
     64  * See SystemUI/docs/dagger.md
     65  */
     66 @Module
     67 public class DependencyProvider {
     68 
     69     @Singleton
     70     @Provides
     71     @Named(TIME_TICK_HANDLER_NAME)
     72     public Handler provideHandler() {
     73         HandlerThread thread = new HandlerThread("TimeTick");
     74         thread.start();
     75         return new Handler(thread.getLooper());
     76     }
     77 
     78     @Singleton
     79     @Provides
     80     @Named(BG_LOOPER_NAME)
     81     public Looper provideBgLooper() {
     82         HandlerThread thread = new HandlerThread("SysUiBg",
     83                 Process.THREAD_PRIORITY_BACKGROUND);
     84         thread.start();
     85         return thread.getLooper();
     86     }
     87 
     88     @Singleton
     89     @Provides
     90     @Named(BG_HANDLER_NAME)
     91     public Handler provideBgHandler(@Named(BG_LOOPER_NAME) Looper bgLooper) {
     92         return new Handler(bgLooper);
     93     }
     94 
     95     @Singleton
     96     @Provides
     97     @Named(MAIN_HANDLER_NAME)
     98     public Handler provideMainHandler() {
     99         return new Handler(Looper.getMainLooper());
    100     }
    101 
    102     @Singleton
    103     @Provides
    104     public DataSaverController provideDataSaverController(NetworkController networkController) {
    105         return networkController.getDataSaverController();
    106     }
    107 
    108     @Singleton
    109     @Provides
    110     @Nullable
    111     public LocalBluetoothManager provideLocalBluetoothController(Context context,
    112             @Named(BG_HANDLER_NAME) Handler bgHandler) {
    113         return LocalBluetoothManager.create(context, bgHandler,
    114                 UserHandle.ALL);
    115     }
    116 
    117     @Singleton
    118     @Provides
    119     public MetricsLogger provideMetricsLogger() {
    120         return new MetricsLogger();
    121     }
    122 
    123     @Singleton
    124     @Provides
    125     public IWindowManager provideIWindowManager() {
    126         return WindowManagerGlobal.getWindowManagerService();
    127     }
    128 
    129     @Singleton
    130     @Provides
    131     public IStatusBarService provideIStatusBarService() {
    132         return IStatusBarService.Stub.asInterface(
    133                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
    134     }
    135 
    136     /** */
    137     @Singleton
    138     @Provides
    139     public INotificationManager provideINotificationManager() {
    140         return INotificationManager.Stub.asInterface(
    141                 ServiceManager.getService(Context.NOTIFICATION_SERVICE));
    142     }
    143 
    144     @Singleton
    145     @Provides
    146     // Single instance of DisplayMetrics, gets updated by StatusBar, but can be used
    147     // anywhere it is needed.
    148     public DisplayMetrics provideDisplayMetrics() {
    149         return new DisplayMetrics();
    150     }
    151 
    152     @Singleton
    153     @Provides
    154     public SensorPrivacyManager provideSensorPrivacyManager(Context context) {
    155         return context.getSystemService(SensorPrivacyManager.class);
    156     }
    157 
    158     @Singleton
    159     @Provides
    160     public LeakDetector provideLeakDetector() {
    161         return LeakDetector.create();
    162 
    163     }
    164 
    165     @Singleton
    166     @Provides
    167     public NightDisplayListener provideNightDisplayListener(Context context,
    168             @Named(BG_HANDLER_NAME) Handler bgHandler) {
    169         return new NightDisplayListener(context, bgHandler);
    170     }
    171 
    172     @Singleton
    173     @Provides
    174     public PluginManager providePluginManager(Context context) {
    175         return new PluginManagerImpl(context, new PluginInitializerImpl());
    176     }
    177 
    178     @Singleton
    179     @Provides
    180     public NavigationBarController provideNavigationBarController(Context context,
    181             @Named(MAIN_HANDLER_NAME) Handler mainHandler) {
    182         return new NavigationBarController(context, mainHandler);
    183     }
    184 
    185     @Singleton
    186     @Provides
    187     public ConfigurationController provideConfigurationController(Context context) {
    188         return new ConfigurationControllerImpl(context);
    189     }
    190 
    191     @Singleton
    192     @Provides
    193     public AutoHideController provideAutoHideController(Context context,
    194             @Named(MAIN_HANDLER_NAME) Handler mainHandler) {
    195         return new AutoHideController(context, mainHandler);
    196     }
    197 
    198     @Singleton
    199     @Provides
    200     public ActivityManagerWrapper provideActivityManagerWrapper() {
    201         return ActivityManagerWrapper.getInstance();
    202     }
    203 
    204     @Singleton
    205     @Provides
    206     public DevicePolicyManagerWrapper provideDevicePolicyManagerWrapper() {
    207         return DevicePolicyManagerWrapper.getInstance();
    208     }
    209 
    210     @Singleton
    211     @Provides
    212     public PackageManagerWrapper providePackageManagerWrapper() {
    213         return PackageManagerWrapper.getInstance();
    214     }
    215 }
    216