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