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