blob: ff4660eb36cd1958b26e5d46762409f87c09a523 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.support.v4.media.session;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.media.MediaMetadataRetriever;
import android.media.RemoteControlClient;
import android.os.Bundle;
import android.os.ResultReceiver;
public class MediaSessionCompatApi14 {
/***** RemoteControlClient States, we only need none as the others were public *******/
final static int RCC_PLAYSTATE_NONE = 0;
/***** MediaSession States *******/
final static int STATE_NONE = 0;
final static int STATE_STOPPED = 1;
final static int STATE_PAUSED = 2;
final static int STATE_PLAYING = 3;
final static int STATE_FAST_FORWARDING = 4;
final static int STATE_REWINDING = 5;
final static int STATE_BUFFERING = 6;
final static int STATE_ERROR = 7;
final static int STATE_CONNECTING = 8;
final static int STATE_SKIPPING_TO_PREVIOUS = 9;
final static int STATE_SKIPPING_TO_NEXT = 10;
/***** MediaMetadata keys ********/
private static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
private static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
private static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
private static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
private static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
private static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
private static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
private static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
private static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
private static final String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
private static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
private static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
private static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
private static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
private static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
public static Object createRemoteControlClient(PendingIntent mbIntent) {
return new RemoteControlClient(mbIntent);
}
public static void setState(Object rccObj, int state) {
((RemoteControlClient) rccObj).setPlaybackState(getRccStateFromState(state));
}
public static void setMetadata(Object rccObj, Bundle metadata) {
RemoteControlClient.MetadataEditor editor = ((RemoteControlClient) rccObj).editMetadata(
true);
buildOldMetadata(metadata, editor);
editor.apply();
}
public static void registerRemoteControlClient(Context context, Object rccObj) {
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.registerRemoteControlClient((RemoteControlClient) rccObj);
}
public static void unregisterRemoteControlClient(Context context, Object rccObj) {
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.unregisterRemoteControlClient((RemoteControlClient) rccObj);
}
static int getRccStateFromState(int state) {
switch (state) {
case STATE_CONNECTING:
case STATE_BUFFERING:
return RemoteControlClient.PLAYSTATE_BUFFERING;
case STATE_ERROR:
return RemoteControlClient.PLAYSTATE_ERROR;
case STATE_FAST_FORWARDING:
return RemoteControlClient.PLAYSTATE_FAST_FORWARDING;
case STATE_NONE:
return RCC_PLAYSTATE_NONE;
case STATE_PAUSED:
return RemoteControlClient.PLAYSTATE_PAUSED;
case STATE_PLAYING:
return RemoteControlClient.PLAYSTATE_PLAYING;
case STATE_REWINDING:
return RemoteControlClient.PLAYSTATE_REWINDING;
case STATE_SKIPPING_TO_PREVIOUS:
return RemoteControlClient.PLAYSTATE_SKIPPING_BACKWARDS;
case STATE_SKIPPING_TO_NEXT:
return RemoteControlClient.PLAYSTATE_SKIPPING_FORWARDS;
case STATE_STOPPED:
return RemoteControlClient.PLAYSTATE_STOPPED;
default:
return -1;
}
}
static void buildOldMetadata(Bundle metadata, RemoteControlClient.MetadataEditor editor) {
if (metadata.containsKey(METADATA_KEY_ALBUM)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM,
metadata.getString(METADATA_KEY_ALBUM));
}
if (metadata.containsKey(METADATA_KEY_ALBUM_ARTIST)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST,
metadata.getString(METADATA_KEY_ALBUM_ARTIST));
}
if (metadata.containsKey(METADATA_KEY_ARTIST)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST,
metadata.getString(METADATA_KEY_ARTIST));
}
if (metadata.containsKey(METADATA_KEY_AUTHOR)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_AUTHOR,
metadata.getString(METADATA_KEY_AUTHOR));
}
if (metadata.containsKey(METADATA_KEY_COMPILATION)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_COMPILATION,
metadata.getString(METADATA_KEY_COMPILATION));
}
if (metadata.containsKey(METADATA_KEY_COMPOSER)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_COMPOSER,
metadata.getString(METADATA_KEY_COMPOSER));
}
if (metadata.containsKey(METADATA_KEY_DATE)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_DATE,
metadata.getString(METADATA_KEY_DATE));
}
if (metadata.containsKey(METADATA_KEY_DISC_NUMBER)) {
editor.putLong(MediaMetadataRetriever.METADATA_KEY_DISC_NUMBER,
metadata.getLong(METADATA_KEY_DISC_NUMBER));
}
if (metadata.containsKey(METADATA_KEY_DURATION)) {
editor.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION,
metadata.getLong(METADATA_KEY_DURATION));
}
if (metadata.containsKey(METADATA_KEY_GENRE)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_GENRE,
metadata.getString(METADATA_KEY_GENRE));
}
if (metadata.containsKey(METADATA_KEY_NUM_TRACKS)) {
editor.putLong(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS,
metadata.getLong(METADATA_KEY_NUM_TRACKS));
}
if (metadata.containsKey(METADATA_KEY_TITLE)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE,
metadata.getString(METADATA_KEY_TITLE));
}
if (metadata.containsKey(METADATA_KEY_TRACK_NUMBER)) {
editor.putLong(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER,
metadata.getLong(METADATA_KEY_TRACK_NUMBER));
}
if (metadata.containsKey(METADATA_KEY_WRITER)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_WRITER,
metadata.getString(METADATA_KEY_WRITER));
}
if (metadata.containsKey(METADATA_KEY_YEAR)) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_YEAR,
metadata.getString(METADATA_KEY_YEAR));
}
}
public static interface Callback {
public void onCommand(String command, Bundle extras, ResultReceiver cb);
public boolean onMediaButtonEvent(Intent mediaButtonIntent);
public void onPlay();
public void onPause();
public void onSkipToNext();
public void onSkipToPrevious();
public void onFastForward();
public void onRewind();
public void onStop();
public void onSeekTo(long pos);
public void onSetRating(Object ratingObj);
}
}