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