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