package com.fsck.k9.notification; import android.app.PendingIntent; import android.content.Context; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; import com.fsck.k9.Account; import com.fsck.k9.R; import com.fsck.k9.helper.ExceptionHelper; import static com.fsck.k9.notification.NotificationController.NOTIFICATION_LED_BLINK_FAST; import static com.fsck.k9.notification.NotificationController.NOTIFICATION_LED_FAILURE_COLOR; class SendFailedNotifications { private final NotificationController controller; private final NotificationActionCreator actionBuilder; public SendFailedNotifications(NotificationController controller, NotificationActionCreator actionBuilder) { this.controller = controller; this.actionBuilder = actionBuilder; } public void showSendFailedNotification(Account account, Exception exception) { Context context = controller.getContext(); String title = context.getString(R.string.send_failure_subject); String text = ExceptionHelper.getRootCauseMessage(exception); int notificationId = NotificationIds.getSendFailedNotificationId(account); PendingIntent folderListPendingIntent = actionBuilder.createViewFolderListPendingIntent( account, notificationId); NotificationCompat.Builder builder = controller.createNotificationBuilder() .setSmallIcon(getSendFailedNotificationIcon()) .setWhen(System.currentTimeMillis()) .setAutoCancel(true) .setTicker(title) .setContentTitle(title) .setContentText(text) .setContentIntent(folderListPendingIntent) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setCategory(NotificationCompat.CATEGORY_ERROR); controller.configureNotification(builder, null, null, NOTIFICATION_LED_FAILURE_COLOR, NOTIFICATION_LED_BLINK_FAST, true); getNotificationManager().notify(notificationId, builder.build()); } public void clearSendFailedNotification(Account account) { int notificationId = NotificationIds.getSendFailedNotificationId(account); getNotificationManager().cancel(notificationId); } private int getSendFailedNotificationIcon() { //TODO: Use a different icon for send failure notifications return R.drawable.notification_icon_new_mail; } private NotificationManagerCompat getNotificationManager() { return controller.getNotificationManager(); } }