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;
300e6a521747970d5427f10c25cdc070d2341dc93aBen Komaloimport com.android.emailcommon.utility.IntentUtilities;
31f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.mail.providers.UIProvider.EditSettingsExtras;
327b9f7ff76fd9812d7e3ae4dd42c1ba97b6e347e7Tony Mantlerimport com.android.mail.ui.settings.MailPreferenceActivity;
3338f22dbf08664b885b4cf063ea665c02edfb1c32Paul Westbrookimport com.android.mail.utils.Utils;
3435b0e95ca795e17b6dc8dd98c7ab847d65d9aa0cMarc Blank
352ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadlerimport java.util.List;
362ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
372ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler/**
38fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * Handles account preferences, using multi-pane arrangement when possible.
39fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *
40fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * This activity uses the following fragments:
41fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *   AccountSettingsFragment
42fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *   GeneralPreferences
43fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *   DebugFragment
442ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler *
452ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler */
468f5ca5a790c4c05dd4ee6a8c769ff9817f40123bTony Mantlerpublic class EmailPreferenceActivity extends MailPreferenceActivity {
47308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki    /*
48308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki     * Intent to open account settings for account=1
49308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki        adb shell am start -a android.intent.action.EDIT \
50308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki            -d '"content://ui.email.android.com/settings?ACCOUNT_ID=1"'
51308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki     */
52308ce9284793b597797994dfb1fb25155cbe0b20Makoto Onuki
539c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler    // Intent extras for our internal activity launch
543955f6794f23c1380749d4470b5f2264d2109adcBen Komalo    private static final String EXTRA_ENABLE_DEBUG = "AccountSettings.enable_debug";
552c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon    // STOPSHIP: Do not ship with the debug menu allowed.
562c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon    private static final boolean DEBUG_MENU_ALLOWED = false;
5757f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler
589c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler    // Intent extras for launch directly from system account manager
599c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler    // NOTE: This string must match the one in res/xml/account_preferences.xml
60fb9deb96c3af56bf422e28e8ae3b7b838f343155Tony Mantler    private static String INTENT_ACCOUNT_MANAGER_ENTRY;
615a3888f35b669ffb3cc785d7dfe4862879a3896cJorge Lugo
6257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    // Key codes used to open a debug settings fragment.
6357f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private static final int[] SECRET_KEY_CODES = {
6457f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_B, KeyEvent.KEYCODE_U,
6557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            KeyEvent.KEYCODE_G
6657f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            };
6757f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private int mSecretKeyCodeIndex = 0;
6857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler
699c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler    // When the user taps "Email Preferences" 10 times in a row, we'll enable the debug settings.
7057f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private int mNumGeneralHeaderClicked = 0;
712ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
7257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private boolean mShowDebugMenu;
73dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    private Uri mFeedbackUri;
74dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    private MenuItem mFeedbackMenuItem;
752ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
76c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert    @Override
77c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert    public Intent getIntent() {
78c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        final Intent intent = super.getIntent();
79c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        final long accountId = IntentUtilities.getAccountIdFromIntent(intent);
80c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        if (accountId < 0) {
81c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert            return intent;
82c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        }
83c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        Intent modIntent = new Intent(intent);
84c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        modIntent.putExtra(EXTRA_SHOW_FRAGMENT, AccountSettingsFragment.class.getCanonicalName());
85c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        modIntent.putExtra(
86c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert                EXTRA_SHOW_FRAGMENT_ARGUMENTS,
87c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert                AccountSettingsFragment.buildArguments(
8806415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                        IntentUtilities.getAccountNameFromIntent(intent)));
89c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        modIntent.putExtra(EXTRA_NO_HEADERS, true);
90c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert        return modIntent;
91c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert    }
92c4d139c4f4d924eae0307e8349ae977441dabbedAlon Albert
932ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    @Override
942ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    public void onCreate(Bundle savedInstanceState) {
952ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler        super.onCreate(savedInstanceState);
962ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
97f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank        final Intent i = getIntent();
98a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn        if (savedInstanceState == null) {
99a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            // If we are not restarting from a previous instance, we need to
100a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            // figure out the initial prefs to show.  (Otherwise, we want to
101a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            // continue showing whatever the user last selected.)
102fb9deb96c3af56bf422e28e8ae3b7b838f343155Tony Mantler            if (INTENT_ACCOUNT_MANAGER_ENTRY == null) {
103fb9deb96c3af56bf422e28e8ae3b7b838f343155Tony Mantler                INTENT_ACCOUNT_MANAGER_ENTRY = getString(R.string.intent_account_manager_entry);
10474c79a50432fcbf127fbfeadc1a461263ea92135Marc Blank            }
105fb9deb96c3af56bf422e28e8ae3b7b838f343155Tony Mantler            if (INTENT_ACCOUNT_MANAGER_ENTRY.equals(i.getAction())) {
10606415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // This case occurs if we're changing account settings from Settings -> Accounts.
10706415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // We get an account object in the intent, but it's not actually useful to us since
10806415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // it's always just the first account of that type. The user can't specify which
10906415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // account they wish to view from within the settings UI, so just dump them at the
11006415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // main screen.
11106415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                // android.accounts.Account acct = i.getParcelableExtra("account");
112f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank            } else if (i.hasExtra(EditSettingsExtras.EXTRA_FOLDER)) {
1139f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler                throw new IllegalArgumentException("EXTRA_FOLDER is no longer supported");
114a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            } else {
115f4894131427ec7562fcb05388b9f3aa094e388bcAndy Stadler                // Otherwise, we're called from within the Email app and look for our extras
11606415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                final long accountId = IntentUtilities.getAccountIdFromIntent(i);
11706415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                if (accountId != -1) {
1188c03e2af9f439c6e0c6abb38b0c371da7ccdb72aTony Mantler                    final Bundle args = AccountSettingsFragment.buildArguments(accountId);
11906415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                    startPreferencePanel(AccountSettingsFragment.class.getName(), args,
12006415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler                            0, null, null, 0);
121f4894131427ec7562fcb05388b9f3aa094e388bcAndy Stadler                }
122a2cc46c810eb802c172a4af8ecc67fca53dd584fDianne Hackborn            }
1239c65c146f3d8e60f35f46c815d4121749ad13abdAndrew Stadler        }
12457f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        mShowDebugMenu = i.getBooleanExtra(EXTRA_ENABLE_DEBUG, false);
12538089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki
1269f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler        final ActionBar actionBar = getActionBar();
1279f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler        if (actionBar != null) {
1289f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler            actionBar.setDisplayOptions(
1299f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler                    ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
1309f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler        }
131b7d137bfb6b59b1a4da4b14eb6022ce0df7cf637Ben Komalo
132dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        mFeedbackUri = Utils.getValidUri(getString(R.string.email_feedback_uri));
1332ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    }
1342ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
1352ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    /**
13657f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler     * Listen for secret sequence and, if heard, enable debug menu
13757f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler     */
13857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    @Override
1399f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler    public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) {
14057f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        if (event.getKeyCode() == SECRET_KEY_CODES[mSecretKeyCodeIndex]) {
14157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            mSecretKeyCodeIndex++;
14257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            if (mSecretKeyCodeIndex == SECRET_KEY_CODES.length) {
14357f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler                mSecretKeyCodeIndex = 0;
14457f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler                enableDebugMenu();
14557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            }
14657f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        } else {
14757f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            mSecretKeyCodeIndex = 0;
14857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        }
14957f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        return super.onKeyDown(keyCode, event);
15057f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    }
15157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler
152b387560384d38e3280090176a0f3b2cf8b1f9ab5Andrew Stadler    @Override
15397874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler    public boolean onCreateOptionsMenu(Menu menu) {
15497874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler        super.onCreateOptionsMenu(menu);
155525e8ad321967b3f4b15cadf63efb3deafc216abPaul Westbrook        getMenuInflater().inflate(R.menu.settings_menu, menu);
156dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook
157dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        mFeedbackMenuItem = menu.findItem(R.id.feedback_menu_item);
15897874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler        return true;
15997874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler    }
16097874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler
16197874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler    @Override
162dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    public boolean onPrepareOptionsMenu(Menu menu) {
163dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        super.onPrepareOptionsMenu(menu);
164dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook
165dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        if (mFeedbackMenuItem != null) {
166dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook            // We only want to enable the feedback menu item, if there is a valid feedback uri
167dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook            mFeedbackMenuItem.setVisible(!Uri.EMPTY.equals(mFeedbackUri));
168dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        }
169dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook        return true;
170dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    }
171dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook
172dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook
173dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook    @Override
17497874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler    public boolean onOptionsItemSelected(MenuItem item) {
17597874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler        switch (item.getItemId()) {
17638089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki            case android.R.id.home:
17738089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                // The app icon on the action bar is pressed.  Just emulate a back press.
17838089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                // TODO: this should navigate to the main screen, even if a sub-setting is open.
17938089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                // But we shouldn't just finish(), as we want to show "discard changes?" dialog
18038089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                // when necessary.
18138089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                onBackPressed();
18238089f6c4222ab56582899f1f228966c5ebf75e8Makoto Onuki                break;
18338f22dbf08664b885b4cf063ea665c02edfb1c32Paul Westbrook            case R.id.feedback_menu_item:
184dbb8b75a4bd201f8472a511ef77ca2ed05bd808bPaul Westbrook                Utils.sendFeedback(this, mFeedbackUri, false /* reportingProblem */);
18538f22dbf08664b885b4cf063ea665c02edfb1c32Paul Westbrook                break;
18697874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler            default:
18797874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler                return super.onOptionsItemSelected(item);
188b387560384d38e3280090176a0f3b2cf8b1f9ab5Andrew Stadler        }
18997874770fc7cbe6a89a6ea706658fb42dff77a95Andy Stadler        return true;
190b387560384d38e3280090176a0f3b2cf8b1f9ab5Andrew Stadler    }
191b387560384d38e3280090176a0f3b2cf8b1f9ab5Andrew Stadler
1923955f6794f23c1380749d4470b5f2264d2109adcBen Komalo    @Override
19306415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler    public boolean isValidFragment(String fragmentName) {
19406415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler        // This activity is not exported, so we can allow any fragment
19506415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler        return true;
196983e1ad53b3ca3105655bf6d961713c61060a7f8Andy Stadler    }
197983e1ad53b3ca3105655bf6d961713c61060a7f8Andy Stadler
19857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    private void enableDebugMenu() {
19957f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        mShowDebugMenu = true;
20057f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        invalidateHeaders();
20157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler    }
20257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler
203a14a24a5bc2ffa426f7ef8e5e6938cffe3f35829Andrew Stadler    private void onAddNewAccount() {
20476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final Intent setupIntent = AccountSetupFinal.actionNewAccountIntent(this);
20576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        startActivity(setupIntent);
206a14a24a5bc2ffa426f7ef8e5e6938cffe3f35829Andrew Stadler    }
207a14a24a5bc2ffa426f7ef8e5e6938cffe3f35829Andrew Stadler
2082ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    @Override
20906415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler    public void onBuildExtraHeaders(List<Header> target) {
21006415a635f5f01d8e1620b29f44d68dc4dfdf435Tony Mantler        super.onBuildExtraHeaders(target);
2111dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler
2121dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler        loadHeadersFromResource(R.xml.email_extra_preference_headers, target);
2131dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler
2141dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler        // if debug header is enabled, show it
2152c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon        if (DEBUG_MENU_ALLOWED) {
2162c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon            if (mShowDebugMenu) {
2172c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                // setup lightweight header for debugging
2182c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                final Header debugHeader = new Header();
2192c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.title = getText(R.string.debug_title);
2202c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.summary = null;
2212c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.iconRes = 0;
2222c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.fragment = DebugFragment.class.getCanonicalName();
2232c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                debugHeader.fragmentArguments = null;
2242c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon                target.add(debugHeader);
2252c26bb3b09700ce2531eedbe66d389d21107a416Martin Hibdon            }
22657f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        }
2272ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    }
2282ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
2292ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    /**
2302ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     * Called when the user selects an item in the header list.  Handles save-data cases as needed
2312ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     *
2322ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     * @param header The header that was selected.
2332ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     * @param position The header's position in the list.
2342ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler     */
2352ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    @Override
2369f14d6b0de74b81f087295bfbaded133f4076dd5Tony Mantler    public void onHeaderClick(@NonNull Header header, int position) {
2371a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler        // Secret keys:  Click 10x to enable debug settings
23857f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        if (position == 0) {
23957f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            mNumGeneralHeaderClicked++;
24057f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            if (mNumGeneralHeaderClicked == 10) {
24157f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler                enableDebugMenu();
24257f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            }
24357f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        } else {
24457f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler            mNumGeneralHeaderClicked = 0;
24557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        }
2461dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler        if (header.id == R.id.add_account_header) {
2471dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler            onAddNewAccount();
2481dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler            return;
2491dcdc09e0338ab8f019a424d2b412b27491e918eTony Mantler        }
2501a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler
2511a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler        // Process header click normally
2522ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler        super.onHeaderClick(header, position);
2532ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    }
2542ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler
2553955f6794f23c1380749d4470b5f2264d2109adcBen Komalo    @Override
2563955f6794f23c1380749d4470b5f2264d2109adcBen Komalo    public void onAttachFragment(Fragment f) {
2573955f6794f23c1380749d4470b5f2264d2109adcBen Komalo        super.onAttachFragment(f);
2581a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler        // When we're changing fragments, enable/disable the add account button
25972a24f12a2a0a48528cf0f826397e2348fe8ace2Ben Komalo        invalidateOptionsMenu();
2602ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler    }
2612ae2a12d6b049a4347c0781bd4daa17229bf1340Andrew Stadler}
262