package com.marverenic.music.utils;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.support.v4.media.MediaDescriptionCompat;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v7.app.NotificationCompat;
import android.view.KeyEvent;
import com.marverenic.music.R;
/**
* Helper APIs for constructing MediaStyle notifications
*
* Modified from https://gist.github.com/ianhanniballake/47617ec3488e0257325c
* @author Ian Lake
*/
public class MediaStyleHelper {
/**
* Build a notification using the information from the given media session.
* @param context Context used to construct the notification.
* @param mediaSession Media session to get information.
* @return A pre-built notification with information from the given media session.
*/
public static NotificationCompat.Builder from(Context context,
MediaSessionCompat mediaSession) {
MediaControllerCompat controller = mediaSession.getController();
MediaMetadataCompat mediaMetadata = controller.getMetadata();
MediaDescriptionCompat description = mediaMetadata.getDescription();
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder
.setContentTitle(description.getTitle())
.setContentText(description.getSubtitle())
.setSubText(description.getDescription())
.setContentIntent(controller.getSessionActivity())
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setWhen(0)
.setShowWhen(false);
if (description.getIconBitmap() == null) {
builder.setLargeIcon(
BitmapFactory.decodeResource(context.getResources(), R.drawable.art_default));
} else {
builder.setLargeIcon(description.getIconBitmap());
}
return builder;
}
/**
* Create a {@link PendingIntent} appropriate for a MediaStyle notification's action. Assumes
* you are using a media button receiver.
* @param context Context used to construct the pending intent.
* @param mediaKeyEvent KeyEvent code to send to your media button receiver.
* @return An appropriate pending intent for sending a media button to your media button
* receiver.
*/
public static PendingIntent getActionIntent(Context context, int mediaKeyEvent) {
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.setPackage(context.getPackageName());
intent.putExtra(Intent.EXTRA_KEY_EVENT,
new KeyEvent(KeyEvent.ACTION_DOWN, mediaKeyEvent));
return PendingIntent.getBroadcast(context, mediaKeyEvent, intent, 0);
}
}