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