@@ -23,6 +23,11 @@ import android.view.Menu
2323import androidx.activity.viewModels
2424import androidx.appcompat.app.AppCompatActivity
2525import androidx.lifecycle.Observer
26+ import androidx.lifecycle.ViewModelProviders
27+ import androidx.mediarouter.media.MediaControlIntent
28+ import androidx.mediarouter.media.MediaRouteSelector
29+ import androidx.mediarouter.media.MediaRouter
30+ import androidx.mediarouter.media.MediaRouterParams
2631import com.example.android.uamp.fragments.MediaItemFragment
2732import com.example.android.uamp.media.MusicService
2833import com.example.android.uamp.utils.Event
@@ -31,12 +36,16 @@ import com.example.android.uamp.viewmodels.MainActivityViewModel
3136import com.google.android.gms.cast.framework.CastButtonFactory
3237import com.google.android.gms.cast.framework.CastContext
3338
39+
3440class MainActivity : AppCompatActivity () {
3541
3642 private val viewModel by viewModels<MainActivityViewModel > {
3743 InjectorUtils .provideMainActivityViewModel(this )
3844 }
3945 private var castContext: CastContext ? = null
46+ private lateinit var selector: MediaRouteSelector
47+ private lateinit var router: MediaRouter
48+
4049
4150 override fun onCreate (savedInstanceState : Bundle ? ) {
4251 super .onCreate(savedInstanceState)
@@ -47,6 +56,16 @@ class MainActivity : AppCompatActivity() {
4756
4857 setContentView(R .layout.activity_main)
4958
59+ router = MediaRouter .getInstance(this )
60+ selector = MediaRouteSelector .Builder ()
61+ .addControlCategory(MediaControlIntent .CATEGORY_REMOTE_PLAYBACK )
62+ .build()
63+ router.routerParams = MediaRouterParams .Builder ().setTransferToLocalEnabled(true ).build()
64+ router.addCallback(
65+ selector, MediaRouterCallback (),
66+ MediaRouter .CALLBACK_FLAG_REQUEST_DISCOVERY
67+ )
68+
5069 // Since UAMP is a music player, the volume controls should adjust the music volume while
5170 // in the app.
5271 volumeControlStream = AudioManager .STREAM_MUSIC
@@ -114,4 +133,20 @@ class MainActivity : AppCompatActivity() {
114133 private fun getBrowseFragment (mediaId : String ): MediaItemFragment ? {
115134 return supportFragmentManager.findFragmentByTag(mediaId) as MediaItemFragment ?
116135 }
136+
137+ private inner class MediaRouterCallback : MediaRouter .Callback () {
138+ override fun onRouteSelected (
139+ router : MediaRouter ,
140+ route : MediaRouter .RouteInfo ,
141+ reason : Int
142+ ) {
143+ if (reason == MediaRouter .UNSELECT_REASON_ROUTE_CHANGED ) {
144+ Log .d(TAG , " Unselected because route changed, continue playback" )
145+ } else if (reason == MediaRouter .UNSELECT_REASON_STOPPED ) {
146+ Log .d(TAG , " Unselected because route was stopped, stop playback" )
147+ }
148+ }
149+ }
117150}
151+
152+ private const val TAG = " MainActivity"
0 commit comments