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