Instead of coalescing for 15 seconds after the first change
notification, coalesce until change notifications have been idle for at
least 2 seconds. This avoids long update delays, which is especially
jarring when using notifications on a wearable and the initial
notification didn't yet include the message body.
Also skip coalescence entirely for deletions; update immediately in that
case.
Change-Id: I67bed9a1af7b023020b0fd5429495eb45000e858
For subfolders of system folder type return the remote folder name instead of translate
it to the default folder type resource name. Subfolders shouldn't be considered as
system folders. For example a SPAM folder of a SPAM root folder (Junk/Ham should
be displayed as Ham instead of Junk).
Change-Id: I2644b8da336e3f0983d24355aefe961aa8acf30b
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
(cherry picked from commit db1ca54cd325c64971240d92ed11dad175d83579)
There is no activity response the intent of action VIEW and
data auth://com.android.email.ACCOUNT_SECURITY.
Add the intent filter for activity AccountSecurity, then this activity
can handle this intent.
CRs-fixed: 816922
Change-Id: I0b8982c63bd31d3fcca506fde9a1ad0d72e38cbb
Currently, body text and html are removed from the content values to be stored as files
in the filesystem. This could lead to a IllegalArgumentException because we passed
an empty content value to the update operation. We must ensure that we update
at least one item.
Related BUGDUMP-4037330 and http://forum.cyanogenmod.org/topic/112563-massive-data-use
Change-Id: Ib9ba10eb2cb86598bef6e5f8bc11553d09fc4ef8
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
For e.g. compressed files that doesn't mean they can't be opened, as
they still can be unpacked by the file manager.
Change-Id: I53c80b7bedb44732bc1cf346a83c1f6e39fb0da0
Creating new ones (which is the implicit effect of FLAG_CANCEL_CURRENT)
causes PendingIntent.equals() to return false for the new and the old
instance, which in turn leads to AlarmManager failing to remove the
alarm.
Also remove the unneeded request code offsets. The intent actions for
the various actions are already distinct, so we need to only identify
between the intents that have the same actions; using the mailbox ID as
request code is sufficient for that purpose.
Change-Id: I9030c24a9c6b1c722b246601fde741f7027d3de7
Schedule the ping restart through AlarmManager to be able to cancel it
properly on connection loss, and make sure to only restart idle
connections that aren't already idling (which may happen e.g. on bootup
or if there was a sync request in the 30 second wait window).
Change-Id: If62ffa0981a7a0a71ed7764a9724c07466c6d8a3
Remove mailboxes from the list synchronously and just do the network I/O
and thread joins in the background.
Change-Id: I2a339e5982c103b69f1212627f1cc98e98a8a068
We request a sync in this case anyway, which in turn starts the IDLE
connection anyway. If we're starting IDLE earlier, we do unnecessary
work as the sync will tear it down just a few moments later.
Change-Id: I9b99023fbe1aaab72638f6ef9d29223d9a325b7b
Don't do a full reconnection, but just a stopIdling/startIdling pair. In
order to be able to do that, make sure the IDLE connection is fully shut
down when stopIdling() returns, for which some refactoring was needed to
avoid a deadlock on mIdledFolders: the ImapIdleListener callbacks
acquire this lock, so stopIdling() now MUST NOT be called with
mIdledFolders lock held.
Change-Id: Ifa1677d7845722ccee2b1b9380c7b7e4014bcd97
Make sure that either messages are fetched or a sync is initiated, and
there can be no situation where neither happens.
Change-Id: I73ec2482a5a86c54309634f434b7d8fd77d7c079
It may happen (depending on server and/or timing) that only an EXISTS
response is sent to the IDLE connection when new mail arrives. Don't
discard that response, but evaluate it to determine whether there's new
mail by checking whether the message count increased.
Change-Id: Ia49714e6cd42dd71dfda8b7bbdf1fd622972edda
The refreshing (done every 25 minutes) should be a cheap operation.
Instead, do a (quick) re-sync after idling failed.
Change-Id: Idfcc775417dc02417142e51ca546c9564c660aab
BinaryTempFileBody#getBody()#getInputStream() returns a
MessagingException not an IOException. This causes
"com.android.emailcommon.mail.MessagingException: Unable to open body"
exception messages and attachment messages not flagged as loaded.
Change-Id: Ia8f25dd0a212ce52e3dd202c523c5db4a009604f
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
This crash happens when the server isn't able to resolve the MSN:
FATAL EXCEPTION: IdleReader 3:Inbox
Process: com.android.email, PID: 3200
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.android.email.mail.store.ImapFolder.extractImapChanges(ImapFolder.java:1641)
at com.android.email.mail.store.ImapFolder.access$700(ImapFolder.java:77)
at com.android.email.mail.store.ImapFolder$1.run(ImapFolder.java:294)
Change-Id: I8a8c7cf3f2949630ee9db3646e5832246d69132d