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; 258e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shahimport android.support.v4.widget.DrawerLayout; 26feb5b1ef0c9489c1ea727177f8bd423250b64990Scott Kennedyimport android.widget.ListView; 278e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah 28d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwalimport com.android.mail.ConversationListContext; 291ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwalimport com.android.mail.R; 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.UIProvider; 34259df5b9e11908c8ef7c91483924891dd96b3c27Scott Kennedyimport com.android.mail.utils.FolderUri; 35c59dd8270215f97d39697dae9e69976bcfe3642bmindypimport com.android.mail.utils.Utils; 36fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 37a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal/** 38a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * Controller for one-pane Mail activity. One Pane is used for phones, where screen real estate is 39d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal * limited. This controller also does the layout, since the layout is simpler in the one pane case. 40a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */ 41a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 42a76e5aeff4a54ec70661de35be4f3ecb9d1d2fe2Mindy Pereirapublic final class OnePaneController extends AbstractActivityController { 432bfb5c0fa1cfe7f25c121d6435dc1a04439f7bacVikram Aggarwal /** Key used to store {@link #mLastConversationListTransactionId} */ 443982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String CONVERSATION_LIST_TRANSACTION_KEY = "conversation-list-transaction"; 452bfb5c0fa1cfe7f25c121d6435dc1a04439f7bacVikram Aggarwal /** Key used to store {@link #mLastConversationTransactionId}. */ 463982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private static final String CONVERSATION_TRANSACTION_KEY = "conversation-transaction"; 472bfb5c0fa1cfe7f25c121d6435dc1a04439f7bacVikram Aggarwal /** Key used to store {@link #mConversationListVisible}. */ 48649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal private static final String CONVERSATION_LIST_VISIBLE_KEY = "conversation-list-visible"; 492bfb5c0fa1cfe7f25c121d6435dc1a04439f7bacVikram Aggarwal /** Key used to store {@link #mConversationListNeverShown}. */ 50649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal private static final String CONVERSATION_LIST_NEVER_SHOWN_KEY = "conversation-list-never-shown"; 512d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 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; 56cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal /** Whether a conversation list for this account has ever been shown.*/ 57cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal private boolean mConversationListNeverShown = true; 58713156d695326e3d5a1d0726ea1ec0d1d490bd30Rohan Shah 59a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal public OnePaneController(MailActivity activity, ViewMode viewMode) { 60a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal super(activity, viewMode); 61a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal } 62a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal 631ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal @Override 64632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang public void onRestoreInstanceState(Bundle inState) { 65632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang super.onRestoreInstanceState(inState); 66649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal if (inState == null) { 67649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal return; 683982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 69649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal mLastConversationListTransactionId = 70649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal inState.getInt(CONVERSATION_LIST_TRANSACTION_KEY, INVALID_ID); 71649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal mLastConversationTransactionId = inState.getInt(CONVERSATION_TRANSACTION_KEY, INVALID_ID); 72649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal mConversationListVisible = inState.getBoolean(CONVERSATION_LIST_VISIBLE_KEY); 73649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal mConversationListNeverShown = inState.getBoolean(CONVERSATION_LIST_NEVER_SHOWN_KEY); 743982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 753982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 763982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 773982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira public void onSaveInstanceState(Bundle outState) { 783982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira super.onSaveInstanceState(outState); 793982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_LIST_TRANSACTION_KEY, mLastConversationListTransactionId); 803982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira outState.putInt(CONVERSATION_TRANSACTION_KEY, mLastConversationTransactionId); 81649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal outState.putBoolean(CONVERSATION_LIST_VISIBLE_KEY, mConversationListVisible); 82649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal outState.putBoolean(CONVERSATION_LIST_NEVER_SHOWN_KEY, mConversationListNeverShown); 833982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 843982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira @Override 86d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public void resetActionBarIcon() { 871dd054f4e5581b69a52936c9d257fa91cb6daee7Rohan Shah // Calling resetActionBarIcon should never remove the up affordance 881dd054f4e5581b69a52936c9d257fa91cb6daee7Rohan Shah // even when waiting for sync (Folder list should still show with one 891dd054f4e5581b69a52936c9d257fa91cb6daee7Rohan Shah // account. Currently this method is blank to avoid any changes. 90d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 91d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 927dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal /** 937c7043b2b546bb638ef1ca69c978ee8d3f41debbVikram Aggarwal * Returns true if the candidate URI is the URI for the default inbox for the given account. 943e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal * @param candidate the URI to check 953e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal * @param account the account whose default Inbox the candidate might be 963e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal * @return true if the candidate is indeed the default inbox for the given account. 977c7043b2b546bb638ef1ca69c978ee8d3f41debbVikram Aggarwal */ 98259df5b9e11908c8ef7c91483924891dd96b3c27Scott Kennedy private static boolean isDefaultInbox(FolderUri candidate, Account account) { 993e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal return (candidate != null && account != null) 1003e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal && candidate.equals(account.settings.defaultInbox); 1017c7043b2b546bb638ef1ca69c978ee8d3f41debbVikram Aggarwal } 1027c7043b2b546bb638ef1ca69c978ee8d3f41debbVikram Aggarwal 1037c7043b2b546bb638ef1ca69c978ee8d3f41debbVikram Aggarwal /** 1047dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal * Returns true if the user is currently in the conversation list view, viewing the default 1057dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal * inbox. 1063e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal * @return true if user is in conversation list mode, viewing the default inbox. 1077dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal */ 1082074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal private static boolean inInbox(final Account account, final ConversationListContext context) { 1092074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal // If we don't have valid state, then we are not in the inbox. 1103e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal return !(account == null || context == null || context.folder == null 1113e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal || account.settings == null) && !ConversationListContext.isSearchResult(context) 112259df5b9e11908c8ef7c91483924891dd96b3c27Scott Kennedy && isDefaultInbox(context.folder.folderUri, account); 1133982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 1143982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 1158e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah /** 1168e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah * On account change, carry out super implementation, load FolderListFragment 1178e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah * into drawer (to avoid repetitive calls to replaceFragment). 1188e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah */ 119d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 1205fd8afd5c1b40580c069a5a97039ca0601208216Vikram Aggarwal public void changeAccount(Account account) { 1215fd8afd5c1b40580c069a5a97039ca0601208216Vikram Aggarwal super.changeAccount(account); 122cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal mConversationListNeverShown = true; 12323b528f182f14ef7ec1f1a4eb8d8ee9b8f04a2f2Vikram Aggarwal closeDrawerIfOpen(); 124cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal } 125cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal 126cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal @Override 127d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal public boolean onCreate(Bundle savedInstanceState) { 1281ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal mActivity.setContentView(R.layout.one_pane_activity); 1298e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah mDrawerContainer = (DrawerLayout) mActivity.findViewById(R.id.drawer_container); 13012b3ee458e04ac7e0b69302e671d10b24a5c98cfAndy Huang mDrawerPullout = mDrawerContainer.findViewById(R.id.drawer_pullout); 1311aced4cbbb00618e6e1eb34438b5769ef5180e69Andy Huang mDrawerPullout.setBackgroundResource(R.color.list_background_color); 13257246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook 133d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal // The parent class sets the correct viewmode and starts the application off. 134d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal return super.onCreate(savedInstanceState); 1351ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal } 1361ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal 13757246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook @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); 145eb89afee9bcdacaf82dfd9033ae752fca5571ac3Rohan Shah 146632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // When entering conversation list mode, hide and clean up any currently visible 147632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang // conversation. 14849e0e991fe8880852b936a0f8d7d57c5b36f2154Vikram Aggarwal if (ViewMode.isListMode(newMode)) { 149a3ed834c959ece3453c1b34953fabecb3b19c424Andy Huang mPagerController.hide(true /* changeVisibility */); 150632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang } 15149e0e991fe8880852b936a0f8d7d57c5b36f2154Vikram Aggarwal // When we step away from the conversation mode, we don't have a current conversation 15249e0e991fe8880852b936a0f8d7d57c5b36f2154Vikram Aggarwal // anymore. Let's blank it out so clients calling getCurrentConversation are not misled. 15349e0e991fe8880852b936a0f8d7d57c5b36f2154Vikram Aggarwal if (!ViewMode.isConversationMode(newMode)) { 15449e0e991fe8880852b936a0f8d7d57c5b36f2154Vikram Aggarwal setCurrentConversation(null); 15549e0e991fe8880852b936a0f8d7d57c5b36f2154Vikram Aggarwal } 156d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 157d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal 158d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal @Override 1596214ee405453b79f08859025fee5ed361d5499feAndy Huang public String toString() { 1606214ee405453b79f08859025fee5ed361d5499feAndy Huang final StringBuilder sb = new StringBuilder(super.toString()); 1616214ee405453b79f08859025fee5ed361d5499feAndy Huang sb.append(" lastConvListTransId="); 1626214ee405453b79f08859025fee5ed361d5499feAndy Huang sb.append(mLastConversationListTransactionId); 1636214ee405453b79f08859025fee5ed361d5499feAndy Huang sb.append("}"); 1646214ee405453b79f08859025fee5ed361d5499feAndy Huang return sb.toString(); 1656214ee405453b79f08859025fee5ed361d5499feAndy Huang } 1666214ee405453b79f08859025fee5ed361d5499feAndy Huang 1676214ee405453b79f08859025fee5ed361d5499feAndy Huang @Override 1689b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira public void showConversationList(ConversationListContext listContext) { 169e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal super.showConversationList(listContext); 170e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal enableCabMode(); 17112b3ee458e04ac7e0b69302e671d10b24a5c98cfAndy Huang mConversationListVisible = true; 172ae4ea997d3d3f3c8c11fc5a3e7f9d49f82b4e2e7Vikram Aggarwal if (ConversationListContext.isSearchResult(listContext)) { 17368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 17468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 17568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 17668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 177cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal final int transition = mConversationListNeverShown 178cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal ? FragmentTransaction.TRANSIT_FRAGMENT_FADE 1799b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira : FragmentTransaction.TRANSIT_FRAGMENT_OPEN; 18037a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal final Fragment conversationListFragment = 18137a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal ConversationListFragment.newInstance(listContext); 182bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook 1836214ee405453b79f08859025fee5ed361d5499feAndy Huang if (!inInbox(mAccount, listContext)) { 1843982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // Maintain fragment transaction history so we can get back to the 1853982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // fragment used to launch this list. 186ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang mLastConversationListTransactionId = replaceFragment(conversationListFragment, 1878e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah transition, TAG_CONVERSATION_LIST, R.id.content_pane); 1883982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 1893982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira // If going to the inbox, clear the folder list transaction history. 1903982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mInbox = listContext.folder; 191ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang replaceFragment(conversationListFragment, transition, TAG_CONVERSATION_LIST, 192ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang R.id.content_pane); 1936214ee405453b79f08859025fee5ed361d5499feAndy Huang 1940e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook // If we ever to to the inbox, we want to unset the transation id for any other 1950e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook // non-inbox folder. 1960e3fd9d61bc18ad9f828bb3c4dd24fc851f11df5Paul Westbrook mLastConversationListTransactionId = INVALID_ID; 1973982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 19808b0a0dc9e77697c58f39ae9c49b3b884af29c71Andy Huang 19908b0a0dc9e77697c58f39ae9c49b3b884af29c71Andy Huang mActivity.getFragmentManager().executePendingTransactions(); 20008b0a0dc9e77697c58f39ae9c49b3b884af29c71Andy Huang 2017dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(false); 2029f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(true); 203cd09f5e9bf55e6f4310e8dc9408132b9c88e87c3Vikram Aggarwal mConversationListNeverShown = false; 20428d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira } 20528d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira 20628d5f72e0ad0db75b6243ee8125bfe3aadbdcb85Mindy Pereira @Override 2071ee96b2b100546b5b69ad42c5bc3755a4293d1a3Andy Huang protected void showConversation(Conversation conversation, boolean inLoaderCallbacks) { 2081ee96b2b100546b5b69ad42c5bc3755a4293d1a3Andy Huang super.showConversation(conversation, inLoaderCallbacks); 20912b3ee458e04ac7e0b69302e671d10b24a5c98cfAndy Huang mConversationListVisible = false; 2103d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal if (conversation == null) { 211ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang transitionBackToConversationListMode(); 2123d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal return; 2133d7ca9d2aefd20dc115f20532c1e19fdb60f7d68Vikram Aggarwal } 214e128fc21fab03f6d66c656efeee2155fab449a7fVikram Aggarwal disableCabMode(); 215ae4ea997d3d3f3c8c11fc5a3e7f9d49f82b4e2e7Vikram Aggarwal if (ConversationListContext.isSearchResult(mConvListContext)) { 21668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsConversationMode(); 21768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 21868f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationMode(); 21968f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 2207dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal final FragmentManager fm = mActivity.getFragmentManager(); 221f4fce1227d8b49f45e6569f1590565f2df9e8d6emindyp final FragmentTransaction ft = fm.beginTransaction(); 222f4fce1227d8b49f45e6569f1590565f2df9e8d6emindyp // Switching to conversation view is an incongruous transition: 223f4fce1227d8b49f45e6569f1590565f2df9e8d6emindyp // we are not replacing a fragment with another fragment as 224f4fce1227d8b49f45e6569f1590565f2df9e8d6emindyp // usual. Instead, reveal the heretofore inert conversation 225f4fce1227d8b49f45e6569f1590565f2df9e8d6emindyp // ViewPager and just remove the previously visible fragment 226f4fce1227d8b49f45e6569f1590565f2df9e8d6emindyp // e.g. conversation list, or possibly label list?). 2277dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal final Fragment f = fm.findFragmentById(R.id.content_pane); 228deab11995a1ebb83b24bf567508440088ec943bfPaul Westbrook // FragmentManager#findFragmentById can return fragments that are not added to the activity. 229deab11995a1ebb83b24bf567508440088ec943bfPaul Westbrook // We want to make sure that we don't attempt to remove fragments that are not added to the 230deab11995a1ebb83b24bf567508440088ec943bfPaul Westbrook // activity, as when the transaction is popped off, the FragmentManager will attempt to 231deab11995a1ebb83b24bf567508440088ec943bfPaul Westbrook // readd the same fragment twice 232deab11995a1ebb83b24bf567508440088ec943bfPaul Westbrook if (f != null && f.isAdded()) { 2332b703c6c71a369485efc8ade26d449d25669ceecVikram Aggarwal ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 2342b703c6c71a369485efc8ade26d449d25669ceecVikram Aggarwal ft.remove(f); 2352b703c6c71a369485efc8ade26d449d25669ceecVikram Aggarwal ft.commitAllowingStateLoss(); 2366214ee405453b79f08859025fee5ed361d5499feAndy Huang fm.executePendingTransactions(); 237632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang } 238a3ed834c959ece3453c1b34953fabecb3b19c424Andy Huang mPagerController.show(mAccount, mFolder, conversation, true /* changeVisibility */); 2397dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(true); 2409f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(false); 2419b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira } 2429b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira 2439b87568c9e9f1c32a9672b315229866a58a1e757Mindy Pereira @Override 2442d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook public void showWaitForInitialization() { 2452d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook super.showWaitForInitialization(); 2468e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah replaceFragment(getWaitFragment(), FragmentTransaction.TRANSIT_FRAGMENT_OPEN, TAG_WAIT, 2478e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah R.id.content_pane); 2482d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook } 2492d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 250a3f43d4c2423ab03bdae925042fe8440b7f70025Vikram Aggarwal @Override 251dd6a7ce32c4003bd0941e2f18fcf5b80b5cd43c5Vikram Aggarwal protected void hideWaitForInitialization() { 2522d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook transitionToInbox(); 253a3f43d4c2423ab03bdae925042fe8440b7f70025Vikram Aggarwal super.hideWaitForInitialization(); 2542d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook } 2552d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook 2562d50bcdca57756ecad20d21da0d936243215b79cPaul Westbrook @Override 2572b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy public boolean doesActionChangeConversationListVisibility(final int action) { 2582b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy if (action == R.id.archive 2592b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.remove_folder 2602b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.delete 2612b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.discard_drafts 2622b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.mark_important 2632b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.mark_not_important 2642b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.mute 2652b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.report_spam 2662b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.mark_not_spam 2672b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.report_phishing 2682b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy || action == R.id.refresh 2696c570db71b8adc43d7dc2f31e6fa63cf50c1426eAndrew Sapperstein || action == R.id.change_folders) { 2702b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy return false; 2712b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy } else { 2722b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy return true; 27317a8e78d61bff414610e23f24889bab29955f54emindyp } 27417a8e78d61bff414610e23f24889bab29955f54emindyp } 27517a8e78d61bff414610e23f24889bab29955f54emindyp 2768e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah /** 2776902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * Replace the content_pane with the fragment specified here. The tag is specified so that 2786902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * the {@link ActivityController} can look up the fragments through the 279ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang * {@link android.app.FragmentManager}. 2803e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal * @param fragment the new fragment to put 2813e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal * @param transition the transition to show 2823e068bab6009a758309f07ddcea3d6171feac635Vikram Aggarwal * @param tag a tag for the fragment manager. 2838e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah * @param anchor ID of view to replace fragment in 2846902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal * @return transaction ID returned when the transition is committed. 2856902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal */ 286ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang private int replaceFragment(Fragment fragment, int transition, String tag, int anchor) { 2876214ee405453b79f08859025fee5ed361d5499feAndy Huang final FragmentManager fm = mActivity.getFragmentManager(); 2886214ee405453b79f08859025fee5ed361d5499feAndy Huang FragmentTransaction fragmentTransaction = fm.beginTransaction(); 289d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal fragmentTransaction.setTransition(transition); 2908e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah fragmentTransaction.replace(anchor, fragment, tag); 2916214ee405453b79f08859025fee5ed361d5499feAndy Huang final int id = fragmentTransaction.commitAllowingStateLoss(); 2926214ee405453b79f08859025fee5ed361d5499feAndy Huang fm.executePendingTransactions(); 2936214ee405453b79f08859025fee5ed361d5499feAndy Huang return id; 294d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal } 29501668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira 2963982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 2973982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Back works as follows: 2988e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah * 1) If the drawer is pulled out (Or mid-drag), close it - handled. 2998e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah * 2) If the user is in the folder list view, go back 3003982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * to the account default inbox. 3018e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah * 3) If the user is in a conversation list 3023982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * that is not the inbox AND: 3033982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a) they got there by going through the folder 3043982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * list view, go back to the folder list view. 3053982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * b) they got there by using some other means (account dropdown), go back to the inbox. 3068e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah * 4) If the user is in a conversation, go back to the conversation list they were last in. 3078e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah * 5) If the user is in the conversation list for the default account inbox, 3083982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * back exits the app. 3093982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 31001668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira @Override 311c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang public boolean handleBackPress() { 3122074a056bb2a634c66996225c55620d2aa6f7ac5Vikram Aggarwal final int mode = mViewMode.getMode(); 3138e65c6d2527c7539b689e0e8548c84f690badca5Rohan Shah 314aded57845c51f128fc5dbd8e992697823775ce5aScott Kennedy if (mode == ViewMode.SEARCH_RESULTS_LIST) { 31568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 316b466bcf49502a1178cf7362a81470f3231d8892bMindy Pereira } else if (mViewMode.isListMode() && !inInbox(mAccount, mConvListContext)) { 317ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang navigateUpFolderHierarchy(); 3186c570db71b8adc43d7dc2f31e6fa63cf50c1426eAndrew Sapperstein } else if (mViewMode.isConversationMode() || mViewMode.isAdMode()) { 319ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang transitionBackToConversationListMode(); 3203982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 3213982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira mActivity.finish(); 3223982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 323f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein mToastBar.hide(false, false /* actionClicked */); 3243982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira return true; 3253982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } 3263982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira 327649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal /** 328649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal * Switch to the Inbox by creating a new conversation list context that loads the inbox. 329649b9ea3653da73fac0c33c8fb0af18baad12ac3Vikram Aggarwal */ 3303982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira private void transitionToInbox() { 3317c7043b2b546bb638ef1ca69c978ee8d3f41debbVikram Aggarwal // The inbox could have changed, in which case we should load it again. 332259df5b9e11908c8ef7c91483924891dd96b3c27Scott Kennedy if (mInbox == null || !isDefaultInbox(mInbox.folderUri, mAccount)) { 333ab4863650794e81f35a0fd9abc16a5564d7b102bMindy Pereira loadAccountInbox(); 3343982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira } else { 335ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang onFolderChanged(mInbox, false /* force */); 33601668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 33701668eb393deaf8c8b8abf86be46109614a98631Mindy Pereira } 338f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 339118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira @Override 340505df5f59c92adbe8eaa734321c1d3f91be84a4aMindy Pereira public void onFolderSelected(Folder folder) { 341fcde31a9e40ba2ffac0b877005c5a13e76640a05Vikram Aggarwal setHierarchyFolder(folder); 342fcde31a9e40ba2ffac0b877005c5a13e76640a05Vikram Aggarwal super.onFolderSelected(folder); 343118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira } 344118b3f6443f1859ff4866c97c0e8896f3415f730Mindy Pereira 3453982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira /** 3463982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * Up works as follows: 3473982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 1) If the user is in a conversation list that is not the default account inbox, 3483982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * a conversation, or the folder list, up follows the rules of back. 3493982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 2) If the user is in search results, up exits search 3503982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * mode and returns the user to whatever view they were in when they began search. 3513982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira * 3) If the user is in the inbox, there is no up. 3523982e236fb2dd36d460df4dbf24e07e8ba55b3bdMindy Pereira */ 353f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira @Override 354c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang public boolean handleUpPress() { 3559da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal final int mode = mViewMode.getMode(); 35668f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_LIST) { 35768f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mActivity.finish(); 3587f65718157f9336e6590401a4b3ab6bfce2d9659Vikram Aggarwal // Not needed, the activity is going away anyway. 359d9eaca8676ad4c6c58122fd41be799872bfd9cdaTony Mantler } else if (mode == ViewMode.CONVERSATION_LIST 3601dd054f4e5581b69a52936c9d257fa91cb6daee7Rohan Shah || mode == ViewMode.WAITING_FOR_ACCOUNT_INITIALIZATION) { 3610eaef6fb257f220687434cda763354ec5f8cb5bcScott Kennedy final boolean isTopLevel = (mFolder == null) || (mFolder.parent == Uri.EMPTY); 3620eaef6fb257f220687434cda763354ec5f8cb5bcScott Kennedy 3630eaef6fb257f220687434cda763354ec5f8cb5bcScott Kennedy if (isTopLevel) { 3640eaef6fb257f220687434cda763354ec5f8cb5bcScott Kennedy // Show the drawer. 365d9eaca8676ad4c6c58122fd41be799872bfd9cdaTony Mantler toggleDrawerState(); 3660eaef6fb257f220687434cda763354ec5f8cb5bcScott Kennedy } else { 367ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang navigateUpFolderHierarchy(); 3680eaef6fb257f220687434cda763354ec5f8cb5bcScott Kennedy } 3696c570db71b8adc43d7dc2f31e6fa63cf50c1426eAndrew Sapperstein } else if (mode == ViewMode.CONVERSATION || mode == ViewMode.SEARCH_RESULTS_CONVERSATION 3706c570db71b8adc43d7dc2f31e6fa63cf50c1426eAndrew Sapperstein || mode == ViewMode.AD) { 371f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira // Same as go back. 372c1fb9a9c2730178105977fca629e80951bfc3cdcAndy Huang handleBackPress(); 373f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 374f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira return true; 375f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 376f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira 377ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang private void transitionBackToConversationListMode() { 3789da85df06175d25c52a09e08df3b02d1fd9cc6b7Vikram Aggarwal final int mode = mViewMode.getMode(); 37990d89e2194cecb6ff0179c8159870575edf7365eVikram Aggarwal enableCabMode(); 38012b3ee458e04ac7e0b69302e671d10b24a5c98cfAndy Huang mConversationListVisible = true; 38168f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira if (mode == ViewMode.SEARCH_RESULTS_CONVERSATION) { 38268f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterSearchResultsListMode(); 38368f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } else { 38468f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira mViewMode.enterConversationListMode(); 38568f2e222b4ffccd9f67f02b3a9cfdb3841a7eb43Mindy Pereira } 386ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang 387ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang final Folder folder = mFolder != null ? mFolder : mInbox; 388ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang onFolderChanged(folder, true /* force */); 389ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang 3907dd054e39986de84a213c56a3c11ac94731402e6Vikram Aggarwal onConversationVisibilityChanged(false); 3919f119c72042e4d0382017d5ddcee9aa2113b6425Paul Westbrook onConversationListVisibilityChanged(true); 392f5acda4a4b7c9e8ecacb41cb7d570ef426b6d4fcMindy Pereira } 393b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira 394b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira @Override 395b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira public boolean shouldShowFirstConversation() { 396b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira return false; 397b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira } 398fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira 399fbe4019a262f6b1934a44e598009ae63dc5745eeMindy Pereira @Override 400d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira public void onUndoAvailable(ToastBarOperation op) { 4010963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira if (op != null && mAccount.supportsCapability(UIProvider.AccountCapabilities.UNDO)) { 4027f602f7a64f176894ccb7942a6642f22584c3894Vikram Aggarwal final int mode = mViewMode.getMode(); 403dbab8fab0c98dc2d56bbe17c7436719129952b7bMindy Pereira final ConversationListFragment convList = getConversationListFragment(); 4040963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira switch (mode) { 405b466bcf49502a1178cf7362a81470f3231d8892bMindy Pereira case ViewMode.SEARCH_RESULTS_CONVERSATION: 4060963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira case ViewMode.CONVERSATION: 407f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein mToastBar.show(getUndoClickedListener( 408f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein convList != null ? convList.getAnimatedAdapter() : null), 409c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein 0, 410c59dd8270215f97d39697dae9e69976bcfe3642bmindyp Utils.convertHtmlToPlainText 4116a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy (op.getDescription(mActivity.getActivityContext())), 412c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein true, /* showActionIcon */ 413c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein R.string.undo, 414d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira true, /* replaceVisibleToast */ 415d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira op); 4160963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira break; 417b466bcf49502a1178cf7362a81470f3231d8892bMindy Pereira case ViewMode.SEARCH_RESULTS_LIST: 4180963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira case ViewMode.CONVERSATION_LIST: 4196902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal if (convList != null) { 420c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein mToastBar.show( 421c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein getUndoClickedListener(convList.getAnimatedAdapter()), 422c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein 0, 423c59dd8270215f97d39697dae9e69976bcfe3642bmindyp Utils.convertHtmlToPlainText 4246a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy (op.getDescription(mActivity.getActivityContext())), 425c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein true, /* showActionIcon */ 426c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein R.string.undo, 427d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira true, /* replaceVisibleToast */ 428d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira op); 4294765c5c90802d0abcf2b05c4967e7dd7d2284f9aMindy Pereira } else { 4304765c5c90802d0abcf2b05c4967e7dd7d2284f9aMindy Pereira mActivity.setPendingToastOperation(op); 4316902dcf8688d7d0691639f49365a78a3a78fe9e3Vikram Aggarwal } 4320963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira break; 4330963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 4340963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 4350963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira } 436c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein 437c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein @Override 438d243d459b64003c5171ac5ff606729e525161be6Mark Wei protected void hideOrRepositionToastBar(boolean animated) { 439f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein mToastBar.hide(animated, false /* actionClicked */); 440d243d459b64003c5171ac5ff606729e525161be6Mark Wei } 441d243d459b64003c5171ac5ff606729e525161be6Mark Wei 442d243d459b64003c5171ac5ff606729e525161be6Mark Wei @Override 4439d7519d18e8ddbcdd59b37eec7c85210fca0e8c2Andrew Sapperstein public void onError(final Folder folder, boolean replaceVisibleToast) { 444c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein final int mode = mViewMode.getMode(); 445c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein switch (mode) { 446c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein case ViewMode.SEARCH_RESULTS_LIST: 447c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein case ViewMode.CONVERSATION_LIST: 4489d7519d18e8ddbcdd59b37eec7c85210fca0e8c2Andrew Sapperstein showErrorToast(folder, replaceVisibleToast); 449c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein break; 450c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein default: 451c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein break; 452c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein } 453c2c9dc14aa184db1f05b8c060b27d97dda5a3ca4Andrew Sapperstein } 45430745b6e9c4d280ac578d1186fbc0cec9bd2a838Paul Westbrook 4558c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook @Override 4568c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook public boolean isDrawerEnabled() { 4578c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook // The drawer is enabled for one pane mode 4588c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook return true; 4598c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook } 460feb5b1ef0c9489c1ea727177f8bd423250b64990Scott Kennedy 461feb5b1ef0c9489c1ea727177f8bd423250b64990Scott Kennedy @Override 462feb5b1ef0c9489c1ea727177f8bd423250b64990Scott Kennedy public int getFolderListViewChoiceMode() { 463feb5b1ef0c9489c1ea727177f8bd423250b64990Scott Kennedy // By default, we do not want to allow any item to be selected in the folder list 464feb5b1ef0c9489c1ea727177f8bd423250b64990Scott Kennedy return ListView.CHOICE_MODE_NONE; 465feb5b1ef0c9489c1ea727177f8bd423250b64990Scott Kennedy } 466103319aaed26bce257de55b2fe93d4f78d3c59b9Scott Kennedy 467103319aaed26bce257de55b2fe93d4f78d3c59b9Scott Kennedy @Override 468e0d01fb7379225a0f058999d9da9050f2fcc6945Scott Kennedy public void launchFragment(final Fragment fragment, final int selectPosition) { 469ebeef1babe39de2c1d97429a93ea956c655cd377Alice Yang replaceFragment(fragment, FragmentTransaction.TRANSIT_FRAGMENT_OPEN, 470103319aaed26bce257de55b2fe93d4f78d3c59b9Scott Kennedy TAG_CUSTOM_FRAGMENT, R.id.content_pane); 471103319aaed26bce257de55b2fe93d4f78d3c59b9Scott Kennedy } 472a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal} 473