Add load more to the conversation status bar.
If a folder has a load more uri and sync is done, show this bar.
When the user clicks it, query on the loadMore uri.
Change-Id: Ie6dc1671be6f04b9af0b37b65ad7f9941a339ac6
diff --git a/res/layout/conversation_list_footer_view.xml b/res/layout/conversation_list_footer_view.xml
index 1b236c3..a9f7f97 100644
--- a/res/layout/conversation_list_footer_view.xml
+++ b/res/layout/conversation_list_footer_view.xml
@@ -80,5 +80,22 @@
android:text="@string/loading"/>
</LinearLayout>
+ <LinearLayout android:id="@+id/load_more"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/listPreferredItemHeight"
+ android:gravity="center"
+ android:visibility="gone"
+ android:clickable="true"
+ android:background="?android:attr/selectableItemBackground">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLargeInverse"
+ android:layout_marginBottom="1dip"
+ android:paddingLeft="5dip"
+ android:textColor="@android:color/black"
+ android:text="@string/load_more"/>
+
+ </LinearLayout>
</com.android.mail.browse.ConversationListFooterView>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 037ac08..e9e296c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -566,4 +566,6 @@
<string name="loading">Loading conversations\u2026</string>
<!-- Button at bottom of conversation list screen if last attempt to load conversations failed [CHAR LIMIT=20]-->
<string name="retry">Retry</string>
+ <!-- Button at bottom of conversation list screen if the folder for which contents are being shown supports loading more on demand [CHAR LIMIT=20]-->
+ <string name="load_more">Load more</string>
</resources>
diff --git a/src/com/android/mail/browse/ConversationListFooterView.java b/src/com/android/mail/browse/ConversationListFooterView.java
index ac89152..2e3d38c 100644
--- a/src/com/android/mail/browse/ConversationListFooterView.java
+++ b/src/com/android/mail/browse/ConversationListFooterView.java
@@ -19,12 +19,14 @@
import android.content.Context;
import android.net.Uri;
+import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
+import com.android.mail.ConversationListContext;
import com.android.mail.R;
import com.android.mail.providers.Folder;
import com.android.mail.providers.UIProvider;
@@ -34,8 +36,10 @@
public class ConversationListFooterView extends LinearLayout implements View.OnClickListener {
private View mLoading;
private View mNetworkError;
+ private View mLoadMore;
private View mRetry;
private TextView mErrorText;
+ private FolderSyncTask mFolderSyncTask;
public ConversationListFooterView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -47,27 +51,48 @@
mLoading = findViewById(R.id.loading);
mNetworkError = findViewById(R.id.network_error);
+ mLoadMore = findViewById(R.id.load_more);
+ mLoadMore.setOnClickListener(this);
mRetry = findViewById(R.id.retry_button);
mRetry.setOnClickListener(this);
mErrorText = (TextView)findViewById(R.id.error_text);
}
public void onClick(View v) {
- Folder f = (Folder)v.getTag();
- if (f != null) {
- // TODO(mindyp) Refresh.
+ int id = v.getId();
+ Folder f = (Folder) v.getTag();
+ Uri uri = null;
+ switch (id) {
+ case R.id.retry_button:
+ if (f != null) {
+ uri = f.refreshUri;
+ }
+ break;
+ case R.id.load_more:
+ if (f != null && f.loadMoreUri != null) {
+ uri = f.loadMoreUri;
+ }
+ break;
+ }
+ if (uri != null) {
+ if (mFolderSyncTask != null) {
+ mFolderSyncTask.cancel(true);
+ }
+ mFolderSyncTask = new FolderSyncTask(uri);
+ mFolderSyncTask.execute();
}
}
/**
* Update the view to reflect the new folder status.
*/
- public void updateStatus(final Folder folder) {
+ public void updateStatus(final Folder folder, int count) {
mRetry.setTag(folder);
-
+ mLoadMore.setTag(folder);
if (folder.isSyncInProgress()) {
mLoading.setVisibility(View.VISIBLE);
mNetworkError.setVisibility(View.GONE);
+ mLoadMore.setVisibility(View.GONE);
} else if (folder.lastSyncResult != UIProvider.LastSyncResult.SUCCESS) {
mNetworkError.setVisibility(View.VISIBLE);
CharSequence error = Utils.getSyncStatusText(getContext(), folder.lastSyncResult);
@@ -75,11 +100,29 @@
mErrorText.setText(error);
}
mLoading.setVisibility(View.GONE);
+ mLoadMore.setVisibility(View.GONE);
// Only show the "Retry" button for I/O errors; it won't help for
// internal errors.
mRetry.setVisibility(
folder.lastSyncResult == UIProvider.LastSyncResult.CONNECTION_ERROR ?
View.VISIBLE : View.GONE);
+ } else if (folder.loadMoreUri != null && folder.totalCount > count) {
+ mLoading.setVisibility(View.GONE);
+ mNetworkError.setVisibility(View.GONE);
+ mLoadMore.setVisibility(View.VISIBLE);
+ }
+ }
+
+ private class FolderSyncTask extends AsyncTask<Void, Void, Void> {
+ Uri mUri;
+ public FolderSyncTask(Uri uri) {
+ mUri = uri;
+ }
+
+ @Override
+ public Void doInBackground(Void... params) {
+ getContext().getContentResolver().query(mUri, null, null, null, null);
+ return null;
}
}
}
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 358bb31..ff0e6f5 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -686,17 +686,14 @@
if (data != null) {
data.moveToFirst();
Folder folder = new Folder(data);
- if (mConvListContext.isSearchResult()) {
- if (mConversationListFragment != null) {
- mConversationListFragment.onSearchFolderUpdated(folder);
- }
+ if (folder.isSyncInProgress()) {
+ mActionBarView.onRefreshStarted();
} else {
- if (folder.isSyncInProgress()) {
- mActionBarView.onRefreshStarted();
- } else {
- // Stop the spinner here.
- mActionBarView.onRefreshStopped(folder.lastSyncResult);
- }
+ // Stop the spinner here.
+ mActionBarView.onRefreshStopped(folder.lastSyncResult);
+ }
+ if (mConversationListFragment != null) {
+ mConversationListFragment.onFolderUpdated(folder);
}
LogUtils.v(LOG_TAG, "FOLDER STATUS = " + folder.syncStatus);
}
diff --git a/src/com/android/mail/ui/ConversationListFragment.java b/src/com/android/mail/ui/ConversationListFragment.java
index 61079cc..8d868b4 100644
--- a/src/com/android/mail/ui/ConversationListFragment.java
+++ b/src/com/android/mail/ui/ConversationListFragment.java
@@ -426,7 +426,7 @@
*/
private void showList() {
mListView.setEmptyView(null);
- mFolder = mViewContext.folder;
+ onFolderUpdated(mViewContext.folder);
getLoaderManager().initLoader(CONVERSATION_LOADER_ID, Bundle.EMPTY, this);
}
@@ -547,9 +547,9 @@
// Do nothing.
}
- public void onSearchFolderUpdated(Folder folder) {
+ public void onFolderUpdated(Folder folder) {
mFolder = folder;
- mFooterView.updateStatus(mFolder);
+ mFooterView.updateStatus(mFolder, mListAdapter != null ? mListAdapter.getCount() : 0);
if (mFolder.isSyncInProgress()) {
mListAdapter.showFooter();
} else if (!mFolder.isSyncInProgress()
@@ -559,7 +559,9 @@
if (mFolder.totalCount == 0) {
mListView.setEmptyView(mEmptyView);
}
- mListAdapter.hideFooter();
+ if (folder.loadMoreUri == null) {
+ mListAdapter.hideFooter();
+ }
}
}
}