package com.zhan_dui.download.alfred.defaults; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.support.v4.app.NotificationCompat; import com.umeng.analytics.MobclickAgent; import com.zhan_dui.animetaste.DownloadActivity; import com.zhan_dui.animetaste.PlayActivity; import com.zhan_dui.animetaste.R; import com.zhan_dui.download.alfred.missions.M3U8Mission; import com.zhan_dui.download.alfred.missions.Mission; import com.zhan_dui.model.Animation; import java.util.Timer; import java.util.TimerTask; /** * Created by daimajia on 14-3-31. */ public class MissionListenerForNotification implements Mission.MissionListener<M3U8Mission>{ private Context context; private NotificationManager notificationManager; private NotificationCompat.Builder notifyBuilder; private PendingIntent pausePendingIntent,resumePendingIntent,cancelPendingIntent; private Intent contentIntent; private PendingIntent contentPendingIntent; public MissionListenerForNotification(Context context){ this.context = context; } public final int SUCCESS = 0; public final int FAILED = 1; private Handler ShowMessageHandler; @Override public void onStart(M3U8Mission mission) { notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); cancelPendingIntent = MissionActionReceiver.buildReceiverPendingIntent(context, MissionActionReceiver.MISSION_TYPE.CANCEL_MISSION, mission.getMissionID()); pausePendingIntent = MissionActionReceiver.buildReceiverPendingIntent(context, MissionActionReceiver.MISSION_TYPE.PAUSE_MISSION, mission.getMissionID()); resumePendingIntent = MissionActionReceiver.buildReceiverPendingIntent(context, MissionActionReceiver.MISSION_TYPE.RESUME_MISSION, mission.getMissionID()); contentIntent = new Intent(context, DownloadActivity.class); contentPendingIntent = PendingIntent.getActivity(context,0,contentIntent,Intent.FLAG_ACTIVITY_NEW_TASK); notifyBuilder = new NotificationCompat.Builder(context) .setSmallIcon(android.R.drawable.stat_sys_download) .setContentTitle(mission.getShowName()) .setContentText(context.getString(R.string.download_preparing)) .setProgress(100,100,true) .setContentInfo("0%") .addAction(R.drawable.ic_action_coffee,context.getString(R.string.download_pause), pausePendingIntent) .addAction(R.drawable.ic_action_cancel,context.getString(R.string.download_cancel), cancelPendingIntent) .setContentIntent(contentPendingIntent) .setOngoing(true); notificationManager.notify(mission.getMissionID(),notifyBuilder.build()); MobclickAgent.onEvent(context,"download_start"); } @Override public void onMetaDataPrepared(M3U8Mission mission) { notifyBuilder.setContentText(context.getString(R.string.download_start)); notificationManager.notify(mission.getMissionID(),notifyBuilder.build()); } @Override public void onPercentageChange(M3U8Mission mission) { notifyBuilder.setProgress(100, mission.getPercentage(), false); notifyBuilder.setContentInfo(mission.getPercentage()+"%"); notificationManager.notify(mission.getMissionID(),notifyBuilder.build()); } @Override public void onError(M3U8Mission mission, Exception e) { e.printStackTrace(); Animation animation = (Animation)mission.getExtraInformation(mission.getUri()); notifyBuilder = new NotificationCompat.Builder(context) .setSmallIcon(android.R.drawable.stat_sys_download) .setContentTitle(mission.getShowName()) .setContentText(context.getString(R.string.download_error)) .setContentInfo(mission.getPercentage() + "%") .setContentIntent(contentPendingIntent) .setOngoing(false); notificationManager.notify(mission.getMissionID(),notifyBuilder.build()); MobclickAgent.onEvent(context,"download_failed"); } //todo:修复 @Override public void onSuccess(M3U8Mission mission) { Intent intent = new Intent(context, PlayActivity.class); Animation animation = (Animation)mission.getExtraInformation(mission.getUri()); intent.putExtra("Animation", animation); PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent,Intent.FLAG_ACTIVITY_NEW_TASK); notifyBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_action_emo_wink) .setContentTitle(mission.getShowName()) .setContentText(context.getString(R.string.download_success)) .setProgress(100,mission.getPercentage(),false) .setContentIntent(pendingIntent) .setOngoing(false); notificationManager.notify(mission.getMissionID(), notifyBuilder.build()); MobclickAgent.onEvent(context,"download_success"); } @Override public void onFinish(final M3U8Mission mission) { if(mission.getResultStatus() == Mission.RESULT_STATUS.SUCCESS){ new Timer().schedule(new TimerTask() { @Override public void run() { notificationManager.cancel(mission.getMissionID()); } },10000); } } @Override public void onSpeedChange(M3U8Mission mission) { notifyBuilder.setProgress(100,mission.getPercentage(),false).setContentText(context.getString(R.string.download_speed,mission.getAccurateReadableSpeed())); notificationManager.notify(mission.getMissionID(),notifyBuilder.build()); } @Override public void onPause(M3U8Mission mission) { notifyBuilder = new NotificationCompat.Builder(context) .setSmallIcon(android.R.drawable.stat_sys_download) .setContentTitle(mission.getShowName()) .setContentText(context.getString(R.string.download_pause)) .setProgress(100,mission.getPercentage(),false) .setContentInfo(mission.getPercentage() + "%") .addAction(R.drawable.ic_action_rocket,context.getString(R.string.download_resume), resumePendingIntent) .addAction(R.drawable.ic_action_cancel,context.getString(R.string.download_cancel), cancelPendingIntent) .setContentIntent(contentPendingIntent) .setOngoing(true); notificationManager.notify(mission.getMissionID(),notifyBuilder.build()); MobclickAgent.onEvent(context,"download_pause"); } @Override public void onResume(M3U8Mission mission) { notifyBuilder = new NotificationCompat.Builder(context) .setSmallIcon(android.R.drawable.stat_sys_download) .setContentTitle(mission.getShowName()) .setContentText(context.getString(R.string.download_downloading)) .setProgress(100,mission.getPercentage(),false) .setContentInfo(mission.getPercentage() + "%") .addAction(R.drawable.ic_action_coffee,context.getString(R.string.download_pause), pausePendingIntent) .addAction(R.drawable.ic_action_cancel,context.getString(R.string.download_cancel), cancelPendingIntent) .setContentIntent(contentPendingIntent) .setOngoing(true); notificationManager.notify(mission.getMissionID(),notifyBuilder.build()); MobclickAgent.onEvent(context,"download_resume"); } @Override public void onCancel(M3U8Mission mission) { notificationManager.cancel(mission.getMissionID()); } }