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