mirror of
https://github.com/moparisthebest/k-9
synced 2024-08-13 17:03:48 -04:00
Patch from Scott Kister to give us better new-message notifications,
somewhat worked over by me
This commit is contained in:
parent
9e9f3d4697
commit
c59aeb2c78
@ -103,6 +103,7 @@
|
|||||||
|
|
||||||
<string name="general_no_subject">(No subject)</string> <!-- Shown in place of the subject when a message has no subject. Showing this in parentheses is customary. -->
|
<string name="general_no_subject">(No subject)</string> <!-- Shown in place of the subject when a message has no subject. Showing this in parentheses is customary. -->
|
||||||
|
|
||||||
|
<string name="general_no_sender">No sender</string>
|
||||||
<string name="status_loading">Poll<xliff:g id="progress">%s</xliff:g></string>
|
<string name="status_loading">Poll<xliff:g id="progress">%s</xliff:g></string>
|
||||||
<string name="status_loading_folder">(Poll <xliff:g id="folder">%s</xliff:g><xliff:g id="progress">%s</xliff:g>)</string>
|
<string name="status_loading_folder">(Poll <xliff:g id="folder">%s</xliff:g><xliff:g id="progress">%s</xliff:g>)</string>
|
||||||
<string name="status_loading_more">Loading messages\u2026</string>
|
<string name="status_loading_more">Loading messages\u2026</string>
|
||||||
|
@ -1330,6 +1330,13 @@ public class MessagingController implements Runnable
|
|||||||
l.synchronizeMailboxAddOrUpdateMessage(account, folder, localMessage);
|
l.synchronizeMailboxAddOrUpdateMessage(account, folder, localMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send a notification of this message
|
||||||
|
if (!message.isSet(Flag.SEEN))
|
||||||
|
{
|
||||||
|
notifyAccount(mApplication, account, message);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -4118,66 +4125,114 @@ public class MessagingController implements Runnable
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notifyAccount(Context context, Account thisAccount, int newMailCount)
|
/** Creates a notification of new email messages
|
||||||
|
* ringtone, lights, and vibration to be played
|
||||||
|
*/
|
||||||
|
private void notifyAccount(Context context, Account account, Message message)
|
||||||
{
|
{
|
||||||
|
if (!account.isNotifyNewMail())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// If we have a message, set the notification to "<From>: <Subject>"
|
||||||
|
StringBuffer messageNotice = new StringBuffer();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (message != null && message.getFrom() != null)
|
||||||
|
{
|
||||||
|
Address[] addrs = message.getFrom();
|
||||||
|
String from = addrs.length > 0 ? addrs[0].toFriendly() : null;
|
||||||
|
String subject = message.getSubject();
|
||||||
|
if (subject == null)
|
||||||
|
{
|
||||||
|
subject = context.getString(R.string.general_no_subject);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (from != null)
|
||||||
|
{
|
||||||
|
// Show From: address, except show To: if sent from me
|
||||||
|
if (account.isAnIdentity(message.getFrom()) == false)
|
||||||
|
{
|
||||||
|
messageNotice.append(from + ": " + subject);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Address[] rcpts = message.getRecipients(Message.RecipientType.TO);
|
||||||
|
String to = rcpts.length > 0 ? rcpts[0].toFriendly() : null;
|
||||||
|
if (to != null)
|
||||||
|
{
|
||||||
|
messageNotice.append(to + ": "+subject);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
messageNotice.append(context.getString(R.string.general_no_sender) + ": "+subject);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (MessagingException e)
|
||||||
|
{
|
||||||
|
Log.e(K9.LOG_TAG, "Unable to get message information for notification.", e);
|
||||||
|
}
|
||||||
|
// If we could not set a per-message notification, revert to a default message
|
||||||
|
if (messageNotice.length() == 0)
|
||||||
|
{
|
||||||
|
messageNotice.append(context.getString(R.string.notification_new_title));
|
||||||
|
}
|
||||||
|
|
||||||
int unreadMessageCount = 0;
|
int unreadMessageCount = 0;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
unreadMessageCount = thisAccount.getUnreadMessageCount(context, mApplication);
|
unreadMessageCount = account.getUnreadMessageCount(context, mApplication);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (MessagingException e)
|
||||||
{
|
{
|
||||||
Log.e(K9.LOG_TAG, "Unable to get unread message count", e);
|
Log.e(K9.LOG_TAG, "Unable to getUnreadMessageCount for account: " + account, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (K9.DEBUG)
|
NotificationManager notifMgr =
|
||||||
Log.i(K9.LOG_TAG, "notifyAccount Account " + thisAccount.getDescription() + ", newMailCount = " + newMailCount);
|
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
boolean isNotifyAccount = thisAccount.isNotifyNewMail();
|
Notification notif = new Notification(R.drawable.stat_notify_email_generic, messageNotice, System.currentTimeMillis());
|
||||||
if (isNotifyAccount)
|
notif.number = unreadMessageCount;
|
||||||
|
|
||||||
|
Intent i = FolderList.actionHandleAccountIntent(context, account);
|
||||||
|
PendingIntent pi = PendingIntent.getActivity(context, 0, i, 0);
|
||||||
|
|
||||||
|
// 279 Unread (someone@gmail.com)
|
||||||
|
String accountNotice = context.getString(R.string.notification_new_one_account_fmt, unreadMessageCount, account.getDescription());
|
||||||
|
notif.setLatestEventInfo(context, accountNotice, messageNotice, pi);
|
||||||
|
|
||||||
|
// If we've already annoyed the user with buzzing, flashing and beeping for this account, don't do it again
|
||||||
|
notif.defaults |= Notification.FLAG_ONLY_ALERT_ONCE;
|
||||||
|
|
||||||
|
if (account.isRing())
|
||||||
{
|
{
|
||||||
|
String ringtone = account.getRingtone();
|
||||||
NotificationManager notifMgr =
|
notif.sound = TextUtils.isEmpty(ringtone) ? null : Uri.parse(ringtone);
|
||||||
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
|
|
||||||
if (newMailCount > 0 && unreadMessageCount > 0)
|
|
||||||
{
|
|
||||||
String notice = context.getString(R.string.notification_new_one_account_fmt, unreadMessageCount,
|
|
||||||
thisAccount.getDescription());
|
|
||||||
Notification notif = new Notification(R.drawable.stat_notify_email_generic,
|
|
||||||
context.getString(R.string.notification_new_title), System.currentTimeMillis());
|
|
||||||
|
|
||||||
notif.number = unreadMessageCount;
|
|
||||||
|
|
||||||
Intent i = FolderList.actionHandleAccountIntent(context, thisAccount);
|
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity(context, 0, i, 0);
|
|
||||||
|
|
||||||
notif.setLatestEventInfo(context, context.getString(R.string.notification_new_title), notice, pi);
|
|
||||||
|
|
||||||
String ringtone = thisAccount.getRingtone();
|
|
||||||
notif.sound = TextUtils.isEmpty(ringtone) || thisAccount.isRing() == false ? null : Uri.parse(ringtone);
|
|
||||||
|
|
||||||
if (thisAccount.isVibrate())
|
|
||||||
{
|
|
||||||
notif.defaults |= Notification.DEFAULT_VIBRATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
notif.flags |= Notification.FLAG_SHOW_LIGHTS;
|
|
||||||
notif.ledARGB = K9.NOTIFICATION_LED_COLOR;
|
|
||||||
notif.ledOnMS = K9.NOTIFICATION_LED_ON_TIME;
|
|
||||||
notif.ledOffMS = K9.NOTIFICATION_LED_OFF_TIME;
|
|
||||||
|
|
||||||
|
|
||||||
notifMgr.notify(thisAccount.getAccountNumber(), notif);
|
|
||||||
}
|
|
||||||
else if (unreadMessageCount == 0)
|
|
||||||
{
|
|
||||||
notifMgr.cancel(thisAccount.getAccountNumber());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (MessagingListener l : getListeners())
|
|
||||||
|
if (account.isVibrate())
|
||||||
{
|
{
|
||||||
l.accountStatusChanged(thisAccount, unreadMessageCount);
|
notif.defaults |= Notification.DEFAULT_VIBRATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
notif.flags |= Notification.FLAG_SHOW_LIGHTS;
|
||||||
|
notif.ledARGB = K9.NOTIFICATION_LED_COLOR;
|
||||||
|
notif.ledOnMS = K9.NOTIFICATION_LED_ON_TIME;
|
||||||
|
notif.ledOffMS = K9.NOTIFICATION_LED_OFF_TIME;
|
||||||
|
|
||||||
|
notif.number = unreadMessageCount;
|
||||||
|
notifMgr.notify(account.getAccountNumber(), notif);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Cancel a notification of new email messages */
|
||||||
|
private void notifyAccountCancel(Context context, Account account)
|
||||||
|
{
|
||||||
|
NotificationManager notifMgr =
|
||||||
|
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
notifMgr.cancel(account.getAccountNumber());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4467,9 +4522,12 @@ public class MessagingController implements Runnable
|
|||||||
localFolder.setStatus(null);
|
localFolder.setStatus(null);
|
||||||
|
|
||||||
if (K9.DEBUG)
|
if (K9.DEBUG)
|
||||||
Log.i(K9.LOG_TAG, "messagesArrived newCount = " + newCount);
|
Log.i(K9.LOG_TAG, "messagesArrived newCount = " + newCount + ", unread count = " + unreadMessageCount);
|
||||||
|
|
||||||
notifyAccount(mApplication, account, newCount);
|
if (unreadMessageCount == 0)
|
||||||
|
{
|
||||||
|
notifyAccountCancel(mApplication, account);
|
||||||
|
}
|
||||||
|
|
||||||
for (MessagingListener l : getListeners())
|
for (MessagingListener l : getListeners())
|
||||||
{
|
{
|
||||||
|
@ -138,24 +138,6 @@ public class PollService extends CoreService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkMailDone(Context context, Account doNotUseaccount)
|
|
||||||
{
|
|
||||||
if (accountsChecked.isEmpty())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Account thisAccount : Preferences.getPreferences(context).getAccounts())
|
|
||||||
{
|
|
||||||
Integer newMailCount = accountsChecked.get(thisAccount.getUuid());
|
|
||||||
if (newMailCount != null)
|
|
||||||
{
|
|
||||||
MessagingController.getInstance(getApplication()).notifyAccount(context, thisAccount, newMailCount);
|
|
||||||
}
|
|
||||||
}//for accounts
|
|
||||||
}//checkMailDone
|
|
||||||
|
|
||||||
|
|
||||||
private void release()
|
private void release()
|
||||||
{
|
{
|
||||||
MessagingController controller = MessagingController.getInstance(getApplication());
|
MessagingController controller = MessagingController.getInstance(getApplication());
|
||||||
@ -174,14 +156,7 @@ public class PollService extends CoreService
|
|||||||
|
|
||||||
if (K9.DEBUG)
|
if (K9.DEBUG)
|
||||||
Log.v(K9.LOG_TAG, "***** PollService *****: checkMailFinished");
|
Log.v(K9.LOG_TAG, "***** PollService *****: checkMailFinished");
|
||||||
try
|
release();
|
||||||
{
|
|
||||||
checkMailDone(context, account);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
release();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public int getStartId()
|
public int getStartId()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user