| /* |
| * Copyright (C) 2012 Google Inc. |
| * Licensed to The Android Open Source Project. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.mail.ui; |
| |
| import android.app.LoaderManager.LoaderCallbacks; |
| import android.database.DataSetObserver; |
| import android.os.Bundle; |
| import android.os.Parcelable; |
| |
| import com.android.mail.browse.ConversationCursor; |
| import com.android.mail.providers.Conversation; |
| import com.android.mail.providers.Folder; |
| |
| /** |
| * A controller interface that is to receive user initiated events and handle them. |
| */ |
| public interface ConversationListCallbacks { |
| /** |
| * Show the conversation provided here. If the conversation is null, this is a request to pop |
| * <em>out</em> of conversation view mode and head back to conversation list mode, or whatever |
| * should best show in its place. |
| * @param conversation conversation to display, possibly null. |
| * @param inLoaderCallbacks whether we are in the scope of a {@link LoaderCallbacks} method |
| * (when fragment transactions are disallowed) |
| */ |
| void onConversationSelected(Conversation conversation, boolean inLoaderCallbacks); |
| |
| /** |
| * Possibly show the conversation provided here depending on implementation. |
| * Used mainly by two-pane landscape mode when we are navigating with the keyboard. |
| */ |
| void onConversationFocused(Conversation conversation); |
| |
| /** |
| * Called whenever CAB mode has been entered via long press or selecting a sender image. |
| */ |
| void onCabModeEntered(); |
| |
| /** |
| * Called whenever CAB mode has been exited. |
| */ |
| void onCabModeExited(); |
| |
| ConversationCursor getConversationListCursor(); |
| |
| Conversation getCurrentConversation(); |
| void setCurrentConversation(Conversation c); |
| void onConversationViewSwitched(Conversation c); |
| |
| /** |
| * Returns whether the initial conversation has begun but not finished loading. If this returns |
| * true, you can register to be told when the load in progress finishes |
| * ({@link #registerConversationLoadedObserver(DataSetObserver)}). |
| * <p> |
| * This flag only applies to the first conversation in a set (e.g. when using ViewPager). |
| * |
| * @return true if the initial conversation has begun but not finished loading |
| */ |
| boolean isInitialConversationLoading(); |
| void registerConversationLoadedObserver(DataSetObserver observer); |
| void unregisterConversationLoadedObserver(DataSetObserver observer); |
| /** |
| * Coordinates actions that might occur in response to a conversation that has finished loading |
| * and is now user-visible. |
| */ |
| void onConversationSeen(); |
| |
| void registerConversationListObserver(DataSetObserver observer); |
| void unregisterConversationListObserver(DataSetObserver observer); |
| |
| /** |
| * Commit any destructive action leave behind items so that it is no longer |
| * possible to undo them. |
| */ |
| void commitDestructiveActions(boolean animate); |
| |
| /** |
| * Detect if there are any animations occurring in the conversation list. |
| */ |
| boolean isAnimating(); |
| |
| /** |
| * Tell the controller that the conversation view has entered detached mode. |
| */ |
| void setDetachedMode(); |
| |
| /** |
| * @return true if the List fragment should start up with list swipes disabled entirely |
| * (with no UI reaction) |
| */ |
| boolean shouldPreventListSwipesEntirely(); |
| |
| String CONVERSATION_LIST_SCROLL_POSITION_INDEX = "index"; |
| String CONVERSATION_LIST_SCROLL_POSITION_OFFSET = "offset"; |
| |
| /** |
| * Gets the last save scroll position of the conversation list for the specified Folder. |
| * |
| * @return A {@link Bundle} containing two ints, |
| * {@link #CONVERSATION_LIST_SCROLL_POSITION_INDEX} and |
| * {@link #CONVERSATION_LIST_SCROLL_POSITION_OFFSET}, or <code>null</code> |
| */ |
| Parcelable getConversationListScrollPosition(String folderUri); |
| |
| /** |
| * Sets the last save scroll position of the conversation list for the specified Folder for |
| * restoration on returning to this list. |
| * |
| * @param savedPosition A {@link Bundle} containing two ints, |
| * {@link #CONVERSATION_LIST_SCROLL_POSITION_INDEX} and |
| * {@link #CONVERSATION_LIST_SCROLL_POSITION_OFFSET} |
| */ |
| void setConversationListScrollPosition(String folderUri, Parcelable savedPosition); |
| |
| /** |
| * Is the user peeking the current conversation or actually viewing it. |
| */ |
| boolean isCurrentConversationJustPeeking(); |
| |
| /** |
| * Set up the empty icon depending on the current empty folder. |
| * @param isEmpty if false, then instead of showing the default empty icon, shows the no |
| * selected message icon. |
| * @return true if the icon is setup, false otherwise. |
| */ |
| boolean setupEmptyIconView(Folder folder, boolean isEmpty); |
| } |