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 19f020910461908681978a9e0f8f98b748853b0e39Andy Stadlerimport android.accounts.AccountAuthenticatorResponse; 20f020910461908681978a9e0f8f98b748853b0e39Andy Stadlerimport android.accounts.AccountManager; 21a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blankimport android.accounts.AccountManagerCallback; 22a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blankimport android.accounts.AccountManagerFuture; 23a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blankimport android.accounts.AuthenticatorException; 24a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blankimport android.accounts.OperationCanceledException; 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.app.Activity; 26a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blankimport android.app.AlertDialog; 276eac1c9f1c15c8a9440fbf4c1854958c054b912bMarc Blankimport android.app.ProgressDialog; 28ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadlerimport android.content.Context; 29a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blankimport android.content.DialogInterface; 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.Intent; 3126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantlerimport android.os.AsyncTask; 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.os.Bundle; 33f6db592c313c77190727c7cd72d3edda9d23a099Marc Blankimport android.os.RemoteException; 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.view.View; 357fd78d8d6184384cd2393849a554cce58e71180aAndy Stadlerimport android.view.View.OnClickListener; 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.ArrayAdapter; 3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.CheckBox; 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.Spinner; 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4085e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blankimport com.android.email.R; 4185e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blankimport com.android.email.activity.ActivityHelper; 4285e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blankimport com.android.email.activity.UiUtilities; 4366a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blankimport com.android.email.service.EmailServiceUtils; 44f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.email.service.EmailServiceUtils.EmailServiceInfo; 45f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.email2.ui.MailActivityEmail; 4685e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blankimport com.android.emailcommon.Logging; 47f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account; 48919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blankimport com.android.emailcommon.provider.Policy; 49f6db592c313c77190727c7cd72d3edda9d23a099Marc Blankimport com.android.emailcommon.service.EmailServiceProxy; 5085e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blankimport com.android.emailcommon.service.SyncWindow; 5185e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blankimport com.android.emailcommon.utility.Utility; 52b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedyimport com.android.mail.preferences.AccountPreferences; 53b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedyimport com.android.mail.utils.LogUtils; 5485e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blank 55a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blankimport java.io.IOException; 56a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank 577fd78d8d6184384cd2393849a554cce58e71180aAndy Stadlerpublic class AccountSetupOptions extends AccountSetupActivity implements OnClickListener { 58d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski private static final String EXTRA_IS_PROCESSING_KEY = "com.android.email.is_processing"; 59d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private Spinner mCheckFrequencyView; 619197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler private Spinner mSyncWindowView; 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private CheckBox mNotifyView; 63bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler private CheckBox mSyncContactsView; 64f3fcb8929e3690bc092aec0d4d643b346f079acdMarc Blank private CheckBox mSyncCalendarView; 65e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank private CheckBox mSyncEmailView; 66946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler private CheckBox mBackgroundAttachmentsView; 672fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki private View mAccountSyncWindowRow; 68b7fe21676ec46ce98e88bc181fc82a18e882236aMarc Blank private boolean mDonePressed = false; 69f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank private EmailServiceInfo mServiceInfo; 70d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski private boolean mIsProcessing = false; 71d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank 726eac1c9f1c15c8a9440fbf4c1854958c054b912bMarc Blank private ProgressDialog mCreateAccountDialog; 736eac1c9f1c15c8a9440fbf4c1854958c054b912bMarc Blank 74d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank public static final int REQUEST_CODE_ACCEPT_POLICIES = 1; 759019315b2642d58691cf09d32c07c0cf902f0a41Andrew Stadler 766854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki /** Default sync window for new EAS accounts */ 7721b2522d7f6b2bce8fc3382e6e532d4b4df1b140Yu Ping Hu private static final int SYNC_WINDOW_EAS_DEFAULT = SyncWindow.SYNC_WINDOW_1_WEEK; 786854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki 7926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler public static void actionOptions(Activity fromActivity, SetupData setupData) { 8026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Intent intent = new ForwardingIntent(fromActivity, AccountSetupOptions.class); 8126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler intent.putExtra(SetupData.EXTRA_SETUP_DATA, setupData); 8226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler fromActivity.startActivity(intent); 8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @Override 8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void onCreate(Bundle savedInstanceState) { 8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super.onCreate(savedInstanceState); 88cd09545b87979fa6b4337f17b5a001f0ef7b5269Andrew Stadler ActivityHelper.debugSetWindowFlags(this); 8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project setContentView(R.layout.account_setup_options); 9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 9126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mCheckFrequencyView = UiUtilities.getView(this, R.id.account_check_frequency); 9226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSyncWindowView = UiUtilities.getView(this, R.id.account_sync_window); 9326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mNotifyView = UiUtilities.getView(this, R.id.account_notify); 9426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSyncContactsView = UiUtilities.getView(this, R.id.account_sync_contacts); 9526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSyncCalendarView = UiUtilities.getView(this, R.id.account_sync_calendar); 9626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSyncEmailView = UiUtilities.getView(this, R.id.account_sync_email); 97e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank mSyncEmailView.setChecked(true); 9826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mBackgroundAttachmentsView = UiUtilities.getView(this, R.id.account_background_attachments); 99946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler mBackgroundAttachmentsView.setChecked(true); 1002fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki UiUtilities.getView(this, R.id.previous).setOnClickListener(this); 1012fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki UiUtilities.getView(this, R.id.next).setOnClickListener(this); 1022fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mAccountSyncWindowRow = UiUtilities.getView(this, R.id.account_sync_window_row); 10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 10426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Account account = mSetupData.getAccount(); 105f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank mServiceInfo = EmailServiceUtils.getServiceInfo(getApplicationContext(), 106f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank account.mHostAuthRecv.mProtocol); 10726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final CharSequence[] frequencyValues = mServiceInfo.syncIntervals; 10826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final CharSequence[] frequencyEntries = mServiceInfo.syncIntervalStrings; 109a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank 110f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank // Now create the array used by the sync interval Spinner 11126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final SpinnerOption[] checkFrequencies = new SpinnerOption[frequencyEntries.length]; 112ea6fea9bb22368c10083d5dce52adae86e51a243Andy Stadler for (int i = 0; i < frequencyEntries.length; i++) { 113ea6fea9bb22368c10083d5dce52adae86e51a243Andy Stadler checkFrequencies[i] = new SpinnerOption( 114ea6fea9bb22368c10083d5dce52adae86e51a243Andy Stadler Integer.valueOf(frequencyValues[i].toString()), frequencyEntries[i].toString()); 115ea6fea9bb22368c10083d5dce52adae86e51a243Andy Stadler } 11626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final ArrayAdapter<SpinnerOption> checkFrequenciesAdapter = 11726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new ArrayAdapter<SpinnerOption>(this, android.R.layout.simple_spinner_item, 11826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler checkFrequencies); 11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project checkFrequenciesAdapter 12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mCheckFrequencyView.setAdapter(checkFrequenciesAdapter); 122a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank 123f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (mServiceInfo.offerLookback) { 124f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank enableLookbackSpinner(); 1259197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler } 12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 127b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedy mNotifyView.setChecked(true); // By default, we want notifications on 128e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SpinnerOption.setSpinnerOptionValue(mCheckFrequencyView, account.getSyncInterval()); 129bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler 130f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (mServiceInfo.syncContacts) { 131bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler mSyncContactsView.setVisibility(View.VISIBLE); 132bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler mSyncContactsView.setChecked(true); 133f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank UiUtilities.setVisibilitySafe(this, R.id.account_sync_contacts_divider, View.VISIBLE); 134f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 135f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (mServiceInfo.syncCalendar) { 136f3fcb8929e3690bc092aec0d4d643b346f079acdMarc Blank mSyncCalendarView.setVisibility(View.VISIBLE); 137f3fcb8929e3690bc092aec0d4d643b346f079acdMarc Blank mSyncCalendarView.setChecked(true); 1382fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki UiUtilities.setVisibilitySafe(this, R.id.account_sync_calendar_divider, View.VISIBLE); 139bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler } 140e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank 141f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (!mServiceInfo.offerAttachmentPreload) { 142946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler mBackgroundAttachmentsView.setVisibility(View.GONE); 1432fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki UiUtilities.setVisibilitySafe(this, R.id.account_background_attachments_divider, 1442fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki View.GONE); 145946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler } 146946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler 147d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski mIsProcessing = savedInstanceState != null && 148d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski savedInstanceState.getBoolean(EXTRA_IS_PROCESSING_KEY, false); 149d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski if (mIsProcessing) { 150d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski // We are already processing, so just show the dialog until we finish 151d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski showCreateAccountDialog(); 152d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski } else if (mSetupData.getFlowMode() == SetupData.FLOW_MODE_FORCE_CREATE) { 153d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski // If we are just visiting here to fill in details, exit immediately 154e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank onDone(); 155e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank } 15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 158f020910461908681978a9e0f8f98b748853b0e39Andy Stadler @Override 159d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski public void onSaveInstanceState(Bundle outState) { 160d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski super.onSaveInstanceState(outState); 161d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski outState.putBoolean(EXTRA_IS_PROCESSING_KEY, mIsProcessing); 162d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski } 1636eac1c9f1c15c8a9440fbf4c1854958c054b912bMarc Blank 164d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski @Override 165d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski public void finish() { 166f020910461908681978a9e0f8f98b748853b0e39Andy Stadler // If the account manager initiated the creation, and success was not reported, 167f020910461908681978a9e0f8f98b748853b0e39Andy Stadler // then we assume that we're giving up (for any reason) - report failure. 16826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final AccountAuthenticatorResponse authenticatorResponse = 16926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSetupData.getAccountAuthenticatorResponse(); 170f020910461908681978a9e0f8f98b748853b0e39Andy Stadler if (authenticatorResponse != null) { 171f020910461908681978a9e0f8f98b748853b0e39Andy Stadler authenticatorResponse.onError(AccountManager.ERROR_CODE_CANCELED, "canceled"); 17226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSetupData.setAccountAuthenticatorResponse(null); 173f020910461908681978a9e0f8f98b748853b0e39Andy Stadler } 174f020910461908681978a9e0f8f98b748853b0e39Andy Stadler super.finish(); 175f020910461908681978a9e0f8f98b748853b0e39Andy Stadler } 176f020910461908681978a9e0f8f98b748853b0e39Andy Stadler 1778bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler /** 1787fd78d8d6184384cd2393849a554cce58e71180aAndy Stadler * Respond to clicks in the "Next" or "Previous" buttons 1798bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler */ 1808bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler @Override 1817fd78d8d6184384cd2393849a554cce58e71180aAndy Stadler public void onClick(View view) { 1827fd78d8d6184384cd2393849a554cce58e71180aAndy Stadler switch (view.getId()) { 1838bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler case R.id.next: 1848bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler // Don't allow this more than once (Exchange accounts call an async method 1858bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler // before finish()'ing the Activity, which allows this code to potentially be 1868bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler // executed multiple times 1878bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler if (!mDonePressed) { 1888bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler onDone(); 1898bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler mDonePressed = true; 1908bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler } 1917fd78d8d6184384cd2393849a554cce58e71180aAndy Stadler break; 1927fd78d8d6184384cd2393849a554cce58e71180aAndy Stadler case R.id.previous: 1937fd78d8d6184384cd2393849a554cce58e71180aAndy Stadler onBackPressed(); 1947fd78d8d6184384cd2393849a554cce58e71180aAndy Stadler break; 1958bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler } 1968bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler } 1978bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler 198ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler /** 199ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * Ths is called when the user clicks the "done" button. 200ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * It collects the data from the UI, updates the setup account record, and commits 201ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * the account to the database (making it real for the first time.) 202ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * Finally, we call setupAccountManagerAccount(), which will eventually complete via callback. 203ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler */ 204f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank @SuppressWarnings("deprecation") 205ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler private void onDone() { 20626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Account account = mSetupData.getAccount(); 2078df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank if (account.isSaved()) { 2088df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank // Disrupting the normal flow could get us here, but if the account is already 2098df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank // saved, we've done this work 2108df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank return; 211d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski } else if (account.mHostAuthRecv == null) { 212d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski throw new IllegalStateException("in AccountSetupOptions with null mHostAuthRecv"); 2138df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank } 214d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski 215d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski mIsProcessing = true; 216ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler account.setDisplayName(account.getEmailAddress()); 217b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedy int newFlags = account.getFlags() & ~(Account.FLAGS_BACKGROUND_ATTACHMENTS); 218f6db592c313c77190727c7cd72d3edda9d23a099Marc Blank if (mServiceInfo.offerAttachmentPreload && mBackgroundAttachmentsView.isChecked()) { 219946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler newFlags |= Account.FLAGS_BACKGROUND_ATTACHMENTS; 220ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler } 221ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler account.setFlags(newFlags); 222ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler account.setSyncInterval((Integer)((SpinnerOption)mCheckFrequencyView 223ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler .getSelectedItem()).value); 2242fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki if (mAccountSyncWindowRow.getVisibility() == View.VISIBLE) { 22526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler account.setSyncLookback( 22626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler (Integer)((SpinnerOption)mSyncWindowView.getSelectedItem()).value); 227ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler } 228ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler 229ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler // Finish setting up the account, and commit it to the database 230ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler // Set the incomplete flag here to avoid reconciliation issues in ExchangeService 231ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler account.mFlags |= Account.FLAGS_INCOMPLETE; 23226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler if (mSetupData.getPolicy() != null) { 233f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank account.mFlags |= Account.FLAGS_SECURITY_HOLD; 23426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler account.mPolicy = mSetupData.getPolicy(); 235f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 236ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler 237ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler // Finally, write the completed account (for the first time) and then 238ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler // install it into the Account manager as well. These are done off-thread. 239ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler // The account manager will report back via the callback, which will take us to 240ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler // the next operations. 24126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final boolean email = mSyncEmailView.isChecked(); 24226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final boolean calendar = mServiceInfo.syncCalendar && mSyncCalendarView.isChecked(); 24326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final boolean contacts = mServiceInfo.syncContacts && mSyncContactsView.isChecked(); 244c6089bc01f2ae49fb11904a4b4f222811358254fMarc Blank 245d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski showCreateAccountDialog(); 246ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler Utility.runAsync(new Runnable() { 247ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler @Override 248ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler public void run() { 24926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Context context = AccountSetupOptions.this; 250ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler AccountSettingsUtils.commitSettings(context, account); 25102f0b1eee8f5de651ad5f0289146f88fea99bce0Yu Ping Hu EmailServiceUtils.setupAccountManagerAccount(context, account, 25226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler email, calendar, contacts, mAccountManagerCallback); 253b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedy 254b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedy // We can move the notification setting to the inbox FolderPreferences later, once 255b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedy // we know what the inbox is 256b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedy final AccountPreferences accountPreferences = 25732614f3746f0fa8a09370672abaca68fa795fc33Tony Mantler new AccountPreferences(context, account.getEmailAddress()); 258b34608228f0b55e401415b67b8150ca9e00cee7dScott Kennedy accountPreferences.setDefaultInboxNotificationsEnabled(mNotifyView.isChecked()); 259ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler } 260ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler }); 261ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler } 262ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler 263d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski private void showCreateAccountDialog() { 264d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski /// Show "Creating account..." dialog 265d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski mCreateAccountDialog = new ProgressDialog(this); 266d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski mCreateAccountDialog.setIndeterminate(true); 267d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski mCreateAccountDialog.setMessage(getString(R.string.account_setup_creating_account_msg)); 268d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski mCreateAccountDialog.show(); 269d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski } 270d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski 271ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler /** 272ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * This is called at the completion of MailService.setupAccountManagerAccount() 273ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler */ 274a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank AccountManagerCallback<Bundle> mAccountManagerCallback = new AccountManagerCallback<Bundle>() { 275f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank @Override 276a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank public void run(AccountManagerFuture<Bundle> future) { 277a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank try { 27826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler // Block until the operation completes 27926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler future.getResult(); 280ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler AccountSetupOptions.this.runOnUiThread(new Runnable() { 281f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank @Override 282a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank public void run() { 283d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank optionsComplete(); 284a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } 285a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank }); 286a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank return; 287a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } catch (OperationCanceledException e) { 288560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.d(Logging.LOG_TAG, "addAccount was canceled"); 289a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } catch (IOException e) { 290560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.d(Logging.LOG_TAG, "addAccount failed: " + e); 291a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } catch (AuthenticatorException e) { 292560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.d(Logging.LOG_TAG, "addAccount failed: " + e); 293a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } 294a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank showErrorDialog(R.string.account_setup_failed_dlg_auth_message, 295a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank R.string.system_account_create_failed); 296a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } 297a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank }; 298a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank 299ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler /** 300ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * This is called if MailService.setupAccountManagerAccount() fails for some reason 301ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler */ 302a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank private void showErrorDialog(final int msgResId, final Object... args) { 303ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler runOnUiThread(new Runnable() { 304f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank @Override 305a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank public void run() { 306a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank new AlertDialog.Builder(AccountSetupOptions.this) 30749518bb3605d6c8e3cc4801c452e4f8f63220f44Makoto Onuki .setIconAttribute(android.R.attr.alertDialogIcon) 308a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank .setTitle(getString(R.string.account_setup_failed_dlg_title)) 309a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank .setMessage(getString(msgResId, args)) 310a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank .setCancelable(true) 311a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank .setPositiveButton( 312a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank getString(R.string.account_setup_failed_dlg_edit_details_action), 313a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank new DialogInterface.OnClickListener() { 314f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank @Override 315a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank public void onClick(DialogInterface dialog, int which) { 316d7ed294dd13f789543265abc3674b794df212e45Paul Sliwowski finish(); 317a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } 318a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank }) 319a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank .show(); 320a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } 321a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank }); 322a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } 3230b8b68cbebdba372c7302a207e2321cd80b384aeMarc Blank 324ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler /** 325ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * This is called after the account manager creates the new account. 326ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler */ 327d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank private void optionsComplete() { 328f020910461908681978a9e0f8f98b748853b0e39Andy Stadler // If the account manager initiated the creation, report success at this point 32926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final AccountAuthenticatorResponse authenticatorResponse = 33026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSetupData.getAccountAuthenticatorResponse(); 331f020910461908681978a9e0f8f98b748853b0e39Andy Stadler if (authenticatorResponse != null) { 332f020910461908681978a9e0f8f98b748853b0e39Andy Stadler authenticatorResponse.onResult(null); 33326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSetupData.setAccountAuthenticatorResponse(null); 334f020910461908681978a9e0f8f98b748853b0e39Andy Stadler } 335f020910461908681978a9e0f8f98b748853b0e39Andy Stadler 3368df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank // Now that AccountManager account creation is complete, clear the INCOMPLETE flag 33726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Account account = mSetupData.getAccount(); 3388df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank account.mFlags &= ~Account.FLAGS_INCOMPLETE; 3398df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank AccountSettingsUtils.commitSettings(AccountSetupOptions.this, account); 3408df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank 3418df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank // If we've got policies for this account, ask the user to accept. 342e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank if ((account.mFlags & Account.FLAGS_SECURITY_HOLD) != 0) { 34326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Intent intent = 34426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler AccountSecurity.actionUpdateSecurityIntent(this, account.mId, false); 345d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank startActivityForResult(intent, AccountSetupOptions.REQUEST_CODE_ACCEPT_POLICIES); 346d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank return; 347d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank } 348d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank saveAccountAndFinish(); 349f6db592c313c77190727c7cd72d3edda9d23a099Marc Blank 350eb232290309aa3247d6c9b566e8490065a28f763Yu Ping Hu // Update the folder list (to get our starting folders, e.g. Inbox) 35126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final EmailServiceProxy proxy = EmailServiceUtils.getServiceForAccount(this, account.mId); 352eb232290309aa3247d6c9b566e8490065a28f763Yu Ping Hu try { 353eb232290309aa3247d6c9b566e8490065a28f763Yu Ping Hu proxy.updateFolderList(account.mId); 354eb232290309aa3247d6c9b566e8490065a28f763Yu Ping Hu } catch (RemoteException e) { 355eb232290309aa3247d6c9b566e8490065a28f763Yu Ping Hu // It's all good 356f6db592c313c77190727c7cd72d3edda9d23a099Marc Blank } 357d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank } 358d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank 3592959a7e073c87e2fa5fab42ec543b352a91cf187Andy Stadler /** 360ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * This is called after the AccountSecurity activity completes. 3612959a7e073c87e2fa5fab42ec543b352a91cf187Andy Stadler */ 362ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler @Override 363ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler public void onActivityResult(int requestCode, int resultCode, Intent data) { 364ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler saveAccountAndFinish(); 365a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank } 366a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank 367ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler /** 368ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * These are the final cleanup steps when creating an account: 369ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * Clear incomplete & security hold flags 370ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * Update account in DB 371ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * Enable email services 372ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * Enable exchange services 373ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler * Move to final setup screen 374ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler */ 375ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler private void saveAccountAndFinish() { 37626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() { 377ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler @Override 37826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler protected Void doInBackground(Void... params) { 37926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final AccountSetupOptions context = AccountSetupOptions.this; 3808df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank // Clear the security hold flag now 38126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Account account = mSetupData.getAccount(); 3828df9af0df3ea8d987b06364f388cd5de57c7bea9Marc Blank account.mFlags &= ~Account.FLAGS_SECURITY_HOLD; 383ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler AccountSettingsUtils.commitSettings(context, account); 384ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler // Start up services based on new account(s) 385f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank MailActivityEmail.setServicesEnabledSync(context); 386f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank EmailServiceUtils.startService(context, account.mHostAuthRecv.mProtocol); 387ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler // Move to final setup screen 38826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler AccountSetupNames.actionSetNames(context, mSetupData); 389ec9398e7c6dc7a016b68ea3009fd950f898763a0Andy Stadler finish(); 39026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler return null; 391d6d874f8c6ce2580ef9ec2406fe411af45b2d92dMarc Blank } 39226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler }; 39326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler asyncTask.execute(); 39496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 39596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 3969197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler /** 3979197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler * Enable an additional spinner using the arrays normally handled by preferences 3989197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler */ 399f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank private void enableLookbackSpinner() { 4009197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler // Show everything 4012fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mAccountSyncWindowRow.setVisibility(View.VISIBLE); 4029197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler 4039197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler // Generate spinner entries using XML arrays used by the preferences 40426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final CharSequence[] windowValues = getResources().getTextArray( 4059197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler R.array.account_settings_mail_window_values); 40626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final CharSequence[] windowEntries = getResources().getTextArray( 4079197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler R.array.account_settings_mail_window_entries); 408a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank 409919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank // Find a proper maximum for email lookback, based on policy (if we have one) 410919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank int maxEntry = windowEntries.length; 41126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Policy policy = mSetupData.getAccount().mPolicy; 412919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank if (policy != null) { 41326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final int maxLookback = policy.mMaxEmailLookback; 414919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank if (maxLookback != 0) { 415919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank // Offset/Code 0 1 2 3 4 5 416919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank // Entries auto, 1 day, 3 day, 1 week, 2 week, 1 month 417919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank // Lookback N/A 1 day, 3 day, 1 week, 2 week, 1 month 418919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank // Since our test below is i < maxEntry, we must set maxEntry to maxLookback + 1 419919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank maxEntry = maxLookback + 1; 420919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank } 421919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank } 422919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank 4239197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler // Now create the array used by the Spinner 42426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final SpinnerOption[] windowOptions = new SpinnerOption[maxEntry]; 4256854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki int defaultIndex = -1; 426919e59044b5c6a3d3947af05ddf241f51f65def4Marc Blank for (int i = 0; i < maxEntry; i++) { 4276854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki final int value = Integer.valueOf(windowValues[i].toString()); 4286854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki windowOptions[i] = new SpinnerOption(value, windowEntries[i].toString()); 4296854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki if (value == SYNC_WINDOW_EAS_DEFAULT) { 4306854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki defaultIndex = i; 4316854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki } 4329197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler } 4339197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler 43426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final ArrayAdapter<SpinnerOption> windowOptionsAdapter = 43526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new ArrayAdapter<SpinnerOption>(this, android.R.layout.simple_spinner_item, 43626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler windowOptions); 4379197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler windowOptionsAdapter 4389197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 4399197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler mSyncWindowView.setAdapter(windowOptionsAdapter); 440a3c6c6ed294d5a1fb0662fdacc1388944487fdf2Marc Blank 441e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SpinnerOption.setSpinnerOptionValue(mSyncWindowView, 44226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSetupData.getAccount().getSyncLookback()); 4436854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki if (defaultIndex >= 0) { 4446854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki mSyncWindowView.setSelection(defaultIndex); 4456854a4f24a0e93547fc7785553b7f53878a76e08Makoto Onuki } 4469197f428946d5c77613b64a50c93a46e2acf62dcAndy Stadler } 44796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 448