blob: 321206f173cd93f9cc5da854141503be76145de2 [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui;
import static com.android.systemui.Dependency.BG_HANDLER_NAME;
import static com.android.systemui.Dependency.BG_LOOPER_NAME;
import static com.android.systemui.Dependency.MAIN_HANDLER_NAME;
import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
import android.annotation.Nullable;
import android.app.INotificationManager;
import android.content.Context;
import android.hardware.SensorPrivacyManager;
import android.hardware.display.NightDisplayListener;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Process;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.util.DisplayMetrics;
import android.view.IWindowManager;
import android.view.WindowManagerGlobal;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.statusbar.IStatusBarService;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.systemui.plugins.PluginInitializerImpl;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.shared.plugins.PluginManagerImpl;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
import com.android.systemui.shared.system.PackageManagerWrapper;
import com.android.systemui.statusbar.NavigationBarController;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.util.leak.LeakDetector;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
/**
* Provides dependencies for the root component of sysui injection.
* See SystemUI/docs/dagger.md
*/
@Module
public class DependencyProvider {
@Singleton
@Provides
@Named(TIME_TICK_HANDLER_NAME)
public Handler provideHandler() {
HandlerThread thread = new HandlerThread("TimeTick");
thread.start();
return new Handler(thread.getLooper());
}
@Singleton
@Provides
@Named(BG_LOOPER_NAME)
public Looper provideBgLooper() {
HandlerThread thread = new HandlerThread("SysUiBg",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
return thread.getLooper();
}
@Singleton
@Provides
@Named(BG_HANDLER_NAME)
public Handler provideBgHandler(@Named(BG_LOOPER_NAME) Looper bgLooper) {
return new Handler(bgLooper);
}
@Singleton
@Provides
@Named(MAIN_HANDLER_NAME)
public Handler provideMainHandler() {
return new Handler(Looper.getMainLooper());
}
@Singleton
@Provides
public DataSaverController provideDataSaverController(NetworkController networkController) {
return networkController.getDataSaverController();
}
@Singleton
@Provides
@Nullable
public LocalBluetoothManager provideLocalBluetoothController(Context context,
@Named(BG_HANDLER_NAME) Handler bgHandler) {
return LocalBluetoothManager.create(context, bgHandler,
UserHandle.ALL);
}
@Singleton
@Provides
public MetricsLogger provideMetricsLogger() {
return new MetricsLogger();
}
@Singleton
@Provides
public IWindowManager provideIWindowManager() {
return WindowManagerGlobal.getWindowManagerService();
}
@Singleton
@Provides
public IStatusBarService provideIStatusBarService() {
return IStatusBarService.Stub.asInterface(
ServiceManager.getService(Context.STATUS_BAR_SERVICE));
}
/** */
@Singleton
@Provides
public INotificationManager provideINotificationManager() {
return INotificationManager.Stub.asInterface(
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
}
@Singleton
@Provides
// Single instance of DisplayMetrics, gets updated by StatusBar, but can be used
// anywhere it is needed.
public DisplayMetrics provideDisplayMetrics() {
return new DisplayMetrics();
}
@Singleton
@Provides
public SensorPrivacyManager provideSensorPrivacyManager(Context context) {
return context.getSystemService(SensorPrivacyManager.class);
}
@Singleton
@Provides
public LeakDetector provideLeakDetector() {
return LeakDetector.create();
}
@Singleton
@Provides
public NightDisplayListener provideNightDisplayListener(Context context,
@Named(BG_HANDLER_NAME) Handler bgHandler) {
return new NightDisplayListener(context, bgHandler);
}
@Singleton
@Provides
public PluginManager providePluginManager(Context context) {
return new PluginManagerImpl(context, new PluginInitializerImpl());
}
@Singleton
@Provides
public NavigationBarController provideNavigationBarController(Context context,
@Named(MAIN_HANDLER_NAME) Handler mainHandler) {
return new NavigationBarController(context, mainHandler);
}
@Singleton
@Provides
public ConfigurationController provideConfigurationController(Context context) {
return new ConfigurationControllerImpl(context);
}
@Singleton
@Provides
public AutoHideController provideAutoHideController(Context context,
@Named(MAIN_HANDLER_NAME) Handler mainHandler) {
return new AutoHideController(context, mainHandler);
}
@Singleton
@Provides
public ActivityManagerWrapper provideActivityManagerWrapper() {
return ActivityManagerWrapper.getInstance();
}
@Singleton
@Provides
public DevicePolicyManagerWrapper provideDevicePolicyManagerWrapper() {
return DevicePolicyManagerWrapper.getInstance();
}
@Singleton
@Provides
public PackageManagerWrapper providePackageManagerWrapper() {
return PackageManagerWrapper.getInstance();
}
}