Home | History | Annotate | Download | only in ui
      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 
     20 import android.app.LoaderManager.LoaderCallbacks;
     21 import android.database.DataSetObserver;
     22 import android.os.Bundle;
     23 import android.os.Parcelable;
     24 
     25 import com.android.mail.browse.ConversationCursor;
     26 import com.android.mail.providers.Conversation;
     27 import com.android.mail.providers.Folder;
     28 
     29 /**
     30  * A controller interface that is to receive user initiated events and handle them.
     31  */
     32 public interface ConversationListCallbacks {
     33     /**
     34      * Show the conversation provided here. If the conversation is null, this is a request to pop
     35      * <em>out</em> of conversation view mode and head back to conversation list mode, or whatever
     36      * should best show in its place.
     37      * @param conversation conversation to display, possibly null.
     38      * @param inLoaderCallbacks whether we are in the scope of a {@link LoaderCallbacks} method
     39      * (when fragment transactions are disallowed)
     40      */
     41     void onConversationSelected(Conversation conversation, boolean inLoaderCallbacks);
     42 
     43     /**
     44      * Possibly show the conversation provided here depending on implementation.
     45      * Used mainly by two-pane landscape mode when we are navigating with the keyboard.
     46      */
     47     void onConversationFocused(Conversation conversation);
     48 
     49     /**
     50      * Called whenever CAB mode has been entered via long press or selecting a sender image.
     51      */
     52     void onCabModeEntered();
     53 
     54     /**
     55      * Called whenever CAB mode has been exited.
     56      */
     57     void onCabModeExited();
     58 
     59     ConversationCursor getConversationListCursor();
     60 
     61     Conversation getCurrentConversation();
     62     void setCurrentConversation(Conversation c);
     63     void onConversationViewSwitched(Conversation c);
     64 
     65     /**
     66      * Returns whether the initial conversation has begun but not finished loading. If this returns
     67      * true, you can register to be told when the load in progress finishes
     68      * ({@link #registerConversationLoadedObserver(DataSetObserver)}).
     69      * <p>
     70      * This flag only applies to the first conversation in a set (e.g. when using ViewPager).
     71      *
     72      * @return true if the initial conversation has begun but not finished loading
     73      */
     74     boolean isInitialConversationLoading();
     75     void registerConversationLoadedObserver(DataSetObserver observer);
     76     void unregisterConversationLoadedObserver(DataSetObserver observer);
     77     /**
     78      * Coordinates actions that might occur in response to a conversation that has finished loading
     79      * and is now user-visible.
     80      */
     81     void onConversationSeen();
     82 
     83     void registerConversationListObserver(DataSetObserver observer);
     84     void unregisterConversationListObserver(DataSetObserver observer);
     85 
     86     /**
     87      * Commit any destructive action leave behind items so that it is no longer
     88      * possible to undo them.
     89      */
     90     void commitDestructiveActions(boolean animate);
     91 
     92     /**
     93      * Detect if there are any animations occurring in the conversation list.
     94      */
     95     boolean isAnimating();
     96 
     97     /**
     98      * Tell the controller that the conversation view has entered detached mode.
     99      */
    100     void setDetachedMode();
    101 
    102     /**
    103      * @return true if the List fragment should start up with list swipes disabled entirely
    104      * (with no UI reaction)
    105      */
    106     boolean shouldPreventListSwipesEntirely();
    107 
    108     String CONVERSATION_LIST_SCROLL_POSITION_INDEX = "index";
    109     String CONVERSATION_LIST_SCROLL_POSITION_OFFSET = "offset";
    110 
    111     /**
    112      * Gets the last save scroll position of the conversation list for the specified Folder.
    113      *
    114      * @return A {@link Bundle} containing two ints,
    115      *         {@link #CONVERSATION_LIST_SCROLL_POSITION_INDEX} and
    116      *         {@link #CONVERSATION_LIST_SCROLL_POSITION_OFFSET}, or <code>null</code>
    117      */
    118     Parcelable getConversationListScrollPosition(String folderUri);
    119 
    120     /**
    121      * Sets the last save scroll position of the conversation list for the specified Folder for
    122      * restoration on returning to this list.
    123      *
    124      * @param savedPosition A {@link Bundle} containing two ints,
    125      *            {@link #CONVERSATION_LIST_SCROLL_POSITION_INDEX} and
    126      *            {@link #CONVERSATION_LIST_SCROLL_POSITION_OFFSET}
    127      */
    128     void setConversationListScrollPosition(String folderUri, Parcelable savedPosition);
    129 
    130     /**
    131      * Is the user peeking the current conversation or actually viewing it.
    132      */
    133     boolean isCurrentConversationJustPeeking();
    134 
    135     /**
    136      * Set up the empty icon depending on the current empty folder.
    137      * @param isEmpty if false, then instead of showing the default empty icon, shows the no
    138      *   selected message icon.
    139      * @return true if the icon is setup, false otherwise.
    140      */
    141     boolean setupEmptyIconView(Folder folder, boolean isEmpty);
    142 }
    143