1 package com.android.car.media.testmediaapp.phone; 2 3 import android.content.ComponentName; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.support.v4.media.MediaBrowserCompat; 7 import android.support.v4.media.session.MediaControllerCompat; 8 import android.support.v4.media.session.MediaSessionCompat; 9 import android.util.Log; 10 11 import androidx.appcompat.app.AppCompatActivity; 12 13 import com.android.car.media.testmediaapp.MediaKeys; 14 import com.android.car.media.testmediaapp.TmaBrowser; 15 import com.android.car.media.testmediaapp.prefs.TmaPrefsActivity; 16 import com.android.car.media.testmediaapp.R; 17 18 /** 19 * Runs on a phone, thus making the browse tree available to bluetooth. 20 * TODO: the fake playback doesn't work over BT, might need to send some real bytes... 21 */ 22 public class TmaLauncherActivity extends AppCompatActivity { 23 24 private static final String TAG = "TmaLauncherActivity"; 25 26 private MediaBrowserCompat mediaBrowser; 27 28 @Override onCreate(Bundle savedInstanceState)29 protected void onCreate(Bundle savedInstanceState) { 30 super.onCreate(savedInstanceState); 31 setContentView(R.layout.tma_launcher_activity); 32 33 findViewById(R.id.prefs_button).setOnClickListener(v -> { 34 Intent prefsIntent = new Intent(); 35 prefsIntent.setClass(TmaLauncherActivity.this, TmaPrefsActivity.class); 36 prefsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 37 prefsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 38 startActivity(prefsIntent); 39 }); 40 41 Bundle rootHints = new Bundle(); 42 // TODO: 256 is just a placeholder. We'd better find a proper value. 43 rootHints.putInt(MediaKeys.EXTRA_MEDIA_ART_SIZE_HINT_PIXELS, 256); 44 mediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, TmaBrowser.class), 45 mConnectionCallbacks, rootHints); 46 } 47 48 private final MediaBrowserCompat.ConnectionCallback mConnectionCallbacks = 49 new MediaBrowserCompat.ConnectionCallback() { 50 @Override 51 public void onConnected() { 52 // Get the token for the MediaSession 53 MediaSessionCompat.Token token = mediaBrowser.getSessionToken(); 54 55 try { 56 // Create a MediaControllerCompat 57 MediaControllerCompat controller = 58 new MediaControllerCompat(TmaLauncherActivity.this, token); 59 // Save the controller 60 MediaControllerCompat.setMediaController( 61 TmaLauncherActivity.this, controller); 62 } catch (Exception ex) { 63 // ToDo: b/166328624 Workaround for an Android Studio Build error: 64 // unreported exception RemoteException 65 // Whereas as an Android Soong Build error: 66 // RemoteException is never thrown 67 Log.e(TAG, "Failed to create MediaControllerCompat", ex); 68 return; 69 } 70 } 71 }; 72 73 @Override onStart()74 public void onStart() { 75 super.onStart(); 76 mediaBrowser.connect(); 77 } 78 79 @Override onStop()80 public void onStop() { 81 super.onStop(); 82 mediaBrowser.disconnect(); 83 } 84 } 85