package io.github.droidkaigi.confsched.receiver; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v4.app.NotificationCompat; import android.support.v4.content.ContextCompat; import org.parceler.Parcels; import io.github.droidkaigi.confsched.R; import io.github.droidkaigi.confsched.activity.MainActivity; import io.github.droidkaigi.confsched.activity.SessionDetailActivity; import io.github.droidkaigi.confsched.model.Session; import io.github.droidkaigi.confsched.prefs.DefaultPrefs; public class SessionScheduleReceiver extends BroadcastReceiver { private static final int REMIND_MINUTES = 5; @Override public void onReceive(Context context, Intent intent) { boolean shouldNotify = DefaultPrefs.get(context).getNotificationFlag(); if (!shouldNotify) { return; } Session session = Parcels.unwrap(intent.getParcelableExtra(Session.class.getSimpleName())); // launch SessionDetailsActivity stacked with MainActivity Intent sessionDetailIntent = SessionDetailActivity.createIntent(context, session); Intent mainIntent = new Intent(context, MainActivity.class); mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); Intent[] intents = {mainIntent, sessionDetailIntent}; PendingIntent pendingIntent = PendingIntent.getActivities(context, 0, intents, PendingIntent.FLAG_CANCEL_CURRENT); Bitmap appIcon = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher); String title = context.getResources().getQuantityString( R.plurals.schedule_notification_title, REMIND_MINUTES, REMIND_MINUTES); boolean headsUp = DefaultPrefs.get(context).getHeadsUpFlag(); Notification notification = new NotificationCompat.Builder(context) .setContentIntent(pendingIntent) .setSmallIcon(R.drawable.ic_stat_notification) .setLargeIcon(appIcon) .setContentTitle(title) .setContentText(session.title) .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true) .setPriority(headsUp ? NotificationCompat.PRIORITY_HIGH : NotificationCompat.PRIORITY_DEFAULT) .setCategory(NotificationCompat.CATEGORY_EVENT) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setColor(ContextCompat.getColor(context, R.color.theme500)) .build(); NotificationManager manager = (NotificationManager) context.getSystemService(Service.NOTIFICATION_SERVICE); // Using fixed ID to avoid to show multiple notifications manager.notify(0, notification); } }