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.settings.ControlsSettingsRepository 24 import com.android.systemui.controls.settings.ControlsSettingsRepositoryImpl 25 import com.android.systemui.controls.controller.ControlsBindingController 26 import com.android.systemui.controls.controller.ControlsBindingControllerImpl 27 import com.android.systemui.controls.controller.ControlsController 28 import com.android.systemui.controls.controller.ControlsControllerImpl 29 import com.android.systemui.controls.controller.ControlsFavoritePersistenceWrapper 30 import com.android.systemui.controls.controller.ControlsTileResourceConfiguration 31 import com.android.systemui.controls.management.ControlsEditingActivity 32 import com.android.systemui.controls.management.ControlsFavoritingActivity 33 import com.android.systemui.controls.management.ControlsListingController 34 import com.android.systemui.controls.management.ControlsListingControllerImpl 35 import com.android.systemui.controls.management.ControlsProviderSelectorActivity 36 import com.android.systemui.controls.management.ControlsRequestDialog 37 import com.android.systemui.controls.panels.AuthorizedPanelsRepository 38 import com.android.systemui.controls.panels.AuthorizedPanelsRepositoryImpl 39 import com.android.systemui.controls.panels.SelectedComponentRepository 40 import com.android.systemui.controls.panels.SelectedComponentRepositoryImpl 41 import com.android.systemui.controls.settings.ControlsSettingsDialogManager 42 import com.android.systemui.controls.settings.ControlsSettingsDialogManagerImpl 43 import com.android.systemui.controls.ui.ControlActionCoordinator 44 import com.android.systemui.controls.ui.ControlActionCoordinatorImpl 45 import com.android.systemui.controls.ui.ControlsActivity 46 import com.android.systemui.controls.ui.ControlsUiController 47 import com.android.systemui.controls.ui.ControlsUiControllerImpl 48 import com.android.systemui.dagger.SysUISingleton 49 import com.android.systemui.qs.tileimpl.QSTileImpl 50 import com.android.systemui.qs.tiles.DeviceControlsTile 51 import dagger.Binds 52 import dagger.BindsOptionalOf 53 import dagger.Module 54 import dagger.Provides 55 import dagger.multibindings.ClassKey 56 import dagger.multibindings.IntoMap 57 import dagger.multibindings.StringKey 58 59 /** 60 * Module for injecting classes in `com.android.systemui.controls`- 61 * 62 * Classes provided by this module should only be injected directly into other classes in this 63 * module. For injecting outside of this module (for example, [GlobalActionsDialog], inject 64 * [ControlsComponent] and obtain the corresponding optionals from it. 65 */ 66 @Module 67 abstract class ControlsModule { 68 69 @Module 70 companion object { 71 @JvmStatic 72 @Provides 73 @SysUISingleton 74 @ControlsFeatureEnabled 75 fun providesControlsFeatureEnabled(pm: PackageManager): Boolean { 76 return pm.hasSystemFeature(PackageManager.FEATURE_CONTROLS) 77 } 78 } 79 80 @Binds 81 abstract fun provideControlsListingController( 82 controller: ControlsListingControllerImpl 83 ): ControlsListingController 84 85 @Binds 86 abstract fun provideControlsController(controller: ControlsControllerImpl): ControlsController 87 88 @Binds 89 abstract fun provideControlsBindingController( 90 controller: ControlsBindingControllerImpl 91 ): ControlsBindingController 92 93 @Binds 94 abstract fun provideUiController(controller: ControlsUiControllerImpl): ControlsUiController 95 96 @Binds 97 abstract fun provideSettingsManager( 98 manager: ControlsSettingsRepositoryImpl 99 ): ControlsSettingsRepository 100 101 @Binds 102 abstract fun provideDialogManager( 103 manager: ControlsSettingsDialogManagerImpl 104 ): ControlsSettingsDialogManager 105 106 @Binds 107 abstract fun provideMetricsLogger(logger: ControlsMetricsLoggerImpl): ControlsMetricsLogger 108 109 @Binds 110 abstract fun provideControlActionCoordinator( 111 coordinator: ControlActionCoordinatorImpl 112 ): ControlActionCoordinator 113 114 @Binds 115 abstract fun provideAuthorizedPanelsRepository( 116 repository: AuthorizedPanelsRepositoryImpl 117 ): AuthorizedPanelsRepository 118 119 @Binds 120 abstract fun providePreferredPanelRepository( 121 repository: SelectedComponentRepositoryImpl 122 ): SelectedComponentRepository 123 124 @BindsOptionalOf 125 abstract fun optionalPersistenceWrapper(): ControlsFavoritePersistenceWrapper 126 127 @BindsOptionalOf 128 abstract fun provideControlsTileResourceConfiguration(): ControlsTileResourceConfiguration 129 130 @Binds 131 @IntoMap 132 @ClassKey(ControlsProviderSelectorActivity::class) 133 abstract fun provideControlsProviderActivity( 134 activity: ControlsProviderSelectorActivity 135 ): Activity 136 137 @Binds 138 @IntoMap 139 @ClassKey(ControlsFavoritingActivity::class) 140 abstract fun provideControlsFavoritingActivity( 141 activity: ControlsFavoritingActivity 142 ): Activity 143 144 @Binds 145 @IntoMap 146 @ClassKey(ControlsEditingActivity::class) 147 abstract fun provideControlsEditingActivity( 148 activity: ControlsEditingActivity 149 ): Activity 150 151 @Binds 152 @IntoMap 153 @ClassKey(ControlsRequestDialog::class) 154 abstract fun provideControlsRequestDialog( 155 activity: ControlsRequestDialog 156 ): Activity 157 158 @Binds 159 @IntoMap 160 @ClassKey(ControlsActivity::class) 161 abstract fun provideControlsActivity(activity: ControlsActivity): Activity 162 163 @Binds 164 @IntoMap 165 @StringKey(DeviceControlsTile.TILE_SPEC) 166 abstract fun bindDeviceControlsTile(controlsTile: DeviceControlsTile): QSTileImpl<*> 167 } 168