12ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler/*
22ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * Copyright (C) 2010 The Android Open Source Project
32ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler *
42ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * Licensed under the Apache License, Version 2.0 (the "License");
52ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * you may not use this file except in compliance with the License.
62ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * You may obtain a copy of the License at
72ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler *
82ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler *      http://www.apache.org/licenses/LICENSE-2.0
92ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler *
102ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * Unless required by applicable law or agreed to in writing, software
112ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * distributed under the License is distributed on an "AS IS" BASIS,
122ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * See the License for the specific language governing permissions and
142ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler * limitations under the License.
152ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler */
162ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
172ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadlerpackage com.android.email.activity.setup;
182ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
1938089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onukiimport android.app.ActionBar;
202ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadlerimport android.app.Fragment;
212ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadlerimport android.content.Intent;
22308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onukiimport android.net.Uri;
232ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadlerimport android.os.Bundle;
249f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantlerimport android.support.annotation.NonNull;
2557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadlerimport android.view.KeyEvent;
2697874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadlerimport android.view.Menu;
2797874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadlerimport android.view.MenuItem;
282ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
2935b0e95ca795e17b6dc8dd98c7ab847d65d9aa0cMarc Blankimport com.android.email.R;
30bb68c13afa630cae058eb40d3ce68644f3f3c8b9Paul Westbrookimport com.android.email.setup.AuthenticatorSetupIntentHelper;
310e6a521747970d5427f10c25cdc070d2341dc93aBen Komaloimport com.android.emailcommon.utility.IntentUtilities;
32f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.mail.providers.UIProvider.EditSettingsExtras;
337b9f7ff76fd9812d7e3ae4dd42c1ba97b6e347e7Tony Mantlerimport com.android.mail.ui.settings.MailPreferenceActivity;
3438f22dbf08664b885b4cf063ea665c02edfb1c32Paul Westbrookimport com.android.mail.utils.Utils;
3535b0e95ca795e17b6dc8dd98c7ab847d65d9aa0cMarc Blank
362ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadlerimport java.util.List;
372ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
382ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler/**
39fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * Handles account preferences, using multi-pane arrangement when possible.
40fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *
41fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * This activity uses the following fragments:
42fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *   AccountSettingsFragment
43fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *   GeneralPreferences
44fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *   DebugFragment
452ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler *
462ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler */
478f5ca5a790c4c05dd4ee6a8c769ff9817f40123bTony Mantlerpublic class EmailPreferenceActivity extends MailPreferenceActivity {
48308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki    /*
49308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki     * Intent to open account settings for account=1
50308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki        adb shell am start -a android.intent.action.EDIT \
51308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki            -d '"content://ui.email.android.com/settings?ACCOUNT_ID=1"'
52308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki     */
53308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki
549c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler    // Intent extras for our internal activity launch
553955f6794f23c1380749d4470b5f2264d2109adcBen Komalo    private static final String EXTRA_ENABLE_DEBUG = "AccountSettings.enable_debug";
562c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon    // STOPSHIP: Do not ship with the debug menu allowed.
572c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon    private static final boolean DEBUG_MENU_ALLOWED = false;
5857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler
599c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler    // Intent extras for launch directly from system account manager
609c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler    // NOTE: This string must match the one in res/xml/account_preferences.xml
61fb9deb96c3af56bf422e28e8ae3b7b838f343155Tony Mantler    private static String INTENT_ACCOUNT_MANAGER_ENTRY;
625a3888f35b669ffb3cc785d7dfe4862879a3896cJorge Lugo
6357f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    // Key codes used to open a debug settings fragment.
6457f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private static final int[] SECRET_KEY_CODES = {
6557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_B, KeyEvent.KEYCODE_U,
6657f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            KeyEvent.KEYCODE_G
6757f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            };
6857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private int mSecretKeyCodeIndex = 0;
6957f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler
709c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler    // When the user taps "Email Preferences" 10 times in a row, we'll enable the debug settings.
7157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private int mNumGeneralHeaderClicked = 0;
722ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
7357f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private boolean mShowDebugMenu;
74dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    private Uri mFeedbackUri;
75dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    private MenuItem mFeedbackMenuItem;
762ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
77c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert    @Override
78c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert    public Intent getIntent() {
79c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        final Intent intent = super.getIntent();
80c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        final long accountId = IntentUtilities.getAccountIdFromIntent(intent);
81c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        if (accountId < 0) {
82c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert            return intent;
83c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        }
84c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        Intent modIntent = new Intent(intent);
85c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        modIntent.putExtra(EXTRA_SHOW_FRAGMENT, AccountSettingsFragment.class.getCanonicalName());
86c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        modIntent.putExtra(
87c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert                EXTRA_SHOW_FRAGMENT_ARGUMENTS,
88c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert                AccountSettingsFragment.buildArguments(
8906415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                        IntentUtilities.getAccountNameFromIntent(intent)));
90c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        modIntent.putExtra(EXTRA_NO_HEADERS, true);
91c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        return modIntent;
92c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert    }
93c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert
942ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    @Override
952ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    public void onCreate(Bundle savedInstanceState) {
962ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler        super.onCreate(savedInstanceState);
972ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
98f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank        final Intent i = getIntent();
99a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn        if (savedInstanceState == null) {
100a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            // If we are not restarting from a previous instance, we need to
101a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            // figure out the initial prefs to show.  (Otherwise, we want to
102a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            // continue showing whatever the user last selected.)
103fb9deb96c3af56bf422e28e8ae3b7b838f343155Tony Mantler            if (INTENT_ACCOUNT_MANAGER_ENTRY == null) {
104fb9deb96c3af56bf422e28e8ae3b7b838f343155Tony Mantler                INTENT_ACCOUNT_MANAGER_ENTRY = getString(R.string.intent_account_manager_entry);
10574c79a50432fcbf127fbfeadc1a461263ea92135Marc Blank            }
106fb9deb96c3af56bf422e28e8ae3b7b838f343155Tony Mantler            if (INTENT_ACCOUNT_MANAGER_ENTRY.equals(i.getAction())) {
10706415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // This case occurs if we're changing account settings from Settings -> Accounts.
10806415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // We get an account object in the intent, but it's not actually useful to us since
10906415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // it's always just the first account of that type. The user can't specify which
11006415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // account they wish to view from within the settings UI, so just dump them at the
11106415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // main screen.
11206415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // android.accounts.Account acct = i.getParcelableExtra("account");
113f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank            } else if (i.hasExtra(EditSettingsExtras.EXTRA_FOLDER)) {
1149f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler                throw new IllegalArgumentException("EXTRA_FOLDER is no longer supported");
115a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            } else {
116f4894131427ec7562fcb05388b9f3aa094e388bcAndy Stadler                // Otherwise, we're called from within the Email app and look for our extras
11706415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                final long accountId = IntentUtilities.getAccountIdFromIntent(i);
11806415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                if (accountId != -1) {
1198c03e2af9f439c6e0c6abb38b0c371da7ccdb72aTony Mantler                    final Bundle args = AccountSettingsFragment.buildArguments(accountId);
12006415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                    startPreferencePanel(AccountSettingsFragment.class.getName(), args,
12106415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                            0, null, null, 0);
122f4894131427ec7562fcb05388b9f3aa094e388bcAndy Stadler                }
123a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            }
1249c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler        }
12557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        mShowDebugMenu = i.getBooleanExtra(EXTRA_ENABLE_DEBUG, false);
12638089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki
1279f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler        final ActionBar actionBar = getActionBar();
1289f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler        if (actionBar != null) {
1299f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler            actionBar.setDisplayOptions(
1309f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler                    ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
1319f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler        }
132b7d137bfb6b59b1a4da4b14eb6022ce0df7cf637Ben Komalo
133dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        mFeedbackUri = Utils.getValidUri(getString(R.string.email_feedback_uri));
1342ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    }
1352ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
1362ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    /**
13757f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler     * Listen for secret sequence and, if heard, enable debug menu
13857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler     */
13957f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    @Override
1409f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler    public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) {
14157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        if (event.getKeyCode() == SECRET_KEY_CODES[mSecretKeyCodeIndex]) {
14257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            mSecretKeyCodeIndex++;
14357f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            if (mSecretKeyCodeIndex == SECRET_KEY_CODES.length) {
14457f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler                mSecretKeyCodeIndex = 0;
14557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler                enableDebugMenu();
14657f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            }
14757f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        } else {
14857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            mSecretKeyCodeIndex = 0;
14957f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        }
15057f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        return super.onKeyDown(keyCode, event);
15157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    }
15257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler
153b387560384d38e3280090176a0f3b2cf8b1f9ab5Andrew Stadler    @Override
15497874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler    public boolean onCreateOptionsMenu(Menu menu) {
15597874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler        super.onCreateOptionsMenu(menu);
156525e8ad321967b3f4b15cadf63efb3deafc216abPaul Westbrook        getMenuInflater().inflate(R.menu.settings_menu, menu);
157dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook
158dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        mFeedbackMenuItem = menu.findItem(R.id.feedback_menu_item);
15997874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler        return true;
16097874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler    }
16197874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler
16297874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler    @Override
163dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    public boolean onPrepareOptionsMenu(Menu menu) {
164dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        super.onPrepareOptionsMenu(menu);
165dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook
166dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        if (mFeedbackMenuItem != null) {
167dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook            // We only want to enable the feedback menu item, if there is a valid feedback uri
168dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook            mFeedbackMenuItem.setVisible(!Uri.EMPTY.equals(mFeedbackUri));
169dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        }
170dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        return true;
171dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    }
172dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook
173dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook
174dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    @Override
17597874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler    public boolean onOptionsItemSelected(MenuItem item) {
17697874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler        switch (item.getItemId()) {
17738089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki            case android.R.id.home:
17838089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                // The app icon on the action bar is pressed.  Just emulate a back press.
17938089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                // TODO: this should navigate to the main screen, even if a sub-setting is open.
18038089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                // But we shouldn't just finish(), as we want to show "discard changes?" dialog
18138089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                // when necessary.
18238089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                onBackPressed();
18338089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                break;
18438f22dbf08664b885b4cf063ea665c02edfb1c32Paul Westbrook            case R.id.feedback_menu_item:
185dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook                Utils.sendFeedback(this, mFeedbackUri, false /* reportingProblem */);
18638f22dbf08664b885b4cf063ea665c02edfb1c32Paul Westbrook                break;
18797874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler            default:
18897874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler                return super.onOptionsItemSelected(item);
189b387560384d38e3280090176a0f3b2cf8b1f9ab5Andrew Stadler        }
19097874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler        return true;
191b387560384d38e3280090176a0f3b2cf8b1f9ab5Andrew Stadler    }
192b387560384d38e3280090176a0f3b2cf8b1f9ab5Andrew Stadler
1933955f6794f23c1380749d4470b5f2264d2109adcBen Komalo    @Override
19406415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler    public boolean isValidFragment(String fragmentName) {
19506415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler        // This activity is not exported, so we can allow any fragment
19606415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler        return true;
197983e1ad53b3ca3105655bf6d961713c61060a7f8Andy Stadler    }
198983e1ad53b3ca3105655bf6d961713c61060a7f8Andy Stadler
19957f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private void enableDebugMenu() {
20057f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        mShowDebugMenu = true;
20157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        invalidateHeaders();
20257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    }
20357f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler
204a14a24a5bc2ffa426f7ef8e5e6938cffe3f35829Andrew Stadler    private void onAddNewAccount() {
205bb68c13afa630cae058eb40d3ce68644f3f3c8b9Paul Westbrook        final Intent setupIntent = AuthenticatorSetupIntentHelper.actionNewAccountIntent(this);
20676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        startActivity(setupIntent);
207a14a24a5bc2ffa426f7ef8e5e6938cffe3f35829Andrew Stadler    }
208a14a24a5bc2ffa426f7ef8e5e6938cffe3f35829Andrew Stadler
2092ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    @Override
21006415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler    public void onBuildExtraHeaders(List<Header> target) {
21106415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler        super.onBuildExtraHeaders(target);
2121dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler
2131dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler        loadHeadersFromResource(R.xml.email_extra_preference_headers, target);
2141dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler
2151dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler        // if debug header is enabled, show it
2162c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon        if (DEBUG_MENU_ALLOWED) {
2172c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon            if (mShowDebugMenu) {
2182c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                // setup lightweight header for debugging
2192c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                final Header debugHeader = new Header();
2202c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.title = getText(R.string.debug_title);
2212c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.summary = null;
2222c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.iconRes = 0;
2232c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.fragment = DebugFragment.class.getCanonicalName();
2242c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.fragmentArguments = null;
2252c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                target.add(debugHeader);
2262c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon            }
22757f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        }
2282ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    }
2292ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
2302ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    /**
2312ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     * Called when the user selects an item in the header list.  Handles save-data cases as needed
2322ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     *
2332ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     * @param header The header that was selected.
2342ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     * @param position The header's position in the list.
2352ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     */
2362ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    @Override
2379f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler    public void onHeaderClick(@NonNull Header header, int position) {
2381a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler        // Secret keys:  Click 10x to enable debug settings
23957f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        if (position == 0) {
24057f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            mNumGeneralHeaderClicked++;
24157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            if (mNumGeneralHeaderClicked == 10) {
24257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler                enableDebugMenu();
24357f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            }
24457f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        } else {
24557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            mNumGeneralHeaderClicked = 0;
24657f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        }
2471dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler        if (header.id == R.id.add_account_header) {
2481dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler            onAddNewAccount();
2491dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler            return;
2501dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler        }
2511a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler
2521a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler        // Process header click normally
2532ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler        super.onHeaderClick(header, position);
2542ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    }
2552ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
2563955f6794f23c1380749d4470b5f2264d2109adcBen Komalo    @Override
2573955f6794f23c1380749d4470b5f2264d2109adcBen Komalo    public void onAttachFragment(Fragment f) {
2583955f6794f23c1380749d4470b5f2264d2109adcBen Komalo        super.onAttachFragment(f);
2591a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler        // When we're changing fragments, enable/disable the add account button
26072a24f12a2a0a48528cf0f826397e2348fe8ace2Ben Komalo        invalidateOptionsMenu();
2612ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    }
2622ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler}
263