package com.airplayer.notification; import android.annotation.SuppressLint; import android.app.Notification; import android.app.Notification.Action; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Icon; import android.os.Build; import android.support.v4.app.NotificationCompat; import com.airplayer.R; import com.airplayer.activity.AirMainActivity; import com.airplayer.model.Song; import com.airplayer.service.PlayMusicService; import com.airplayer.util.BitmapUtils; /** * Created by ZiyiTsang on 15/6/25. */ public class AirNotification { private Context mContext; private NotificationManager mNotificationManager; private PendingIntent pPrevious; private PendingIntent pPlayPause; private PendingIntent pNext; private PendingIntent pContent; public AirNotification(Context context) { mContext = context; mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); Intent onNotificationClick = new Intent(context, AirMainActivity.class); pContent = PendingIntent.getActivity(context, 8, onNotificationClick, 0); Intent previous = new Intent(PlayMusicService.NOTIFICATION_OPERATION); previous.putExtra(PlayMusicService.NOTIFICATION_OPERATION_KEY, PlayMusicService.NOTIFICATION_OPERATION_PREVIOUS); pPrevious = PendingIntent.getBroadcast(context, 5, previous, 0); Intent play = new Intent(PlayMusicService.NOTIFICATION_OPERATION); play.putExtra(PlayMusicService.NOTIFICATION_OPERATION_KEY, PlayMusicService.NOTIFICATION_OPERATION_PLAY_PAUSE); pPlayPause = PendingIntent.getBroadcast(context, 1, play, 0); Intent next = new Intent(PlayMusicService.NOTIFICATION_OPERATION); next.putExtra(PlayMusicService.NOTIFICATION_OPERATION_KEY, PlayMusicService.NOTIFICATION_OPERATION_NEXT); pNext = PendingIntent.getBroadcast(context, 2, next, 0); } @SuppressLint("NewApi") public void push(Song songPlaying) { Notification notification; if (isLollipop()) { Notification.Builder builder = new Notification.Builder(mContext) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(songPlaying.getTitle()) .setContentText(songPlaying.getAlbum().getArtist().getName()) .setSubText(songPlaying.getAlbum().getTitle()) .setContentIntent(pContent) .setWhen(0) .setLargeIcon(BitmapUtils.getBitmap(mContext, songPlaying.getAlbum().getAlbumArtPath())) .setStyle(new Notification.MediaStyle().setShowActionsInCompactView(0, 1, 2)) .setOngoing(true); addNotificationActions(builder, songPlaying); notification = builder.build(); } else { NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext); builder.setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(songPlaying.getTitle()) .setContentText(songPlaying.getAlbum().getArtist().getName()) .setSubText(songPlaying.getAlbum().getTitle()) .setContentIntent(pContent) .setWhen(0) .setLargeIcon(BitmapUtils.getBitmap(mContext, songPlaying.getAlbum().getAlbumArtPath())) .setOngoing(true); addNotificationActions(builder, songPlaying); notification = builder.build(); } mNotificationManager.notify(1, notification); } @SuppressLint("NewApi") private Action newAction(int iconResId, String title, PendingIntent pi) { Icon icon = Icon.createWithResource(mContext, iconResId); return new Notification.Action.Builder(icon, title, pi).build(); } @SuppressLint("NewApi") private void addNotificationActions(Notification.Builder builder, Song songPlaying) { if (isMarshmallow()) { builder.addAction(newAction(R.drawable.ic_skip_previous_white, "previous", pPrevious)); if (songPlaying.isPause()) { builder.addAction(newAction(R.drawable.ic_play_arrow_white, "play", pPlayPause)); } else { builder.addAction(newAction(R.drawable.ic_pause_white, "pause", pPlayPause)); } builder.addAction(newAction(R.drawable.ic_skip_next_white, "next", pNext)); } else { builder.addAction(R.drawable.ic_skip_previous_white, "previous", pPrevious); if (songPlaying.isPause()) { builder.addAction(R.drawable.ic_play_arrow_white, "play", pPlayPause); } else { builder.addAction(R.drawable.ic_pause_white, "pause", pPlayPause); } builder.addAction(R.drawable.ic_skip_next_white, "next", pNext); } } private void addNotificationActions(NotificationCompat.Builder builder, Song songPlaying) { builder.addAction(R.drawable.ic_skip_previous_white, "previous", pPrevious); if (songPlaying.isPause()) { builder.addAction(R.drawable.ic_play_arrow_white, "play", pPlayPause); } else { builder.addAction(R.drawable.ic_pause_white, "pause", pPlayPause); } builder.addAction(R.drawable.ic_skip_next_white, "next", pNext); } private boolean isLollipop() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; } private boolean isMarshmallow() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M; } public void cancel() { mNotificationManager.cancel(1); mNotificationManager.cancelAll(); } }