1 package com.android.email.activity.setup; 2 3 import android.app.Activity; 4 import android.app.LoaderManager; 5 import android.content.Context; 6 import android.content.Intent; 7 import android.content.Loader; 8 import android.net.Uri; 9 import android.os.AsyncTask; 10 import android.os.Bundle; 11 12 import com.android.emailcommon.provider.Account; 13 import com.android.emailcommon.provider.EmailContent; 14 import com.android.emailcommon.utility.IntentUtilities; 15 import com.android.mail.ui.MailAsyncTaskLoader; 16 17 /** 18 * This activity is headless. It exists to load the Account object from the given account ID and 19 * then starts the {@link AccountServerSettingsActivity} activity with the incoming/outgoing 20 * settings fragment 21 */ 22 public class HeadlessAccountSettingsLoader extends Activity { 23 getIncomingSettingsUri(long accountId)24 public static Uri getIncomingSettingsUri(long accountId) { 25 final Uri.Builder baseUri = Uri.parse("auth://" + EmailContent.EMAIL_PACKAGE_NAME + 26 ".ACCOUNT_SETTINGS/incoming/").buildUpon(); 27 IntentUtilities.setAccountId(baseUri, accountId); 28 return baseUri.build(); 29 } 30 getOutgoingSettingsUri(long accountId)31 public static Uri getOutgoingSettingsUri(long accountId) { 32 final Uri.Builder baseUri = Uri.parse("auth://" + EmailContent.EMAIL_PACKAGE_NAME + 33 ".ACCOUNT_SETTINGS/outgoing/").buildUpon(); 34 IntentUtilities.setAccountId(baseUri, accountId); 35 return baseUri.build(); 36 } 37 38 @Override onCreate(Bundle savedInstanceState)39 public void onCreate(Bundle savedInstanceState) { 40 super.onCreate(savedInstanceState); 41 42 final Intent i = getIntent(); 43 final long accountID = IntentUtilities.getAccountIdFromIntent(i); 44 45 if (savedInstanceState == null) { 46 new LoadAccountIncomingSettingsAsyncTask(getApplicationContext(), 47 "incoming".equals(i.getData().getLastPathSegment())) 48 .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, accountID); 49 } 50 } 51 52 /** 53 * Asynchronously loads the Account object from its ID and then navigates to the AccountSettings 54 * fragment. 55 */ 56 private class LoadAccountIncomingSettingsAsyncTask extends AsyncTask<Long, Void, Account> { 57 private final Context mContext; 58 private final boolean mIncoming; 59 LoadAccountIncomingSettingsAsyncTask(Context context, boolean incoming)60 private LoadAccountIncomingSettingsAsyncTask(Context context, boolean incoming) { 61 mContext = context; 62 mIncoming = incoming; 63 } 64 doInBackground(Long... params)65 protected Account doInBackground(Long... params) { 66 return Account.restoreAccountWithId(mContext, params[0]); 67 } 68 onPostExecute(Account result)69 protected void onPostExecute(Account result) { 70 // create an Intent to view a new activity 71 final Intent intent; 72 if (mIncoming) { 73 intent = AccountServerSettingsActivity.getIntentForIncoming(mContext, result); 74 } else { 75 intent = AccountServerSettingsActivity.getIntentForOutgoing(mContext, result); 76 } 77 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 78 79 mContext.startActivity(intent); 80 81 finish(); 82 } 83 } 84 }