1 /* 2 * Copyright (C) 2019 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.controls.dagger 18 19 import android.app.Activity 20 import android.content.pm.PackageManager 21 import com.android.systemui.controls.ControlsMetricsLogger 22 import com.android.systemui.controls.ControlsMetricsLoggerImpl 23 import com.android.systemui.controls.controller.ControlsBindingController 24 import com.android.systemui.controls.controller.ControlsBindingControllerImpl 25 import com.android.systemui.controls.controller.ControlsController 26 import com.android.systemui.controls.controller.ControlsControllerImpl 27 import com.android.systemui.controls.controller.ControlsFavoritePersistenceWrapper 28 import com.android.systemui.controls.management.ControlsEditingActivity 29 import com.android.systemui.controls.management.ControlsFavoritingActivity 30 import com.android.systemui.controls.management.ControlsListingController 31 import com.android.systemui.controls.management.ControlsListingControllerImpl 32 import com.android.systemui.controls.management.ControlsProviderSelectorActivity 33 import com.android.systemui.controls.management.ControlsRequestDialog 34 import com.android.systemui.controls.ui.ControlActionCoordinator 35 import com.android.systemui.controls.ui.ControlActionCoordinatorImpl 36 import com.android.systemui.controls.ui.ControlsActivity 37 import com.android.systemui.controls.ui.ControlsUiController 38 import com.android.systemui.controls.ui.ControlsUiControllerImpl 39 import com.android.systemui.dagger.SysUISingleton 40 import dagger.Binds 41 import dagger.BindsOptionalOf 42 import dagger.Module 43 import dagger.Provides 44 import dagger.multibindings.ClassKey 45 import dagger.multibindings.IntoMap 46 47 /** 48 * Module for injecting classes in `com.android.systemui.controls`- 49 * 50 * Classes provided by this module should only be injected directly into other classes in this 51 * module. For injecting outside of this module (for example, [GlobalActionsDialog], inject 52 * [ControlsComponent] and obtain the corresponding optionals from it. 53 */ 54 @Module 55 abstract class ControlsModule { 56 57 @Module 58 companion object { 59 @JvmStatic 60 @Provides 61 @SysUISingleton 62 @ControlsFeatureEnabled 63 fun providesControlsFeatureEnabled(pm: PackageManager): Boolean { 64 return pm.hasSystemFeature(PackageManager.FEATURE_CONTROLS) 65 } 66 } 67 68 @Binds 69 abstract fun provideControlsListingController( 70 controller: ControlsListingControllerImpl 71 ): ControlsListingController 72 73 @Binds 74 abstract fun provideControlsController(controller: ControlsControllerImpl): ControlsController 75 76 @Binds 77 abstract fun provideControlsBindingController( 78 controller: ControlsBindingControllerImpl 79 ): ControlsBindingController 80 81 @Binds 82 abstract fun provideUiController(controller: ControlsUiControllerImpl): ControlsUiController 83 84 @Binds 85 abstract fun provideMetricsLogger(logger: ControlsMetricsLoggerImpl): ControlsMetricsLogger 86 87 @Binds 88 abstract fun provideControlActionCoordinator( 89 coordinator: ControlActionCoordinatorImpl 90 ): ControlActionCoordinator 91 92 @BindsOptionalOf 93 abstract fun optionalPersistenceWrapper(): ControlsFavoritePersistenceWrapper 94 95 @Binds 96 @IntoMap 97 @ClassKey(ControlsProviderSelectorActivity::class) 98 abstract fun provideControlsProviderActivity( 99 activity: ControlsProviderSelectorActivity 100 ): Activity 101 102 @Binds 103 @IntoMap 104 @ClassKey(ControlsFavoritingActivity::class) 105 abstract fun provideControlsFavoritingActivity( 106 activity: ControlsFavoritingActivity 107 ): Activity 108 109 @Binds 110 @IntoMap 111 @ClassKey(ControlsEditingActivity::class) 112 abstract fun provideControlsEditingActivity( 113 activity: ControlsEditingActivity 114 ): Activity 115 116 @Binds 117 @IntoMap 118 @ClassKey(ControlsRequestDialog::class) 119 abstract fun provideControlsRequestDialog( 120 activity: ControlsRequestDialog 121 ): Activity 122 123 @Binds 124 @IntoMap 125 @ClassKey(ControlsActivity::class) 126 abstract fun provideControlsActivity(activity: ControlsActivity): Activity 127 } 128