17c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy/*
27c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * Copyright (C) 2013 Google Inc.
37c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * Licensed to The Android Open Source Project.
47c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy *
57c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * Licensed under the Apache License, Version 2.0 (the "License");
67c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * you may not use this file except in compliance with the License.
77c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * You may obtain a copy of the License at
87c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy *
97c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy *      http://www.apache.org/licenses/LICENSE-2.0
107c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy *
117c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * Unless required by applicable law or agreed to in writing, software
127c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * distributed under the License is distributed on an "AS IS" BASIS,
137c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
147c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * See the License for the specific language governing permissions and
157c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * limitations under the License.
167c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy */
177c8325de829ca029ce4547e4f0fa266124301367Scott Kennedypackage com.android.mail.ui;
187c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy
197c8325de829ca029ce4547e4f0fa266124301367Scott Kennedyimport android.app.LoaderManager;
2032ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedyimport android.os.Bundle;
21b45d1418887d8595c230788e20516bbe10c2f3eaScott Kennedyimport android.widget.Adapter;
227c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy
237c8325de829ca029ce4547e4f0fa266124301367Scott Kennedyimport com.android.mail.browse.ConversationCursor;
247c8325de829ca029ce4547e4f0fa266124301367Scott Kennedyimport com.android.mail.providers.Folder;
257c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy
267c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy/**
277c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * An interface for a view that can be inserted into an {@link AnimatedAdapter} at an arbitrary
287c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy * point. The methods described here control whether the view gets displayed, and what it displays.
297c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy */
307c8325de829ca029ce4547e4f0fa266124301367Scott Kennedypublic interface ConversationSpecialItemView {
317c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy    /**
327c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy     * Called when there as an update to the information being displayed.
337c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy     *
347c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy     * @param cursor The {@link ConversationCursor}. May be <code>null</code>
357c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy     */
360e8dc84326ad3e6d146a203538665f98dd98f688Scott Kennedy    void onUpdate(Folder folder, ConversationCursor cursor);
377c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy
3837a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal    /**
39b45d1418887d8595c230788e20516bbe10c2f3eaScott Kennedy     * Called before returning this view from
40b45d1418887d8595c230788e20516bbe10c2f3eaScott Kennedy     * {@link Adapter#getView(int, android.view.View, android.view.ViewGroup)}
41b45d1418887d8595c230788e20516bbe10c2f3eaScott Kennedy     */
42f45e0e7f65eb421fc5c2acf7bb76a714e12dc68bScott Kennedy    void onGetView();
43b45d1418887d8595c230788e20516bbe10c2f3eaScott Kennedy
44b45d1418887d8595c230788e20516bbe10c2f3eaScott Kennedy    /**
4537a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal     * Returns whether this view is to be displayed in the list or not. A view can be added freely
4637a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal     * and it might decide to disable itself by returning false here.
4737a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal     * @return true if this view should be displayed, false otherwise.
4837a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal     */
497c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy    boolean getShouldDisplayInList();
507c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy
5137a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal    /**
5237a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal     * Returns the position (0 indexed) where this element expects to be inserted.
5337a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal     * @return
5437a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal     */
557c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy    int getPosition();
567c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy
572102b2c87a6cb39bc63fb7eff13dda64da56b72eMark Wei    void setAdapter(AnimatedAdapter adapter);
587c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy
5932ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy    void bindFragment(LoaderManager loaderManager, Bundle savedInstanceState);
607c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy
617c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy    /**
627c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy     * Called when the view is being destroyed.
637c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy     */
647c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy    void cleanup();
65fe8e081d6230f343dc74b45d69e5f4634a332b5aAlice Yang
66fe8e081d6230f343dc74b45d69e5f4634a332b5aAlice Yang    /**
67fe8e081d6230f343dc74b45d69e5f4634a332b5aAlice Yang     * Called when a regular conversation item was clicked.
68fe8e081d6230f343dc74b45d69e5f4634a332b5aAlice Yang     */
69fe8e081d6230f343dc74b45d69e5f4634a332b5aAlice Yang    void onConversationSelected();
7037a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal
712f542873183b37fa38a0d468f46bbfebc1f537e2Andrew Sapperstein    /**
722f542873183b37fa38a0d468f46bbfebc1f537e2Andrew Sapperstein     * Called whenever Cab Mode has been entered via long press or selecting a sender image.
732f542873183b37fa38a0d468f46bbfebc1f537e2Andrew Sapperstein     */
742f542873183b37fa38a0d468f46bbfebc1f537e2Andrew Sapperstein    void onCabModeEntered();
757d257af54aba47ab662e34f0c9faf54d86ebd4a4Andrew Sapperstein
76cc139833bc5829ba70244519e9870de783c41848Scott Kennedy    /**
77cc139833bc5829ba70244519e9870de783c41848Scott Kennedy     * Called whenever Cab Mode has been exited.
78cc139833bc5829ba70244519e9870de783c41848Scott Kennedy     */
79cc139833bc5829ba70244519e9870de783c41848Scott Kennedy    void onCabModeExited();
80cc139833bc5829ba70244519e9870de783c41848Scott Kennedy
8137a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal    /** Returns whether this special view is enabled (= accepts user taps). */
8237a20ca39be842b4b4cb54d5b5ed418d49d950cfVikram Aggarwal    boolean acceptsUserTaps();
8332ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy
8432ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy    /** Called when the conversation list's visibility changes */
8532ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy    void onConversationListVisibilityChanged(boolean visible);
8632ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy
8732ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy    /**
8832ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy     * Saves any state for the view to the fragment so it will be restored on configuration change
8932ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy     */
9032ddb84f2d4f53bfc4b53656461068c0c69d6325Scott Kennedy    void saveInstanceState(Bundle outState);
917c8325de829ca029ce4547e4f0fa266124301367Scott Kennedy}
92