OnePaneController.java revision 7dd054e39986de84a213c56a3c11ac94731402e6
1a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal/******************************************************************************* 2a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Copyright (C) 2012 Google Inc. 3a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Licensed to The Android Open Source Project. 4a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * 5a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Licensed under the Apache License, Version 2.0 (the "License"); 6a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * you may not use this file except in compliance with the License. 7a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * You may obtain a copy of the License at 8a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * 9a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * http://www.apache.org/licenses/LICENSE-2.0 10a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * 11a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Unless required by applicable law or agreed to in writing, software 12a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * distributed under the License is distributed on an "AS IS" BASIS, 13a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * See the License for the specific language governing permissions and 15a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * limitations under the License. 16a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *******************************************************************************/ 17a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 18a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalpackage com.android.mail.ui; 19a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 20d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwalimport android.app.Fragment; 21632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huangimport android.app.FragmentManager; 22d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwalimport android.app.FragmentTransaction; 23559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereiraimport android.net.Uri; 241ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwalimport android.os.Bundle; 25fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport android.view.MenuItem; 261ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal 27d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwalimport com.android.mail.ConversationListContext; 281ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwalimport com.android.mail.R; 29cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwalimport com.android.mail.providers.Account; 309b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereiraimport com.android.mail.providers.Conversation; 313982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereiraimport com.android.mail.providers.Folder; 32fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.Settings; 33fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.UIProvider; 34fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.UIProvider.ConversationColumns; 359e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrookimport com.android.mail.utils.LogUtils; 36fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 3775daee52f08c9bf66652b9bddf42cfbd1ca71987Vikram Aggarwalimport java.util.Collection; 38a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 39a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal/** 40a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Controller for one-pane Mail activity. One Pane is used for phones, where screen real estate is 41d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal * limited. This controller also does the layout, since the layout is simpler in the one pane case. 42a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 43a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 44a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal// Called OnePaneActivityController in Gmail. 45a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereirapublic final class OnePaneController extends AbstractActivityController { 466902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal // Used for saving transaction IDs in bundles 473982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String FOLDER_LIST_TRANSACTION_KEY = "folder-list-transaction"; 480e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook private static final String INBOX_CONVERSATION_LIST_TRANSACTION_KEY = 490e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook "inbox_conversation-list-transaction"; 503982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String CONVERSATION_LIST_TRANSACTION_KEY = "conversation-list-transaction"; 513982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String CONVERSATION_TRANSACTION_KEY = "conversation-transaction"; 522d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 533982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final int INVALID_ID = -1; 542175d0a93263672d4498458c81b404b0999134baVikram Aggarwal private boolean mConversationListVisible = false; 550e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook private int mLastInboxConversationListTransactionId = INVALID_ID; 563982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastConversationListTransactionId = INVALID_ID; 573982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastConversationTransactionId = INVALID_ID; 583982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastFolderListTransactionId = INVALID_ID; 593982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private Folder mInbox; 60cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal /** Whether a conversation list for this account has ever been shown.*/ 61cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal private boolean mConversationListNeverShown = true; 62cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal 63a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal /** 64a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * @param activity 65a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * @param viewMode 66a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 67a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal public OnePaneController(MailActivity activity, ViewMode viewMode) { 68a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal super(activity, viewMode); 69a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal } 70a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 711ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 72632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang public void onRestoreInstanceState(Bundle inState) { 73632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang super.onRestoreInstanceState(inState); 743982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(mindyp) handle saved state. 753982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (inState != null) { 763982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = inState.getInt(FOLDER_LIST_TRANSACTION_KEY, INVALID_ID); 770e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastInboxConversationListTransactionId = 780e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook inState.getInt(INBOX_CONVERSATION_LIST_TRANSACTION_KEY, INVALID_ID); 793982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationListTransactionId = inState.getInt(CONVERSATION_LIST_TRANSACTION_KEY, 803982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira INVALID_ID); 813982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationTransactionId = inState.getInt(CONVERSATION_TRANSACTION_KEY, 823982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira INVALID_ID); 833982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 843982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 863982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 873982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira public void onSaveInstanceState(Bundle outState) { 883982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira super.onSaveInstanceState(outState); 893982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(mindyp) handle saved state. 903982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(FOLDER_LIST_TRANSACTION_KEY, mLastFolderListTransactionId); 910e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook outState.putInt(INBOX_CONVERSATION_LIST_TRANSACTION_KEY, 920e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastInboxConversationListTransactionId); 933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_LIST_TRANSACTION_KEY, mLastConversationListTransactionId); 943982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_TRANSACTION_KEY, mLastConversationTransactionId); 953982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 963982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 973982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 98d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void resetActionBarIcon() { 99d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal final int mode = mViewMode.getMode(); 100559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira // If the settings aren't loaded yet, we may not know what the default 101559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira // inbox is, so err toward this being the account inbox. 102025eba8bfd4d0b5e248b6de0bda6f1129170fb41Vikram Aggarwal if ((mAccount.settings != null && mConvListContext != null && !inInbox()) 10368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_LIST 10468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_CONVERSATION 10568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.CONVERSATION 10668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.FOLDER_LIST) { 107d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal mActionBarView.setBackButton(); 108d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } else { 109d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal mActionBarView.removeBackButton(); 110d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 111d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 112d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 1137dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal /** 1147dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal * Returns true if the user is currently in the conversation list view, viewing the default 1157dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal * inbox. 1167dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal * @return 1177dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal */ 1183982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private boolean inInbox() { 119025eba8bfd4d0b5e248b6de0bda6f1129170fb41Vikram Aggarwal final Uri inboxUri = Settings.getDefaultInboxUri(mAccount.settings); 120559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira return mConvListContext != null && mConvListContext.folder != null ? (!mConvListContext 121559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira .isSearchResult() && mConvListContext.folder.uri.equals(inboxUri)) : false; 1223982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1233982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 124d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 125cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal public void onAccountChanged(Account account) { 126cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal super.onAccountChanged(account); 127cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal mConversationListNeverShown = true; 128cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal } 129cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal 130cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal @Override 131d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public boolean onCreate(Bundle savedInstanceState) { 1321ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal mActivity.setContentView(R.layout.one_pane_activity); 133d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal // The parent class sets the correct viewmode and starts the application off. 134d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal return super.onCreate(savedInstanceState); 1351ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 1361ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal 1371ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 1381ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal protected boolean isConversationListVisible() { 1392175d0a93263672d4498458c81b404b0999134baVikram Aggarwal return mConversationListVisible; 1401ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 141d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 142d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 143d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void onViewModeChanged(int newMode) { 144d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal super.onViewModeChanged(newMode); 145632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang 146632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // When entering conversation list mode, hide and clean up any currently visible 147632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // conversation. 148632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // TODO: improve this transition 149632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang if (newMode == ViewMode.CONVERSATION_LIST) { 150632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang mPagerController.hide(); 151632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang } 152d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 153d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 154d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 1559b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversationList(ConversationListContext listContext) { 156e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal super.showConversationList(listContext); 157e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal enableCabMode(); 1583982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(viki): Check if the account has been changed since the previous 1593982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // time. 16068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (listContext != null && listContext.isSearchResult()) { 16168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 16268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 16368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 16468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 1659b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira // TODO(viki): This account transition looks strange in two pane mode. 1662175d0a93263672d4498458c81b404b0999134baVikram Aggarwal // Revisit as the app is coming together and improve the look and feel. 167cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal final int transition = mConversationListNeverShown 168cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal ? FragmentTransaction.TRANSIT_FRAGMENT_FADE 1699b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira : FragmentTransaction.TRANSIT_FRAGMENT_OPEN; 17001668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira Fragment conversationListFragment = ConversationListFragment.newInstance(listContext); 171bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook 1723982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (!inInbox()) { 1733982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Maintain fragment transaction history so we can get back to the 1743982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // fragment used to launch this list. 17572a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira mLastConversationListTransactionId = replaceFragment(conversationListFragment, 17666150d75d09324e867be42ff8c0ea8fae115ef20Paul Westbrook transition, TAG_CONVERSATION_LIST); 1773982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 1783982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // If going to the inbox, clear the folder list transaction history. 1793982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mInbox = listContext.folder; 1800e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastInboxConversationListTransactionId = replaceFragment(conversationListFragment, 1810e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook transition, TAG_CONVERSATION_LIST); 1823982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = INVALID_ID; 1830e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook 1840e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook // If we ever to to the inbox, we want to unset the transation id for any other 1850e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook // non-inbox folder. 1860e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastConversationListTransactionId = INVALID_ID; 1873982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1882175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = true; 1897dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(false); 1909f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(true); 191cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal mConversationListNeverShown = false; 19228d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira } 19328d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira 19428d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira @Override 1959b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversation(Conversation conversation) { 196ec5cbf79b825c6f96d45e85015319c66470b7e57Vikram Aggarwal super.showConversation(conversation); 1973d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal if (conversation == null) { 1983d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal // This is a request to remove the conversation view, and pop back the view stack. 1993d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal // If we are in conversation list view already, this should be a safe thing to do, so 2003d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal // we don't check viewmode. 2013d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal transitionBackToConversationListMode(); 2023d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal return; 2033d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal } 204e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal disableCabMode(); 20568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mConvListContext != null && mConvListContext.isSearchResult()) { 20668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsConversationMode(); 20768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 20868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationMode(); 20968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 210632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang 211632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // Switching to conversation view is an incongruous transition: we are not replacing a 212632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // fragment with another fragment as usual. Instead, reveal the heretofore inert 213632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // conversation ViewPager and just remove the previously visible fragment 214632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // (e.g. conversation list, or possibly label list?). 2157dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal final FragmentManager fm = mActivity.getFragmentManager(); 2167dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal final Fragment f = fm.findFragmentById(R.id.content_pane); 217632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang if (f != null) { 2187dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal final FragmentTransaction ft = fm.beginTransaction(); 219632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang ft.addToBackStack(null); 220632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 221632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang ft.remove(f); 222632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang ft.commitAllowingStateLoss(); 223632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang } 224632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang 225632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // TODO: improve this transition 226632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang mPagerController.show(mAccount, mFolder, conversation); 2277dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(true); 228632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang resetActionBarIcon(); 229632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang 2302175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = false; 2319f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(false); 2329b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 2339b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 2349b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira @Override 2352d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook public void showWaitForInitialization() { 2362d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook super.showWaitForInitialization(); 2372d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 2382d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook replaceFragment(WaitFragment.newInstance(mAccount), 2396902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_WAIT); 2402d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook } 2412d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 2422d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook @Override 2432d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook public void hideWaitForInitialization() { 2442d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook transitionToInbox(); 2452d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook } 2462d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 2472d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook @Override 2489b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showFolderList() { 2499e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrook if (mAccount == null) { 2509e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrook LogUtils.e(LOG_TAG, "Null account in showFolderList"); 2519e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrook return; 2529e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrook } 25301668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira mViewMode.enterFolderListMode(); 2540ec2a71d1bb48f1fa57f1a4c8a6d81a49f44400fVikram Aggarwal enableCabMode(); 2553982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = replaceFragment( 256a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereira FolderListFragment.newInstance(null, mAccount.folderListUri), 2576902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_FOLDER_LIST); 2582175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = false; 2597dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(false); 2609f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(false); 2619b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 2629b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 2636902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal /** 2646902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * Replace the content_pane with the fragment specified here. The tag is specified so that 2656902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * the {@link ActivityController} can look up the fragments through the 2666902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * {@link android.app.FragmentManager}. 2676902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @param fragment 2686902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @param transition 2696902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @param tag 2706902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @return transaction ID returned when the transition is committed. 2716902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal */ 2722d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook private int replaceFragment(Fragment fragment, int transition, String tag) { 273d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal FragmentTransaction fragmentTransaction = mActivity.getFragmentManager().beginTransaction(); 274d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.addToBackStack(null); 275d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.setTransition(transition); 2762d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook fragmentTransaction.replace(R.id.content_pane, fragment, tag); 2776902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal final int transactionId = fragmentTransaction.commitAllowingStateLoss(); 278d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal resetActionBarIcon(); 2793982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return transactionId; 280d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 28101668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira 2823982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 2833982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Back works as follows: 2843982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in the folder list view, go back 2853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * to the account default inbox. 2863982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in a conversation list 2873982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * that is not the inbox AND: 2883982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a) they got there by going through the folder 2893982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * list view, go back to the folder list view. 2903982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * b) they got there by using some other means (account dropdown), go back to the inbox. 2913982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in a conversation, go back to the conversation list they were last in. 2923982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 4) If the user is in the conversation list for the default account inbox, 2933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * back exits the app. 2943982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 29501668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira @Override 29601668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira public boolean onBackPressed() { 29701668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira int mode = mViewMode.getMode(); 2983982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (mode == ViewMode.FOLDER_LIST) { 2993982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = INVALID_ID; 3003982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transitionToInbox(); 30168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if (mode == ViewMode.SEARCH_RESULTS_LIST) { 30268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 3033982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else if (mode == ViewMode.CONVERSATION_LIST && !inInbox()) { 3043982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (isTransactionIdValid(mLastFolderListTransactionId)) { 30530fd47bf1947da5ad813cb957b6cbe569dce563aMindy Pereira // Go back to previous folder list. 3063982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mViewMode.enterFolderListMode(); 3073982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.getFragmentManager().popBackStack(mLastFolderListTransactionId, 0); 3083982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 3093982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Go back to Inbox. 3103982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transitionToInbox(); 3113982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 31268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if (mode == ViewMode.CONVERSATION || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 313f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira transitionBackToConversationListMode(); 3143982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 3153982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.finish(); 3163982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 317b77a532b4c660254f7f0acd104c2334721ed6313Mindy Pereira mUndoBarView.hide(false); 3183982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return true; 3193982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 3203982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 3213982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private void transitionToInbox() { 3228690e2b71e1a3dd812ce418c9607e21f3a88ab54Mindy Pereira mViewMode.enterConversationListMode(); 323f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira if (mInbox == null) { 324ab4863650794e81f35a0fd9abc16a5564d7b102bMindy Pereira loadAccountInbox(); 3253982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 326f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira ConversationListContext listContext = ConversationListContext.forFolder(mContext, 327f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira mAccount, mInbox); 32872a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira // Set the correct context for what the conversation view will be 32972a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira // now. 330f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira onFolderChanged(mInbox); 33172a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira showConversationList(listContext); 33201668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 33301668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 334f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 335118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira @Override 33656e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira public void onFolderSelected(Folder folder, boolean childView) { 33756e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira if (!childView && folder.hasChildren) { 33856e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira // Replace this fragment with a new FolderListFragment 33956e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira // showing this folder's children if we are not already looking 34056e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira // at the child view for this folder. 34156e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira mLastFolderListTransactionId = replaceFragment( 342a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereira FolderListFragment.newInstance(folder, folder.childFoldersListUri), 3436902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_FOLDER_LIST); 34456e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira return; 34556e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira } 34656e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira if (mViewMode.getMode() == ViewMode.FOLDER_LIST && folder != null 34756e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira && folder.equals(mFolder)) { 348118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira // if we are in folder list when we select a new folder, 349118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira // and it is the same as the existing folder, clear the previous 350118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira // folder setting so that the folder will be re-loaded/ shown. 351118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira mFolder = null; 352118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira } 353118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira super.onFolderChanged(folder); 354118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira } 355118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira 3563982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private boolean isTransactionIdValid(int id) { 3573982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return id >= 0; 3583982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 3593982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 3603982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 3613982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Up works as follows: 3623982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in a conversation list that is not the default account inbox, 3633982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a conversation, or the folder list, up follows the rules of back. 3643982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in search results, up exits search 3653982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * mode and returns the user to whatever view they were in when they began search. 3663982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in the inbox, there is no up. 3673982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 368f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira @Override 369f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira public boolean onUpPressed() { 3709da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal final int mode = mViewMode.getMode(); 37168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_LIST) { 37268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 37368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if ((!inInbox() && mode == ViewMode.CONVERSATION_LIST) 37468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.CONVERSATION 37568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.FOLDER_LIST 37668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 377f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira // Same as go back. 378f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira mActivity.onBackPressed(); 379f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 380f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira return true; 381f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 382f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 383f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira private void transitionBackToConversationListMode() { 3849da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal final int mode = mViewMode.getMode(); 38590d89e2194cecb6ff0179c8159870575edf7365eVikram Aggarwal enableCabMode(); 38668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 38768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 38868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 38968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 39068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 39121ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira if (isTransactionIdValid(mLastConversationListTransactionId)) { 39221ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira mActivity.getFragmentManager().popBackStack(mLastConversationListTransactionId, 0); 39321ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira resetActionBarIcon(); 3940e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook } else if (isTransactionIdValid(mLastInboxConversationListTransactionId)) { 3950e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mActivity.getFragmentManager().popBackStack(mLastInboxConversationListTransactionId, 0); 3960e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook resetActionBarIcon(); 3970e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook onFolderChanged(mInbox); 39821ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira } else { 3999da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal // TODO: revisit if this block is necessary 4009da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal final ConversationListContext listContext = ConversationListContext.forFolder(mContext, 40121ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira mAccount, mInbox); 40221ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira // Set the correct context for what the conversation view will be now. 40321ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira onFolderChanged(mInbox); 40421ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira showConversationList(listContext); 40521ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira } 406f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira resetActionBarIcon(); 4079f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook 4089f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook mConversationListVisible = true; 4097dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(false); 4109f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(true); 411f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 412b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira 413b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira @Override 414b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira public boolean shouldShowFirstConversation() { 415b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira return false; 416b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira } 417fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 418fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira @Override 419fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira public boolean onOptionsItemSelected(MenuItem item) { 420fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira boolean handled = true; 421440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal final Collection<Conversation> target = Conversation.listOf(mCurrentConversation); 422025eba8bfd4d0b5e248b6de0bda6f1129170fb41Vikram Aggarwal final Settings settings = mAccount.settings; 4237f602f7a64f176894ccb7942a6642f22584c3894Vikram Aggarwal switch (item.getItemId()) { 424c30fe4172676a5ea3fdc0da8a0fbb917d9cf878eVikram Aggarwal case R.id.archive: { 425c30fe4172676a5ea3fdc0da8a0fbb917d9cf878eVikram Aggarwal LogUtils.d(LOG_TAG, "Entering archive"); 426025eba8bfd4d0b5e248b6de0bda6f1129170fb41Vikram Aggarwal final boolean showDialog = (settings != null && settings.confirmArchive); 4277f602f7a64f176894ccb7942a6642f22584c3894Vikram Aggarwal confirmAndDelete(target, showDialog, R.plurals.confirm_archive_conversation, 428d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal getAction(R.id.archive, target)); 429fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 430fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 431fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.delete: { 432025eba8bfd4d0b5e248b6de0bda6f1129170fb41Vikram Aggarwal final boolean showDialog = (settings != null && settings.confirmDelete); 4337f602f7a64f176894ccb7942a6642f22584c3894Vikram Aggarwal confirmAndDelete(target, showDialog, 434d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal R.plurals.confirm_delete_conversation, getAction(R.id.delete, target)); 435fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 436fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 437fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.inside_conversation_unread: 4386778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira // Mark as unread and advance. 4393d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal requestUpdate(target, getAction(R.id.inside_conversation_unread, target)); 440fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 441fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.mark_important: 442fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira updateCurrentConversation(ConversationColumns.PRIORITY, 443fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira UIProvider.ConversationPriority.HIGH); 444fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 445fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.mark_not_important: 446fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira updateCurrentConversation(ConversationColumns.PRIORITY, 447fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira UIProvider.ConversationPriority.LOW); 448fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 449fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.mute: 450d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal requestDelete(target, getAction(R.id.mute, target)); 451fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 452fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.report_spam: 453d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal requestDelete(target, getAction(R.id.report_spam, target)); 454fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 455fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira default: 456fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira handled = false; 457fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 458fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 459fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira return handled || super.onOptionsItemSelected(item); 460fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 461fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 4620963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira @Override 4630963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira public void onUndoAvailable(UndoOperation op) { 4640963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira if (op != null && mAccount.supportsCapability(UIProvider.AccountCapabilities.UNDO)) { 4657f602f7a64f176894ccb7942a6642f22584c3894Vikram Aggarwal final int mode = mViewMode.getMode(); 4660963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira switch (mode) { 4670963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira case ViewMode.CONVERSATION: 4680963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira mUndoBarView.show(true, mActivity.getActivityContext(), op, mAccount, 469bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook null, null); 4700963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira break; 4710963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira case ViewMode.CONVERSATION_LIST: 4726902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal final ConversationListFragment convList = getConversationListFragment(); 4736902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal if (convList != null) { 4746902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal mUndoBarView.show(true, mActivity.getActivityContext(), op, mAccount, 475bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook convList.getAnimatedAdapter(), mConversationListCursor); 4766902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal } 4770963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira break; 4780963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 4790963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 4800963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 481a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal} 482