com.arcusapp.soundbox.player.MediaPlayerNotification.java Source code

Java tutorial

Introduction

Here is the source code for com.arcusapp.soundbox.player.MediaPlayerNotification.java

Source

/*
 * SoundBox - Android Music Player
 * Copyright (C) 2013 Ivn Arcuschin Moreno
 *
 * This file is part of SoundBox.
 *
 * SoundBox is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * SoundBox is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with SoundBox.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.arcusapp.soundbox.player;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.view.View;
import android.widget.RemoteViews;

import com.arcusapp.soundbox.R;
import com.arcusapp.soundbox.SoundBoxApplication;
import com.arcusapp.soundbox.activity.MainActivity;

public class MediaPlayerNotification {
    private NotificationCompat.Builder mNotificationBuilder;
    private NotificationManager mNotificationManager;
    public static final int MEDIA_PLAYER_NOTIFICATION_ID = 1337;

    private RemoteViews mExpandedView;
    private RemoteViews mBaseView;

    public MediaPlayerNotification() {
        mNotificationManager = (NotificationManager) SoundBoxApplication.getContext()
                .getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationBuilder = new NotificationCompat.Builder(SoundBoxApplication.getContext());
        mNotificationBuilder.setSmallIcon(R.drawable.ic_launcher);

        //mNotificationBuilder.setContentTitle("SoundBox is awesome.");
        //mNotificationBuilder.setContentText("You are awesome too !");

        mBaseView = new RemoteViews(SoundBoxApplication.getContext().getPackageName(),
                R.layout.notification_media_player_base);
        mExpandedView = new RemoteViews(SoundBoxApplication.getContext().getPackageName(),
                R.layout.notification_media_player_expanded);

        setUpMediaPlayerActions();
    }

    public void updateNotification(String artistName, String albumName, String songName, boolean isPlaying) {

        updateRemoteViews(artistName, albumName, songName, isPlaying);

        // Compat builder ignores: mNotificationBuilder.setContent(mBaseView);
        // Workaround to possible support library bug:
        // http://stackoverflow.com/questions/12574386/custom-notification-layout-dont-work-on-android-2-3-or-lower
        Notification noti = mNotificationBuilder.build();
        noti.contentView = mBaseView;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            noti.bigContentView = mExpandedView;
        }

        mNotificationManager.notify(MEDIA_PLAYER_NOTIFICATION_ID, noti);
    }

    public Notification getNotification(String artistName, String albumName, String songName, boolean isPlaying) {

        updateRemoteViews(artistName, albumName, songName, isPlaying);

        Notification noti = mNotificationBuilder.build();
        noti.contentView = mBaseView;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            noti.bigContentView = mExpandedView;
        }

        return noti;
    }

    private void updateRemoteViews(String artistName, String albumName, String songName, boolean isPlaying) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            mExpandedView.setTextViewText(R.id.notificationExpandedSongName, songName);
            mExpandedView.setTextViewText(R.id.notificationExpandedArtistName, artistName);
            mExpandedView.setTextViewText(R.id.notificationExpandedAlbumName, albumName);
            mExpandedView.setImageViewResource(R.id.notificationExpandedPlay,
                    isPlaying ? R.drawable.icon_notification_pause : R.drawable.icon_notification_play);
            mBaseView.setTextViewText(R.id.notificationBaseSongName, songName);
            mBaseView.setTextViewText(R.id.notificationBaseArtistName, artistName);
            mBaseView.setImageViewResource(R.id.notificationBasePlay,
                    isPlaying ? R.drawable.icon_notification_pause : R.drawable.icon_notification_play);

        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            mBaseView.setTextViewText(R.id.notificationBaseSongName, songName);
            mBaseView.setTextViewText(R.id.notificationBaseArtistName, artistName);
            mBaseView.setImageViewResource(R.id.notificationBasePlay,
                    isPlaying ? R.drawable.icon_notification_pause : R.drawable.icon_notification_play);
        } else {
            mBaseView.setTextViewText(R.id.notificationBaseSongName, songName);
            mBaseView.setTextViewText(R.id.notificationBaseArtistName, artistName);
            mBaseView.setViewVisibility(R.id.notificationBasePlay, View.GONE);
            mBaseView.setViewVisibility(R.id.notificationBaseNext, View.GONE);
            mBaseView.setViewVisibility(R.id.notificationBaseCollapse, View.GONE);
        }
    }

    private void setUpMediaPlayerActions() {
        //open the PlayActivity when the user clicks the notification
        Intent notificationIntent = new Intent(SoundBoxApplication.getContext(), MainActivity.class);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent clickPendingIntent = PendingIntent.getActivity(SoundBoxApplication.getContext(), 1,
                notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        mNotificationBuilder.setContentIntent(clickPendingIntent);

        Intent togglePlayPauseIntent = new Intent(MediaPlayerService.TOGGLEPLAYPAUSE_ACTION, null,
                SoundBoxApplication.getContext(), MediaPlayerService.class);
        PendingIntent togglePlayPausePendingIntent = PendingIntent.getService(SoundBoxApplication.getContext(), 2,
                togglePlayPauseIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        mBaseView.setOnClickPendingIntent(R.id.notificationBasePlay, togglePlayPausePendingIntent);
        mExpandedView.setOnClickPendingIntent(R.id.notificationExpandedPlay, togglePlayPausePendingIntent);

        Intent nextIntent = new Intent(MediaPlayerService.NEXT_ACTION, null, SoundBoxApplication.getContext(),
                MediaPlayerService.class);
        PendingIntent nextPendingIntent = PendingIntent.getService(SoundBoxApplication.getContext(), 3, nextIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        mBaseView.setOnClickPendingIntent(R.id.notificationBaseNext, nextPendingIntent);
        mExpandedView.setOnClickPendingIntent(R.id.notificationExpandedNext, nextPendingIntent);

        Intent collapseIntent = new Intent(MediaPlayerService.STOP_ACTION, null, SoundBoxApplication.getContext(),
                MediaPlayerService.class);
        PendingIntent collapsePendingIntent = PendingIntent.getService(SoundBoxApplication.getContext(), 4,
                collapseIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        mBaseView.setOnClickPendingIntent(R.id.notificationBaseCollapse, collapsePendingIntent);
        mExpandedView.setOnClickPendingIntent(R.id.notificationExpandedCollapse, collapsePendingIntent);

        Intent previousIntent = new Intent(MediaPlayerService.PREVIOUS_ACTION, null,
                SoundBoxApplication.getContext(), MediaPlayerService.class);
        PendingIntent previousPendingIntent = PendingIntent.getService(SoundBoxApplication.getContext(), 5,
                previousIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        mExpandedView.setOnClickPendingIntent(R.id.notificationExpandedPrevious, previousPendingIntent);
    }

}