blob: 874217a67613cbdba9d7103a2d6239076d4dfed1 [file] [log] [blame]
package com.android.systemui.statusbar.window
import android.view.LayoutInflater
import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
import dagger.Module
import dagger.Provides
import javax.inject.Qualifier
/** Module providing dependencies related to the status bar window. */
@Module
abstract class StatusBarWindowModule {
/**
* Provides a [StatusBarWindowView].
*
* Only [StatusBarWindowController] should inject the view.
*/
@Module
companion object {
@JvmStatic
@Provides
@SysUISingleton
@InternalWindowView
fun providesStatusBarWindowView(layoutInflater: LayoutInflater): StatusBarWindowView {
return layoutInflater.inflate(
R.layout.super_status_bar,
/* root= */null
) as StatusBarWindowView?
?: throw IllegalStateException(
"R.layout.super_status_bar could not be properly inflated"
)
}
}
/**
* We want [StatusBarWindowView] to be provided to [StatusBarWindowController]'s constructor via
* dagger so that we can provide a fake window view when testing the controller. However, we wan
* want *only* the controller to be able to inject the window view.
*
* This protected qualifier annotation achieves this. [StatusBarWindowView] can only be injected
* if it's annotated with [InternalWindowView], and only classes inside this [statusbar.window]
* package can access the annotation.
*/
@Retention(AnnotationRetention.BINARY)
@Qualifier
protected annotation class InternalWindowView
}