initial Controller.sendMessage() and invocation from MessageCompose.
This commit is contained in:
parent
3e79032dd1
commit
334903369e
|
@ -266,6 +266,56 @@ public class Controller {
|
|||
return box.mId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a message:
|
||||
* - move the message to Outbox (the message is assumed to be in Drafts).
|
||||
* - perform any necessary notification
|
||||
* - do the work in a separate (non-UI) thread
|
||||
* @param messageId the id of the message to send
|
||||
*/
|
||||
public void sendMessage(long messageId, long accountId) {
|
||||
ContentResolver resolver = mProviderContext.getContentResolver();
|
||||
if (accountId == -1) {
|
||||
accountId = lookupAccountForMessage(messageId);
|
||||
}
|
||||
if (accountId == -1) {
|
||||
// probably the message was not found
|
||||
if (Email.LOGD) {
|
||||
Email.log("no account found for message " + messageId);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Move to Outbox
|
||||
long outboxId = findOrCreateMailboxOfType(accountId, Mailbox.TYPE_OUTBOX);
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(EmailContent.MessageColumns.MAILBOX_KEY, outboxId);
|
||||
|
||||
// does this need to be SYNCED_CONTENT_URI instead?
|
||||
Uri uri = ContentUris.withAppendedId(EmailContent.Message.CONTENT_URI, messageId);
|
||||
resolver.update(uri, cv, null, null);
|
||||
|
||||
// TODO: notifications
|
||||
}
|
||||
|
||||
/**
|
||||
* @param messageId the id of message
|
||||
* @return the accountId corresponding to the given messageId, or -1 if not found.
|
||||
*/
|
||||
private long lookupAccountForMessage(long messageId) {
|
||||
ContentResolver resolver = mProviderContext.getContentResolver();
|
||||
Cursor c = resolver.query(EmailContent.Message.CONTENT_URI,
|
||||
MESSAGEID_TO_ACCOUNTID_PROJECTION, EmailContent.RECORD_ID + "=?",
|
||||
new String[] { Long.toString(messageId) }, null);
|
||||
try {
|
||||
return c.moveToFirst()
|
||||
? c.getLong(MESSAGEID_TO_ACCOUNTID_COLUMN_ACCOUNTID)
|
||||
: -1;
|
||||
} finally {
|
||||
c.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a single message by moving it to the trash.
|
||||
*
|
||||
|
@ -285,18 +335,10 @@ public class Controller {
|
|||
// 1. Look up acct# for message we're deleting
|
||||
Cursor c = null;
|
||||
if (accountId == -1) {
|
||||
try {
|
||||
c = resolver.query(EmailContent.Message.CONTENT_URI,
|
||||
MESSAGEID_TO_ACCOUNTID_PROJECTION, EmailContent.RECORD_ID + "=?",
|
||||
new String[] { Long.toString(messageId) }, null);
|
||||
if (c.moveToFirst()) {
|
||||
accountId = c.getLong(MESSAGEID_TO_ACCOUNTID_COLUMN_ACCOUNTID);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} finally {
|
||||
if (c != null) c.close();
|
||||
}
|
||||
accountId = lookupAccountForMessage(messageId);
|
||||
}
|
||||
if (accountId == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. Confirm that there is a trash mailbox available
|
||||
|
|
|
@ -28,6 +28,7 @@ import android.content.ComponentName;
|
|||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.database.Cursor;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
@ -227,12 +228,16 @@ public class Email extends Application {
|
|||
*/
|
||||
BinaryTempFileBody.setTempDirectory(getCacheDir());
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal, utility method for logging.
|
||||
* The calls to log() must be guarded with "if (Email.LOGD)" for performance reasons.
|
||||
*/
|
||||
public static void log(String message) {
|
||||
if (!Email.LOGD) {
|
||||
// somebody called log() without the guard.
|
||||
throw new IllegalStateException("Must guard with \"if (Email.LOGD)\"");
|
||||
}
|
||||
Log.d(LOG_TAG, message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -455,14 +455,14 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
|
|||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
MessagingController.getInstance(getApplication()).addListener(mListener);
|
||||
mController.addResultCallback(mListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
saveIfNeeded();
|
||||
MessagingController.getInstance(getApplication()).removeListener(mListener);
|
||||
mController.removeResultCallback(mListener);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -694,23 +694,33 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
|
|||
// message.setBody(body);
|
||||
// }
|
||||
|
||||
private void sendOrSaveMessage(boolean save) {
|
||||
final String action = getIntent().getAction();
|
||||
if (save) {
|
||||
/*
|
||||
* Save a draft
|
||||
*/
|
||||
if (ACTION_EDIT_DRAFT.equals(action)) {
|
||||
// The update doesn't modify the mailboxKey,
|
||||
// so just keep the same mailbox which is already DRAFTS.
|
||||
// TODO: move out of UI thread
|
||||
Message message = updateMessage(mSourceMessage);
|
||||
message.update(getApplication(), getUpdateContentValues(message));
|
||||
} else {
|
||||
Message message = updateMessage(null);
|
||||
mController.saveToMailbox(message, EmailContent.Mailbox.TYPE_DRAFTS);
|
||||
}
|
||||
/**
|
||||
* Send a message:
|
||||
* save to Drafts and invoke Controller.sendMessage().
|
||||
*/
|
||||
private void sendMessage() {
|
||||
Message message = saveMessage();
|
||||
mController.sendMessage(message.mId, message.mAccountKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a draft
|
||||
* @return the id of the saved message.
|
||||
*/
|
||||
private Message saveMessage() {
|
||||
final String action = getIntent().getAction();
|
||||
|
||||
Message message;
|
||||
if (ACTION_EDIT_DRAFT.equals(action)) {
|
||||
// The update doesn't modify the mailboxKey,
|
||||
// so just keep the same mailbox which is already DRAFTS.
|
||||
// TODO: move out of UI thread
|
||||
message = updateMessage(mSourceMessage);
|
||||
message.update(getApplication(), getUpdateContentValues(message));
|
||||
} else {
|
||||
message = updateMessage(null);
|
||||
mController.saveToMailbox(message, EmailContent.Mailbox.TYPE_DRAFTS);
|
||||
}
|
||||
// if (mDraftUid != null) {
|
||||
// message.setUid(mDraftUid);
|
||||
// }
|
||||
|
@ -725,30 +735,10 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
|
|||
// mDraftUid = message.getUid();
|
||||
|
||||
// Don't display the toast if the user is just changing the orientation
|
||||
if ((getChangingConfigurations() & ActivityInfo.CONFIG_ORIENTATION) == 0) {
|
||||
mHandler.sendEmptyMessage(MSG_SAVED_DRAFT);
|
||||
}
|
||||
if ((getChangingConfigurations() & ActivityInfo.CONFIG_ORIENTATION) == 0) {
|
||||
mHandler.sendEmptyMessage(MSG_SAVED_DRAFT);
|
||||
}
|
||||
// else {
|
||||
// /*
|
||||
// * Send the message
|
||||
// * If the source message is in other folder than draft, it should not be deleted while
|
||||
// * sending message.
|
||||
// */
|
||||
// if (ACTION_EDIT_DRAFT.equals(getIntent().getAction())
|
||||
// && mSourceMessageUid != null
|
||||
// && mFolder.equals(mAccount.getDraftsFolderName(this))) {
|
||||
// /*
|
||||
// * We're sending a previously saved draft, so delete the old draft first.
|
||||
// */
|
||||
// MessagingController.getInstance(getApplication()).deleteMessage(
|
||||
// mAccount,
|
||||
// mFolder,
|
||||
// mSourceMessage,
|
||||
// null);
|
||||
// }
|
||||
// MessagingController.getInstance(getApplication()).sendMessage(mAccount, message, null);
|
||||
// }
|
||||
return message;
|
||||
}
|
||||
|
||||
private void saveIfNeeded() {
|
||||
|
@ -756,7 +746,7 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
|
|||
return;
|
||||
}
|
||||
mDraftNeedsSaving = false;
|
||||
sendOrSaveMessage(true);
|
||||
saveMessage();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -784,7 +774,7 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
|
|||
Toast.makeText(this, getString(R.string.message_compose_error_no_recipients),
|
||||
Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
sendOrSaveMessage(false);
|
||||
sendMessage();
|
||||
mDraftNeedsSaving = false;
|
||||
finish();
|
||||
}
|
||||
|
@ -1244,13 +1234,26 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
|
|||
}
|
||||
}
|
||||
|
||||
class Listener extends MessagingListener {
|
||||
@Override
|
||||
public void loadMessageForViewStarted(Account account, String folder,
|
||||
String uid) {
|
||||
mHandler.sendEmptyMessage(MSG_PROGRESS_ON);
|
||||
class Listener implements Controller.Result {
|
||||
public void updateMailboxListCallback(MessagingException result, long accountId) {
|
||||
}
|
||||
|
||||
public void updateMailboxCallback(MessagingException result, long accountId,
|
||||
long mailboxId, int totalMessagesInMailbox, int numNewMessages) {
|
||||
}
|
||||
|
||||
public void loadAttachmentCallback(MessagingException result, long messageId,
|
||||
long attachmentId, int progress, Object tag) {
|
||||
}
|
||||
}
|
||||
|
||||
// class Listener extends MessagingListener {
|
||||
// @Override
|
||||
// public void loadMessageForViewStarted(Account account, String folder,
|
||||
// String uid) {
|
||||
// mHandler.sendEmptyMessage(MSG_PROGRESS_ON);
|
||||
// }
|
||||
|
||||
// @Override
|
||||
// public void loadMessageForViewFinished(Account account, String folder,
|
||||
// String uid, Message message) {
|
||||
|
@ -1269,11 +1272,11 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
|
|||
// });
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void loadMessageForViewFailed(Account account, String folder, String uid,
|
||||
final String message) {
|
||||
mHandler.sendEmptyMessage(MSG_PROGRESS_OFF);
|
||||
// TODO show network error
|
||||
}
|
||||
}
|
||||
// @Override
|
||||
// public void loadMessageForViewFailed(Account account, String folder, String uid,
|
||||
// final String message) {
|
||||
// mHandler.sendEmptyMessage(MSG_PROGRESS_OFF);
|
||||
// // TODO show network error
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue