Vikram Aggarwal | a55b36c | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 1 | /******************************************************************************* |
| 2 | * Copyright (C) 2012 Google Inc. |
| 3 | * Licensed to The Android Open Source Project. |
| 4 | * |
| 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | * you may not use this file except in compliance with the License. |
| 7 | * You may obtain a copy of the License at |
| 8 | * |
| 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | * |
| 11 | * Unless required by applicable law or agreed to in writing, software |
| 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | * See the License for the specific language governing permissions and |
| 15 | * limitations under the License. |
| 16 | *******************************************************************************/ |
| 17 | |
| 18 | package com.android.mail.ui; |
| 19 | |
Martin Hibdon | 371a71c | 2014-02-19 13:55:28 -0800 | [diff] [blame] | 20 | import android.app.Activity; |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 21 | import android.app.Fragment; |
Andy Huang | 632721e | 2012-04-11 16:57:26 -0700 | [diff] [blame] | 22 | import android.app.FragmentManager; |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 23 | import android.app.FragmentTransaction; |
Martin Hibdon | 371a71c | 2014-02-19 13:55:28 -0800 | [diff] [blame] | 24 | import android.content.Intent; |
Mindy Pereira | 559c3b3 | 2012-03-01 13:17:47 -0800 | [diff] [blame] | 25 | import android.net.Uri; |
Vikram Aggarwal | 1ddcf0f | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 26 | import android.os.Bundle; |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 27 | import android.support.v4.widget.DrawerLayout; |
Scott Kennedy | feb5b1e | 2013-05-29 11:28:41 -0700 | [diff] [blame] | 28 | import android.widget.ListView; |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 29 | |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 30 | import com.android.mail.ConversationListContext; |
Vikram Aggarwal | 1ddcf0f | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 31 | import com.android.mail.R; |
Vikram Aggarwal | cd09f5e | 2012-03-09 16:48:56 -0800 | [diff] [blame] | 32 | import com.android.mail.providers.Account; |
Mindy Pereira | 9b87568 | 2012-02-15 18:10:54 -0800 | [diff] [blame] | 33 | import com.android.mail.providers.Conversation; |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 34 | import com.android.mail.providers.Folder; |
Mindy Pereira | fbe4019 | 2012-03-20 10:40:45 -0700 | [diff] [blame] | 35 | import com.android.mail.providers.UIProvider; |
Scott Kennedy | 259df5b | 2013-07-11 13:24:01 -0700 | [diff] [blame] | 36 | import com.android.mail.utils.FolderUri; |
mindyp | c59dd82 | 2012-11-13 10:56:21 -0800 | [diff] [blame] | 37 | import com.android.mail.utils.Utils; |
Mindy Pereira | fbe4019 | 2012-03-20 10:40:45 -0700 | [diff] [blame] | 38 | |
Vikram Aggarwal | a55b36c | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 39 | /** |
| 40 | * Controller for one-pane Mail activity. One Pane is used for phones, where screen real estate is |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 41 | * limited. This controller also does the layout, since the layout is simpler in the one pane case. |
Vikram Aggarwal | a55b36c | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 42 | */ |
| 43 | |
Mindy Pereira | a76e5ae | 2012-03-29 08:23:48 -0700 | [diff] [blame] | 44 | public final class OnePaneController extends AbstractActivityController { |
Vikram Aggarwal | 2bfb5c0 | 2012-09-05 13:21:14 -0700 | [diff] [blame] | 45 | /** Key used to store {@link #mLastConversationListTransactionId} */ |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 46 | private static final String CONVERSATION_LIST_TRANSACTION_KEY = "conversation-list-transaction"; |
Vikram Aggarwal | 2bfb5c0 | 2012-09-05 13:21:14 -0700 | [diff] [blame] | 47 | /** Key used to store {@link #mLastConversationTransactionId}. */ |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 48 | private static final String CONVERSATION_TRANSACTION_KEY = "conversation-transaction"; |
Vikram Aggarwal | 2bfb5c0 | 2012-09-05 13:21:14 -0700 | [diff] [blame] | 49 | /** Key used to store {@link #mConversationListVisible}. */ |
Vikram Aggarwal | 649b9ea | 2012-08-27 12:15:20 -0700 | [diff] [blame] | 50 | private static final String CONVERSATION_LIST_VISIBLE_KEY = "conversation-list-visible"; |
Vikram Aggarwal | 2bfb5c0 | 2012-09-05 13:21:14 -0700 | [diff] [blame] | 51 | /** Key used to store {@link #mConversationListNeverShown}. */ |
Vikram Aggarwal | 649b9ea | 2012-08-27 12:15:20 -0700 | [diff] [blame] | 52 | private static final String CONVERSATION_LIST_NEVER_SHOWN_KEY = "conversation-list-never-shown"; |
Paul Westbrook | 2d50bcd | 2012-04-10 11:53:47 -0700 | [diff] [blame] | 53 | |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 54 | private static final int INVALID_ID = -1; |
Vikram Aggarwal | 2175d0a | 2012-02-17 16:04:23 -0800 | [diff] [blame] | 55 | private boolean mConversationListVisible = false; |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 56 | private int mLastConversationListTransactionId = INVALID_ID; |
| 57 | private int mLastConversationTransactionId = INVALID_ID; |
Vikram Aggarwal | cd09f5e | 2012-03-09 16:48:56 -0800 | [diff] [blame] | 58 | /** Whether a conversation list for this account has ever been shown.*/ |
| 59 | private boolean mConversationListNeverShown = true; |
Rohan Shah | 713156d | 2013-04-04 14:11:01 -0700 | [diff] [blame] | 60 | |
Vikram Aggarwal | a55b36c | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 61 | public OnePaneController(MailActivity activity, ViewMode viewMode) { |
| 62 | super(activity, viewMode); |
Vikram Aggarwal | a55b36c | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 63 | } |
| 64 | |
Vikram Aggarwal | 1ddcf0f | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 65 | @Override |
Andy Huang | 632721e | 2012-04-11 16:57:26 -0700 | [diff] [blame] | 66 | public void onRestoreInstanceState(Bundle inState) { |
| 67 | super.onRestoreInstanceState(inState); |
Vikram Aggarwal | 649b9ea | 2012-08-27 12:15:20 -0700 | [diff] [blame] | 68 | if (inState == null) { |
| 69 | return; |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 70 | } |
Vikram Aggarwal | 649b9ea | 2012-08-27 12:15:20 -0700 | [diff] [blame] | 71 | mLastConversationListTransactionId = |
| 72 | inState.getInt(CONVERSATION_LIST_TRANSACTION_KEY, INVALID_ID); |
| 73 | mLastConversationTransactionId = inState.getInt(CONVERSATION_TRANSACTION_KEY, INVALID_ID); |
| 74 | mConversationListVisible = inState.getBoolean(CONVERSATION_LIST_VISIBLE_KEY); |
| 75 | mConversationListNeverShown = inState.getBoolean(CONVERSATION_LIST_NEVER_SHOWN_KEY); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 76 | } |
| 77 | |
| 78 | @Override |
| 79 | public void onSaveInstanceState(Bundle outState) { |
| 80 | super.onSaveInstanceState(outState); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 81 | outState.putInt(CONVERSATION_LIST_TRANSACTION_KEY, mLastConversationListTransactionId); |
| 82 | outState.putInt(CONVERSATION_TRANSACTION_KEY, mLastConversationTransactionId); |
Vikram Aggarwal | 649b9ea | 2012-08-27 12:15:20 -0700 | [diff] [blame] | 83 | outState.putBoolean(CONVERSATION_LIST_VISIBLE_KEY, mConversationListVisible); |
| 84 | outState.putBoolean(CONVERSATION_LIST_NEVER_SHOWN_KEY, mConversationListNeverShown); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 85 | } |
| 86 | |
| 87 | @Override |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 88 | public void resetActionBarIcon() { |
Rohan Shah | 1dd054f | 2013-04-01 11:23:44 -0700 | [diff] [blame] | 89 | // Calling resetActionBarIcon should never remove the up affordance |
| 90 | // even when waiting for sync (Folder list should still show with one |
| 91 | // account. Currently this method is blank to avoid any changes. |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 92 | } |
| 93 | |
Vikram Aggarwal | 7dd054e | 2012-05-21 14:43:10 -0700 | [diff] [blame] | 94 | /** |
Vikram Aggarwal | 7c7043b | 2012-10-29 17:15:39 -0700 | [diff] [blame] | 95 | * Returns true if the candidate URI is the URI for the default inbox for the given account. |
Vikram Aggarwal | 3e068ba | 2013-03-05 17:21:21 -0800 | [diff] [blame] | 96 | * @param candidate the URI to check |
| 97 | * @param account the account whose default Inbox the candidate might be |
| 98 | * @return true if the candidate is indeed the default inbox for the given account. |
Vikram Aggarwal | 7c7043b | 2012-10-29 17:15:39 -0700 | [diff] [blame] | 99 | */ |
Scott Kennedy | 259df5b | 2013-07-11 13:24:01 -0700 | [diff] [blame] | 100 | private static boolean isDefaultInbox(FolderUri candidate, Account account) { |
Vikram Aggarwal | 3e068ba | 2013-03-05 17:21:21 -0800 | [diff] [blame] | 101 | return (candidate != null && account != null) |
| 102 | && candidate.equals(account.settings.defaultInbox); |
Vikram Aggarwal | 7c7043b | 2012-10-29 17:15:39 -0700 | [diff] [blame] | 103 | } |
| 104 | |
| 105 | /** |
Vikram Aggarwal | 7dd054e | 2012-05-21 14:43:10 -0700 | [diff] [blame] | 106 | * Returns true if the user is currently in the conversation list view, viewing the default |
| 107 | * inbox. |
Vikram Aggarwal | 3e068ba | 2013-03-05 17:21:21 -0800 | [diff] [blame] | 108 | * @return true if user is in conversation list mode, viewing the default inbox. |
Vikram Aggarwal | 7dd054e | 2012-05-21 14:43:10 -0700 | [diff] [blame] | 109 | */ |
Vikram Aggarwal | 2074a05 | 2012-05-30 11:11:25 -0700 | [diff] [blame] | 110 | private static boolean inInbox(final Account account, final ConversationListContext context) { |
| 111 | // If we don't have valid state, then we are not in the inbox. |
Vikram Aggarwal | 3e068ba | 2013-03-05 17:21:21 -0800 | [diff] [blame] | 112 | return !(account == null || context == null || context.folder == null |
| 113 | || account.settings == null) && !ConversationListContext.isSearchResult(context) |
Scott Kennedy | 259df5b | 2013-07-11 13:24:01 -0700 | [diff] [blame] | 114 | && isDefaultInbox(context.folder.folderUri, account); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 115 | } |
| 116 | |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 117 | /** |
| 118 | * On account change, carry out super implementation, load FolderListFragment |
| 119 | * into drawer (to avoid repetitive calls to replaceFragment). |
| 120 | */ |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 121 | @Override |
Vikram Aggarwal | 5fd8afd | 2013-03-13 15:28:47 -0700 | [diff] [blame] | 122 | public void changeAccount(Account account) { |
| 123 | super.changeAccount(account); |
Vikram Aggarwal | cd09f5e | 2012-03-09 16:48:56 -0800 | [diff] [blame] | 124 | mConversationListNeverShown = true; |
Vikram Aggarwal | 23b528f | 2013-03-29 13:55:23 -0700 | [diff] [blame] | 125 | closeDrawerIfOpen(); |
Vikram Aggarwal | cd09f5e | 2012-03-09 16:48:56 -0800 | [diff] [blame] | 126 | } |
| 127 | |
| 128 | @Override |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 129 | public boolean onCreate(Bundle savedInstanceState) { |
Vikram Aggarwal | 1ddcf0f | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 130 | mActivity.setContentView(R.layout.one_pane_activity); |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 131 | mDrawerContainer = (DrawerLayout) mActivity.findViewById(R.id.drawer_container); |
James Lemieux | 10fcd64 | 2014-03-03 13:01:04 -0800 | [diff] [blame] | 132 | final String drawerPulloutTag = mActivity.getString(R.string.drawer_pullout_tag); |
| 133 | mDrawerPullout = mDrawerContainer.findViewWithTag(drawerPulloutTag); |
Andy Huang | 1aced4c | 2013-04-29 11:38:40 -0700 | [diff] [blame] | 134 | mDrawerPullout.setBackgroundResource(R.color.list_background_color); |
Paul Westbrook | 57246a4 | 2013-04-21 09:40:22 -0700 | [diff] [blame] | 135 | |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 136 | // The parent class sets the correct viewmode and starts the application off. |
| 137 | return super.onCreate(savedInstanceState); |
Vikram Aggarwal | 1ddcf0f | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 138 | } |
| 139 | |
Paul Westbrook | 57246a4 | 2013-04-21 09:40:22 -0700 | [diff] [blame] | 140 | @Override |
Vikram Aggarwal | 1ddcf0f | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 141 | protected boolean isConversationListVisible() { |
Vikram Aggarwal | 2175d0a | 2012-02-17 16:04:23 -0800 | [diff] [blame] | 142 | return mConversationListVisible; |
Vikram Aggarwal | 1ddcf0f | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 143 | } |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 144 | |
| 145 | @Override |
| 146 | public void onViewModeChanged(int newMode) { |
| 147 | super.onViewModeChanged(newMode); |
Rohan Shah | eb89afe | 2013-03-14 14:07:33 -0700 | [diff] [blame] | 148 | |
Andy Huang | 632721e | 2012-04-11 16:57:26 -0700 | [diff] [blame] | 149 | // When entering conversation list mode, hide and clean up any currently visible |
| 150 | // conversation. |
Vikram Aggarwal | 49e0e99 | 2012-09-21 13:53:15 -0700 | [diff] [blame] | 151 | if (ViewMode.isListMode(newMode)) { |
Andy Huang | a3ed834 | 2012-08-31 17:29:39 -0700 | [diff] [blame] | 152 | mPagerController.hide(true /* changeVisibility */); |
Andy Huang | 632721e | 2012-04-11 16:57:26 -0700 | [diff] [blame] | 153 | } |
Vikram Aggarwal | 49e0e99 | 2012-09-21 13:53:15 -0700 | [diff] [blame] | 154 | // When we step away from the conversation mode, we don't have a current conversation |
| 155 | // anymore. Let's blank it out so clients calling getCurrentConversation are not misled. |
| 156 | if (!ViewMode.isConversationMode(newMode)) { |
| 157 | setCurrentConversation(null); |
| 158 | } |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 159 | } |
| 160 | |
| 161 | @Override |
Andy Huang | 6214ee4 | 2013-04-02 19:02:11 -0700 | [diff] [blame] | 162 | public String toString() { |
| 163 | final StringBuilder sb = new StringBuilder(super.toString()); |
Andy Huang | 6214ee4 | 2013-04-02 19:02:11 -0700 | [diff] [blame] | 164 | sb.append(" lastConvListTransId="); |
| 165 | sb.append(mLastConversationListTransactionId); |
| 166 | sb.append("}"); |
| 167 | return sb.toString(); |
| 168 | } |
| 169 | |
| 170 | @Override |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 171 | public void showConversationList(ConversationListContext listContext) { |
Vikram Aggarwal | e128fc2 | 2012-04-04 12:33:34 -0700 | [diff] [blame] | 172 | super.showConversationList(listContext); |
| 173 | enableCabMode(); |
Andy Huang | 12b3ee4 | 2013-04-24 22:49:43 -0700 | [diff] [blame] | 174 | mConversationListVisible = true; |
Vikram Aggarwal | ae4ea99 | 2012-08-07 09:56:02 -0700 | [diff] [blame] | 175 | if (ConversationListContext.isSearchResult(listContext)) { |
Mindy Pereira | 68f2e22 | 2012-03-07 10:36:54 -0800 | [diff] [blame] | 176 | mViewMode.enterSearchResultsListMode(); |
| 177 | } else { |
| 178 | mViewMode.enterConversationListMode(); |
| 179 | } |
Vikram Aggarwal | cd09f5e | 2012-03-09 16:48:56 -0800 | [diff] [blame] | 180 | final int transition = mConversationListNeverShown |
| 181 | ? FragmentTransaction.TRANSIT_FRAGMENT_FADE |
Mindy Pereira | 9b87568 | 2012-02-15 18:10:54 -0800 | [diff] [blame] | 182 | : FragmentTransaction.TRANSIT_FRAGMENT_OPEN; |
Vikram Aggarwal | 37a20ca | 2013-06-06 11:19:49 -0700 | [diff] [blame] | 183 | final Fragment conversationListFragment = |
| 184 | ConversationListFragment.newInstance(listContext); |
Paul Westbrook | bf232c3 | 2012-04-18 03:17:41 -0700 | [diff] [blame] | 185 | |
Andy Huang | 6214ee4 | 2013-04-02 19:02:11 -0700 | [diff] [blame] | 186 | if (!inInbox(mAccount, listContext)) { |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 187 | // Maintain fragment transaction history so we can get back to the |
| 188 | // fragment used to launch this list. |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 189 | mLastConversationListTransactionId = replaceFragment(conversationListFragment, |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 190 | transition, TAG_CONVERSATION_LIST, R.id.content_pane); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 191 | } else { |
| 192 | // If going to the inbox, clear the folder list transaction history. |
| 193 | mInbox = listContext.folder; |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 194 | replaceFragment(conversationListFragment, transition, TAG_CONVERSATION_LIST, |
| 195 | R.id.content_pane); |
Andy Huang | 6214ee4 | 2013-04-02 19:02:11 -0700 | [diff] [blame] | 196 | |
Paul Westbrook | 0e3fd9d | 2012-04-20 02:02:23 -0700 | [diff] [blame] | 197 | // If we ever to to the inbox, we want to unset the transation id for any other |
| 198 | // non-inbox folder. |
| 199 | mLastConversationListTransactionId = INVALID_ID; |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 200 | } |
Andy Huang | 08b0a0d | 2013-03-29 16:55:25 -0700 | [diff] [blame] | 201 | |
| 202 | mActivity.getFragmentManager().executePendingTransactions(); |
| 203 | |
Vikram Aggarwal | 7dd054e | 2012-05-21 14:43:10 -0700 | [diff] [blame] | 204 | onConversationVisibilityChanged(false); |
Paul Westbrook | 9f119c7 | 2012-04-24 16:10:59 -0700 | [diff] [blame] | 205 | onConversationListVisibilityChanged(true); |
Vikram Aggarwal | cd09f5e | 2012-03-09 16:48:56 -0800 | [diff] [blame] | 206 | mConversationListNeverShown = false; |
Vikram Aggarwal | d7a12cd | 2012-02-03 09:36:20 -0800 | [diff] [blame] | 207 | } |
| 208 | |
Mindy Pereira | 9b87568 | 2012-02-15 18:10:54 -0800 | [diff] [blame] | 209 | @Override |
Jin Cao | 30c881a | 2014-04-08 14:28:36 -0700 | [diff] [blame] | 210 | protected void showConversation(Conversation conversation) { |
| 211 | super.showConversation(conversation); |
Andy Huang | 12b3ee4 | 2013-04-24 22:49:43 -0700 | [diff] [blame] | 212 | mConversationListVisible = false; |
Vikram Aggarwal | 3d7ca9d | 2012-05-11 14:40:36 -0700 | [diff] [blame] | 213 | if (conversation == null) { |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 214 | transitionBackToConversationListMode(); |
Vikram Aggarwal | 3d7ca9d | 2012-05-11 14:40:36 -0700 | [diff] [blame] | 215 | return; |
| 216 | } |
Vikram Aggarwal | e128fc2 | 2012-04-04 12:33:34 -0700 | [diff] [blame] | 217 | disableCabMode(); |
Vikram Aggarwal | ae4ea99 | 2012-08-07 09:56:02 -0700 | [diff] [blame] | 218 | if (ConversationListContext.isSearchResult(mConvListContext)) { |
Mindy Pereira | 68f2e22 | 2012-03-07 10:36:54 -0800 | [diff] [blame] | 219 | mViewMode.enterSearchResultsConversationMode(); |
| 220 | } else { |
| 221 | mViewMode.enterConversationMode(); |
| 222 | } |
Vikram Aggarwal | 7dd054e | 2012-05-21 14:43:10 -0700 | [diff] [blame] | 223 | final FragmentManager fm = mActivity.getFragmentManager(); |
mindyp | f4fce12 | 2012-09-14 15:55:33 -0700 | [diff] [blame] | 224 | final FragmentTransaction ft = fm.beginTransaction(); |
mindyp | f4fce12 | 2012-09-14 15:55:33 -0700 | [diff] [blame] | 225 | // Switching to conversation view is an incongruous transition: |
| 226 | // we are not replacing a fragment with another fragment as |
| 227 | // usual. Instead, reveal the heretofore inert conversation |
| 228 | // ViewPager and just remove the previously visible fragment |
| 229 | // e.g. conversation list, or possibly label list?). |
Vikram Aggarwal | 7dd054e | 2012-05-21 14:43:10 -0700 | [diff] [blame] | 230 | final Fragment f = fm.findFragmentById(R.id.content_pane); |
Paul Westbrook | deab119 | 2012-09-27 09:38:57 -0700 | [diff] [blame] | 231 | // FragmentManager#findFragmentById can return fragments that are not added to the activity. |
| 232 | // We want to make sure that we don't attempt to remove fragments that are not added to the |
| 233 | // activity, as when the transaction is popped off, the FragmentManager will attempt to |
| 234 | // readd the same fragment twice |
| 235 | if (f != null && f.isAdded()) { |
Vikram Aggarwal | 2b703c6 | 2012-09-18 13:54:15 -0700 | [diff] [blame] | 236 | ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); |
| 237 | ft.remove(f); |
| 238 | ft.commitAllowingStateLoss(); |
Andy Huang | 6214ee4 | 2013-04-02 19:02:11 -0700 | [diff] [blame] | 239 | fm.executePendingTransactions(); |
Andy Huang | 632721e | 2012-04-11 16:57:26 -0700 | [diff] [blame] | 240 | } |
Andy Huang | a3ed834 | 2012-08-31 17:29:39 -0700 | [diff] [blame] | 241 | mPagerController.show(mAccount, mFolder, conversation, true /* changeVisibility */); |
Vikram Aggarwal | 7dd054e | 2012-05-21 14:43:10 -0700 | [diff] [blame] | 242 | onConversationVisibilityChanged(true); |
Paul Westbrook | 9f119c7 | 2012-04-24 16:10:59 -0700 | [diff] [blame] | 243 | onConversationListVisibilityChanged(false); |
Mindy Pereira | 9b87568 | 2012-02-15 18:10:54 -0800 | [diff] [blame] | 244 | } |
| 245 | |
| 246 | @Override |
Paul Westbrook | 2d50bcd | 2012-04-10 11:53:47 -0700 | [diff] [blame] | 247 | public void showWaitForInitialization() { |
| 248 | super.showWaitForInitialization(); |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 249 | replaceFragment(getWaitFragment(), FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_WAIT, |
| 250 | R.id.content_pane); |
Paul Westbrook | 2d50bcd | 2012-04-10 11:53:47 -0700 | [diff] [blame] | 251 | } |
| 252 | |
Vikram Aggarwal | a3f43d4 | 2012-10-25 16:21:30 -0700 | [diff] [blame] | 253 | @Override |
Vikram Aggarwal | dd6a7ce | 2012-10-22 15:45:57 -0700 | [diff] [blame] | 254 | protected void hideWaitForInitialization() { |
Paul Westbrook | 2d50bcd | 2012-04-10 11:53:47 -0700 | [diff] [blame] | 255 | transitionToInbox(); |
Vikram Aggarwal | a3f43d4 | 2012-10-25 16:21:30 -0700 | [diff] [blame] | 256 | super.hideWaitForInitialization(); |
Paul Westbrook | 2d50bcd | 2012-04-10 11:53:47 -0700 | [diff] [blame] | 257 | } |
| 258 | |
| 259 | @Override |
Scott Kennedy | 2b9d80e | 2013-07-30 23:03:45 -0700 | [diff] [blame] | 260 | public boolean doesActionChangeConversationListVisibility(final int action) { |
| 261 | if (action == R.id.archive |
| 262 | || action == R.id.remove_folder |
| 263 | || action == R.id.delete |
| 264 | || action == R.id.discard_drafts |
| 265 | || action == R.id.mark_important |
| 266 | || action == R.id.mark_not_important |
| 267 | || action == R.id.mute |
| 268 | || action == R.id.report_spam |
| 269 | || action == R.id.mark_not_spam |
| 270 | || action == R.id.report_phishing |
| 271 | || action == R.id.refresh |
Andrew Sapperstein | 6c570db | 2013-08-06 17:21:36 -0700 | [diff] [blame] | 272 | || action == R.id.change_folders) { |
Scott Kennedy | 2b9d80e | 2013-07-30 23:03:45 -0700 | [diff] [blame] | 273 | return false; |
| 274 | } else { |
| 275 | return true; |
mindyp | 17a8e78 | 2012-11-29 14:56:17 -0800 | [diff] [blame] | 276 | } |
| 277 | } |
| 278 | |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 279 | /** |
Vikram Aggarwal | 6902dcf | 2012-04-11 08:57:42 -0700 | [diff] [blame] | 280 | * Replace the content_pane with the fragment specified here. The tag is specified so that |
| 281 | * the {@link ActivityController} can look up the fragments through the |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 282 | * {@link android.app.FragmentManager}. |
Vikram Aggarwal | 3e068ba | 2013-03-05 17:21:21 -0800 | [diff] [blame] | 283 | * @param fragment the new fragment to put |
| 284 | * @param transition the transition to show |
| 285 | * @param tag a tag for the fragment manager. |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 286 | * @param anchor ID of view to replace fragment in |
Vikram Aggarwal | 6902dcf | 2012-04-11 08:57:42 -0700 | [diff] [blame] | 287 | * @return transaction ID returned when the transition is committed. |
| 288 | */ |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 289 | private int replaceFragment(Fragment fragment, int transition, String tag, int anchor) { |
Andy Huang | 6214ee4 | 2013-04-02 19:02:11 -0700 | [diff] [blame] | 290 | final FragmentManager fm = mActivity.getFragmentManager(); |
| 291 | FragmentTransaction fragmentTransaction = fm.beginTransaction(); |
Mindy Pereira | 9b87568 | 2012-02-15 18:10:54 -0800 | [diff] [blame] | 292 | fragmentTransaction.setTransition(transition); |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 293 | fragmentTransaction.replace(anchor, fragment, tag); |
Andy Huang | 6214ee4 | 2013-04-02 19:02:11 -0700 | [diff] [blame] | 294 | final int id = fragmentTransaction.commitAllowingStateLoss(); |
| 295 | fm.executePendingTransactions(); |
| 296 | return id; |
Mindy Pereira | 9b87568 | 2012-02-15 18:10:54 -0800 | [diff] [blame] | 297 | } |
Mindy Pereira | 01668eb | 2012-02-15 19:19:05 -0800 | [diff] [blame] | 298 | |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 299 | /** |
| 300 | * Back works as follows: |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 301 | * 1) If the drawer is pulled out (Or mid-drag), close it - handled. |
| 302 | * 2) If the user is in the folder list view, go back |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 303 | * to the account default inbox. |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 304 | * 3) If the user is in a conversation list |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 305 | * that is not the inbox AND: |
| 306 | * a) they got there by going through the folder |
| 307 | * list view, go back to the folder list view. |
| 308 | * b) they got there by using some other means (account dropdown), go back to the inbox. |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 309 | * 4) If the user is in a conversation, go back to the conversation list they were last in. |
| 310 | * 5) If the user is in the conversation list for the default account inbox, |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 311 | * back exits the app. |
| 312 | */ |
Mindy Pereira | 01668eb | 2012-02-15 19:19:05 -0800 | [diff] [blame] | 313 | @Override |
Andy Huang | c1fb9a9 | 2013-02-11 13:09:12 -0800 | [diff] [blame] | 314 | public boolean handleBackPress() { |
Vikram Aggarwal | 2074a05 | 2012-05-30 11:11:25 -0700 | [diff] [blame] | 315 | final int mode = mViewMode.getMode(); |
Rohan Shah | 8e65c6d | 2013-03-07 16:47:25 -0800 | [diff] [blame] | 316 | |
Scott Kennedy | aded578 | 2013-07-16 14:21:53 -0700 | [diff] [blame] | 317 | if (mode == ViewMode.SEARCH_RESULTS_LIST) { |
Mindy Pereira | 68f2e22 | 2012-03-07 10:36:54 -0800 | [diff] [blame] | 318 | mActivity.finish(); |
Mindy Pereira | b466bcf | 2012-06-14 15:52:26 -0700 | [diff] [blame] | 319 | } else if (mViewMode.isListMode() && !inInbox(mAccount, mConvListContext)) { |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 320 | navigateUpFolderHierarchy(); |
Andrew Sapperstein | 6c570db | 2013-08-06 17:21:36 -0700 | [diff] [blame] | 321 | } else if (mViewMode.isConversationMode() || mViewMode.isAdMode()) { |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 322 | transitionBackToConversationListMode(); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 323 | } else { |
| 324 | mActivity.finish(); |
Mindy Pereira | 01668eb | 2012-02-15 19:19:05 -0800 | [diff] [blame] | 325 | } |
Andrew Sapperstein | f8ccdcf | 2013-08-08 19:30:38 -0700 | [diff] [blame] | 326 | mToastBar.hide(false, false /* actionClicked */); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 327 | return true; |
Mindy Pereira | 01668eb | 2012-02-15 19:19:05 -0800 | [diff] [blame] | 328 | } |
Mindy Pereira | f5acda4 | 2012-02-15 20:13:59 -0800 | [diff] [blame] | 329 | |
Vikram Aggarwal | 649b9ea | 2012-08-27 12:15:20 -0700 | [diff] [blame] | 330 | /** |
| 331 | * Switch to the Inbox by creating a new conversation list context that loads the inbox. |
| 332 | */ |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 333 | private void transitionToInbox() { |
Vikram Aggarwal | 7c7043b | 2012-10-29 17:15:39 -0700 | [diff] [blame] | 334 | // The inbox could have changed, in which case we should load it again. |
Scott Kennedy | 259df5b | 2013-07-11 13:24:01 -0700 | [diff] [blame] | 335 | if (mInbox == null || !isDefaultInbox(mInbox.folderUri, mAccount)) { |
Mindy Pereira | ab48636 | 2012-03-21 18:18:53 -0700 | [diff] [blame] | 336 | loadAccountInbox(); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 337 | } else { |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 338 | onFolderChanged(mInbox, false /* force */); |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 339 | } |
| 340 | } |
| 341 | |
Mindy Pereira | 118b3f6 | 2012-03-21 10:13:20 -0700 | [diff] [blame] | 342 | @Override |
Mindy Pereira | 505df5f | 2012-06-19 17:57:17 -0700 | [diff] [blame] | 343 | public void onFolderSelected(Folder folder) { |
Andy Huang | e764cfd | 2014-02-26 11:55:03 -0800 | [diff] [blame] | 344 | if (mViewMode.isSearchMode()) { |
Martin Hibdon | 371a71c | 2014-02-19 13:55:28 -0800 | [diff] [blame] | 345 | // We are in an activity on top of the main navigation activity. |
| 346 | // We need to return to it with a result code that indicates it should navigate to |
| 347 | // a different folder. |
| 348 | final Intent intent = new Intent(); |
| 349 | intent.putExtra(AbstractActivityController.EXTRA_FOLDER, folder); |
| 350 | mActivity.setResult(Activity.RESULT_OK, intent); |
| 351 | mActivity.finish(); |
| 352 | return; |
| 353 | } |
Vikram Aggarwal | fcde31a | 2013-06-07 16:32:03 -0700 | [diff] [blame] | 354 | setHierarchyFolder(folder); |
| 355 | super.onFolderSelected(folder); |
Mindy Pereira | 118b3f6 | 2012-03-21 10:13:20 -0700 | [diff] [blame] | 356 | } |
| 357 | |
Mindy Pereira | 3982e23 | 2012-02-29 15:00:34 -0800 | [diff] [blame] | 358 | /** |
| 359 | * Up works as follows: |
| 360 | * 1) If the user is in a conversation list that is not the default account inbox, |
| 361 | * a conversation, or the folder list, up follows the rules of back. |
| 362 | * 2) If the user is in search results, up exits search |
| 363 | * mode and returns the user to whatever view they were in when they began search. |
| 364 | * 3) If the user is in the inbox, there is no up. |
| 365 | */ |
Mindy Pereira | f5acda4 | 2012-02-15 20:13:59 -0800 | [diff] [blame] | 366 | @Override |
Andy Huang | c1fb9a9 | 2013-02-11 13:09:12 -0800 | [diff] [blame] | 367 | public boolean handleUpPress() { |
Vikram Aggarwal | 9da85df | 2012-05-09 15:34:23 -0700 | [diff] [blame] | 368 | final int mode = mViewMode.getMode(); |
Mindy Pereira | 68f2e22 | 2012-03-07 10:36:54 -0800 | [diff] [blame] | 369 | if (mode == ViewMode.SEARCH_RESULTS_LIST) { |
| 370 | mActivity.finish(); |
Vikram Aggarwal | 7f65718 | 2013-03-20 12:59:56 -0700 | [diff] [blame] | 371 | // Not needed, the activity is going away anyway. |
Tony Mantler | d9eaca8 | 2013-08-05 11:42:29 -0700 | [diff] [blame] | 372 | } else if (mode == ViewMode.CONVERSATION_LIST |
Rohan Shah | 1dd054f | 2013-04-01 11:23:44 -0700 | [diff] [blame] | 373 | || mode == ViewMode.WAITING_FOR_ACCOUNT_INITIALIZATION) { |
Scott Kennedy | 0eaef6f | 2013-07-10 17:33:57 -0700 | [diff] [blame] | 374 | final boolean isTopLevel = (mFolder == null) || (mFolder.parent == Uri.EMPTY); |
| 375 | |
| 376 | if (isTopLevel) { |
| 377 | // Show the drawer. |
Tony Mantler | d9eaca8 | 2013-08-05 11:42:29 -0700 | [diff] [blame] | 378 | toggleDrawerState(); |
Scott Kennedy | 0eaef6f | 2013-07-10 17:33:57 -0700 | [diff] [blame] | 379 | } else { |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 380 | navigateUpFolderHierarchy(); |
Scott Kennedy | 0eaef6f | 2013-07-10 17:33:57 -0700 | [diff] [blame] | 381 | } |
Andrew Sapperstein | 6c570db | 2013-08-06 17:21:36 -0700 | [diff] [blame] | 382 | } else if (mode == ViewMode.CONVERSATION || mode == ViewMode.SEARCH_RESULTS_CONVERSATION |
| 383 | || mode == ViewMode.AD) { |
Mindy Pereira | f5acda4 | 2012-02-15 20:13:59 -0800 | [diff] [blame] | 384 | // Same as go back. |
Andy Huang | c1fb9a9 | 2013-02-11 13:09:12 -0800 | [diff] [blame] | 385 | handleBackPress(); |
Mindy Pereira | f5acda4 | 2012-02-15 20:13:59 -0800 | [diff] [blame] | 386 | } |
| 387 | return true; |
| 388 | } |
| 389 | |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 390 | private void transitionBackToConversationListMode() { |
Vikram Aggarwal | 9da85df | 2012-05-09 15:34:23 -0700 | [diff] [blame] | 391 | final int mode = mViewMode.getMode(); |
Vikram Aggarwal | 90d89e2 | 2012-04-27 10:38:25 -0700 | [diff] [blame] | 392 | enableCabMode(); |
Andy Huang | 12b3ee4 | 2013-04-24 22:49:43 -0700 | [diff] [blame] | 393 | mConversationListVisible = true; |
Mindy Pereira | 68f2e22 | 2012-03-07 10:36:54 -0800 | [diff] [blame] | 394 | if (mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { |
| 395 | mViewMode.enterSearchResultsListMode(); |
| 396 | } else { |
| 397 | mViewMode.enterConversationListMode(); |
| 398 | } |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 399 | |
| 400 | final Folder folder = mFolder != null ? mFolder : mInbox; |
| 401 | onFolderChanged(folder, true /* force */); |
| 402 | |
Vikram Aggarwal | 7dd054e | 2012-05-21 14:43:10 -0700 | [diff] [blame] | 403 | onConversationVisibilityChanged(false); |
Paul Westbrook | 9f119c7 | 2012-04-24 16:10:59 -0700 | [diff] [blame] | 404 | onConversationListVisibilityChanged(true); |
Mindy Pereira | f5acda4 | 2012-02-15 20:13:59 -0800 | [diff] [blame] | 405 | } |
Mindy Pereira | b849dfb | 2012-03-07 18:13:15 -0800 | [diff] [blame] | 406 | |
| 407 | @Override |
| 408 | public boolean shouldShowFirstConversation() { |
| 409 | return false; |
| 410 | } |
Mindy Pereira | fbe4019 | 2012-03-20 10:40:45 -0700 | [diff] [blame] | 411 | |
| 412 | @Override |
Mindy Pereira | d3367499 | 2012-06-25 16:26:30 -0700 | [diff] [blame] | 413 | public void onUndoAvailable(ToastBarOperation op) { |
Mindy Pereira | 0963ef8 | 2012-04-10 11:43:01 -0700 | [diff] [blame] | 414 | if (op != null && mAccount.supportsCapability(UIProvider.AccountCapabilities.UNDO)) { |
Vikram Aggarwal | 7f602f7 | 2012-04-30 16:04:06 -0700 | [diff] [blame] | 415 | final int mode = mViewMode.getMode(); |
Mindy Pereira | dbab8fa | 2012-06-29 11:14:29 -0700 | [diff] [blame] | 416 | final ConversationListFragment convList = getConversationListFragment(); |
Mindy Pereira | 0963ef8 | 2012-04-10 11:43:01 -0700 | [diff] [blame] | 417 | switch (mode) { |
Mindy Pereira | b466bcf | 2012-06-14 15:52:26 -0700 | [diff] [blame] | 418 | case ViewMode.SEARCH_RESULTS_CONVERSATION: |
Mindy Pereira | 0963ef8 | 2012-04-10 11:43:01 -0700 | [diff] [blame] | 419 | case ViewMode.CONVERSATION: |
Andrew Sapperstein | f8ccdcf | 2013-08-08 19:30:38 -0700 | [diff] [blame] | 420 | mToastBar.show(getUndoClickedListener( |
| 421 | convList != null ? convList.getAnimatedAdapter() : null), |
Andrew Sapperstein | c2c9dc1 | 2012-07-02 18:17:32 -0700 | [diff] [blame] | 422 | 0, |
mindyp | c59dd82 | 2012-11-13 10:56:21 -0800 | [diff] [blame] | 423 | Utils.convertHtmlToPlainText |
Scott Kennedy | 6a3d5ce | 2013-03-15 17:33:14 -0700 | [diff] [blame] | 424 | (op.getDescription(mActivity.getActivityContext())), |
Andrew Sapperstein | c2c9dc1 | 2012-07-02 18:17:32 -0700 | [diff] [blame] | 425 | true, /* showActionIcon */ |
| 426 | R.string.undo, |
Mindy Pereira | d3367499 | 2012-06-25 16:26:30 -0700 | [diff] [blame] | 427 | true, /* replaceVisibleToast */ |
| 428 | op); |
Mindy Pereira | 0963ef8 | 2012-04-10 11:43:01 -0700 | [diff] [blame] | 429 | break; |
Mindy Pereira | b466bcf | 2012-06-14 15:52:26 -0700 | [diff] [blame] | 430 | case ViewMode.SEARCH_RESULTS_LIST: |
Mindy Pereira | 0963ef8 | 2012-04-10 11:43:01 -0700 | [diff] [blame] | 431 | case ViewMode.CONVERSATION_LIST: |
Vikram Aggarwal | 6902dcf | 2012-04-11 08:57:42 -0700 | [diff] [blame] | 432 | if (convList != null) { |
Andrew Sapperstein | c2c9dc1 | 2012-07-02 18:17:32 -0700 | [diff] [blame] | 433 | mToastBar.show( |
| 434 | getUndoClickedListener(convList.getAnimatedAdapter()), |
| 435 | 0, |
mindyp | c59dd82 | 2012-11-13 10:56:21 -0800 | [diff] [blame] | 436 | Utils.convertHtmlToPlainText |
Scott Kennedy | 6a3d5ce | 2013-03-15 17:33:14 -0700 | [diff] [blame] | 437 | (op.getDescription(mActivity.getActivityContext())), |
Andrew Sapperstein | c2c9dc1 | 2012-07-02 18:17:32 -0700 | [diff] [blame] | 438 | true, /* showActionIcon */ |
| 439 | R.string.undo, |
Mindy Pereira | d3367499 | 2012-06-25 16:26:30 -0700 | [diff] [blame] | 440 | true, /* replaceVisibleToast */ |
| 441 | op); |
Mindy Pereira | 4765c5c | 2012-07-19 11:58:22 -0700 | [diff] [blame] | 442 | } else { |
| 443 | mActivity.setPendingToastOperation(op); |
Vikram Aggarwal | 6902dcf | 2012-04-11 08:57:42 -0700 | [diff] [blame] | 444 | } |
Mindy Pereira | 0963ef8 | 2012-04-10 11:43:01 -0700 | [diff] [blame] | 445 | break; |
| 446 | } |
| 447 | } |
| 448 | } |
Andrew Sapperstein | c2c9dc1 | 2012-07-02 18:17:32 -0700 | [diff] [blame] | 449 | |
| 450 | @Override |
Mark Wei | d243d45 | 2012-10-31 16:24:08 -0700 | [diff] [blame] | 451 | protected void hideOrRepositionToastBar(boolean animated) { |
Andrew Sapperstein | f8ccdcf | 2013-08-08 19:30:38 -0700 | [diff] [blame] | 452 | mToastBar.hide(animated, false /* actionClicked */); |
Mark Wei | d243d45 | 2012-10-31 16:24:08 -0700 | [diff] [blame] | 453 | } |
| 454 | |
| 455 | @Override |
Andrew Sapperstein | 9d7519d | 2012-07-16 14:03:53 -0700 | [diff] [blame] | 456 | public void onError(final Folder folder, boolean replaceVisibleToast) { |
Andrew Sapperstein | c2c9dc1 | 2012-07-02 18:17:32 -0700 | [diff] [blame] | 457 | final int mode = mViewMode.getMode(); |
| 458 | switch (mode) { |
| 459 | case ViewMode.SEARCH_RESULTS_LIST: |
| 460 | case ViewMode.CONVERSATION_LIST: |
Andrew Sapperstein | 9d7519d | 2012-07-16 14:03:53 -0700 | [diff] [blame] | 461 | showErrorToast(folder, replaceVisibleToast); |
Andrew Sapperstein | c2c9dc1 | 2012-07-02 18:17:32 -0700 | [diff] [blame] | 462 | break; |
| 463 | default: |
| 464 | break; |
| 465 | } |
| 466 | } |
Paul Westbrook | 30745b6 | 2012-08-19 14:10:32 -0700 | [diff] [blame] | 467 | |
Paul Westbrook | 8c887ef | 2013-04-24 00:29:28 -0700 | [diff] [blame] | 468 | @Override |
| 469 | public boolean isDrawerEnabled() { |
| 470 | // The drawer is enabled for one pane mode |
| 471 | return true; |
| 472 | } |
Scott Kennedy | feb5b1e | 2013-05-29 11:28:41 -0700 | [diff] [blame] | 473 | |
| 474 | @Override |
| 475 | public int getFolderListViewChoiceMode() { |
| 476 | // By default, we do not want to allow any item to be selected in the folder list |
| 477 | return ListView.CHOICE_MODE_NONE; |
| 478 | } |
Scott Kennedy | 103319a | 2013-07-26 13:35:35 -0700 | [diff] [blame] | 479 | |
| 480 | @Override |
Scott Kennedy | e0d01fb | 2013-08-19 19:07:54 -0700 | [diff] [blame] | 481 | public void launchFragment(final Fragment fragment, final int selectPosition) { |
Alice Yang | ebeef1b | 2013-09-04 06:41:10 +0000 | [diff] [blame] | 482 | replaceFragment(fragment, FragmentTransaction.TRANSIT_FRAGMENT_OPEN, |
Scott Kennedy | 103319a | 2013-07-26 13:35:35 -0700 | [diff] [blame] | 483 | TAG_CUSTOM_FRAGMENT, R.id.content_pane); |
| 484 | } |
Vikram Aggarwal | a55b36c | 2012-01-13 11:45:02 -0800 | [diff] [blame] | 485 | } |