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