Home | History | Annotate | Download | only in service
      1 /*
      2  * Copyright 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.support.mediacompat.service;
     18 
     19 
     20 import static android.support.mediacompat.testlib.MediaBrowserConstants.CUSTOM_ACTION_SEND_ERROR;
     21 import static android.support.mediacompat.testlib.MediaBrowserConstants
     22         .CUSTOM_ACTION_SEND_PROGRESS_UPDATE;
     23 import static android.support.mediacompat.testlib.MediaBrowserConstants.CUSTOM_ACTION_SEND_RESULT;
     24 import static android.support.mediacompat.testlib.MediaBrowserConstants.NOTIFY_CHILDREN_CHANGED;
     25 import static android.support.mediacompat.testlib.MediaBrowserConstants.SEND_DELAYED_ITEM_LOADED;
     26 import static android.support.mediacompat.testlib.MediaBrowserConstants
     27         .SEND_DELAYED_NOTIFY_CHILDREN_CHANGED;
     28 import static android.support.mediacompat.testlib.MediaBrowserConstants.SET_SESSION_TOKEN;
     29 import static android.support.mediacompat.testlib.MediaSessionConstants.RELEASE;
     30 import static android.support.mediacompat.testlib.MediaSessionConstants.SEND_SESSION_EVENT;
     31 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_ACTIVE;
     32 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_CAPTIONING_ENABLED;
     33 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_EXTRAS;
     34 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_FLAGS;
     35 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_METADATA;
     36 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_PLAYBACK_STATE;
     37 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_PLAYBACK_TO_LOCAL;
     38 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_PLAYBACK_TO_REMOTE;
     39 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_QUEUE;
     40 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_QUEUE_TITLE;
     41 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_RATING_TYPE;
     42 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_REPEAT_MODE;
     43 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_SESSION_ACTIVITY;
     44 import static android.support.mediacompat.testlib.MediaSessionConstants.SET_SHUFFLE_MODE;
     45 import static android.support.mediacompat.testlib.util.IntentUtil
     46         .ACTION_CALL_MEDIA_BROWSER_SERVICE_METHOD;
     47 import static android.support.mediacompat.testlib.util.IntentUtil.ACTION_CALL_MEDIA_SESSION_METHOD;
     48 import static android.support.mediacompat.testlib.util.IntentUtil.KEY_ARGUMENT;
     49 import static android.support.mediacompat.testlib.util.IntentUtil.KEY_METHOD_ID;
     50 
     51 import android.app.PendingIntent;
     52 import android.content.BroadcastReceiver;
     53 import android.content.Context;
     54 import android.content.Intent;
     55 import android.os.Bundle;
     56 import android.support.v4.media.MediaMetadataCompat;
     57 import android.support.v4.media.RatingCompat;
     58 import android.support.v4.media.session.MediaSessionCompat;
     59 import android.support.v4.media.session.MediaSessionCompat.QueueItem;
     60 import android.support.v4.media.session.ParcelableVolumeInfo;
     61 import android.support.v4.media.session.PlaybackStateCompat;
     62 
     63 import androidx.media.VolumeProviderCompat;
     64 
     65 import java.util.List;
     66 
     67 public class ServiceBroadcastReceiver extends BroadcastReceiver {
     68 
     69     @Override
     70     public void onReceive(Context context, Intent intent) {
     71         Bundle extras = intent.getExtras();
     72         if (ACTION_CALL_MEDIA_BROWSER_SERVICE_METHOD.equals(intent.getAction()) && extras != null) {
     73             StubMediaBrowserServiceCompat service = StubMediaBrowserServiceCompat.sInstance;
     74             int method = extras.getInt(KEY_METHOD_ID, 0);
     75 
     76             switch (method) {
     77                 case NOTIFY_CHILDREN_CHANGED:
     78                     service.notifyChildrenChanged(extras.getString(KEY_ARGUMENT));
     79                     break;
     80                 case SEND_DELAYED_NOTIFY_CHILDREN_CHANGED:
     81                     service.sendDelayedNotifyChildrenChanged();
     82                     break;
     83                 case SEND_DELAYED_ITEM_LOADED:
     84                     service.sendDelayedItemLoaded();
     85                     break;
     86                 case CUSTOM_ACTION_SEND_PROGRESS_UPDATE:
     87                     service.mCustomActionResult.sendProgressUpdate(extras.getBundle(KEY_ARGUMENT));
     88                     break;
     89                 case CUSTOM_ACTION_SEND_ERROR:
     90                     service.mCustomActionResult.sendError(extras.getBundle(KEY_ARGUMENT));
     91                     break;
     92                 case CUSTOM_ACTION_SEND_RESULT:
     93                     service.mCustomActionResult.sendResult(extras.getBundle(KEY_ARGUMENT));
     94                     break;
     95                 case SET_SESSION_TOKEN:
     96                     StubMediaBrowserServiceCompatWithDelayedMediaSession.sInstance
     97                             .callSetSessionToken();
     98                     break;
     99             }
    100         } else if (ACTION_CALL_MEDIA_SESSION_METHOD.equals(intent.getAction()) && extras != null) {
    101             MediaSessionCompat session = StubMediaBrowserServiceCompat.sSession;
    102             int method = extras.getInt(KEY_METHOD_ID, 0);
    103 
    104             switch (method) {
    105                 case SET_EXTRAS:
    106                     session.setExtras(extras.getBundle(KEY_ARGUMENT));
    107                     break;
    108                 case SET_FLAGS:
    109                     session.setFlags(extras.getInt(KEY_ARGUMENT));
    110                     break;
    111                 case SET_METADATA:
    112                     session.setMetadata((MediaMetadataCompat) extras.getParcelable(KEY_ARGUMENT));
    113                     break;
    114                 case SET_PLAYBACK_STATE:
    115                     session.setPlaybackState(
    116                             (PlaybackStateCompat) extras.getParcelable(KEY_ARGUMENT));
    117                     break;
    118                 case SET_QUEUE:
    119                     List<QueueItem> items = extras.getParcelableArrayList(KEY_ARGUMENT);
    120                     session.setQueue(items);
    121                     break;
    122                 case SET_QUEUE_TITLE:
    123                     session.setQueueTitle(extras.getCharSequence(KEY_ARGUMENT));
    124                     break;
    125                 case SET_SESSION_ACTIVITY:
    126                     session.setSessionActivity((PendingIntent) extras.getParcelable(KEY_ARGUMENT));
    127                     break;
    128                 case SET_CAPTIONING_ENABLED:
    129                     session.setCaptioningEnabled(extras.getBoolean(KEY_ARGUMENT));
    130                     break;
    131                 case SET_REPEAT_MODE:
    132                     session.setRepeatMode(extras.getInt(KEY_ARGUMENT));
    133                     break;
    134                 case SET_SHUFFLE_MODE:
    135                     session.setShuffleMode(extras.getInt(KEY_ARGUMENT));
    136                     break;
    137                 case SEND_SESSION_EVENT:
    138                     Bundle arguments = extras.getBundle(KEY_ARGUMENT);
    139                     session.sendSessionEvent(
    140                             arguments.getString("event"), arguments.getBundle("extras"));
    141                     break;
    142                 case SET_ACTIVE:
    143                     session.setActive(extras.getBoolean(KEY_ARGUMENT));
    144                     break;
    145                 case RELEASE:
    146                     session.release();
    147                     break;
    148                 case SET_PLAYBACK_TO_LOCAL:
    149                     session.setPlaybackToLocal(extras.getInt(KEY_ARGUMENT));
    150                     break;
    151                 case SET_PLAYBACK_TO_REMOTE:
    152                     ParcelableVolumeInfo volumeInfo = extras.getParcelable(KEY_ARGUMENT);
    153                     session.setPlaybackToRemote(new VolumeProviderCompat(
    154                             volumeInfo.controlType,
    155                             volumeInfo.maxVolume,
    156                             volumeInfo.currentVolume) {});
    157                     break;
    158                 case SET_RATING_TYPE:
    159                     session.setRatingType(RatingCompat.RATING_5_STARS);
    160                     break;
    161             }
    162         }
    163     }
    164 }
    165