1ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon/*
2a8496d1491e3068d26dcd5e3249a33f7e8dc202dHyundo Moon * Copyright 2017 The Android Open Source Project
3ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon *
4ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon * Licensed under the Apache License, Version 2.0 (the "License");
5ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon * you may not use this file except in compliance with the License.
6ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon * You may obtain a copy of the License at
7ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon *
8ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon *      http://www.apache.org/licenses/LICENSE-2.0
9ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon *
10ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon * Unless required by applicable law or agreed to in writing, software
11ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon * distributed under the License is distributed on an "AS IS" BASIS,
12ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon * See the License for the specific language governing permissions and
14ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon * limitations under the License.
15ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon */
16ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon
17ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonpackage android.support.mediacompat.service;
18ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon
19ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon
20ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport static android.support.mediacompat.testlib.MediaBrowserConstants.CUSTOM_ACTION_SEND_ERROR;
21ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport static android.support.mediacompat.testlib.MediaBrowserConstants
22ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon        .CUSTOM_ACTION_SEND_PROGRESS_UPDATE;
23ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport static android.support.mediacompat.testlib.MediaBrowserConstants.CUSTOM_ACTION_SEND_RESULT;
24ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport static android.support.mediacompat.testlib.MediaBrowserConstants.NOTIFY_CHILDREN_CHANGED;
25ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport static android.support.mediacompat.testlib.MediaBrowserConstants.SEND_DELAYED_ITEM_LOADED;
26ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport static android.support.mediacompat.testlib.MediaBrowserConstants
27ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon        .SEND_DELAYED_NOTIFY_CHILDREN_CHANGED;
28ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport static android.support.mediacompat.testlib.MediaBrowserConstants.SET_SESSION_TOKEN;
29276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.RELEASE;
30276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SEND_SESSION_EVENT;
31276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_ACTIVE;
32276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_CAPTIONING_ENABLED;
33276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_EXTRAS;
34276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_FLAGS;
35276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_METADATA;
36276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_PLAYBACK_STATE;
37276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_PLAYBACK_TO_LOCAL;
38276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_PLAYBACK_TO_REMOTE;
39276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_QUEUE;
40276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_QUEUE_TITLE;
41276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_RATING_TYPE;
42276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_REPEAT_MODE;
43276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_SESSION_ACTIVITY;
44276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport static android.support.mediacompat.testlib.MediaSessionConstants.SET_SHUFFLE_MODE;
45beffc44637dc5137ae26ce937607f06326bbef97Hyundo Moonimport static android.support.mediacompat.testlib.util.IntentUtil
46beffc44637dc5137ae26ce937607f06326bbef97Hyundo Moon        .ACTION_CALL_MEDIA_BROWSER_SERVICE_METHOD;
47beffc44637dc5137ae26ce937607f06326bbef97Hyundo Moonimport static android.support.mediacompat.testlib.util.IntentUtil.ACTION_CALL_MEDIA_SESSION_METHOD;
48beffc44637dc5137ae26ce937607f06326bbef97Hyundo Moonimport static android.support.mediacompat.testlib.util.IntentUtil.KEY_ARGUMENT;
49beffc44637dc5137ae26ce937607f06326bbef97Hyundo Moonimport static android.support.mediacompat.testlib.util.IntentUtil.KEY_METHOD_ID;
50ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon
51276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport android.app.PendingIntent;
52ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport android.content.BroadcastReceiver;
53ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport android.content.Context;
54ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport android.content.Intent;
55ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonimport android.os.Bundle;
56276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport android.support.v4.media.MediaMetadataCompat;
57276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport android.support.v4.media.RatingCompat;
58276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport android.support.v4.media.session.MediaSessionCompat;
59276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport android.support.v4.media.session.MediaSessionCompat.QueueItem;
60276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport android.support.v4.media.session.ParcelableVolumeInfo;
61276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport android.support.v4.media.session.PlaybackStateCompat;
62276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon
6389febf83e2bd3720923474006bcdf6c91a3b88f2Aurimas Liutikasimport androidx.media.VolumeProviderCompat;
6489febf83e2bd3720923474006bcdf6c91a3b88f2Aurimas Liutikas
65276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moonimport java.util.List;
66ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon
67ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moonpublic class ServiceBroadcastReceiver extends BroadcastReceiver {
68ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon
69ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon    @Override
70ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon    public void onReceive(Context context, Intent intent) {
71ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon        Bundle extras = intent.getExtras();
72ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon        if (ACTION_CALL_MEDIA_BROWSER_SERVICE_METHOD.equals(intent.getAction()) && extras != null) {
73ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon            StubMediaBrowserServiceCompat service = StubMediaBrowserServiceCompat.sInstance;
74ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon            int method = extras.getInt(KEY_METHOD_ID, 0);
75ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon
76ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon            switch (method) {
77ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                case NOTIFY_CHILDREN_CHANGED:
78ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    service.notifyChildrenChanged(extras.getString(KEY_ARGUMENT));
79ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    break;
80ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                case SEND_DELAYED_NOTIFY_CHILDREN_CHANGED:
81ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    service.sendDelayedNotifyChildrenChanged();
82ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    break;
83ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                case SEND_DELAYED_ITEM_LOADED:
84ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    service.sendDelayedItemLoaded();
85ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    break;
86ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                case CUSTOM_ACTION_SEND_PROGRESS_UPDATE:
87ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    service.mCustomActionResult.sendProgressUpdate(extras.getBundle(KEY_ARGUMENT));
88ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    break;
89ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                case CUSTOM_ACTION_SEND_ERROR:
90ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    service.mCustomActionResult.sendError(extras.getBundle(KEY_ARGUMENT));
91ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    break;
92ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                case CUSTOM_ACTION_SEND_RESULT:
93ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    service.mCustomActionResult.sendResult(extras.getBundle(KEY_ARGUMENT));
94ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    break;
95ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                case SET_SESSION_TOKEN:
96ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    StubMediaBrowserServiceCompatWithDelayedMediaSession.sInstance
97ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                            .callSetSessionToken();
98ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon                    break;
99ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon            }
100276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon        } else if (ACTION_CALL_MEDIA_SESSION_METHOD.equals(intent.getAction()) && extras != null) {
101276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon            MediaSessionCompat session = StubMediaBrowserServiceCompat.sSession;
102276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon            int method = extras.getInt(KEY_METHOD_ID, 0);
103276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon
104276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon            switch (method) {
105276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_EXTRAS:
106276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setExtras(extras.getBundle(KEY_ARGUMENT));
107276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
108276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_FLAGS:
109276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setFlags(extras.getInt(KEY_ARGUMENT));
110276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
111276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_METADATA:
112276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setMetadata((MediaMetadataCompat) extras.getParcelable(KEY_ARGUMENT));
113276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
114276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_PLAYBACK_STATE:
115276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setPlaybackState(
116276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                            (PlaybackStateCompat) extras.getParcelable(KEY_ARGUMENT));
117276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
118276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_QUEUE:
119276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    List<QueueItem> items = extras.getParcelableArrayList(KEY_ARGUMENT);
120276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setQueue(items);
121276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
122276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_QUEUE_TITLE:
123276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setQueueTitle(extras.getCharSequence(KEY_ARGUMENT));
124276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
125276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_SESSION_ACTIVITY:
126276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setSessionActivity((PendingIntent) extras.getParcelable(KEY_ARGUMENT));
127276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
128276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_CAPTIONING_ENABLED:
129276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setCaptioningEnabled(extras.getBoolean(KEY_ARGUMENT));
130276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
131276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_REPEAT_MODE:
132276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setRepeatMode(extras.getInt(KEY_ARGUMENT));
133276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
134276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_SHUFFLE_MODE:
135276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setShuffleMode(extras.getInt(KEY_ARGUMENT));
136276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
137276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SEND_SESSION_EVENT:
138276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    Bundle arguments = extras.getBundle(KEY_ARGUMENT);
139276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.sendSessionEvent(
140276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                            arguments.getString("event"), arguments.getBundle("extras"));
141276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
142276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_ACTIVE:
143276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setActive(extras.getBoolean(KEY_ARGUMENT));
144276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
145276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case RELEASE:
146276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.release();
147276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
148276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_PLAYBACK_TO_LOCAL:
149276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setPlaybackToLocal(extras.getInt(KEY_ARGUMENT));
150276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
151276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_PLAYBACK_TO_REMOTE:
152276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    ParcelableVolumeInfo volumeInfo = extras.getParcelable(KEY_ARGUMENT);
153276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setPlaybackToRemote(new VolumeProviderCompat(
154276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                            volumeInfo.controlType,
155276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                            volumeInfo.maxVolume,
156276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                            volumeInfo.currentVolume) {});
157276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
158276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                case SET_RATING_TYPE:
159276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    session.setRatingType(RatingCompat.RATING_5_STARS);
160276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon                    break;
161276cb55dbda15f1e01e18227865ff73dcdcdfc3eHyundo Moon            }
162ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon        }
163ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon    }
164ff81a699ed295b3ca522f9578b95b806db30af27Hyundo Moon}
165