1 /* 2 * Copyright (C) 2013 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 package com.android.mail.ui; 18 19 import android.app.LoaderManager; 20 import android.os.Bundle; 21 import android.widget.Adapter; 22 23 import com.android.mail.browse.ConversationCursor; 24 import com.android.mail.providers.Folder; 25 26 /** 27 * An interface for a view that can be inserted into an {@link AnimatedAdapter} at an arbitrary 28 * point. The methods described here control whether the view gets displayed, and what it displays. 29 */ 30 public interface ConversationSpecialItemView { 31 /** 32 * Called when there as an update to the information being displayed. 33 * 34 * @param cursor The {@link ConversationCursor}. May be <code>null</code> 35 */ onUpdate(Folder folder, ConversationCursor cursor)36 void onUpdate(Folder folder, ConversationCursor cursor); 37 38 /** 39 * Called before returning this view from 40 * {@link Adapter#getView(int, android.view.View, android.view.ViewGroup)} 41 */ onGetView()42 void onGetView(); 43 44 /** 45 * Returns whether this view is to be displayed in the list or not. A view can be added freely 46 * and it might decide to disable itself by returning false here. 47 * @return true if this view should be displayed, false otherwise. 48 */ getShouldDisplayInList()49 boolean getShouldDisplayInList(); 50 51 /** 52 * Returns the position (0 indexed) where this element expects to be inserted. 53 * @return 54 */ getPosition()55 int getPosition(); 56 setAdapter(AnimatedAdapter adapter)57 void setAdapter(AnimatedAdapter adapter); 58 bindFragment(LoaderManager loaderManager, Bundle savedInstanceState)59 void bindFragment(LoaderManager loaderManager, Bundle savedInstanceState); 60 61 /** 62 * Called when the view is being destroyed. 63 */ cleanup()64 void cleanup(); 65 66 /** 67 * Called when a regular conversation item was clicked. 68 */ onConversationSelected()69 void onConversationSelected(); 70 71 /** 72 * Called whenever Cab Mode has been entered via long press or selecting a sender image. 73 */ onCabModeEntered()74 void onCabModeEntered(); 75 76 /** 77 * Called whenever Cab Mode has been exited. 78 */ onCabModeExited()79 void onCabModeExited(); 80 81 /** Returns whether this special view is enabled (= accepts user taps). */ acceptsUserTaps()82 boolean acceptsUserTaps(); 83 84 /** Called when the conversation list's visibility changes */ onConversationListVisibilityChanged(boolean visible)85 void onConversationListVisibilityChanged(boolean visible); 86 87 /** 88 * Saves any state for the view to the fragment so it will be restored on configuration change 89 */ saveInstanceState(Bundle outState)90 void saveInstanceState(Bundle outState); 91 92 /** 93 * <p> 94 * Commits any leave-behind items for this special view. 95 * </p> 96 * <p> 97 * This should generally be used for committing any destructive actions that the leave-behind 98 * allows you to undo, and it should cause the leave-behind to disappear. 99 * </p> 100 * 101 * @return <code>true</code> if there was a leave-behind that has been committed, 102 * <code>false</code> otherwise 103 */ commitLeaveBehindItem()104 boolean commitLeaveBehindItem(); 105 } 106