aboutsummaryrefslogtreecommitdiff
path: root/TestMediaApp/src/com/android/car/media/testmediaapp/phone/TmaLauncherActivity.java
blob: 014e81eb35ced2681a4ddead0ce5af81772c889a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package com.android.car.media.testmediaapp.phone;

import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.media.MediaBrowserCompat;
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import com.android.car.media.testmediaapp.MediaKeys;
import com.android.car.media.testmediaapp.TmaBrowser;
import com.android.car.media.testmediaapp.prefs.TmaPrefsActivity;
import com.android.car.media.testmediaapp.R;

/**
 * Runs on a phone, thus making the browse tree available to bluetooth.
 * TODO: the fake playback doesn't work over BT, might need to send some real bytes...
 */
public class TmaLauncherActivity extends AppCompatActivity {

    private static final String TAG = "TmaLauncherActivity";

    private MediaBrowserCompat mediaBrowser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tma_launcher_activity);

        findViewById(R.id.prefs_button).setOnClickListener(v -> {
            Intent prefsIntent = new Intent();
            prefsIntent.setClass(TmaLauncherActivity.this, TmaPrefsActivity.class);
            prefsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            prefsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(prefsIntent);
        });

        Bundle rootHints = new Bundle();
        // TODO: 256 is just a placeholder. We'd better find a proper value.
        rootHints.putInt(MediaKeys.EXTRA_MEDIA_ART_SIZE_HINT_PIXELS, 256);
        mediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, TmaBrowser.class),
                mConnectionCallbacks, rootHints);
    }

    private final MediaBrowserCompat.ConnectionCallback mConnectionCallbacks =
            new MediaBrowserCompat.ConnectionCallback() {
                @Override
                public void onConnected() {
                    // Get the token for the MediaSession
                    MediaSessionCompat.Token token = mediaBrowser.getSessionToken();

                    try {
                        // Create a MediaControllerCompat
                        MediaControllerCompat controller =
                                new MediaControllerCompat(TmaLauncherActivity.this, token);
                        // Save the controller
                        MediaControllerCompat.setMediaController(
                                TmaLauncherActivity.this, controller);
                    } catch (Exception ex) {
                        // ToDo: b/166328624 Workaround for an Android Studio Build error:
                        //          unreported exception RemoteException
                        //       Whereas as an Android Soong Build error:
                        //          RemoteException is never thrown
                        Log.e(TAG, "Failed to create MediaControllerCompat", ex);
                        return;
                    }
                }
            };

    @Override
    public void onStart() {
        super.onStart();
        mediaBrowser.connect();
    }

    @Override
    public void onStop() {
        super.onStop();
        mediaBrowser.disconnect();
    }
}