OnePaneController.java revision 12a4d8040d64501aa5a24c25865c806331560b74
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; 251ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal 26d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwalimport com.android.mail.ConversationListContext; 271ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwalimport com.android.mail.R; 28cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwalimport com.android.mail.providers.Account; 299b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereiraimport com.android.mail.providers.Conversation; 303982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereiraimport com.android.mail.providers.Folder; 31fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.Settings; 32fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.UIProvider; 339e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrookimport com.android.mail.utils.LogUtils; 34fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 35a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal/** 36a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Controller for one-pane Mail activity. One Pane is used for phones, where screen real estate is 37d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal * limited. This controller also does the layout, since the layout is simpler in the one pane case. 38a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 39a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 40a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal// Called OnePaneActivityController in Gmail. 41a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereirapublic final class OnePaneController extends AbstractActivityController { 426902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal // Used for saving transaction IDs in bundles 433982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String FOLDER_LIST_TRANSACTION_KEY = "folder-list-transaction"; 440e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook private static final String INBOX_CONVERSATION_LIST_TRANSACTION_KEY = 450e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook "inbox_conversation-list-transaction"; 463982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String CONVERSATION_LIST_TRANSACTION_KEY = "conversation-list-transaction"; 473982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String CONVERSATION_TRANSACTION_KEY = "conversation-transaction"; 482d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 493982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final int INVALID_ID = -1; 502175d0a93263672d4498458c81b404b0999134baVikram Aggarwal private boolean mConversationListVisible = false; 510e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook private int mLastInboxConversationListTransactionId = INVALID_ID; 523982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastConversationListTransactionId = INVALID_ID; 533982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastConversationTransactionId = INVALID_ID; 543982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastFolderListTransactionId = INVALID_ID; 553982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private Folder mInbox; 56cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal /** Whether a conversation list for this account has ever been shown.*/ 57cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal private boolean mConversationListNeverShown = true; 58cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal 59a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal /** 60a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * @param activity 61a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * @param viewMode 62a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 63a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal public OnePaneController(MailActivity activity, ViewMode viewMode) { 64a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal super(activity, viewMode); 65a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal } 66a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 671ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 68632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang public void onRestoreInstanceState(Bundle inState) { 69632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang super.onRestoreInstanceState(inState); 703982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(mindyp) handle saved state. 713982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (inState != null) { 723982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = inState.getInt(FOLDER_LIST_TRANSACTION_KEY, INVALID_ID); 730e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastInboxConversationListTransactionId = 740e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook inState.getInt(INBOX_CONVERSATION_LIST_TRANSACTION_KEY, INVALID_ID); 753982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationListTransactionId = inState.getInt(CONVERSATION_LIST_TRANSACTION_KEY, 763982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira INVALID_ID); 773982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationTransactionId = inState.getInt(CONVERSATION_TRANSACTION_KEY, 783982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira INVALID_ID); 793982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 803982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 813982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 823982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 833982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira public void onSaveInstanceState(Bundle outState) { 843982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira super.onSaveInstanceState(outState); 853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(mindyp) handle saved state. 863982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(FOLDER_LIST_TRANSACTION_KEY, mLastFolderListTransactionId); 870e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook outState.putInt(INBOX_CONVERSATION_LIST_TRANSACTION_KEY, 880e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastInboxConversationListTransactionId); 893982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_LIST_TRANSACTION_KEY, mLastConversationListTransactionId); 903982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_TRANSACTION_KEY, mLastConversationTransactionId); 913982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 923982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 94d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void resetActionBarIcon() { 95d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal final int mode = mViewMode.getMode(); 962074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal if (!inInbox(mAccount, mConvListContext) 9768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_LIST 9868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_CONVERSATION 9968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.CONVERSATION 10068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.FOLDER_LIST) { 101d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal mActionBarView.setBackButton(); 102d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } else { 103d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal mActionBarView.removeBackButton(); 104d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 105d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 106d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 1077dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal /** 1087dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal * Returns true if the user is currently in the conversation list view, viewing the default 1097dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal * inbox. 1107dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal * @return 1117dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal */ 1122074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal private static boolean inInbox(final Account account, final ConversationListContext context) { 1132074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal // If we don't have valid state, then we are not in the inbox. 1142074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal if (account == null || context == null || context.folder == null 1152074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal || account.settings == null) { 1162074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal return false; 1172074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal } 1182074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal final Uri inboxUri = Settings.getDefaultInboxUri(account.settings); 1192074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal return !context.isSearchResult() && context.folder.uri.equals(inboxUri); 1203982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1213982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 122d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 123cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal public void onAccountChanged(Account account) { 124cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal super.onAccountChanged(account); 125cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal mConversationListNeverShown = true; 126cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal } 127cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal 128cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal @Override 129d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public boolean onCreate(Bundle savedInstanceState) { 1301ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal mActivity.setContentView(R.layout.one_pane_activity); 131d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal // The parent class sets the correct viewmode and starts the application off. 132d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal return super.onCreate(savedInstanceState); 1331ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 1341ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal 1351ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 1361ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal protected boolean isConversationListVisible() { 1372175d0a93263672d4498458c81b404b0999134baVikram Aggarwal return mConversationListVisible; 1381ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 139d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 140d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 141d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void onViewModeChanged(int newMode) { 142d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal super.onViewModeChanged(newMode); 143632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang 144632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // When entering conversation list mode, hide and clean up any currently visible 145632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // conversation. 146632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // TODO: improve this transition 147b466bcf49502a1178cf7362a81470f3231d8892bMindy Pereira if (newMode == ViewMode.CONVERSATION_LIST || newMode == ViewMode.SEARCH_RESULTS_LIST) { 148632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang mPagerController.hide(); 149632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang } 150d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 151d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 152d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 1539b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversationList(ConversationListContext listContext) { 154e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal super.showConversationList(listContext); 155e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal enableCabMode(); 1563982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(viki): Check if the account has been changed since the previous 1573982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // time. 15868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (listContext != null && listContext.isSearchResult()) { 15968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 16068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 16168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 16268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 1639b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira // TODO(viki): This account transition looks strange in two pane mode. 1642175d0a93263672d4498458c81b404b0999134baVikram Aggarwal // Revisit as the app is coming together and improve the look and feel. 165cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal final int transition = mConversationListNeverShown 166cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal ? FragmentTransaction.TRANSIT_FRAGMENT_FADE 1679b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira : FragmentTransaction.TRANSIT_FRAGMENT_OPEN; 16801668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira Fragment conversationListFragment = ConversationListFragment.newInstance(listContext); 169bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook 1702074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal if (!inInbox(mAccount, mConvListContext)) { 1713982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Maintain fragment transaction history so we can get back to the 1723982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // fragment used to launch this list. 17372a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira mLastConversationListTransactionId = replaceFragment(conversationListFragment, 17466150d75d09324e867be42ff8c0ea8fae115ef20Paul Westbrook transition, TAG_CONVERSATION_LIST); 1753982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 1763982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // If going to the inbox, clear the folder list transaction history. 1773982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mInbox = listContext.folder; 1780e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastInboxConversationListTransactionId = replaceFragment(conversationListFragment, 1790e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook transition, TAG_CONVERSATION_LIST); 1803982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = INVALID_ID; 1810e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook 1820e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook // If we ever to to the inbox, we want to unset the transation id for any other 1830e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook // non-inbox folder. 1840e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastConversationListTransactionId = INVALID_ID; 1853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1862175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = true; 1877dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(false); 1889f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(true); 189cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal mConversationListNeverShown = false; 19028d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira } 19128d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira 19228d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira @Override 1939b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversation(Conversation conversation) { 194ec5cbf79b825c6f96d45e85015319c66470b7e57Vikram Aggarwal super.showConversation(conversation); 1953d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal if (conversation == null) { 1963d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal // This is a request to remove the conversation view, and pop back the view stack. 1973d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal // If we are in conversation list view already, this should be a safe thing to do, so 1983d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal // we don't check viewmode. 1993d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal transitionBackToConversationListMode(); 2003d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal return; 2013d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal } 202e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal disableCabMode(); 20368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mConvListContext != null && mConvListContext.isSearchResult()) { 20468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsConversationMode(); 20568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 20668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationMode(); 20768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 208632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang 209632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // Switching to conversation view is an incongruous transition: we are not replacing a 210632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // fragment with another fragment as usual. Instead, reveal the heretofore inert 211632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // conversation ViewPager and just remove the previously visible fragment 212632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // (e.g. conversation list, or possibly label list?). 2137dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal final FragmentManager fm = mActivity.getFragmentManager(); 2147dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal final Fragment f = fm.findFragmentById(R.id.content_pane); 215632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang if (f != null) { 2167dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal final FragmentTransaction ft = fm.beginTransaction(); 217632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang ft.addToBackStack(null); 218632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 219632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang ft.remove(f); 220632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang ft.commitAllowingStateLoss(); 221632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang } 222632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang 223632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // TODO: improve this transition 22412a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira mPagerController.show(mAccount, mFolder, conversation); 2257dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(true); 226632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang resetActionBarIcon(); 227632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang 2282175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = false; 2299f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(false); 2309b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 2319b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 2329b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira @Override 2332d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook public void showWaitForInitialization() { 2342d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook super.showWaitForInitialization(); 2352d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 2362d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook replaceFragment(WaitFragment.newInstance(mAccount), 2376902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_WAIT); 2382d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook } 2392d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 2402d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook @Override 2412d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook public void hideWaitForInitialization() { 2422d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook transitionToInbox(); 2432d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook } 2442d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 2452d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook @Override 2469b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showFolderList() { 2479e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrook if (mAccount == null) { 2489e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrook LogUtils.e(LOG_TAG, "Null account in showFolderList"); 2499e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrook return; 2509e85333dfc57e7c98ffef27cded4712ea598f554Paul Westbrook } 25111e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // Null out the currently selected folder; we have nothing selected the 25211e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // first time the user enters the folder list 25311e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira setFolder(null); 25401668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira mViewMode.enterFolderListMode(); 2550ec2a71d1bb48f1fa57f1a4c8a6d81a49f44400fVikram Aggarwal enableCabMode(); 2563982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = replaceFragment( 257a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereira FolderListFragment.newInstance(null, mAccount.folderListUri), 2586902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_FOLDER_LIST); 2592175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = false; 2607dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(false); 2619f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(false); 2629b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 2639b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 2646902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal /** 2656902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * Replace the content_pane with the fragment specified here. The tag is specified so that 2666902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * the {@link ActivityController} can look up the fragments through the 2676902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * {@link android.app.FragmentManager}. 2686902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @param fragment 2696902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @param transition 2706902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @param tag 2716902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @return transaction ID returned when the transition is committed. 2726902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal */ 2732d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook private int replaceFragment(Fragment fragment, int transition, String tag) { 274d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal FragmentTransaction fragmentTransaction = mActivity.getFragmentManager().beginTransaction(); 275d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.addToBackStack(null); 276d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.setTransition(transition); 2772d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook fragmentTransaction.replace(R.id.content_pane, fragment, tag); 2786902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal final int transactionId = fragmentTransaction.commitAllowingStateLoss(); 279d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal resetActionBarIcon(); 2803982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return transactionId; 281d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 28201668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira 2833982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 2843982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Back works as follows: 2853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in the folder list view, go back 2863982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * to the account default inbox. 2873982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in a conversation list 2883982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * that is not the inbox AND: 2893982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a) they got there by going through the folder 2903982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * list view, go back to the folder list view. 2913982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * b) they got there by using some other means (account dropdown), go back to the inbox. 2923982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in a conversation, go back to the conversation list they were last in. 2933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 4) If the user is in the conversation list for the default account inbox, 2943982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * back exits the app. 2953982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 29601668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira @Override 29701668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira public boolean onBackPressed() { 2982074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal final int mode = mViewMode.getMode(); 2993982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (mode == ViewMode.FOLDER_LIST) { 30012a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira if (getFolderListFragment().showingHierarchy() && mFolder != null) { 30111e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // If we are showing the folder list and the user is exploring 30211e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // the children of a single parent folder, 30311e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // back should display the parent folder's parent and siblings. 30412a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira goUpFolderHierarchy(mFolder); 30511e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira } else { 30611e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // We are at the topmost list of folders; just go back to 30711e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // whatever conv list we were viewing before. 30811e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira mLastFolderListTransactionId = INVALID_ID; 30911e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira transitionToInbox(); 31011e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira } 31168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if (mode == ViewMode.SEARCH_RESULTS_LIST) { 31268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 313b466bcf49502a1178cf7362a81470f3231d8892bMindy Pereira } else if (mViewMode.isListMode() && !inInbox(mAccount, mConvListContext)) { 31411e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira if (mLastFolderListTransactionId != INVALID_ID) { 31511e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // If the user got here by navigating via the folder list, back 31611e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // should bring them back to the folder list. 3173982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mViewMode.enterFolderListMode(); 31812a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira if (mFolder != null && mFolder.parent != null) { 31911e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // If there was a parent folder, show the parent and 32011e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // siblings of the current folder for which we are viewing 32111e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // the conversation list. 32212a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira setFolder(mFolder.parent); 32311e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira } else { 32411e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // Otherwise, clear the selected folder and go back to whatever the last 32511e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // folder list displayed was. 32611e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira setFolder(null); 32711e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira } 3283982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.getFragmentManager().popBackStack(mLastFolderListTransactionId, 0); 3293982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 33011e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira mLastFolderListTransactionId = INVALID_ID; 3313982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transitionToInbox(); 3323982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 33368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if (mode == ViewMode.CONVERSATION || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 334f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira transitionBackToConversationListMode(); 3353982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 3363982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.finish(); 3373982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 338b77a532b4c660254f7f0acd104c2334721ed6313Mindy Pereira mUndoBarView.hide(false); 3393982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return true; 3403982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 3413982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 34212a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira private void goUpFolderHierarchy(Folder current) { 34312a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira Folder top = current.parent; 34412a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira if (top != null) { 34512a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira setFolder(top); 34612a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira // Replace this fragment with a new FolderListFragment 34712a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira // showing this folder's children if we are not already 34812a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira // looking at the child view for this folder. 34912a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira mLastFolderListTransactionId = replaceFragment(FolderListFragment.newInstance( 35012a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira top, top.childFoldersListUri), 35112a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_FOLDER_LIST); 35212a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira // Show the up affordance when digging into child folders. 35312a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira mActionBarView.setBackButton(); 35412a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira } else { 35512a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira // Otherwise, clear the selected folder and go back to whatever the 35612a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira // last folder list displayed was. 35712a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira showFolderList(); 35812a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira } 35912a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira } 36012a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira 3613982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private void transitionToInbox() { 3628690e2b71e1a3dd812ce418c9607e21f3a88ab54Mindy Pereira mViewMode.enterConversationListMode(); 363f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira if (mInbox == null) { 364ab4863650794e81f35a0fd9abc16a5564d7b102bMindy Pereira loadAccountInbox(); 3653982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 366f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira ConversationListContext listContext = ConversationListContext.forFolder(mContext, 367f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira mAccount, mInbox); 36872a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira // Set the correct context for what the conversation view will be 36972a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira // now. 370f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira onFolderChanged(mInbox); 37172a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira showConversationList(listContext); 37201668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 37301668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 374f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 375118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira @Override 376505df5f59c92adbe8eaa734321c1d3f91be84a4aMindy Pereira public void onFolderSelected(Folder folder) { 37712a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira if (folder.hasChildren) { 37811e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira setFolder(folder); 37956e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira // Replace this fragment with a new FolderListFragment 38011e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // showing this folder's children if we are not already 38111e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira // looking at the child view for this folder. 38256e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira mLastFolderListTransactionId = replaceFragment( 383a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereira FolderListFragment.newInstance(folder, folder.childFoldersListUri), 3846902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_FOLDER_LIST); 38512a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira // Show the up affordance when digging into child folders. 38612a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira mActionBarView.setBackButton(); 38711e3596e8c5978d07195ae2d7c8a96bb51aa75b3Mindy Pereira } else { 38812a4d8040d64501aa5a24c25865c806331560b74Mindy Pereira super.onFolderSelected(folder); 389118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira } 390118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira } 391118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira 3923982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private boolean isTransactionIdValid(int id) { 3933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return id >= 0; 3943982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 3953982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 3963982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 3973982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Up works as follows: 3983982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in a conversation list that is not the default account inbox, 3993982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a conversation, or the folder list, up follows the rules of back. 4003982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in search results, up exits search 4013982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * mode and returns the user to whatever view they were in when they began search. 4023982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in the inbox, there is no up. 4033982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 404f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira @Override 405f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira public boolean onUpPressed() { 4069da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal final int mode = mViewMode.getMode(); 40768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_LIST) { 40868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 409b466bcf49502a1178cf7362a81470f3231d8892bMindy Pereira } else if ((!inInbox(mAccount, mConvListContext) && mViewMode.isListMode()) 41068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.CONVERSATION 41168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.FOLDER_LIST 41268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 413f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira // Same as go back. 414f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira mActivity.onBackPressed(); 415f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 416f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira return true; 417f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 418f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 419f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira private void transitionBackToConversationListMode() { 4209da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal final int mode = mViewMode.getMode(); 42190d89e2194cecb6ff0179c8159870575edf7365eVikram Aggarwal enableCabMode(); 42268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 42368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 42468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 42568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 42668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 42721ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira if (isTransactionIdValid(mLastConversationListTransactionId)) { 42821ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira mActivity.getFragmentManager().popBackStack(mLastConversationListTransactionId, 0); 42921ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira resetActionBarIcon(); 4300e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook } else if (isTransactionIdValid(mLastInboxConversationListTransactionId)) { 4310e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mActivity.getFragmentManager().popBackStack(mLastInboxConversationListTransactionId, 0); 4320e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook resetActionBarIcon(); 4330e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook onFolderChanged(mInbox); 43421ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira } else { 4359da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal // TODO: revisit if this block is necessary 4369da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal final ConversationListContext listContext = ConversationListContext.forFolder(mContext, 43721ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira mAccount, mInbox); 43821ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira // Set the correct context for what the conversation view will be now. 43921ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira onFolderChanged(mInbox); 44021ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira showConversationList(listContext); 44121ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira } 442f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira resetActionBarIcon(); 4439f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook 4449f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook mConversationListVisible = true; 4457dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(false); 4469f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(true); 447f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 448b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira 449b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira @Override 450b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira public boolean shouldShowFirstConversation() { 451b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira return false; 452b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira } 453fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 454fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira @Override 4550963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira public void onUndoAvailable(UndoOperation op) { 4560963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira if (op != null && mAccount.supportsCapability(UIProvider.AccountCapabilities.UNDO)) { 4577f602f7a64f176894ccb7942a6642f22584c3894Vikram Aggarwal final int mode = mViewMode.getMode(); 4580963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira switch (mode) { 459b466bcf49502a1178cf7362a81470f3231d8892bMindy Pereira case ViewMode.SEARCH_RESULTS_CONVERSATION: 4600963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira case ViewMode.CONVERSATION: 4610963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira mUndoBarView.show(true, mActivity.getActivityContext(), op, mAccount, 462bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook null, null); 4630963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira break; 464b466bcf49502a1178cf7362a81470f3231d8892bMindy Pereira case ViewMode.SEARCH_RESULTS_LIST: 4650963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira case ViewMode.CONVERSATION_LIST: 4666902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal final ConversationListFragment convList = getConversationListFragment(); 4676902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal if (convList != null) { 4686902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal mUndoBarView.show(true, mActivity.getActivityContext(), op, mAccount, 469bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook convList.getAnimatedAdapter(), mConversationListCursor); 4706902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal } 4710963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira break; 4720963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 4730963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 4740963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 475a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal} 476