16681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira/*
26681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * Copyright (C) 2012 Google Inc.
36681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * Licensed to The Android Open Source Project.
46681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira *
56681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
66681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * you may not use this file except in compliance with the License.
76681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * You may obtain a copy of the License at
86681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira *
96681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira *      http://www.apache.org/licenses/LICENSE-2.0
106681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira *
116681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * Unless required by applicable law or agreed to in writing, software
126681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
136681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
146681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * See the License for the specific language governing permissions and
156681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira * limitations under the License.
166681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira */
176681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
186681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereirapackage com.android.mail.browse;
196681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
206681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereiraimport android.content.Context;
216681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereiraimport android.net.Uri;
2270a70c92bca006af84177d025c32deee3aa6da3fMindy Pereiraimport android.os.Bundle;
236681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereiraimport android.util.AttributeSet;
246681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereiraimport android.view.View;
256681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereiraimport android.widget.LinearLayout;
266681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
276681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereiraimport com.android.mail.R;
286681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereiraimport com.android.mail.providers.Folder;
296681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereiraimport com.android.mail.providers.UIProvider;
306681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
31f9fd2cf057d845c7b081a3f17482dd0b886179d1Rohan Shahpublic final class ConversationListFooterView extends LinearLayout implements View.OnClickListener {
324969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrook
334969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrook    public interface FooterViewClickListener {
344969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrook        void onFooterViewLoadMoreClick(Folder folder);
354969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrook    }
364969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrook
376681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    private View mLoading;
3811dd5effd79b8078b24bcdb4160e8e12a17317a5Mindy Pereira    private View mLoadMore;
3970a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira    private Uri mLoadMoreUri;
404969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrook    private FooterViewClickListener mClickListener;
416681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
426681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    public ConversationListFooterView(Context context, AttributeSet attrs) {
436681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira        super(context, attrs);
446681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    }
456681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
466681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    @Override
476681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    protected void onFinishInflate() {
486681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira        super.onFinishInflate();
496681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
506681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira        mLoading = findViewById(R.id.loading);
5111dd5effd79b8078b24bcdb4160e8e12a17317a5Mindy Pereira        mLoadMore = findViewById(R.id.load_more);
5211dd5effd79b8078b24bcdb4160e8e12a17317a5Mindy Pereira        mLoadMore.setOnClickListener(this);
536681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    }
546681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
554969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrook    public void setClickListener(FooterViewClickListener listener) {
564969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrook        mClickListener = listener;
5700179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein    }
5800179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein
5941b9e8f7bea47bbcae71b9ae81c3608a00a90e70Vikram Aggarwal    @Override
606681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    public void onClick(View v) {
6141b9e8f7bea47bbcae71b9ae81c3608a00a90e70Vikram Aggarwal        final int id = v.getId();
6241b9e8f7bea47bbcae71b9ae81c3608a00a90e70Vikram Aggarwal        final Folder f = (Folder) v.getTag();
63deee5bee475a678bc2a4efe81c2900b1e5ac54dcJames Lemieux        if (id == R.id.load_more) {
642b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            mClickListener.onFooterViewLoadMoreClick(f);
6511dd5effd79b8078b24bcdb4160e8e12a17317a5Mindy Pereira        }
666681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    }
676681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira
6870a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira    public void setFolder(Folder folder) {
69deee5bee475a678bc2a4efe81c2900b1e5ac54dcJames Lemieux        mLoadMore.setTag(folder);
7070a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira        mLoadMoreUri = folder.loadMoreUri;
7170a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira    }
7270a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira
736681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira    /**
746681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira     * Update the view to reflect the new folder status.
756681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira     */
7670a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira    public boolean updateStatus(final ConversationCursor cursor) {
7770a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira        if (cursor == null) {
78aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon            mLoading.setVisibility(View.GONE);
798f28e11e791662148e4729e9e58993e437550ec0Tony Mantler            mLoadMore.setVisibility(View.GONE);
80aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon            return false;
81f6acdade010b2d0f49fd425b33e7f7b376286490Mindy Pereira        }
8270a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira        boolean showFooter = true;
83573b9e698852c6cf2cbf0f93bc01b7abb8b64ce1Paul Westbrook        final Bundle extras = cursor.getExtras();
84573b9e698852c6cf2cbf0f93bc01b7abb8b64ce1Paul Westbrook        final int cursorStatus = extras.getInt(UIProvider.CursorExtraKeys.EXTRA_STATUS);
85cbde5fa5dae7a730f916ab1ad5eda458d3dc8a34Yu Ping Hu        final int totalCount = extras.getInt(UIProvider.CursorExtraKeys.EXTRA_TOTAL_COUNT);
86aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon
87573b9e698852c6cf2cbf0f93bc01b7abb8b64ce1Paul Westbrook        if (UIProvider.CursorStatus.isWaitingForResults(cursorStatus)) {
88aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon            if (cursor.getCount() != 0) {
89aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon                // When loading more, show the spinner in the footer.
90aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon                mLoading.setVisibility(View.VISIBLE);
91aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon                mLoadMore.setVisibility(View.GONE);
92aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon            } else {
93aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon                // We're currently loading, but we have no messages at all. We don't need to show
94aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon                // the footer, because we should be displaying the loading state on the
95aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon                // conversation list itself.
96aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon                showFooter = false;
97aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon            }
9800179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein
99cbde5fa5dae7a730f916ab1ad5eda458d3dc8a34Yu Ping Hu        } else if (mLoadMoreUri != null && cursor.getCount() < totalCount) {
100aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon            // We know that there are more messages on the server than we have locally, so we
101aaca613cd34f6169e215016195f1953a69df913aMartin Hibdon            // need to show the footer with the "load more" button.
10211dd5effd79b8078b24bcdb4160e8e12a17317a5Mindy Pereira            mLoading.setVisibility(View.GONE);
10311dd5effd79b8078b24bcdb4160e8e12a17317a5Mindy Pereira            mLoadMore.setVisibility(View.VISIBLE);
10470a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira        } else {
10570a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira            showFooter = false;
10611dd5effd79b8078b24bcdb4160e8e12a17317a5Mindy Pereira        }
10770a70c92bca006af84177d025c32deee3aa6da3fMindy Pereira        return showFooter;
10811dd5effd79b8078b24bcdb4160e8e12a17317a5Mindy Pereira    }
1096681f6b78557850d9ec76a7a8f9ac1ec930d2513Mindy Pereira}
110