AccountSetupBasics.java revision 96c5af40d639d629267794f4f0338a267ff94ce5
196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/*
296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * you may not use this file except in compliance with the License.
696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * You may obtain a copy of the License at
796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and
1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License.
1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage com.android.email.activity.setup;
1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.Serializable;
2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.net.URI;
2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.net.URISyntaxException;
2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.app.Activity;
2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.app.AlertDialog;
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.app.Dialog;
2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.Context;
2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.DialogInterface;
2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.Intent;
2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.res.XmlResourceParser;
3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.database.Cursor;
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.net.Uri;
3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.os.Bundle;
3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.provider.Contacts;
3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.provider.Contacts.People.ContactMethods;
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.text.Editable;
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.text.TextWatcher;
3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.util.Log;
3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.view.View;
3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.view.View.OnClickListener;
4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.Button;
4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.CheckBox;
4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.EditText;
4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.Toast;
4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.Account;
4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.Email;
4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.EmailAddressValidator;
4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.Preferences;
4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.R;
5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.Utility;
5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.activity.Debug;
5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Prompts the user for the email address and password. Also prompts for
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * "Use this account as default" if this is the 2nd+ account being set up.
5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Attempts to lookup default settings for the domain the user specified. If the
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * domain is known the settings are handed off to the AccountSetupCheckSettings
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * activity. If no settings are found the settings are handed off to the
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * AccountSetupAccountType activity.
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class AccountSetupBasics extends Activity
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        implements OnClickListener, TextWatcher {
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private final static boolean ENTER_DEBUG_SCREEN = true;
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private final static String EXTRA_ACCOUNT = "com.android.email.AccountSetupBasics.account";
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private final static int DIALOG_NOTE = 1;
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private final static String STATE_KEY_PROVIDER =
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        "com.android.email.AccountSetupBasics.provider";
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    // NOTE: If you change this value, confirm that the new interval exists in arrays.xml
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private final static int DEFAULT_ACCOUNT_CHECK_INTERVAL = 15;
7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Preferences mPrefs;
7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private EditText mEmailView;
7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private EditText mPasswordView;
7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private CheckBox mDefaultView;
7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Button mNextButton;
7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Button mManualSetupButton;
7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Account mAccount;
7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Provider mProvider;
8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private EmailAddressValidator mEmailValidator = new EmailAddressValidator();
8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static void actionNewAccount(Context context) {
8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = new Intent(context, AccountSetupBasics.class);
8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        context.startActivity(i);
8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void onCreate(Bundle savedInstanceState) {
9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super.onCreate(savedInstanceState);
9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setContentView(R.layout.account_setup_basics);
9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mPrefs = Preferences.getPreferences(this);
9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mEmailView = (EditText)findViewById(R.id.account_email);
9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mPasswordView = (EditText)findViewById(R.id.account_password);
9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mDefaultView = (CheckBox)findViewById(R.id.account_default);
9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mNextButton = (Button)findViewById(R.id.next);
9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mManualSetupButton = (Button)findViewById(R.id.manual_setup);
9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mNextButton.setOnClickListener(this);
10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mManualSetupButton.setOnClickListener(this);
10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mEmailView.addTextChangedListener(this);
10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mPasswordView.addTextChangedListener(this);
10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (mPrefs.getAccounts().length > 0) {
10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mDefaultView.setVisibility(View.VISIBLE);
10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_ACCOUNT)) {
11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mAccount = (Account)savedInstanceState.getSerializable(EXTRA_ACCOUNT);
11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (savedInstanceState != null && savedInstanceState.containsKey(STATE_KEY_PROVIDER)) {
11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mProvider = (Provider)savedInstanceState.getSerializable(STATE_KEY_PROVIDER);
11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void onResume() {
12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super.onResume();
12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        validateFields();
12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void onSaveInstanceState(Bundle outState) {
12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super.onSaveInstanceState(outState);
12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        outState.putSerializable(EXTRA_ACCOUNT, mAccount);
12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (mProvider != null) {
12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            outState.putSerializable(STATE_KEY_PROVIDER, mProvider);
13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void afterTextChanged(Editable s) {
13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        validateFields();
13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void onTextChanged(CharSequence s, int start, int before, int count) {
14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private void validateFields() {
14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        boolean valid = Utility.requiredFieldValid(mEmailView)
14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                && Utility.requiredFieldValid(mPasswordView)
14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                && mEmailValidator.isValid(mEmailView.getText().toString().trim());
14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mNextButton.setEnabled(valid);
14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mManualSetupButton.setEnabled(valid);
14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        /*
15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project         * Dim the next button's icon to 50% if the button is disabled.
15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project         * TODO this can probably be done with a stateful drawable. Check into it.
15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project         * android:state_enabled
15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project         */
15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Utility.setCompoundDrawablesAlpha(mNextButton, mNextButton.isEnabled() ? 255 : 128);
15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private String getOwnerName() {
15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String name = null;
15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String projection[] = {
16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            ContactMethods.NAME
16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        };
16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Cursor c = getContentResolver().query(
16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                Uri.withAppendedPath(Contacts.People.CONTENT_URI, "owner"), projection, null, null,
16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                null);
16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (c.getCount() > 0) {
16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            c.moveToFirst();
16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            name = c.getString(0);
16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            c.close();
16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (name == null || name.length() == 0) {
17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            Account account = Preferences.getPreferences(this).getDefaultAccount();
17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (account != null) {
17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                name = account.getName();
17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return name;
17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public Dialog onCreateDialog(int id) {
18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (id == DIALOG_NOTE) {
18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (mProvider != null && mProvider.note != null) {
18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                return new AlertDialog.Builder(this)
18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    .setIcon(android.R.drawable.ic_dialog_alert)
18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    .setTitle(android.R.string.dialog_alert_title)
18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    .setMessage(mProvider.note)
18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    .setPositiveButton(
18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                            getString(R.string.okay_action),
19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                            new DialogInterface.OnClickListener() {
19196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                                public void onClick(DialogInterface dialog, int which) {
19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                                    finishAutoSetup();
19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                                }
19496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                            })
19596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    .setNegativeButton(
19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                            getString(R.string.cancel_action),
19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                            null)
19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    .create();
19996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
20096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
20196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return null;
20296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
20396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
20496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private void finishAutoSetup() {
20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String email = mEmailView.getText().toString().trim();
20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String password = mPasswordView.getText().toString().trim();
20796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String[] emailParts = email.split("@");
20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String user = emailParts[0];
20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String domain = emailParts[1];
21096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        URI incomingUri = null;
21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        URI outgoingUri = null;
21296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        try {
21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            String incomingUsername = mProvider.incomingUsernameTemplate;
21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            incomingUsername = incomingUsername.replaceAll("\\$email", email);
21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            incomingUsername = incomingUsername.replaceAll("\\$user", user);
21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            incomingUsername = incomingUsername.replaceAll("\\$domain", domain);
21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            URI incomingUriTemplate = mProvider.incomingUriTemplate;
21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            incomingUri = new URI(incomingUriTemplate.getScheme(), incomingUsername + ":"
22096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    + password, incomingUriTemplate.getHost(), incomingUriTemplate.getPort(), null,
22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    null, null);
22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            String outgoingUsername = mProvider.outgoingUsernameTemplate;
22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            outgoingUsername = outgoingUsername.replaceAll("\\$email", email);
22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            outgoingUsername = outgoingUsername.replaceAll("\\$user", user);
22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            outgoingUsername = outgoingUsername.replaceAll("\\$domain", domain);
22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
22896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            URI outgoingUriTemplate = mProvider.outgoingUriTemplate;
22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            outgoingUri = new URI(outgoingUriTemplate.getScheme(), outgoingUsername + ":"
23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    + password, outgoingUriTemplate.getHost(), outgoingUriTemplate.getPort(), null,
23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    null, null);
23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } catch (URISyntaxException use) {
23396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            /*
23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project             * If there is some problem with the URI we give up and go on to
23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project             * manual setup.
23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project             */
23796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            onManualSetup();
23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return;
23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount = new Account(this);
24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setName(getOwnerName());
24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setEmail(email);
24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setStoreUri(incomingUri.toString());
24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setSenderUri(outgoingUri.toString());
24696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setDraftsFolderName(getString(R.string.special_mailbox_name_drafts));
24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setTrashFolderName(getString(R.string.special_mailbox_name_trash));
24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setOutboxFolderName(getString(R.string.special_mailbox_name_outbox));
24996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setSentFolderName(getString(R.string.special_mailbox_name_sent));
25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (incomingUri.toString().startsWith("imap")) {
25196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // Delete policy must be set explicitly, because IMAP does not provide a UI selection
25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // for it. This logic needs to be followed in the auto setup flow as well.
25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mAccount.setDeletePolicy(Account.DELETE_POLICY_ON_DELETE);
25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setAutomaticCheckIntervalMinutes(DEFAULT_ACCOUNT_CHECK_INTERVAL);
25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        AccountSetupCheckSettings.actionCheckSettings(this, mAccount, true, true);
25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
25896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
25996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private void onNext() {
26096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String email = mEmailView.getText().toString().trim();
26196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String[] emailParts = email.split("@");
26296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String domain = emailParts[1].trim();
26396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mProvider = findProviderForDomain(domain);
26496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (mProvider == null) {
26596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            /*
26696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project             * We don't have default settings for this account, start the manual
26796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project             * setup process.
26896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project             */
26996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            onManualSetup();
27096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return;
27196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
27296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
27396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (mProvider.note != null) {
27496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            showDialog(DIALOG_NOTE);
27596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
27696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        else {
27796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            finishAutoSetup();
27896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
27996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
28096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
28196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
28296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void onActivityResult(int requestCode, int resultCode, Intent data) {
28396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (resultCode == RESULT_OK) {
28496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mAccount.setDescription(mAccount.getEmail());
28596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mAccount.save(Preferences.getPreferences(this));
28696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (mDefaultView.isChecked()) {
28796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                Preferences.getPreferences(this).setDefaultAccount(mAccount);
28896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
28996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            Email.setServicesEnabled(this);
29096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            AccountSetupNames.actionSetNames(this, mAccount);
29196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            finish();
29296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
29396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
29496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
29596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private void onManualSetup() {
29696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String email = mEmailView.getText().toString().trim();
29796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String password = mPasswordView.getText().toString().trim();
29896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String[] emailParts = email.split("@");
29996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String user = emailParts[0].trim();
30096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String domain = emailParts[1].trim();
30196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
30296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // Alternate entry to the debug options screen (for devices without a physical keyboard:
30396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        //  Username: d@d
30496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        //  Password: debug
30596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (ENTER_DEBUG_SCREEN && "d@d".equals(email) && "debug".equals(password)) {
30696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            startActivity(new Intent(this, Debug.class));
30796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return;
30896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
30996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
31096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount = new Account(this);
31196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setName(getOwnerName());
31296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setEmail(email);
31396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        try {
31496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            URI uri = new URI("placeholder", user + ":" + password, domain, -1, null, null, null);
31596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mAccount.setStoreUri(uri.toString());
31696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mAccount.setSenderUri(uri.toString());
31796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } catch (URISyntaxException use) {
31896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            // If we can't set up the URL, don't continue - account setup pages will fail too
31996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            Toast.makeText(this, R.string.account_setup_username_password_toast, Toast.LENGTH_LONG)
32096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    .show();
32196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            mAccount = null;
32296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return;
32396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
32496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setDraftsFolderName(getString(R.string.special_mailbox_name_drafts));
32596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setTrashFolderName(getString(R.string.special_mailbox_name_trash));
32696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setOutboxFolderName(getString(R.string.special_mailbox_name_outbox));
32796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setSentFolderName(getString(R.string.special_mailbox_name_sent));
32896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
32996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mAccount.setAutomaticCheckIntervalMinutes(DEFAULT_ACCOUNT_CHECK_INTERVAL);
33096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
33196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        AccountSetupAccountType.actionSelectAccountType(this, mAccount, mDefaultView.isChecked());
33296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        finish();
33396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
33496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
33596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void onClick(View v) {
33696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        switch (v.getId()) {
33796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            case R.id.next:
33896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                onNext();
33996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                break;
34096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            case R.id.manual_setup:
34196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                onManualSetup();
34296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                break;
34396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
34496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
34596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
34696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
34796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Attempts to get the given attribute as a String resource first, and if it fails
34896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * returns the attribute as a simple String value.
34996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param xml
35096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param name
35196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return
35296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
35396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private String getXmlAttribute(XmlResourceParser xml, String name) {
35496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        int resId = xml.getAttributeResourceValue(null, name, 0);
35596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (resId == 0) {
35696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return xml.getAttributeValue(null, name);
35796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
35896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        else {
35996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return getString(resId);
36096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
36196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
36296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
36396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
36496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Search the list of known Email providers looking for one that matches the user's email
36596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * domain.  We look in providers_product.xml first, followed by the entries in
36696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * platform providers.xml.  This provides a nominal override capability.
36796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
36896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * A match is defined as any provider entry for which the "domain" attribute matches.
36996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
37096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param domain The domain portion of the user's email address
37196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return suitable Provider definition, or null if no match found
37296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
37396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Provider findProviderForDomain(String domain) {
37496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Provider p = findProviderForDomain(domain, R.xml.providers_product);
37596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (p == null) {
37696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            p = findProviderForDomain(domain, R.xml.providers);
37796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
37896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return p;
37996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
38096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
38196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
38296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Search a single resource containing known Email provider definitions.
38396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
38496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param domain The domain portion of the user's email address
38596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param resourceId Id of the provider resource to scan
38696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return suitable Provider definition, or null if no match found
38796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
38896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Provider findProviderForDomain(String domain, int resourceId) {
38996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        try {
39096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            XmlResourceParser xml = getResources().getXml(resourceId);
39196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            int xmlEventType;
39296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            Provider provider = null;
39396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            while ((xmlEventType = xml.next()) != XmlResourceParser.END_DOCUMENT) {
39496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                if (xmlEventType == XmlResourceParser.START_TAG
39596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                        && "provider".equals(xml.getName())
39696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                        && domain.equalsIgnoreCase(getXmlAttribute(xml, "domain"))) {
39796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider = new Provider();
39896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider.id = getXmlAttribute(xml, "id");
39996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider.label = getXmlAttribute(xml, "label");
40096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider.domain = getXmlAttribute(xml, "domain");
40196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider.note = getXmlAttribute(xml, "note");
40296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                }
40396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                else if (xmlEventType == XmlResourceParser.START_TAG
40496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                        && "incoming".equals(xml.getName())
40596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                        && provider != null) {
40696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider.incomingUriTemplate = new URI(getXmlAttribute(xml, "uri"));
40796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider.incomingUsernameTemplate = getXmlAttribute(xml, "username");
40896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                }
40996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                else if (xmlEventType == XmlResourceParser.START_TAG
41096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                        && "outgoing".equals(xml.getName())
41196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                        && provider != null) {
41296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider.outgoingUriTemplate = new URI(getXmlAttribute(xml, "uri"));
41396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    provider.outgoingUsernameTemplate = getXmlAttribute(xml, "username");
41496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                }
41596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                else if (xmlEventType == XmlResourceParser.END_TAG
41696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                        && "provider".equals(xml.getName())
41796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                        && provider != null) {
41896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    return provider;
41996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                }
42096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
42196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
42296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        catch (Exception e) {
42396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            Log.e(Email.LOG_TAG, "Error while trying to load provider settings.", e);
42496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
42596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return null;
42696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
42796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
42896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    static class Provider implements Serializable {
42996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        private static final long serialVersionUID = 8511656164616538989L;
43096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
43196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        public String id;
43296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
43396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        public String label;
43496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
43596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        public String domain;
43696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
43796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        public URI incomingUriTemplate;
43896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
43996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        public String incomingUsernameTemplate;
44096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
44196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        public URI outgoingUriTemplate;
44296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
44396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        public String outgoingUsernameTemplate;
44496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
44596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        public String note;
44696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
44796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
448