I created multiple instances of MediaBrowserCompat in activities and fragments in my app and in this situation every component must create MediaBrowserCompat and connect it to service and so on. For make simpler, Is it a bad idea to use Dagger to create just one instance of MediaBrowserCompat and inject it into everywhere that I want?
Like this:
This my MediaBrowserModule that creates a MediaBrowserCompat
@Module
class MediaBrowserModule {
@Provides
@Singleton
fun providesMediaBrowserCompat(
context: Context,
componentName: ComponentName,
connectionCallback: MediaBrowserConnectionCallback
): MediaBrowserCompat = MediaBrowserCompat(context, componentName, connectionCallback, null)
@Provides
fun providesMediaBrowserServiceComponentName(context: Context): ComponentName =
ComponentName(context, MediaBrowserService::class.java)
@Provides
@Singleton
fun providesMediaBrowserConnectionStatus(): MutableLiveData<MediaBrowserConnectionCallback.ConnectionStatus> =
MutableLiveData()
}
MediaBrowser connection callback implementation:
class MediaBrowserConnectionCallback @Inject constructor(private val connectionStatus: MutableLiveData<ConnectionStatus>) :
MediaBrowserCompat.ConnectionCallback() {
override fun onConnected() {
super.onConnected()
connectionStatus.postValue(ConnectionStatus.Connected)
}
override fun onConnectionSuspended() {
super.onConnectionSuspended()
connectionStatus.postValue(ConnectionStatus.Suspended)
}
override fun onConnectionFailed() {
super.onConnectionFailed()
connectionStatus.postValue(ConnectionStatus.Failed)
}
enum class ConnectionStatus {
Connected, Suspended, Failed
}
}
finally, I can use it everywhere like below:
class MainActivity : DaggerAppCompatActivity(), Observer<MediaBrowserConnectionCallback.ConnectionStatus> {
@Inject
lateinit var connectionState: MutableLiveData<MediaBrowserConnectionCallback.ConnectionStatus>
@Inject
lateinit var mediaBrowserCompat: MediaBrowserCompat
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
connectionState.observe(this, this)
}
override fun onStart() {
super.onStart()
if (!mediaBrowserCompat.isConnected)
mediaBrowserCompat.connect()
}
override fun onChanged(status: MediaBrowserConnectionCallback.ConnectionStatus?) {
Toast.makeText(this, status?.name, Toast.LENGTH_LONG).show()
}
}
Thanks.