From 92c21ece6de0906dbed6799b13dea7ee657c477f Mon Sep 17 00:00:00 2001 From: cketti Date: Wed, 20 Feb 2013 23:55:46 +0100 Subject: [PATCH] Fix showing unread count in pre-Honeycomb notifications Fixes issue 4904 --- .../k9/controller/MessagingController.java | 11 +++--- .../fsck/k9/helper/NotificationBuilder.java | 37 +++++++++++++++++++ 2 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 src/com/fsck/k9/helper/NotificationBuilder.java diff --git a/src/com/fsck/k9/controller/MessagingController.java b/src/com/fsck/k9/controller/MessagingController.java index 6b533100c..080a6bc2b 100644 --- a/src/com/fsck/k9/controller/MessagingController.java +++ b/src/com/fsck/k9/controller/MessagingController.java @@ -55,6 +55,7 @@ import com.fsck.k9.activity.setup.AccountSetupIncoming; import com.fsck.k9.activity.setup.AccountSetupOutgoing; import com.fsck.k9.cache.EmailProviderCache; import com.fsck.k9.helper.Contacts; +import com.fsck.k9.helper.NotificationBuilder; import com.fsck.k9.helper.power.TracingPowerManager; import com.fsck.k9.helper.power.TracingPowerManager.TracingWakeLock; import com.fsck.k9.mail.Address; @@ -2640,7 +2641,7 @@ public class MessagingController implements Runnable { final String title = context.getString( R.string.notification_certificate_error_text, account.getName()); - final NotificationCompat.Builder builder = new NotificationCompat.Builder(context); + final NotificationCompat.Builder builder = new NotificationBuilder(context); builder.setSmallIcon(R.drawable.stat_notify_email_generic); builder.setWhen(System.currentTimeMillis()); builder.setAutoCancel(true); @@ -3332,7 +3333,7 @@ public class MessagingController implements Runnable { NotificationManager notifMgr = (NotificationManager) mApplication.getSystemService(Context.NOTIFICATION_SERVICE); - NotificationCompat.Builder builder = new NotificationCompat.Builder(mApplication); + NotificationCompat.Builder builder = new NotificationBuilder(mApplication); builder.setSmallIcon(R.drawable.ic_notify_check_mail); builder.setWhen(System.currentTimeMillis()); builder.setOngoing(true); @@ -3382,7 +3383,7 @@ public class MessagingController implements Runnable { NotificationManager notifMgr = (NotificationManager) mApplication.getSystemService(Context.NOTIFICATION_SERVICE); - NotificationCompat.Builder builder = new NotificationCompat.Builder(mApplication); + NotificationCompat.Builder builder = new NotificationBuilder(mApplication); builder.setSmallIcon(R.drawable.stat_notify_email_generic); builder.setWhen(System.currentTimeMillis()); builder.setAutoCancel(true); @@ -3417,7 +3418,7 @@ public class MessagingController implements Runnable { final NotificationManager notifMgr = (NotificationManager) mApplication.getSystemService(Context.NOTIFICATION_SERVICE); - NotificationCompat.Builder builder = new NotificationCompat.Builder(mApplication); + NotificationCompat.Builder builder = new NotificationBuilder(mApplication); builder.setSmallIcon(R.drawable.ic_notify_check_mail); builder.setWhen(System.currentTimeMillis()); builder.setOngoing(true); @@ -4802,7 +4803,7 @@ public class MessagingController implements Runnable { NotificationManager notifMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - NotificationCompat.Builder builder = new NotificationCompat.Builder(context); + NotificationCompat.Builder builder = new NotificationBuilder(context); builder.setSmallIcon(R.drawable.stat_notify_email_generic); builder.setWhen(System.currentTimeMillis()); if (!updateSilently) { diff --git a/src/com/fsck/k9/helper/NotificationBuilder.java b/src/com/fsck/k9/helper/NotificationBuilder.java new file mode 100644 index 000000000..5637a0863 --- /dev/null +++ b/src/com/fsck/k9/helper/NotificationBuilder.java @@ -0,0 +1,37 @@ +package com.fsck.k9.helper; + +import android.app.Notification; +import android.content.Context; +import android.os.Build; +import android.support.v4.app.NotificationCompat; + +/** + * Notification builder that will set {@link Notification#number} on pre-Honeycomb devices. + * + * @see android - Issue 38028 + */ +public class NotificationBuilder extends NotificationCompat.Builder { + protected int mNumber; + + + public NotificationBuilder(Context context) { + super(context); + } + + @Override + public NotificationCompat.Builder setNumber(int number) { + mNumber = number; + return this; + } + + @Override + public Notification build() { + Notification notification = super.build(); + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + notification.number = mNumber; + } + + return notification; + } +}