OnePaneController.java revision 30fd47bf1947da5ad813cb957b6cbe569dce563a
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; 213982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereiraimport 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; 289b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereiraimport com.android.mail.providers.Conversation; 293982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereiraimport com.android.mail.providers.Folder; 30a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 31a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal/** 32a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Controller for one-pane Mail activity. One Pane is used for phones, where screen real estate is 33d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal * limited. This controller also does the layout, since the layout is simpler in the one pane case. 34a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 35a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 36a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal// Called OnePaneActivityController in Gmail. 371ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwalpublic final class OnePaneController extends AbstractActivityController { 383982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String FOLDER_LIST_TRANSACTION_KEY = "folder-list-transaction"; 393982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String CONVERSATION_LIST_TRANSACTION_KEY = "conversation-list-transaction"; 403982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String CONVERSATION_TRANSACTION_KEY = "conversation-transaction"; 413982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final int INVALID_ID = -1; 422175d0a93263672d4498458c81b404b0999134baVikram Aggarwal private boolean mConversationListVisible = false; 433982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastConversationListTransactionId = INVALID_ID; 443982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastConversationTransactionId = INVALID_ID; 453982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastFolderListTransactionId = INVALID_ID; 463982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private Folder mInbox; 47a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal /** 48a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * @param activity 49a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * @param viewMode 50a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 51a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal public OnePaneController(MailActivity activity, ViewMode viewMode) { 52a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal super(activity, viewMode); 53a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal } 54a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 551ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 563982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira protected void restoreState(Bundle inState) { 573982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira super.restoreState(inState); 583982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(mindyp) handle saved state. 593982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (inState != null) { 603982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = inState.getInt(FOLDER_LIST_TRANSACTION_KEY, INVALID_ID); 613982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationListTransactionId = inState.getInt(CONVERSATION_LIST_TRANSACTION_KEY, 623982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira INVALID_ID); 633982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationTransactionId = inState.getInt(CONVERSATION_TRANSACTION_KEY, 643982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira INVALID_ID); 653982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 663982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 673982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 683982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 693982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira public void onSaveInstanceState(Bundle outState) { 703982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira super.onSaveInstanceState(outState); 713982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(mindyp) handle saved state. 723982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(FOLDER_LIST_TRANSACTION_KEY, mLastFolderListTransactionId); 733982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_LIST_TRANSACTION_KEY, mLastConversationListTransactionId); 743982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_TRANSACTION_KEY, mLastConversationTransactionId); 753982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 763982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 773982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 78d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void resetActionBarIcon() { 79d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal final int mode = mViewMode.getMode(); 80559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira // If the settings aren't loaded yet, we may not know what the default 81559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira // inbox is, so err toward this being the account inbox. 82559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira if ((mCachedSettings != null && mConvListContext != null && !inInbox()) 8368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_LIST 8468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_CONVERSATION 8568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.CONVERSATION 8668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.FOLDER_LIST) { 87d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal mActionBarView.setBackButton(); 88d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } else { 89d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal mActionBarView.removeBackButton(); 90d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 91d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 92d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private boolean inInbox() { 94559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira Uri inboxUri = mCachedSettings != null ? mCachedSettings.defaultInbox : null; 95559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira return mConvListContext != null && mConvListContext.folder != null ? (!mConvListContext 96559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira .isSearchResult() && mConvListContext.folder.uri.equals(inboxUri)) : false; 973982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 983982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 99d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 100d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public boolean onCreate(Bundle savedInstanceState) { 1011ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal // Set 1-pane content view. 1021ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal mActivity.setContentView(R.layout.one_pane_activity); 103d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal // The parent class sets the correct viewmode and starts the application off. 104d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal return super.onCreate(savedInstanceState); 1051ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 1061ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal 1071ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 1081ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal protected boolean isConversationListVisible() { 1092175d0a93263672d4498458c81b404b0999134baVikram Aggarwal return mConversationListVisible; 1101ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 111d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 112d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 113d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void onViewModeChanged(int newMode) { 114d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal super.onViewModeChanged(newMode); 115d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 116d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 117d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 1189b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversationList(ConversationListContext listContext) { 1193982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(viki): Check if the account has been changed since the previous 1203982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // time. 12168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (listContext != null && listContext.isSearchResult()) { 12268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 12368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 12468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 12568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 12628d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira final boolean accountChanged = false; 1279b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira // TODO(viki): This account transition looks strange in two pane mode. 1282175d0a93263672d4498458c81b404b0999134baVikram Aggarwal // Revisit as the app is coming together and improve the look and feel. 1299b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira final int transition = accountChanged ? FragmentTransaction.TRANSIT_FRAGMENT_FADE 1309b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira : FragmentTransaction.TRANSIT_FRAGMENT_OPEN; 13101668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira Fragment conversationListFragment = ConversationListFragment.newInstance(listContext); 1323982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (!inInbox()) { 1333982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Maintain fragment transaction history so we can get back to the 1343982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // fragment used to launch this list. 1353982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira replaceFragment(conversationListFragment, transition); 1363982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 1373982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // If going to the inbox, clear the folder list transaction history. 1383982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mInbox = listContext.folder; 1393982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationListTransactionId = replaceFragment(conversationListFragment, 1403982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transition); 1413982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = INVALID_ID; 1423982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1432175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = true; 14428d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira } 14528d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira 14628d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira @Override 1479b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversation(Conversation conversation) { 14868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mConvListContext != null && mConvListContext.isSearchResult()) { 14968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsConversationMode(); 15068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 15168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationMode(); 15268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 1533982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationTransactionId = replaceFragment( 1543982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira ConversationViewFragment.newInstance(mAccount, conversation), 1552175d0a93263672d4498458c81b404b0999134baVikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 1562175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = false; 1579b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 1589b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 1599b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira @Override 1609b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showFolderList() { 16101668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira mViewMode.enterFolderListMode(); 1623982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = replaceFragment( 1633982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira FolderListFragment.newInstance(this, mAccount.folderListUri), 1642175d0a93263672d4498458c81b404b0999134baVikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 1652175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = false; 1669b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 1679b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 1683982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int replaceFragment(Fragment fragment, int transition) { 169d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal FragmentTransaction fragmentTransaction = mActivity.getFragmentManager().beginTransaction(); 170d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.addToBackStack(null); 171d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.setTransition(transition); 1729b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira fragmentTransaction.replace(R.id.content_pane, fragment); 1733982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira int transactionId = fragmentTransaction.commitAllowingStateLoss(); 174d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal resetActionBarIcon(); 1753982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return transactionId; 176d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 17701668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira 1783982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 1793982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Back works as follows: 1803982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in the folder list view, go back 1813982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * to the account default inbox. 1823982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in a conversation list 1833982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * that is not the inbox AND: 1843982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a) they got there by going through the folder 1853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * list view, go back to the folder list view. 1863982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * b) they got there by using some other means (account dropdown), go back to the inbox. 1873982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in a conversation, go back to the conversation list they were last in. 1883982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 4) If the user is in the conversation list for the default account inbox, 1893982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * back exits the app. 1903982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 19101668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira @Override 19201668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira public boolean onBackPressed() { 19301668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira int mode = mViewMode.getMode(); 1943982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (mode == ViewMode.FOLDER_LIST) { 1953982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = INVALID_ID; 1963982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transitionToInbox(); 19768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if (mode == ViewMode.SEARCH_RESULTS_LIST) { 19868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 1993982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else if (mode == ViewMode.CONVERSATION_LIST && !inInbox()) { 2003982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (isTransactionIdValid(mLastFolderListTransactionId)) { 20130fd47bf1947da5ad813cb957b6cbe569dce563aMindy Pereira // Go back to previous folder list. 2023982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mViewMode.enterFolderListMode(); 2033982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.getFragmentManager().popBackStack(mLastFolderListTransactionId, 0); 2043982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 2053982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Go back to Inbox. 2063982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transitionToInbox(); 2073982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 20868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if (mode == ViewMode.CONVERSATION || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 209f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira transitionBackToConversationListMode(); 2103982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 2113982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.finish(); 2123982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 2133982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return true; 2143982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 2153982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 2163982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private void transitionToInbox() { 2178690e2b71e1a3dd812ce418c9607e21f3a88ab54Mindy Pereira mViewMode.enterConversationListMode(); 2183982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira ConversationListContext listContext = ConversationListContext.forFolder(mContext, 2193982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mAccount, mInbox); 2203982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Set the correct context for what the conversation view will be now. 2213982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira onFolderChanged(mInbox); 2223982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (isTransactionIdValid(mLastConversationListTransactionId)) { 2233982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // showConversationList(listContext); 2243982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.getFragmentManager().popBackStack(mLastConversationListTransactionId, 0); 2253982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira resetActionBarIcon(); 2263982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 2273982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira showConversationList(listContext); 22801668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 22901668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 230f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 2313982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private boolean isTransactionIdValid(int id) { 2323982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return id >= 0; 2333982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 2343982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 2353982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 2363982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Up works as follows: 2373982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in a conversation list that is not the default account inbox, 2383982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a conversation, or the folder list, up follows the rules of back. 2393982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in search results, up exits search 2403982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * mode and returns the user to whatever view they were in when they began search. 2413982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in the inbox, there is no up. 2423982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 243f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira @Override 244f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira public boolean onUpPressed() { 245f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira int mode = mViewMode.getMode(); 24668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_LIST) { 24768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 24868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if ((!inInbox() && mode == ViewMode.CONVERSATION_LIST) 24968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.CONVERSATION 25068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.FOLDER_LIST 25168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 252f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira // Same as go back. 253f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira mActivity.onBackPressed(); 254f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 255f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira return true; 256f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 257f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 258f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira private void transitionBackToConversationListMode() { 25968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira int mode = mViewMode.getMode(); 26068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 26168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 26268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 26368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 26468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 2653982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.getFragmentManager().popBackStack(mLastConversationTransactionId, 2663982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira FragmentManager.POP_BACK_STACK_INCLUSIVE); 267f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira resetActionBarIcon(); 268f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 269b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira 270b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira @Override 271b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira public boolean shouldShowFirstConversation() { 272b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira return false; 273b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira } 274a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal} 275