mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-27 11:42:16 -05:00
. Fixed issue 607
. Added intent for viewing individial messages
This commit is contained in:
parent
2f083b88de
commit
a59fcf3e89
@ -119,20 +119,40 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name="com.android.email.activity.FolderList">
|
||||
<!--
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.view" />
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data
|
||||
android:scheme="content"
|
||||
android:path="/email/accounts/*"
|
||||
android:scheme="email"
|
||||
android:host="accounts"
|
||||
/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
-->
|
||||
</activity>
|
||||
<activity
|
||||
android:name="com.android.email.activity.MessageList">
|
||||
<!--
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data
|
||||
android:scheme="email"
|
||||
android:host="folders"
|
||||
/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
-->
|
||||
</activity>
|
||||
<activity
|
||||
android:name="com.android.email.activity.MessageView">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data
|
||||
android:scheme="email"
|
||||
android:host="messages"
|
||||
/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name="com.android.email.activity.MessageCompose"
|
||||
|
@ -87,6 +87,7 @@
|
||||
<string name="status_loading">Loading\u2026</string>
|
||||
<string name="status_loading_more">Loading messages\u2026</string>
|
||||
<string name="status_network_error">Connection error</string>
|
||||
<string name="status_invalid_id_error">Message not found</string>
|
||||
<string name="status_error">Error</string> <!-- Used in Outbox when a message has failed to send -->
|
||||
<string name="status_sending">Sending\u2026</string> <!-- Used in Outbox when a message is currently sending -->
|
||||
<string name="status_loading_more_failed">Retry loading more messages</string>
|
||||
|
@ -166,10 +166,6 @@ public class Email extends Application {
|
||||
|
||||
public static final int FLAGGED_COLOR = 0xff4444;
|
||||
|
||||
public static final String INTENT_DATA_URI_SCHEMA = "content";
|
||||
public static final String INTENT_DATA_UR_PATH_PREFIX = "email";
|
||||
public static final String INTENT_DATA_URI_PREFIX = INTENT_DATA_URI_SCHEMA + "://" + INTENT_DATA_UR_PATH_PREFIX;
|
||||
|
||||
/**
|
||||
* Called throughout the application when the number of accounts has changed. This method
|
||||
* enables or disables the Compose activity, the boot receiver and the service based on
|
||||
|
14
src/com/android/email/Intent.java
Normal file
14
src/com/android/email/Intent.java
Normal file
@ -0,0 +1,14 @@
|
||||
package com.android.email;
|
||||
|
||||
public class Intent {
|
||||
|
||||
public static final String ACTION_EMAIL_RECEIVED = "com.android.email.intent.action.EMAIL_RECEIVED";
|
||||
public static final String EXTRA_ACCOUNT = "com.android.email.intent.extra.ACCOUNT";
|
||||
public static final String EXTRA_FOLDER = "com.android.email.intent.extra.FOLDER";
|
||||
public static final String EXTRA_SENT_DATE = "com.android.email.intent.extra.SENT_DATE";
|
||||
public static final String EXTRA_FROM = "com.android.email.intent.extra.FROM";
|
||||
public static final String EXTRA_TO = "com.android.email.intent.extra.TO";
|
||||
public static final String EXTRA_CC = "com.android.email.intent.extra.CC";
|
||||
public static final String EXTRA_BCC = "com.android.email.intent.extra.BCC";
|
||||
public static final String EXTRA_SUBJECT = "com.android.email.intent.extra.SUBJECT";
|
||||
}
|
@ -511,12 +511,12 @@ public class MessagingController implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
public void loadMoreMessages(Account account, String folder, MessagingListener listener) {
|
||||
public void loadMoreMessages(Context context, Account account, String folder, MessagingListener listener) {
|
||||
try {
|
||||
LocalStore localStore = (LocalStore) Store.getInstance( account.getLocalStoreUri(), mApplication);
|
||||
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
|
||||
localFolder.setVisibleLimit(localFolder.getVisibleLimit() + account.getDisplayCount());
|
||||
synchronizeMailbox(account, folder, listener);
|
||||
synchronizeMailbox(context, account, folder, listener);
|
||||
}
|
||||
catch (MessagingException me) {
|
||||
addErrorMessage(account, me);
|
||||
@ -546,10 +546,10 @@ public class MessagingController implements Runnable {
|
||||
* @param folder
|
||||
* @param listener
|
||||
*/
|
||||
public void synchronizeMailbox(final Account account, final String folder, MessagingListener listener) {
|
||||
public void synchronizeMailbox(final Context context, final Account account, final String folder, MessagingListener listener) {
|
||||
put("synchronizeMailbox", listener, new Runnable() {
|
||||
public void run() {
|
||||
synchronizeMailboxSynchronous(account, folder);
|
||||
synchronizeMailboxSynchronous(context, account, folder);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -562,7 +562,7 @@ public class MessagingController implements Runnable {
|
||||
*
|
||||
* TODO Break this method up into smaller chunks.
|
||||
*/
|
||||
public void synchronizeMailboxSynchronous(final Account account, final String folder) {
|
||||
public void synchronizeMailboxSynchronous(final Context context, final Account account, final String folder) {
|
||||
/*
|
||||
* We don't ever sync the Outbox.
|
||||
*/
|
||||
@ -740,7 +740,7 @@ public class MessagingController implements Runnable {
|
||||
* This will serve to indicate the true "new" message count that will be reported to
|
||||
* the user via notification.
|
||||
*/
|
||||
final ArrayList<Message> newMessages = new ArrayList<Message>();
|
||||
final ArrayList<String> newMessageUidList = new ArrayList<String>();
|
||||
|
||||
/*
|
||||
* Fetch the flags and envelope only of the new messages. This is intended to get us
|
||||
@ -769,7 +769,7 @@ public class MessagingController implements Runnable {
|
||||
public void messageFinished(Message message, int number, int ofTotal) {
|
||||
try {
|
||||
if (!message.isSet(Flag.SEEN)) {
|
||||
newMessages.add(message);
|
||||
newMessageUidList.add(message.getUid());
|
||||
}
|
||||
|
||||
// Store the new message locally
|
||||
@ -787,9 +787,9 @@ public class MessagingController implements Runnable {
|
||||
* ENVELOPE, only size.
|
||||
*/
|
||||
if (isMessageSuppressed(account, folder, message) == false) {
|
||||
Log.i(Email.LOG_TAG, "place 2 About to notify listeners that we got a new message "+ account + folder + message.getUid());
|
||||
Log.i(Email.LOG_TAG, "place 2 About to notify listeners that we got a new message "+ account + folder + message.getUid());
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.synchronizeMailboxNewMessage(account, folder, localFolder.getMessage(message.getUid()));
|
||||
l.synchronizeMailboxAddOrUpdateMessage(account, folder, localFolder.getMessage(message.getUid()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -838,7 +838,7 @@ public class MessagingController implements Runnable {
|
||||
}
|
||||
if (messageChanged && isMessageSuppressed(account, folder, localMessage) == false) {
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.synchronizeMailboxNewMessage(account, folder, localMessage);
|
||||
l.synchronizeMailboxAddOrUpdateMessage(account, folder, localMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -853,7 +853,7 @@ public class MessagingController implements Runnable {
|
||||
*/
|
||||
int remoteUnreadMessageCount = remoteFolder.getUnreadMessageCount();
|
||||
if (remoteUnreadMessageCount == -1) {
|
||||
localFolder.setUnreadMessageCount(localFolder.getUnreadMessageCount() + newMessages.size());
|
||||
localFolder.setUnreadMessageCount(localFolder.getUnreadMessageCount() + newMessageUidList.size());
|
||||
}
|
||||
else {
|
||||
localFolder.setUnreadMessageCount(remoteUnreadMessageCount);
|
||||
@ -922,7 +922,12 @@ public class MessagingController implements Runnable {
|
||||
{
|
||||
// Update the listener with what we've found
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.synchronizeMailboxNewMessage( account, folder, localMessage);
|
||||
l.synchronizeMailboxAddOrUpdateMessage( account, folder, localMessage);
|
||||
}
|
||||
}
|
||||
if (newMessageUidList.contains(message.getUid())) {
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.synchronizeMailboxNewMessage(context, account, folder, localMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -952,6 +957,7 @@ public class MessagingController implements Runnable {
|
||||
|
||||
remoteFolder.fetch(largeMessages.toArray(new Message[largeMessages.size()]), fp, null);
|
||||
for (Message message : largeMessages) {
|
||||
Message localMessage = null;
|
||||
if (message.getBody() == null) {
|
||||
/*
|
||||
* The provider was unable to get the structure of the message, so
|
||||
@ -971,7 +977,7 @@ public class MessagingController implements Runnable {
|
||||
// Store the updated message locally
|
||||
localFolder.appendMessages(new Message[] { message });
|
||||
|
||||
Message localMessage = localFolder.getMessage(message.getUid());
|
||||
localMessage = localFolder.getMessage(message.getUid());
|
||||
|
||||
/*
|
||||
* Mark the message as fully downloaded if the message size is smaller than
|
||||
@ -1011,7 +1017,7 @@ public class MessagingController implements Runnable {
|
||||
// Store the updated message locally
|
||||
localFolder.appendMessages(new Message[] { message });
|
||||
|
||||
Message localMessage = localFolder.getMessage(message.getUid());
|
||||
localMessage = localFolder.getMessage(message.getUid());
|
||||
|
||||
// Set a flag indicating this message has been fully downloaded and can be
|
||||
// viewed.
|
||||
@ -1022,7 +1028,12 @@ public class MessagingController implements Runnable {
|
||||
Log.i(Email.LOG_TAG, "About to notify listeners that we got a new message "+ account + folder + message.getUid());
|
||||
// Update the listener with what we've found
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.synchronizeMailboxNewMessage( account, folder, localFolder.getMessage(message.getUid()));
|
||||
l.synchronizeMailboxAddOrUpdateMessage( account, folder, localMessage);
|
||||
}
|
||||
}
|
||||
if (newMessageUidList.contains(message.getUid())) {
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.synchronizeMailboxNewMessage(context, account, folder, localMessage);
|
||||
}
|
||||
}
|
||||
}//for large messsages
|
||||
@ -1044,11 +1055,11 @@ public class MessagingController implements Runnable {
|
||||
if (Config.LOGD) {
|
||||
log( "Done synchronizing folder " +
|
||||
account.getDescription() + ":" + folder + " @ " + new Date() +
|
||||
" with " + newMessages.size() + " new messages");
|
||||
" with " + newMessageUidList.size() + " new messages");
|
||||
}
|
||||
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.synchronizeMailboxFinished( account, folder, remoteMessageCount, newMessages.size());
|
||||
l.synchronizeMailboxFinished( account, folder, remoteMessageCount, newMessageUidList.size());
|
||||
}
|
||||
|
||||
if (commandException != null) {
|
||||
@ -1523,6 +1534,7 @@ public class MessagingController implements Runnable {
|
||||
}
|
||||
|
||||
String rootCauseMessage = getRootCauseMessage(t);
|
||||
Log.e(Email.LOG_TAG, rootCauseMessage, t);
|
||||
log("Error" + "'" + rootCauseMessage + "'");
|
||||
|
||||
Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication);
|
||||
@ -1811,11 +1823,11 @@ public class MessagingController implements Runnable {
|
||||
}
|
||||
catch (Exception e) {
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewFailed(account, folder, uid, e.getMessage());
|
||||
l.loadMessageForViewFailed(account, folder, uid, e);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewFailed(account, folder, uid, e.getMessage());
|
||||
listener.loadMessageForViewFailed(account, folder, uid, e);
|
||||
}
|
||||
addErrorMessage(account, e);
|
||||
|
||||
@ -1848,75 +1860,80 @@ public class MessagingController implements Runnable {
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewStarted(account, folder, uid);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewStarted(account, folder, uid);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewStarted(account, folder, uid);
|
||||
}
|
||||
threadPool.execute(new Runnable() {
|
||||
public void run() {
|
||||
|
||||
try {
|
||||
Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication);
|
||||
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
|
||||
localFolder.open(OpenMode.READ_WRITE);
|
||||
try {
|
||||
Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication);
|
||||
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
|
||||
localFolder.open(OpenMode.READ_WRITE);
|
||||
|
||||
Message message = localFolder.getMessage(uid);
|
||||
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewHeadersAvailable(account, folder, uid, message);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewHeadersAvailable(account, folder, uid, message);
|
||||
}
|
||||
|
||||
if (!message.isSet(Flag.X_DOWNLOADED_FULL)) {
|
||||
loadMessageForViewRemote(account, folder, uid, listener);
|
||||
localFolder.close(false);
|
||||
return;
|
||||
}
|
||||
|
||||
FetchProfile fp = new FetchProfile();
|
||||
fp.add(FetchProfile.Item.ENVELOPE);
|
||||
fp.add(FetchProfile.Item.BODY);
|
||||
localFolder.fetch(new Message[] {
|
||||
message
|
||||
}, fp, null);
|
||||
localFolder.close(false);
|
||||
if (!message.isSet(Flag.SEEN)) {
|
||||
markMessageRead(account, localFolder, message, true);
|
||||
}
|
||||
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewBodyAvailable(account, folder, uid, message);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewBodyAvailable(account, folder, uid, message);
|
||||
}
|
||||
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewFinished(account, folder, uid, message);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewFinished(account, folder, uid, message);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewFailed(account, folder, uid, e.getMessage());
|
||||
}
|
||||
LocalMessage message = (LocalMessage)localFolder.getMessage(uid);
|
||||
if (message==null
|
||||
|| message.getId()==0) {
|
||||
throw new IllegalArgumentException("Message not found: folder=" + folder + ", uid=" + uid);
|
||||
}
|
||||
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewHeadersAvailable(account, folder, uid, message);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewFailed(account, folder, uid, e.getMessage());
|
||||
listener.loadMessageForViewHeadersAvailable(account, folder, uid, message);
|
||||
}
|
||||
|
||||
if (!message.isSet(Flag.X_DOWNLOADED_FULL)) {
|
||||
Log.v(Email.LOG_TAG, "Message not fully downloaded --> starting bg remote download");
|
||||
loadMessageForViewRemote(account, folder, uid, listener);
|
||||
localFolder.close(false);
|
||||
return;
|
||||
}
|
||||
addErrorMessage(account, e);
|
||||
|
||||
}
|
||||
}
|
||||
FetchProfile fp = new FetchProfile();
|
||||
fp.add(FetchProfile.Item.ENVELOPE);
|
||||
fp.add(FetchProfile.Item.BODY);
|
||||
localFolder.fetch(new Message[] {
|
||||
message
|
||||
}, fp, null);
|
||||
localFolder.close(false);
|
||||
if (!message.isSet(Flag.SEEN)) {
|
||||
markMessageRead(account, localFolder, message, true);
|
||||
}
|
||||
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewBodyAvailable(account, folder, uid, message);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewBodyAvailable(account, folder, uid, message);
|
||||
}
|
||||
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewFinished(account, folder, uid, message);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewFinished(account, folder, uid, message);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
for (MessagingListener l : getListeners()) {
|
||||
l.loadMessageForViewFailed(account, folder, uid, e);
|
||||
}
|
||||
if (listener != null && !getListeners().contains(listener))
|
||||
{
|
||||
listener.loadMessageForViewFailed(account, folder, uid, e);
|
||||
}
|
||||
addErrorMessage(account, e);
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
Log.v(Email.LOG_TAG, "loadMessageForView started in bg thread");
|
||||
}
|
||||
|
||||
// public void loadMessageForViewSynchronous(final Account account, final String folder, final String uid,
|
||||
@ -2877,7 +2894,7 @@ public class MessagingController implements Runnable {
|
||||
}
|
||||
try
|
||||
{
|
||||
synchronizeMailboxSynchronous(account, folder.getName());
|
||||
synchronizeMailboxSynchronous(context, account, folder.getName());
|
||||
}
|
||||
|
||||
finally {
|
||||
|
@ -3,8 +3,12 @@ package com.android.email;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
import com.android.email.mail.Address;
|
||||
import com.android.email.mail.Folder;
|
||||
import com.android.email.mail.Message;
|
||||
import com.android.email.mail.MessagingException;
|
||||
import com.android.email.mail.Part;
|
||||
|
||||
/**
|
||||
@ -15,7 +19,7 @@ import com.android.email.mail.Part;
|
||||
* changes in this class.
|
||||
*/
|
||||
public class MessagingListener {
|
||||
|
||||
|
||||
public void accountStatusChanged(Account account, int unreadMessageCount) {
|
||||
}
|
||||
|
||||
@ -63,7 +67,27 @@ public class MessagingListener {
|
||||
public void synchronizeMailboxStarted(Account account, String folder) {
|
||||
}
|
||||
|
||||
public void synchronizeMailboxNewMessage(Account account, String folder, Message message) {
|
||||
public final void synchronizeMailboxNewMessage(Context context, Account account, String folder, Message message) {
|
||||
try {
|
||||
Uri uri = Uri.parse("email://messages/" + account.getAccountNumber() + "/" + Uri.encode(folder) + "/" + Uri.encode(message.getUid()));
|
||||
android.content.Intent intent = new android.content.Intent(Intent.ACTION_EMAIL_RECEIVED, uri);
|
||||
intent.putExtra(Intent.EXTRA_ACCOUNT, account.getDescription());
|
||||
intent.putExtra(Intent.EXTRA_FOLDER, folder);
|
||||
intent.putExtra(Intent.EXTRA_SENT_DATE, message.getSentDate());
|
||||
intent.putExtra(Intent.EXTRA_FROM, Address.toString(message.getFrom()));
|
||||
intent.putExtra(Intent.EXTRA_TO, Address.toString(message.getRecipients(Message.RecipientType.TO)));
|
||||
intent.putExtra(Intent.EXTRA_CC, Address.toString(message.getRecipients(Message.RecipientType.CC)));
|
||||
intent.putExtra(Intent.EXTRA_BCC, Address.toString(message.getRecipients(Message.RecipientType.BCC)));
|
||||
intent.putExtra(Intent.EXTRA_SUBJECT, message.getSubject());
|
||||
context.sendBroadcast(intent);
|
||||
Log.d(Email.LOG_TAG, "Broadcasted intent: " + message.getSubject());
|
||||
}
|
||||
catch (MessagingException e) {
|
||||
Log.w(Email.LOG_TAG, "Account=" + account.getName() + " folder=" + folder + "message uid=" + message.getUid(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public void synchronizeMailboxAddOrUpdateMessage(Account account, String folder, Message message) {
|
||||
}
|
||||
|
||||
public void synchronizeMailboxRemovedMessage(Account account, String folder,Message message) {
|
||||
@ -92,7 +116,7 @@ public class MessagingListener {
|
||||
Message message) {
|
||||
}
|
||||
|
||||
public void loadMessageForViewFailed(Account account, String folder, String uid, String message) {
|
||||
public void loadMessageForViewFailed(Account account, String folder, String uid, Throwable t) {
|
||||
}
|
||||
|
||||
public void checkMailStarted(Context context, Account account) {
|
||||
|
@ -66,8 +66,6 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class FolderList extends K9ListActivity {
|
||||
|
||||
private static final String INTENT_DATA_PATH_SUFFIX = "/accounts";
|
||||
|
||||
private static final int DIALOG_MARK_ALL_AS_READ = 1;
|
||||
|
||||
private static final String EXTRA_ACCOUNT = "account";
|
||||
@ -329,7 +327,7 @@ public class FolderList extends K9ListActivity {
|
||||
if (mSynchronizeRemote) {
|
||||
// Tell the MessagingController to run a remote update of this folder
|
||||
// at it's leisure
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox(mAccount, mFolder, mAdapter.mListener);
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox(FolderList.this, mAccount, mFolder, mAdapter.mListener);
|
||||
}
|
||||
} finally {
|
||||
wakeLock.release();
|
||||
@ -359,7 +357,11 @@ public class FolderList extends K9ListActivity {
|
||||
}
|
||||
|
||||
public static Intent actionHandleAccountIntent(Context context, Account account, String initialFolder) {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Email.INTENT_DATA_URI_PREFIX + INTENT_DATA_PATH_SUFFIX + "/" + account.getAccountNumber()), context, FolderList.class);
|
||||
Intent intent = new Intent(
|
||||
Intent.ACTION_VIEW,
|
||||
Uri.parse("email://accounts/" + account.getAccountNumber()),
|
||||
context,
|
||||
FolderList.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.putExtra(EXTRA_ACCOUNT, account);
|
||||
intent.putExtra(EXTRA_CLEAR_NOTIFICATION, true);
|
||||
@ -582,10 +584,6 @@ public class FolderList extends K9ListActivity {
|
||||
MessagingController.getInstance(getApplication()).checkMail(this, account, true, true, mAdapter.mListener);
|
||||
}
|
||||
|
||||
private void checkMail(Account account, String folderName) {
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox(account, folderName, mAdapter.mListener);
|
||||
}
|
||||
|
||||
@Override public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.compose:
|
||||
|
@ -1340,7 +1340,7 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadMessageForViewFailed(Account account, String folder, String uid, final String message) {
|
||||
public void loadMessageForViewFailed(Account account, String folder, String uid, Throwable t) {
|
||||
if (mSourceMessageUid==null
|
||||
|| !mSourceMessageUid.equals(uid)) {
|
||||
return;
|
||||
|
@ -89,6 +89,7 @@ public class MessageList extends K9ListActivity {
|
||||
private static final int ACTIVITY_CHOOSE_FOLDER_MOVE = 1;
|
||||
|
||||
private static final int ACTIVITY_CHOOSE_FOLDER_COPY = 2;
|
||||
|
||||
private static final boolean FORCE_REMOTE_SYNC = true;
|
||||
|
||||
private static final String EXTRA_ACCOUNT = "account";
|
||||
@ -409,6 +410,7 @@ public class MessageList extends K9ListActivity {
|
||||
if ((itemPosition+1) == (mAdapter.getCount() )) {
|
||||
|
||||
MessagingController.getInstance(getApplication()).loadMoreMessages(
|
||||
MessageList.this,
|
||||
mAccount,
|
||||
mFolderName,
|
||||
mAdapter.mListener);
|
||||
@ -572,7 +574,7 @@ public class MessageList extends K9ListActivity {
|
||||
public void run() {
|
||||
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
|
||||
if (forceRemote) {
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox( mAccount, mFolderName, mAdapter.mListener);
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox(MessageList.this, mAccount, mFolderName, mAdapter.mListener);
|
||||
MessagingController.getInstance(getApplication()).sendPendingMessages(mAccount, null);
|
||||
}
|
||||
MessagingController.getInstance(getApplication()).listLocalMessages(mAccount, mFolderName, mAdapter.mListener);
|
||||
@ -920,7 +922,7 @@ public class MessageList extends K9ListActivity {
|
||||
// }
|
||||
|
||||
private void checkMail(Account account, String folderName) {
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox( account, folderName, mAdapter.mListener);
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox(this, account, folderName, mAdapter.mListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1164,7 +1166,7 @@ public class MessageList extends K9ListActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void synchronizeMailboxNewMessage(Account account, String folder, Message message) {
|
||||
public void synchronizeMailboxAddOrUpdateMessage(Account account, String folder, Message message) {
|
||||
if (!account.equals(mAccount) || !folder.equals(mFolderName)) {
|
||||
return;
|
||||
}
|
||||
@ -1192,7 +1194,7 @@ public class MessageList extends K9ListActivity {
|
||||
return;
|
||||
}
|
||||
|
||||
mHandler.sortMessages();
|
||||
mHandler.sortMessages();
|
||||
mHandler.progress(false);
|
||||
mHandler.folderLoading(folder, false);
|
||||
}
|
||||
@ -1203,7 +1205,7 @@ public class MessageList extends K9ListActivity {
|
||||
return;
|
||||
}
|
||||
|
||||
mHandler.sortMessages();
|
||||
mHandler.sortMessages();
|
||||
mHandler.progress(false);
|
||||
mHandler.folderLoading(folder, false);
|
||||
}
|
||||
|
@ -27,7 +27,6 @@ import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.provider.Contacts;
|
||||
import android.provider.Contacts.Intents;
|
||||
import android.text.Spannable;
|
||||
import android.util.Config;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
@ -52,6 +51,7 @@ import com.android.email.Account;
|
||||
import com.android.email.Email;
|
||||
import com.android.email.MessagingController;
|
||||
import com.android.email.MessagingListener;
|
||||
import com.android.email.Preferences;
|
||||
import com.android.email.R;
|
||||
import com.android.email.Utility;
|
||||
import com.android.email.mail.Address;
|
||||
@ -68,8 +68,7 @@ import com.android.email.mail.store.LocalStore.LocalTextBody;
|
||||
import com.android.email.provider.AttachmentProvider;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.List;
|
||||
|
||||
public class MessageView extends K9Activity
|
||||
implements UrlInterceptHandler, OnClickListener {
|
||||
@ -206,6 +205,8 @@ public class MessageView extends K9Activity
|
||||
private static final int MSG_ATTACHMENT_NOT_SAVED = 8;
|
||||
private static final int MSG_SHOW_SHOW_PICTURES = 9;
|
||||
private static final int MSG_FETCHING_ATTACHMENT = 10;
|
||||
private static final int MSG_INVALID_ID_ERROR = 11;
|
||||
|
||||
private static final int FLAG_FLAGGED = 1;
|
||||
private static final int FLAG_ANSWERED = 2;
|
||||
|
||||
@ -263,6 +264,10 @@ public class MessageView extends K9Activity
|
||||
Toast.makeText(MessageView.this,
|
||||
R.string.status_network_error, Toast.LENGTH_LONG).show();
|
||||
break;
|
||||
case MSG_INVALID_ID_ERROR:
|
||||
Toast.makeText(MessageView.this,
|
||||
R.string.status_invalid_id_error, Toast.LENGTH_LONG).show();
|
||||
break;
|
||||
case MSG_ATTACHMENT_SAVED:
|
||||
Toast.makeText(MessageView.this, String.format(
|
||||
getString(R.string.message_view_status_attachment_saved), msg.obj),
|
||||
@ -331,6 +336,10 @@ public class MessageView extends K9Activity
|
||||
sendEmptyMessage(MSG_NETWORK_ERROR);
|
||||
}
|
||||
|
||||
public void invalidIdError() {
|
||||
sendEmptyMessage(MSG_INVALID_ID_ERROR);
|
||||
}
|
||||
|
||||
public void attachmentSaved(String filename) {
|
||||
android.os.Message msg = new android.os.Message();
|
||||
msg.what = MSG_ATTACHMENT_SAVED;
|
||||
@ -436,21 +445,61 @@ public class MessageView extends K9Activity
|
||||
setTitle("");
|
||||
|
||||
Intent intent = getIntent();
|
||||
mAccount = (Account) intent.getSerializableExtra(EXTRA_ACCOUNT);
|
||||
mFolder = intent.getStringExtra(EXTRA_FOLDER);
|
||||
mMessageUid = intent.getStringExtra(EXTRA_MESSAGE);
|
||||
mFolderUids = intent.getStringArrayListExtra(EXTRA_FOLDER_UIDS);
|
||||
Uri uri = intent.getData();
|
||||
|
||||
if (uri==null) {
|
||||
mAccount = (Account) intent.getSerializableExtra(EXTRA_ACCOUNT);
|
||||
mFolder = intent.getStringExtra(EXTRA_FOLDER);
|
||||
mMessageUid = intent.getStringExtra(EXTRA_MESSAGE);
|
||||
mFolderUids = intent.getStringArrayListExtra(EXTRA_FOLDER_UIDS);
|
||||
|
||||
Log.v(Email.LOG_TAG, "mAccount number: " + mAccount.getAccountNumber());
|
||||
Log.v(Email.LOG_TAG, "mFolder: " + mFolder);
|
||||
Log.v(Email.LOG_TAG, "mMessageUid: " + mMessageUid);
|
||||
}
|
||||
else {
|
||||
Log.v(Email.LOG_TAG, "uri: " + uri.toString());
|
||||
List<String> segmentList = uri.getPathSegments();
|
||||
Log.v(Email.LOG_TAG, "segmentList size: " + segmentList.size());
|
||||
if (segmentList.size()==3) {
|
||||
String accountId = segmentList.get(0);
|
||||
Account[] accounts = Preferences.getPreferences(this).getAccounts();
|
||||
Log.v(Email.LOG_TAG, "account.length: " + accounts.length);
|
||||
boolean found = false;
|
||||
for (Account account : accounts) {
|
||||
Log.v(Email.LOG_TAG, "account: name=" + account.getDescription() + " number=" + account.getAccountNumber());
|
||||
if (String.valueOf(account.getAccountNumber()).equals(accountId)) {
|
||||
mAccount = account;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
//TODO: Use ressource to externalize message
|
||||
Toast.makeText(this, "Invalid account id: " + accountId, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
mFolder = segmentList.get(1);
|
||||
mMessageUid = segmentList.get(2);
|
||||
mFolderUids = new ArrayList<String>();
|
||||
}
|
||||
else {
|
||||
for (String segment : segmentList) {
|
||||
Log.v(Email.LOG_TAG, "segment: " + segment);
|
||||
}
|
||||
//TODO: Use ressource to externalize message
|
||||
Toast.makeText(this, "Invalid intent uri: " + uri.toString(), Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
next = findViewById(R.id.next);
|
||||
previous = findViewById(R.id.previous);
|
||||
|
||||
|
||||
setOnClickListener(R.id.next);
|
||||
setOnClickListener(R.id.previous);
|
||||
|
||||
next_scrolling = findViewById(R.id.next_scrolling);
|
||||
|
||||
|
||||
previous_scrolling = findViewById(R.id.previous_scrolling);
|
||||
|
||||
boolean goNext = intent.getBooleanExtra(EXTRA_NEXT, false);
|
||||
@ -460,7 +509,7 @@ public class MessageView extends K9Activity
|
||||
|
||||
Account.HideButtons hideButtons = mAccount.getHideMessageViewButtons();
|
||||
|
||||
// MessagingController.getInstance(getApplication()).addListener(mListener);
|
||||
//MessagingController.getInstance(getApplication()).addListener(mListener);
|
||||
if (Account.HideButtons.ALWAYS == hideButtons)
|
||||
{
|
||||
hideButtons();
|
||||
@ -1200,7 +1249,7 @@ public class MessageView extends K9Activity
|
||||
|
||||
@Override
|
||||
public void loadMessageForViewFailed(Account account, String folder, String uid,
|
||||
final String message) {
|
||||
final Throwable t) {
|
||||
if (!mMessageUid.equals(uid)) {
|
||||
return;
|
||||
}
|
||||
@ -1208,7 +1257,12 @@ public class MessageView extends K9Activity
|
||||
mHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
setProgressBarIndeterminateVisibility(false);
|
||||
mHandler.networkError();
|
||||
if (t instanceof IllegalArgumentException) {
|
||||
mHandler.invalidIdError();
|
||||
}
|
||||
else {
|
||||
mHandler.networkError();
|
||||
}
|
||||
mMessageContentView.loadUrl("file:///android_asset/empty.html");
|
||||
}
|
||||
});
|
||||
|
@ -109,7 +109,7 @@ public class AccountSetupCheckSettings extends K9Activity implements OnClickList
|
||||
public void run() {
|
||||
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
|
||||
MessagingController.getInstance(getApplication()).listFolders(mAccount, true, null);
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox( mAccount, Email.INBOX , null);
|
||||
MessagingController.getInstance(getApplication()).synchronizeMailbox(AccountSetupCheckSettings.this, mAccount, Email.INBOX , null);
|
||||
|
||||
}
|
||||
}.start();
|
||||
|
Loading…
Reference in New Issue
Block a user