Controller rework.

- Controller.Result is now a class rather than an interface,
  so subclasses don't have to implement empty methods.

- Replaced Threads with AsyncTasks, which is more light weighted
  because it uses pooled threads.

- Removed the Result argument from Controller's methods.
  These argumetns weren't used, except in serviceCheckMail.

  Regarding serviceCheckMail, the new code behave differenly from the old code.
  If there's already listeners registered when it's colled, they wouldn't get
  called in the old code, but they will in the new code.
  But I think this difference is okay because that's how it works for
  POP/IMAP accounts.

Change-Id: I37a857ce7c089c1a411cb7f1fcfcb72c9f5fd2a6
This commit is contained in:
Makoto Onuki 2010-06-07 14:03:40 -07:00
parent f11399b1ea
commit 3f545a4060
9 changed files with 101 additions and 160 deletions

View File

@ -158,7 +158,7 @@ public class Controller {
*
* TODO: Clean up threading in MessagingController cases (or perhaps here in Controller)
*/
public void updateMailboxList(final long accountId, final Result callback) {
public void updateMailboxList(final long accountId) {
IEmailService service = getServiceForAccount(accountId);
if (service != null) {
@ -172,12 +172,11 @@ public class Controller {
}
} else {
// MessagingController implementation
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.listFolders(accountId, mLegacyListener);
}
}.start();
});
}
}
@ -187,8 +186,7 @@ public class Controller {
* Functionally this is quite similar to updateMailbox(), but it's a separate API and
* separate callback in order to keep UI callbacks from affecting the service loop.
*/
public void serviceCheckMail(final long accountId, final long mailboxId, final long tag,
final Result callback) {
public void serviceCheckMail(final long accountId, final long mailboxId, final long tag) {
IEmailService service = getServiceForAccount(accountId);
if (service != null) {
// Service implementation
@ -196,7 +194,7 @@ public class Controller {
// TODO this isn't quite going to work, because we're going to get the
// generic (UI) callbacks and not the ones we need to restart the ol' service.
// service.startSync(mailboxId, tag);
callback.serviceCheckMailCallback(null, accountId, mailboxId, 100, tag);
mLegacyListener.checkMailFinished(mContext, accountId, mailboxId, tag);
// } catch (RemoteException e) {
// TODO Change exception handling to be consistent with however this method
// is implemented for other protocols
@ -204,12 +202,11 @@ public class Controller {
// }
} else {
// MessagingController implementation
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.checkMail(accountId, tag, mLegacyListener);
}
}.start();
});
}
}
@ -220,7 +217,7 @@ public class Controller {
* a simple message list. We should also at this point queue up a background task of
* downloading some/all of the messages in this mailbox, but that should be interruptable.
*/
public void updateMailbox(final long accountId, final long mailboxId, final Result callback) {
public void updateMailbox(final long accountId, final long mailboxId) {
IEmailService service = getServiceForAccount(accountId);
if (service != null) {
@ -234,8 +231,7 @@ public class Controller {
}
} else {
// MessagingController implementation
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
// TODO shouldn't be passing fully-build accounts & mailboxes into APIs
Account account =
@ -247,7 +243,7 @@ public class Controller {
}
mLegacyController.synchronizeMailbox(account, mailbox, mLegacyListener);
}
}.start();
});
}
}
@ -261,7 +257,7 @@ public class Controller {
* @param messageId the message to load
* @param callback the Controller callback by which results will be reported
*/
public void loadMessageForView(final long messageId, final Result callback) {
public void loadMessageForView(final long messageId) {
// Split here for target type (Service or MessagingController)
IEmailService service = getServiceForMessage(messageId);
@ -280,12 +276,11 @@ public class Controller {
}
} else {
// MessagingController implementation
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.loadMessageForView(messageId, mLegacyListener);
}
}.start();
});
}
}
@ -415,12 +410,11 @@ public class Controller {
final EmailContent.Account account =
EmailContent.Account.restoreAccountWithId(mProviderContext, accountId);
final long sentboxId = findOrCreateMailboxOfType(accountId, Mailbox.TYPE_SENT);
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.sendPendingMessages(account, sentboxId, mLegacyListener);
}
}.start();
});
}
}
@ -430,7 +424,7 @@ public class Controller {
* @param accountId the account for which to send messages (-1 for all accounts)
* @param callback
*/
public void sendPendingMessages(long accountId, Result callback) {
public void sendPendingMessages(long accountId) {
// 1. make sure we even have an outbox, exit early if not
final long outboxId =
Mailbox.findMailboxOfType(mProviderContext, accountId, Mailbox.TYPE_OUTBOX);
@ -454,12 +448,11 @@ public class Controller {
final EmailContent.Account account =
EmailContent.Account.restoreAccountWithId(mProviderContext, accountId);
final long sentboxId = findOrCreateMailboxOfType(accountId, Mailbox.TYPE_SENT);
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.sendPendingMessages(account, sentboxId, mLegacyListener);
}
}.start();
});
}
}
@ -470,8 +463,7 @@ public class Controller {
* write limit into all mailboxes for that account
*/
public void resetVisibleLimits() {
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
ContentResolver resolver = mProviderContext.getContentResolver();
Cursor c = null;
@ -502,7 +494,7 @@ public class Controller {
}
}
}
}.start();
});
}
/**
@ -512,9 +504,8 @@ public class Controller {
* @param mailboxId the mailbox
* @param callback
*/
public void loadMoreMessages(final long mailboxId, Result callback) {
new Thread() {
@Override
public void loadMoreMessages(final long mailboxId) {
Utility.runAsync(new Runnable() {
public void run() {
Mailbox mailbox = Mailbox.restoreMailboxWithId(mProviderContext, mailboxId);
if (mailbox == null) {
@ -539,7 +530,7 @@ public class Controller {
mLegacyController.synchronizeMailbox(account, mailbox, mLegacyListener);
}
}
}.start();
});
}
/**
@ -630,12 +621,11 @@ public class Controller {
Account account = Account.restoreAccountWithId(mProviderContext, accountId);
if (isMessagingController(account)) {
final long syncAccountId = accountId;
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.processPendingActions(syncAccountId);
}
}.start();
});
}
}
@ -658,12 +648,11 @@ public class Controller {
final Message message = Message.restoreMessageWithId(mProviderContext, messageId);
Account account = Account.restoreAccountWithId(mProviderContext, message.mAccountKey);
if (isMessagingController(account)) {
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.processPendingActions(message.mAccountKey);
}
}.start();
});
}
}
@ -686,12 +675,11 @@ public class Controller {
final Message message = Message.restoreMessageWithId(mProviderContext, messageId);
Account account = Account.restoreAccountWithId(mProviderContext, message.mAccountKey);
if (isMessagingController(account)) {
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.processPendingActions(message.mAccountKey);
}
}.start();
});
}
}
@ -700,10 +688,8 @@ public class Controller {
*
* @param messageId the id of the invitation being responded to
* @param response the code representing the response to the invitation
* @callback the Controller callback by which results will be reported (currently not defined)
*/
public void sendMeetingResponse(final long messageId, final int response,
final Result callback) {
public void sendMeetingResponse(final long messageId, final int response) {
// Split here for target type (Service or MessagingController)
IEmailService service = getServiceForMessage(messageId);
if (service != null) {
@ -726,10 +712,9 @@ public class Controller {
* @param messageId the owner message
* @param mailboxId the owner mailbox
* @param accountId the owner account
* @param callback the Controller callback by which results will be reported
*/
public void loadAttachment(final long attachmentId, final long messageId, final long mailboxId,
final long accountId, final Result callback) {
final long accountId) {
File saveToFile = AttachmentProvider.getAttachmentFilename(mProviderContext,
accountId, attachmentId);
@ -762,13 +747,12 @@ public class Controller {
}
} else {
// MessagingController implementation
new Thread() {
@Override
Utility.runAsync(new Runnable() {
public void run() {
mLegacyController.loadAttachment(accountId, messageId, mailboxId, attachmentId,
mLegacyListener);
}
}.start();
});
}
}
@ -850,7 +834,7 @@ public class Controller {
* and the result is observed via provider cursors. The callback will *not* necessarily be
* made from the UI thread, so you may need further handlers to safely make UI updates.
*/
public interface Result {
public static abstract class Result {
/**
* Callback for updateMailboxList
*
@ -859,7 +843,8 @@ public class Controller {
* @param progress 0 for "starting", 1..99 for updates (if needed in UI), 100 for complete
*/
public void updateMailboxListCallback(MessagingException result, long accountId,
int progress);
int progress) {
}
/**
* Callback for updateMailbox. Note: This looks a lot like checkMailCallback, but
@ -872,7 +857,8 @@ public class Controller {
* @param numNewMessages the number of new messages delivered
*/
public void updateMailboxCallback(MessagingException result, long accountId,
long mailboxId, int progress, int numNewMessages);
long mailboxId, int progress, int numNewMessages) {
}
/**
* Callback for loadMessageForView
@ -882,7 +868,8 @@ public class Controller {
* @param progress 0 for "starting", 1..99 for updates (if needed in UI), 100 for complete
*/
public void loadMessageForViewCallback(MessagingException result, long messageId,
int progress);
int progress) {
}
/**
* Callback for loadAttachment
@ -893,7 +880,8 @@ public class Controller {
* @param progress 0 for "starting", 1..99 for updates (if needed in UI), 100 for complete
*/
public void loadAttachmentCallback(MessagingException result, long messageId,
long attachmentId, int progress);
long attachmentId, int progress) {
}
/**
* Callback for checkmail. Note: This looks a lot like updateMailboxCallback, but
@ -907,7 +895,8 @@ public class Controller {
* @param tag the same tag that was passed to serviceCheckMail()
*/
public void serviceCheckMailCallback(MessagingException result, long accountId,
long mailboxId, int progress, long tag);
long mailboxId, int progress, long tag) {
}
/**
* Callback for sending pending messages. This will be called once to start the
@ -919,7 +908,8 @@ public class Controller {
* @param progress 0 for "starting", 100 for complete
*/
public void sendMailCallback(MessagingException result, long accountId,
long messageId, int progress);
long messageId, int progress) {
}
}
/**

View File

@ -25,7 +25,7 @@ import android.os.Handler;
* A {@link Result} that wraps another {@link Result} and makes sure methods gets called back
* on the UI thread.
*/
public class ControllerResultUiThreadWrapper<T extends Result> implements Result {
public class ControllerResultUiThreadWrapper<T extends Result> extends Result {
private final Handler mHandler;
private final T mWrappee;
@ -38,6 +38,7 @@ public class ControllerResultUiThreadWrapper<T extends Result> implements Result
return mWrappee;
}
@Override
public void loadAttachmentCallback(final MessagingException result, final long messageId,
final long attachmentId, final int progress) {
mHandler.post(new Runnable() {
@ -47,6 +48,7 @@ public class ControllerResultUiThreadWrapper<T extends Result> implements Result
});
}
@Override
public void loadMessageForViewCallback(final MessagingException result,
final long messageId, final int progress) {
mHandler.post(new Runnable() {
@ -56,6 +58,7 @@ public class ControllerResultUiThreadWrapper<T extends Result> implements Result
});
}
@Override
public void sendMailCallback(final MessagingException result, final long accountId,
final long messageId, final int progress) {
mHandler.post(new Runnable() {
@ -65,6 +68,7 @@ public class ControllerResultUiThreadWrapper<T extends Result> implements Result
});
}
@Override
public void serviceCheckMailCallback(final MessagingException result, final long accountId,
final long mailboxId, final int progress, final long tag) {
mHandler.post(new Runnable() {
@ -74,6 +78,7 @@ public class ControllerResultUiThreadWrapper<T extends Result> implements Result
});
}
@Override
public void updateMailboxCallback(final MessagingException result, final long accountId,
final long mailboxId, final int progress, final int numNewMessages) {
mHandler.post(new Runnable() {
@ -84,6 +89,7 @@ public class ControllerResultUiThreadWrapper<T extends Result> implements Result
});
}
@Override
public void updateMailboxListCallback(final MessagingException result, final long accountId,
final int progress) {
mHandler.post(new Runnable() {

View File

@ -632,4 +632,16 @@ public class Utility {
}
});
}
/**
* Run {@code r} on a worker thread.
*/
public static void runAsync(final Runnable r) {
new AsyncTask<Void, Void, Void>() {
@Override protected Void doInBackground(Void... params) {
r.run();
return null;
}
}.execute();
}
}

View File

@ -408,8 +408,7 @@ public class AccountFolderList extends ListActivity
Toast.LENGTH_LONG).show();
} else {
showProgressIcon(true);
Controller.getInstance(getApplication()).updateMailboxList(
accountId, mControllerCallback);
Controller.getInstance(getApplication()).updateMailboxList(accountId);
}
}
@ -595,12 +594,14 @@ public class AccountFolderList extends ListActivity
* Controller results listener. We wrap it with {@link ControllerResultUiThreadWrapper},
* so all methods are called on the UI thread.
*/
private class ControllerResults implements Controller.Result {
private class ControllerResults extends Controller.Result {
@Override
public void updateMailboxListCallback(MessagingException result, long accountKey,
int progress) {
updateProgress(result, progress);
}
@Override
public void updateMailboxCallback(MessagingException result, long accountKey,
long mailboxKey, int progress, int numNewMessages) {
if (result != null || progress == 100) {
@ -612,19 +613,13 @@ public class AccountFolderList extends ListActivity
updateProgress(result, progress);
}
public void loadMessageForViewCallback(MessagingException result, long messageId,
int progress) {
}
public void loadAttachmentCallback(MessagingException result, long messageId,
long attachmentId, int progress) {
}
@Override
public void serviceCheckMailCallback(MessagingException result, long accountId,
long mailboxId, int progress, long tag) {
updateProgress(result, progress);
}
@Override
public void sendMailCallback(MessagingException result, long accountId, long messageId,
int progress) {
if (progress == 100) {

View File

@ -237,9 +237,9 @@ public class MailboxList extends Activity implements OnClickListener, MailboxLis
Controller controller = Controller.getInstance(getApplication());
showProgressIcon(true);
if (mailboxId >= 0) {
controller.updateMailbox(mAccountId, mailboxId, mControllerCallback);
controller.updateMailbox(mAccountId, mailboxId);
} else {
controller.updateMailboxList(mAccountId, mControllerCallback);
controller.updateMailboxList(mAccountId);
}
}
@ -302,9 +302,10 @@ public class MailboxList extends Activity implements OnClickListener, MailboxLis
* Controller results listener. We wrap it with {@link ControllerResultUiThreadWrapper},
* so all methods are called on the UI thread.
*/
private class ControllerResults implements Controller.Result {
private class ControllerResults extends Controller.Result {
// TODO report errors into UI
@Override
public void updateMailboxListCallback(MessagingException result, long accountKey,
int progress) {
if (accountKey == mAccountId) {
@ -314,6 +315,7 @@ public class MailboxList extends Activity implements OnClickListener, MailboxLis
}
// TODO report errors into UI
@Override
public void updateMailboxCallback(MessagingException result, long accountKey,
long mailboxKey, int progress, int numNewMessages) {
if (result != null || progress == 100) {
@ -325,18 +327,7 @@ public class MailboxList extends Activity implements OnClickListener, MailboxLis
}
}
public void loadMessageForViewCallback(MessagingException result, long messageId,
int progress) {
}
public void loadAttachmentCallback(MessagingException result, long messageId,
long attachmentId, int progress) {
}
public void serviceCheckMailCallback(MessagingException result, long accountId,
long mailboxId, int progress, long tag) {
}
@Override
public void sendMailCallback(MessagingException result, long accountId, long messageId,
int progress) {
if (accountId == mAccountId) {

View File

@ -1522,32 +1522,13 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
}
}
private class Listener implements Controller.Result {
public void updateMailboxListCallback(MessagingException result, long accountId,
int progress) {
}
private class Listener extends Controller.Result {
@Override
public void updateMailboxCallback(MessagingException result, long accountId,
long mailboxId, int progress, int numNewMessages) {
if (result != null || progress == 100) {
Email.updateMailboxRefreshTime(mailboxId);
}
}
public void loadMessageForViewCallback(MessagingException result, long messageId,
int progress) {
}
public void loadAttachmentCallback(MessagingException result, long messageId,
long attachmentId, int progress) {
}
public void serviceCheckMailCallback(MessagingException result, long accountId,
long mailboxId, int progress, long tag) {
}
public void sendMailCallback(MessagingException result, long accountId, long messageId,
int progress) {
}
}
}

View File

@ -538,7 +538,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
if (mMailboxId >= 0) {
Mailbox mailbox = Mailbox.restoreMailboxWithId(this, mMailboxId);
if (mailbox != null) {
mController.updateMailbox(mailbox.mAccountKey, mMailboxId, mControllerCallback);
mController.updateMailbox(mailbox.mAccountKey, mMailboxId);
}
}
}
@ -628,7 +628,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
private void onLoadMoreMessages() {
if (mMailboxId >= 0) {
mController.loadMoreMessages(mMailboxId, mControllerCallback);
mController.loadMoreMessages(mMailboxId);
}
}
@ -640,7 +640,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
try {
while (c.moveToNext()) {
long accountId = c.getLong(Account.ID_PROJECTION_COLUMN);
mController.sendPendingMessages(accountId, mControllerCallback);
mController.sendPendingMessages(accountId);
}
} finally {
c.close();
@ -648,7 +648,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
} else {
long accountKey = lookupAccountIdFromMailboxId(mMailboxId);
if (accountKey > -2) {
mController.sendPendingMessages(accountKey, mControllerCallback);
mController.sendPendingMessages(accountKey);
} else {
finish();
}
@ -1120,7 +1120,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
// TODO updateMailboxList accessed DB, so we shouldn't call on the UI thread,
// but we should fix the Controller side. (Other Controller methods too access
// DB but are called on the UI thread.)
mController.updateMailboxList(mAccountId, mControllerCallback);
mController.updateMailboxList(mAccountId);
return;
default:
// At this point, mailboxId != NO_MAILBOX
@ -1351,7 +1351,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
* Controller results listener. We wrap it with {@link ControllerResultUiThreadWrapper},
* so all methods are called on the UI thread.
*/
private class ControllerResults implements Controller.Result {
private class ControllerResults extends Controller.Result {
// This is used to alter the connection banner operation for sending messages
MessagingException mSendMessageException;
@ -1365,6 +1365,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
mWaitForMailboxAccount = accountId;
}
@Override
public void updateMailboxListCallback(MessagingException result,
long accountKey, int progress) {
// updateMailboxList is never the end goal in MessageList, so we don't show
@ -1380,6 +1381,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
}
// TODO check accountKey and only react to relevant notifications
@Override
public void updateMailboxCallback(MessagingException result, long accountKey,
long mailboxKey, int progress, int numNewMessages) {
updateBanner(result, progress, mailboxKey);
@ -1389,18 +1391,6 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
updateProgress(result, progress);
}
public void loadMessageForViewCallback(MessagingException result, long messageId,
int progress) {
}
public void loadAttachmentCallback(MessagingException result, long messageId,
long attachmentId, int progress) {
}
public void serviceCheckMailCallback(MessagingException result, long accountId,
long mailboxId, int progress, long tag) {
}
/**
* We alter the updateBanner hysteresis here to capture any failures and handle
* them just once at the end. This callback is overly overloaded:
@ -1409,6 +1399,7 @@ public class MessageList extends ListActivity implements OnItemClickListener, On
* result == xxxx, messageId == xx, progress == 0; failed sending one message
* result == null, messageId == -1, progres == 100; finish sending batch
*/
@Override
public void sendMailCallback(MessagingException result, long accountId, long messageId,
int progress) {
if (mListFooterMode == LIST_FOOTER_MODE_SEND) {

View File

@ -589,7 +589,7 @@ public class MessageView extends Activity implements OnClickListener {
private void onRespond(int response, int toastResId) {
// do not send twice in a row the same response
if (mPreviousMeetingResponse != response) {
mController.sendMeetingResponse(mMessageId, response, mControllerCallback);
mController.sendMeetingResponse(mMessageId, response);
mPreviousMeetingResponse = response;
}
Toast.makeText(this, toastResId, Toast.LENGTH_SHORT).show();
@ -615,7 +615,7 @@ public class MessageView extends Activity implements OnClickListener {
mLoadAttachmentName = attachment.name;
mController.loadAttachment(attachment.attachmentId, mMessageId, mMessage.mMailboxKey,
mAccountId, mControllerCallback);
mAccountId);
}
private void onViewAttachment(AttachmentInfo attachment) {
@ -624,7 +624,7 @@ public class MessageView extends Activity implements OnClickListener {
mLoadAttachmentName = attachment.name;
mController.loadAttachment(attachment.attachmentId, mMessageId, mMessage.mMailboxKey,
mAccountId, mControllerCallback);
mAccountId);
}
private void onShowPictures() {
@ -1231,7 +1231,7 @@ public class MessageView extends Activity implements OnClickListener {
// 4. Else start the loader tasks right away (message already loaded)
if (okToFetch && message.mFlagLoaded != Message.FLAG_LOADED_COMPLETE) {
mWaitForLoadMessageId = message.mId;
mController.loadMessageForView(message.mId, mControllerCallback);
mController.loadMessageForView(message.mId);
} else {
mWaitForLoadMessageId = -1;
// Ask for body
@ -1315,8 +1315,8 @@ public class MessageView extends Activity implements OnClickListener {
* Controller results listener. We wrap it with {@link ControllerResultUiThreadWrapper},
* so all methods are called on the UI thread.
*/
private class ControllerResults implements Controller.Result {
private class ControllerResults extends Controller.Result {
@Override
public void loadMessageForViewCallback(MessagingException result, long messageId,
int progress) {
if (messageId != MessageView.this.mMessageId
@ -1357,6 +1357,7 @@ public class MessageView extends Activity implements OnClickListener {
}
}
@Override
public void loadAttachmentCallback(MessagingException result, long messageId,
long attachmentId, int progress) {
if (messageId == MessageView.this.mMessageId) {
@ -1406,24 +1407,13 @@ public class MessageView extends Activity implements OnClickListener {
setProgressBarIndeterminateVisibility(show);
}
@Override
public void updateMailboxCallback(MessagingException result, long accountId,
long mailboxId, int progress, int numNewMessages) {
if (result != null || progress == 100) {
Email.updateMailboxRefreshTime(mailboxId);
}
}
public void updateMailboxListCallback(MessagingException result, long accountId,
int progress) {
}
public void serviceCheckMailCallback(MessagingException result, long accountId,
long mailboxId, int progress, long tag) {
}
public void sendMailCallback(MessagingException result, long accountId, long messageId,
int progress) {
}
}

View File

@ -248,7 +248,7 @@ public class MailService extends Service {
}
stopSelf(startId);
}
// Returning START_NOT_STICKY means that if a mail check is killed (e.g. due to memory
// pressure, there will be no explicit restart. This is OK; Note that we set a watchdog
// alarm before each mailbox check. If the mailbox check never completes, the watchdog
@ -409,7 +409,7 @@ public class MailService extends Service {
if (inboxId == Mailbox.NO_MAILBOX) {
return false;
} else {
controller.serviceCheckMail(checkAccountId, inboxId, startId, mControllerCallback);
controller.serviceCheckMail(checkAccountId, inboxId, startId);
return true;
}
}
@ -581,16 +581,8 @@ public class MailService extends Service {
}
}
class ControllerResults implements Controller.Result {
public void loadMessageForViewCallback(MessagingException result, long messageId,
int progress) {
}
public void loadAttachmentCallback(MessagingException result, long messageId,
long attachmentId, int progress) {
}
class ControllerResults extends Controller.Result {
@Override
public void updateMailboxCallback(MessagingException result, long accountId,
long mailboxId, int progress, int numNewMessages) {
if (result != null || progress == 100) {
@ -612,10 +604,7 @@ public class MailService extends Service {
}
}
public void updateMailboxListCallback(MessagingException result, long accountId,
int progress) {
}
@Override
public void serviceCheckMailCallback(MessagingException result, long accountId,
long mailboxId, int progress, long tag) {
if (result != null || progress == 100) {
@ -633,10 +622,6 @@ public class MailService extends Service {
stopSelf(serviceId);
}
}
public void sendMailCallback(MessagingException result, long accountId, long messageId,
int progress) {
}
}
/**