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 }