OnePaneController.java revision e128fc21fab03f6d66c656efeee2155fab449a7f
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; 21d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwalimport android.app.FragmentTransaction; 22fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport android.database.Cursor; 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; 29967ede63e059810d9d4d425c50111d606014c893Mindy Pereiraimport com.android.mail.browse.ConversationCursor; 30cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwalimport com.android.mail.providers.Account; 319b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereiraimport com.android.mail.providers.Conversation; 323982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereiraimport com.android.mail.providers.Folder; 33fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.Settings; 34fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.UIProvider; 35fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.UIProvider.AutoAdvance; 36fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport com.android.mail.providers.UIProvider.ConversationColumns; 3756e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereiraimport com.android.mail.ui.FolderListFragment.FolderListSelectionListener; 38fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 39fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport java.util.ArrayList; 40fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereiraimport java.util.Collections; 41a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 42a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal/** 43a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Controller for one-pane Mail activity. One Pane is used for phones, where screen real estate is 44d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal * limited. This controller also does the layout, since the layout is simpler in the one pane case. 45a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 46a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 47a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal// Called OnePaneActivityController in Gmail. 48a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereirapublic final class OnePaneController extends AbstractActivityController { 493982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String FOLDER_LIST_TRANSACTION_KEY = "folder-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"; 523982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final int INVALID_ID = -1; 532175d0a93263672d4498458c81b404b0999134baVikram Aggarwal private boolean mConversationListVisible = false; 543982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastConversationListTransactionId = INVALID_ID; 553982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastConversationTransactionId = INVALID_ID; 563982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int mLastFolderListTransactionId = INVALID_ID; 573982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private Folder mInbox; 58cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal /** Whether a conversation list for this account has ever been shown.*/ 59cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal private boolean mConversationListNeverShown = true; 60cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal 61fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 62fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira private final ActionCompleteListener mDeleteListener = new OnePaneDestructiveActionListener( 63fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira R.id.delete); 64fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira private final ActionCompleteListener mArchiveListener = new OnePaneDestructiveActionListener( 65fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira R.id.archive); 66fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira private final ActionCompleteListener mMuteListener = new OnePaneDestructiveActionListener( 67fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira R.id.mute); 68fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira private final ActionCompleteListener mSpamListener = new OnePaneDestructiveActionListener( 69fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira R.id.report_spam); 706778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira private final ActionCompleteListener mUnreadListener = new OnePaneDestructiveActionListener( 716778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira R.id.inside_conversation_unread); 72e5f4dc0661dad02e2cb39ffa62ff2157147ac387Mindy Pereira private final OnePaneDestructiveActionListener mFolderChangeListener = 73e5f4dc0661dad02e2cb39ffa62ff2157147ac387Mindy Pereira new OnePaneDestructiveActionListener(R.id.change_folder); 74fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 75a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal /** 76a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * @param activity 77a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * @param viewMode 78a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 79a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal public OnePaneController(MailActivity activity, ViewMode viewMode) { 80a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal super(activity, viewMode); 81a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal } 82a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 831ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 843982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira protected void restoreState(Bundle inState) { 853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira super.restoreState(inState); 863982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(mindyp) handle saved state. 873982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (inState != null) { 883982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = inState.getInt(FOLDER_LIST_TRANSACTION_KEY, INVALID_ID); 893982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationListTransactionId = inState.getInt(CONVERSATION_LIST_TRANSACTION_KEY, 903982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira INVALID_ID); 913982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationTransactionId = inState.getInt(CONVERSATION_TRANSACTION_KEY, 923982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira INVALID_ID); 933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 943982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 953982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 963982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 973982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira public void onSaveInstanceState(Bundle outState) { 983982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira super.onSaveInstanceState(outState); 993982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(mindyp) handle saved state. 1003982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(FOLDER_LIST_TRANSACTION_KEY, mLastFolderListTransactionId); 1013982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_LIST_TRANSACTION_KEY, mLastConversationListTransactionId); 1023982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_TRANSACTION_KEY, mLastConversationTransactionId); 1033982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1043982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 1053982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 106d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void resetActionBarIcon() { 107d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal final int mode = mViewMode.getMode(); 108559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira // If the settings aren't loaded yet, we may not know what the default 109559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira // inbox is, so err toward this being the account inbox. 110559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira if ((mCachedSettings != null && mConvListContext != null && !inInbox()) 11168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_LIST 11268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_CONVERSATION 11368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.CONVERSATION 11468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.FOLDER_LIST) { 115d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal mActionBarView.setBackButton(); 116d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } else { 117d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal mActionBarView.removeBackButton(); 118d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 119d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 120d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 1213982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private boolean inInbox() { 122559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira Uri inboxUri = mCachedSettings != null ? mCachedSettings.defaultInbox : null; 123559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira return mConvListContext != null && mConvListContext.folder != null ? (!mConvListContext 124559c3b3d302b3f6d2c2cb43a909069d942652e34Mindy Pereira .isSearchResult() && mConvListContext.folder.uri.equals(inboxUri)) : false; 1253982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1263982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 127d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 128cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal public void onAccountChanged(Account account) { 129cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal super.onAccountChanged(account); 130cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal mConversationListNeverShown = true; 131cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal } 132cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal 133cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal @Override 134d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public boolean onCreate(Bundle savedInstanceState) { 1351ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal // Set 1-pane content view. 1361ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal mActivity.setContentView(R.layout.one_pane_activity); 137d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal // The parent class sets the correct viewmode and starts the application off. 138d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal return super.onCreate(savedInstanceState); 1391ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 1401ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal 1411ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 1421ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal protected boolean isConversationListVisible() { 1432175d0a93263672d4498458c81b404b0999134baVikram Aggarwal return mConversationListVisible; 1441ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 145d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 146d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 147d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void onViewModeChanged(int newMode) { 148d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal super.onViewModeChanged(newMode); 149d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 150d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 151d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 1529b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversationList(ConversationListContext listContext) { 153e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal super.showConversationList(listContext); 154e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal enableCabMode(); 1553982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // TODO(viki): Check if the account has been changed since the previous 1563982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // time. 15768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (listContext != null && listContext.isSearchResult()) { 15868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 15968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 16068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 16168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 1629b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira // TODO(viki): This account transition looks strange in two pane mode. 1632175d0a93263672d4498458c81b404b0999134baVikram Aggarwal // Revisit as the app is coming together and improve the look and feel. 164cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal final int transition = mConversationListNeverShown 165cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal ? FragmentTransaction.TRANSIT_FRAGMENT_FADE 1669b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira : FragmentTransaction.TRANSIT_FRAGMENT_OPEN; 16701668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira Fragment conversationListFragment = ConversationListFragment.newInstance(listContext); 1683982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (!inInbox()) { 1693982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Maintain fragment transaction history so we can get back to the 1703982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // fragment used to launch this list. 17172a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira mLastConversationListTransactionId = replaceFragment(conversationListFragment, 17272a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira transition); 1733982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 1743982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // If going to the inbox, clear the folder list transaction history. 1753982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mInbox = listContext.folder; 17672a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira replaceFragment(conversationListFragment, 1773982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transition); 1783982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = INVALID_ID; 1793982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1802175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = true; 181cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal mConversationListNeverShown = false; 18228d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira } 18328d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira 18428d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira @Override 1859b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversation(Conversation conversation) { 186ec5cbf79b825c6f96d45e85015319c66470b7e57Vikram Aggarwal super.showConversation(conversation); 187e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal disableCabMode(); 18868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mConvListContext != null && mConvListContext.isSearchResult()) { 18968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsConversationMode(); 19068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 19168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationMode(); 19268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 1933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastConversationTransactionId = replaceFragment( 194863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira ConversationViewFragment.newInstance(mAccount, conversation, mFolder), 1952175d0a93263672d4498458c81b404b0999134baVikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 1962175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = false; 1979b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 1989b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 1999b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira @Override 2009b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showFolderList() { 20101668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira mViewMode.enterFolderListMode(); 2023982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = replaceFragment( 203a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereira FolderListFragment.newInstance(null, mAccount.folderListUri), 2042175d0a93263672d4498458c81b404b0999134baVikram Aggarwal FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 2052175d0a93263672d4498458c81b404b0999134baVikram Aggarwal mConversationListVisible = false; 2069b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 2079b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 2083982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private int replaceFragment(Fragment fragment, int transition) { 209d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal FragmentTransaction fragmentTransaction = mActivity.getFragmentManager().beginTransaction(); 210d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.addToBackStack(null); 211d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.setTransition(transition); 2129b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira fragmentTransaction.replace(R.id.content_pane, fragment); 2133982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira int transactionId = fragmentTransaction.commitAllowingStateLoss(); 214d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal resetActionBarIcon(); 2153982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return transactionId; 216d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 21701668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira 2183982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 2193982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Back works as follows: 2203982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in the folder list view, go back 2213982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * to the account default inbox. 2223982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in a conversation list 2233982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * that is not the inbox AND: 2243982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a) they got there by going through the folder 2253982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * list view, go back to the folder list view. 2263982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * b) they got there by using some other means (account dropdown), go back to the inbox. 2273982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in a conversation, go back to the conversation list they were last in. 2283982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 4) If the user is in the conversation list for the default account inbox, 2293982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * back exits the app. 2303982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 23101668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira @Override 23201668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira public boolean onBackPressed() { 23301668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira int mode = mViewMode.getMode(); 2343982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (mode == ViewMode.FOLDER_LIST) { 2353982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mLastFolderListTransactionId = INVALID_ID; 2363982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transitionToInbox(); 23768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if (mode == ViewMode.SEARCH_RESULTS_LIST) { 23868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 2393982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else if (mode == ViewMode.CONVERSATION_LIST && !inInbox()) { 2403982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira if (isTransactionIdValid(mLastFolderListTransactionId)) { 24130fd47bf1947da5ad813cb957b6cbe569dce563aMindy Pereira // Go back to previous folder list. 2423982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mViewMode.enterFolderListMode(); 2433982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.getFragmentManager().popBackStack(mLastFolderListTransactionId, 0); 2443982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 2453982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Go back to Inbox. 2463982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira transitionToInbox(); 2473982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 24868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if (mode == ViewMode.CONVERSATION || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 249f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira transitionBackToConversationListMode(); 2503982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 2513982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.finish(); 2523982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 2533982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return true; 2543982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 2553982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 2563982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private void transitionToInbox() { 2578690e2b71e1a3dd812ce418c9607e21f3a88ab54Mindy Pereira mViewMode.enterConversationListMode(); 258f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira if (mInbox == null) { 259ab4863650794e81f35a0fd9abc16a5564d7b102bMindy Pereira loadAccountInbox(); 2603982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 261f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira ConversationListContext listContext = ConversationListContext.forFolder(mContext, 262f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira mAccount, mInbox); 26372a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira // Set the correct context for what the conversation view will be 26472a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira // now. 265f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira onFolderChanged(mInbox); 26672a9f3918310f581fecf6411174645ad5b5ae112Mindy Pereira showConversationList(listContext); 26701668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 26801668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 269f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 270118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira @Override 27156e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira public void onFolderSelected(Folder folder, boolean childView) { 27256e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira if (!childView && folder.hasChildren) { 27356e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira // Replace this fragment with a new FolderListFragment 27456e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira // showing this folder's children if we are not already looking 27556e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira // at the child view for this folder. 27656e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira mLastFolderListTransactionId = replaceFragment( 277a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereira FolderListFragment.newInstance(folder, folder.childFoldersListUri), 27856e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 27956e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira return; 28056e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira } 28156e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira if (mViewMode.getMode() == ViewMode.FOLDER_LIST && folder != null 28256e3f50f5aee6606035eae4b713ef634c4f3a686Mindy Pereira && folder.equals(mFolder)) { 283118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira // if we are in folder list when we select a new folder, 284118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira // and it is the same as the existing folder, clear the previous 285118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira // folder setting so that the folder will be re-loaded/ shown. 286118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira mFolder = null; 287118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira } 288118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira super.onFolderChanged(folder); 289118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira } 290118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira 2913982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private boolean isTransactionIdValid(int id) { 2923982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return id >= 0; 2933982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 2943982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 2953982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 2963982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Up works as follows: 2973982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in a conversation list that is not the default account inbox, 2983982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a conversation, or the folder list, up follows the rules of back. 2993982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in search results, up exits search 3003982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * mode and returns the user to whatever view they were in when they began search. 3013982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in the inbox, there is no up. 3023982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 303f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira @Override 304f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira public boolean onUpPressed() { 305f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira int mode = mViewMode.getMode(); 30668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_LIST) { 30768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 30868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else if ((!inInbox() && mode == ViewMode.CONVERSATION_LIST) 30968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.CONVERSATION 31068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.FOLDER_LIST 31168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira || mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 312f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira // Same as go back. 313f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira mActivity.onBackPressed(); 314f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 315f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira return true; 316f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 317f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 318f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira private void transitionBackToConversationListMode() { 31968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira int mode = mViewMode.getMode(); 32068f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 32168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 32268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 32368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 32468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 32521ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira if (isTransactionIdValid(mLastConversationListTransactionId)) { 32621ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira mActivity.getFragmentManager().popBackStack(mLastConversationListTransactionId, 0); 32721ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira resetActionBarIcon(); 32821ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira } else { 32921ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira ConversationListContext listContext = ConversationListContext.forFolder(mContext, 33021ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira mAccount, mInbox); 33121ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira // Set the correct context for what the conversation view will be now. 33221ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira onFolderChanged(mInbox); 33321ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira showConversationList(listContext); 33421ab490d4919985d611bc36ae2d8aea86a911499Mindy Pereira } 335f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira resetActionBarIcon(); 336f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 337b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira 338b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira @Override 339b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira public boolean shouldShowFirstConversation() { 340b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira return false; 341b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira } 342fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 343fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira @Override 344fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira public boolean onOptionsItemSelected(MenuItem item) { 345fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira boolean handled = true; 346fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira final int id = item.getItemId(); 347fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira switch (id) { 348fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.y_button: { 349fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira final Settings settings = mActivity.getSettings(); 350fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira final boolean showDialog = (settings != null && settings.confirmArchive); 351fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira confirmAndDelete(showDialog, R.plurals.confirm_archive_conversation, 352fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira mArchiveListener); 353fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 354fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 355fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.delete: { 356fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira final Settings settings = mActivity.getSettings(); 357fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira final boolean showDialog = (settings != null && settings.confirmDelete); 358fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira confirmAndDelete(showDialog, 359fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira R.plurals.confirm_delete_conversation, mDeleteListener); 360fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 361fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 362fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.change_folders: 363fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira new FoldersSelectionDialog(mActivity.getActivityContext(), mAccount, this, 364fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira Collections.singletonList(mCurrentConversation)).show(); 365fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 366fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.inside_conversation_unread: 3676778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira // Mark as unread and advance. 3686778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira performInsideConversationUnread(); 369fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 370fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.mark_important: 371fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira updateCurrentConversation(ConversationColumns.PRIORITY, 372fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira UIProvider.ConversationPriority.HIGH); 373fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 374fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.mark_not_important: 375fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira updateCurrentConversation(ConversationColumns.PRIORITY, 376fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira UIProvider.ConversationPriority.LOW); 377fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 378fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.mute: 379c9d59184da271d5a6974edb709e3b39a5a970fa7Mindy Pereira requestDelete(mMuteListener); 380fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 381fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira case R.id.report_spam: 382c9d59184da271d5a6974edb709e3b39a5a970fa7Mindy Pereira requestDelete(mSpamListener); 383fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 384fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira default: 385fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira handled = false; 386fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira break; 387fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 388fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira return handled || super.onOptionsItemSelected(item); 389fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 390fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 3916778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira // TODO: If when the conversation was opened, some of the messages were unread, 3926778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira // this is supposed to restore that state. Otherwise, this should mark all 3936778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira // messages as unread 3946778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira private void performInsideConversationUnread() { 3956778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira updateCurrentConversation(ConversationColumns.READ, false); 3966778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira if (returnToList()) { 3976778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira onBackPressed(); 3986778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira } else { 3996778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira mUnreadListener.onActionComplete(); 4006778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira } 4016778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira } 4026778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira 403fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira private class OnePaneDestructiveActionListener extends DestructiveActionListener { 404fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira public OnePaneDestructiveActionListener(int action) { 405fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira super(action); 406fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 407fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 408fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira @Override 409fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira public void onActionComplete() { 410fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira Conversation next = null; 411fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira final ArrayList<Conversation> single = new ArrayList<Conversation>(); 412fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira single.add(mCurrentConversation); 413c67182dfb4884e92262a2365ecfcc5d254c7999cVikram Aggarwal final int mode = mViewMode.getMode(); 414fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira if (mode == ViewMode.CONVERSATION) { 415fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira next = getNextConversation(); 4166778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira } else if (mode == ViewMode.CONVERSATION_LIST 4176778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira && mAction != R.id.inside_conversation_unread) { 418967ede63e059810d9d4d425c50111d606014c893Mindy Pereira OnePaneController.this.onActionComplete(); 419fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira mConversationListFragment.onUndoAvailable(new UndoOperation(1, mAction)); 420fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 421fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira performConversationAction(single); 422967ede63e059810d9d4d425c50111d606014c893Mindy Pereira if (next != null) { 423967ede63e059810d9d4d425c50111d606014c893Mindy Pereira if (mode == ViewMode.CONVERSATION) { 424967ede63e059810d9d4d425c50111d606014c893Mindy Pereira showConversation(next); 425967ede63e059810d9d4d425c50111d606014c893Mindy Pereira } 426fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } else { 427c67182dfb4884e92262a2365ecfcc5d254c7999cVikram Aggarwal // Don't have the next conversation, go back to conversation list. 428967ede63e059810d9d4d425c50111d606014c893Mindy Pereira if (mode == ViewMode.CONVERSATION_LIST) { 429967ede63e059810d9d4d425c50111d606014c893Mindy Pereira mConversationListFragment.requestListRefresh(); 430967ede63e059810d9d4d425c50111d606014c893Mindy Pereira } else if (mode == ViewMode.CONVERSATION) { 431967ede63e059810d9d4d425c50111d606014c893Mindy Pereira final int position = mCurrentConversation.position; 432967ede63e059810d9d4d425c50111d606014c893Mindy Pereira final OnePaneDestructiveActionListener listener = this; 433967ede63e059810d9d4d425c50111d606014c893Mindy Pereira onBackPressed(); 434967ede63e059810d9d4d425c50111d606014c893Mindy Pereira mHandler.post(new Runnable() { 435967ede63e059810d9d4d425c50111d606014c893Mindy Pereira @Override 436967ede63e059810d9d4d425c50111d606014c893Mindy Pereira public void run() { 437967ede63e059810d9d4d425c50111d606014c893Mindy Pereira if (mConversationListFragment != null) { 438967ede63e059810d9d4d425c50111d606014c893Mindy Pereira mConversationListFragment.requestDelete(position, listener); 439967ede63e059810d9d4d425c50111d606014c893Mindy Pereira } 440967ede63e059810d9d4d425c50111d606014c893Mindy Pereira } 441967ede63e059810d9d4d425c50111d606014c893Mindy Pereira }); 442967ede63e059810d9d4d425c50111d606014c893Mindy Pereira } 443fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 444fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 445fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 446fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 447c67182dfb4884e92262a2365ecfcc5d254c7999cVikram Aggarwal /** 448c67182dfb4884e92262a2365ecfcc5d254c7999cVikram Aggarwal * Returns true if we need to return back to conversation list based on the current 449c67182dfb4884e92262a2365ecfcc5d254c7999cVikram Aggarwal * AutoAdvance setting and the number of messages in the list. 450c67182dfb4884e92262a2365ecfcc5d254c7999cVikram Aggarwal * @return true if we need to return back to conversation list, false otherwise. 451c67182dfb4884e92262a2365ecfcc5d254c7999cVikram Aggarwal */ 4526778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira private boolean returnToList() { 453967ede63e059810d9d4d425c50111d606014c893Mindy Pereira ConversationCursor conversationListCursor = mConversationListCursor; 4546778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira int pref = getAutoAdvanceSetting(mActivity); 455a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira final int position = mCurrentConversation.position; 4566778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira boolean canMove = false; 457a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira switch (pref) { 458a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira case AutoAdvance.NEWER: 459a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira canMove = position - 1 >= 0; 460a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira break; 461a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira case AutoAdvance.OLDER: 462967ede63e059810d9d4d425c50111d606014c893Mindy Pereira Cursor c = conversationListCursor; 463a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira if (c != null) { 464a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira canMove = position + 1 < c.getCount(); 465a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira } 466a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira break; 467a3c4dc2efddf837d79639706bdadae72f773d407Mindy Pereira } 4686778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira return pref == AutoAdvance.LIST || !canMove; 4696778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira } 4706778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira 47170f130ee9be956e72bc0686e80c3fc4c92807451Vikram Aggarwal @Override 4726778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira protected void requestDelete(final ActionCompleteListener listener) { 4736778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira final int position = mCurrentConversation.position; 4746778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereira if (returnToList()) { 475fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira onBackPressed(); 476fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira mHandler.post(new Runnable() { 477fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 478fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira @Override 479fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira public void run() { 480967ede63e059810d9d4d425c50111d606014c893Mindy Pereira if (mConversationListFragment != null) { 481967ede63e059810d9d4d425c50111d606014c893Mindy Pereira mConversationListFragment.requestDelete(position, listener); 482967ede63e059810d9d4d425c50111d606014c893Mindy Pereira } 483fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 484fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 485fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira }); 486fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } else { 487967ede63e059810d9d4d425c50111d606014c893Mindy Pereira if (mConversationListCursor != null) { 488967ede63e059810d9d4d425c50111d606014c893Mindy Pereira mConversationListCursor.moveToPosition(position); 489967ede63e059810d9d4d425c50111d606014c893Mindy Pereira } 490967ede63e059810d9d4d425c50111d606014c893Mindy Pereira listener.onActionComplete(); 491fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 492fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira } 493fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 494e5f4dc0661dad02e2cb39ffa62ff2157147ac387Mindy Pereira @Override 495e5f4dc0661dad02e2cb39ffa62ff2157147ac387Mindy Pereira protected DestructiveActionListener getFolderDestructiveActionListener() { 496e5f4dc0661dad02e2cb39ffa62ff2157147ac387Mindy Pereira return mFolderChangeListener; 497e5f4dc0661dad02e2cb39ffa62ff2157147ac387Mindy Pereira } 498a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal} 499