Merge "More use of EmailAsyncTask"
diff --git a/src/com/android/email/activity/Welcome.java b/src/com/android/email/activity/Welcome.java
index 2a4de4c..f019d8e 100644
--- a/src/com/android/email/activity/Welcome.java
+++ b/src/com/android/email/activity/Welcome.java
@@ -24,13 +24,13 @@
 import com.android.emailcommon.provider.EmailContent;
 import com.android.emailcommon.provider.EmailContent.Account;
 import com.android.emailcommon.provider.EmailContent.Mailbox;
+import com.android.emailcommon.utility.EmailAsyncTask;
 
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.net.Uri;
-import android.os.AsyncTask;
 import android.os.Bundle;
 
 /**
@@ -39,7 +39,7 @@
  *
  * This class knows which activity should be launched under the current configuration (screen size)
  * and the number of accounts configured.  So if you want to open an account or a mailbox,
- * you should alawys do so via its static methods, such as {@link #actionOpenAccountInbox}.
+ * you should always do so via its static methods, such as {@link #actionOpenAccountInbox}.
  */
 public class Welcome extends Activity {
     /*
@@ -73,6 +73,8 @@
 
     private static final String VIEW_MAILBOX_INTENT_URL_PATH = "/view/mailbox";
 
+    private final EmailAsyncTask.Tracker mTaskTracker = new EmailAsyncTask.Tracker();
+
     /**
      * @return true if the two-pane activity should be used on the current configuration.
      */
@@ -166,11 +168,13 @@
         final long mailboxId = IntentUtilities.getMailboxIdFromIntent(intent);
         final long messageId = IntentUtilities.getMessageIdFromIntent(intent);
         final int debugPaneMode = getDebugPaneMode(getIntent());
-        new MainActivityLauncher(this, accountId, mailboxId, messageId, debugPaneMode).execute();
+        new MainActivityLauncher(this, accountId, mailboxId, messageId, debugPaneMode)
+                .executeParallel();
     }
 
     @Override
     public void onDestroy() {
+        mTaskTracker.cancellAllInterrupt();
         super.onDestroy();
     }
 
@@ -180,15 +184,16 @@
      *
      * if {@code account} is -1, open the default account.
      */
-    private static class MainActivityLauncher extends AsyncTask<Void, Void, Void> {
-        private final Activity mFromActivity;
+    private static class MainActivityLauncher extends EmailAsyncTask<Void, Void, Void> {
+        private final Welcome mFromActivity;
         private final int mDebugPaneMode;
         private final long mAccountId;
         private final long mMailboxId;
         private final long mMessageId;
 
-        public MainActivityLauncher(Activity fromActivity, long accountId, long mailboxId,
+        public MainActivityLauncher(Welcome fromActivity, long accountId, long mailboxId,
                 long messageId, int debugPaneMode) {
+            super(fromActivity.mTaskTracker);
             mFromActivity = fromActivity;
             mAccountId = accountId;
             mMailboxId = mailboxId;
diff --git a/src/com/android/email/widget/EmailWidget.java b/src/com/android/email/widget/EmailWidget.java
index 74c4c76..874367b 100644
--- a/src/com/android/email/widget/EmailWidget.java
+++ b/src/com/android/email/widget/EmailWidget.java
@@ -25,6 +25,7 @@
 import com.android.email.provider.WidgetProvider.WidgetService;
 import com.android.emailcommon.provider.EmailContent.Mailbox;
 import com.android.emailcommon.provider.EmailContent.Message;
+import com.android.emailcommon.utility.EmailAsyncTask;
 import com.android.emailcommon.utility.Utility;
 
 import android.app.PendingIntent;
@@ -39,7 +40,6 @@
 import android.graphics.Typeface;
 import android.net.Uri;
 import android.net.Uri.Builder;
-import android.os.AsyncTask;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.SpannableStringBuilder;
@@ -128,6 +128,8 @@
     /** The current view type */
     /* package */ WidgetView mWidgetView = WidgetView.UNINITIALIZED_VIEW;
 
+    private final EmailAsyncTask.Tracker mTaskTracker = new EmailAsyncTask.Tracker();
+
     public EmailWidget(Context context, int _widgetId) {
         super();
         if (Email.DEBUG) {
@@ -519,6 +521,7 @@
         if (mLoader != null) {
             mLoader.reset();
         }
+        mTaskTracker.cancellAllInterrupt();
         WidgetManager.getInstance().remove(mWidgetId);
     }
 
@@ -530,33 +533,36 @@
      * Update the widget.  If the current view is invalid, switch to the next view, then update.
      */
     /* package */ void validateAndUpdate() {
-        new WidgetUpdater(false).execute();
+        new WidgetUpdater(this, false).cancelPreviousAndExecuteParallel();
     }
 
     /**
      * Switch to the next view.
      */
     /* package */ void switchView() {
-        new WidgetUpdater(true).execute();
+        new WidgetUpdater(this, true).cancelPreviousAndExecuteParallel();
     }
 
     /**
      * Update the widget.  If {@code switchToNextView} is set true, or the current view is invalid,
      * switch to the next view.
      */
-    private class WidgetUpdater extends AsyncTask<Void, Void, WidgetView> {
+    private static class WidgetUpdater extends EmailAsyncTask<Void, Void, WidgetView> {
+        private final EmailWidget mParent;
         private final WidgetView mCurrentView;
         private final boolean mSwitchToNextView;
 
-        public WidgetUpdater(boolean switchToNextView) {
-            mCurrentView = mWidgetView;
+        public WidgetUpdater(EmailWidget parent, boolean switchToNextView) {
+            super(parent.mTaskTracker);
+            mParent = parent;
+            mCurrentView = mParent.mWidgetView;
             mSwitchToNextView = switchToNextView;
         }
 
         @Override
         protected WidgetView doInBackground(Void... params) {
-            if (mSwitchToNextView || !mCurrentView.isValid(mContext)) {
-                return mCurrentView.getNext(mContext);
+            if (mSwitchToNextView || !mCurrentView.isValid(mParent.mContext)) {
+                return mCurrentView.getNext(mParent.mContext);
             } else {
                 return mCurrentView; // Reload the same view.
             }
@@ -565,8 +571,8 @@
         @Override
         protected void onPostExecute(WidgetView nextView) {
             if (nextView != null) {
-                loadView(nextView);
+                mParent.loadView(nextView);
             }
         }
     }
-}
\ No newline at end of file
+}