From f30b1044c2a35c23561475e2b645a161009f7ddc Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 26 Mar 2013 18:09:56 -0700 Subject: [PATCH] Basic logic for load more in comments fragments. Parts may be broken, still need to reload models on success --- .../astrid/actfm/CommentsFragment.java | 58 +++++++++++++------ .../astrid/actfm/TagCommentsFragment.java | 11 ++++ .../astrid/actfm/TaskCommentsFragment.java | 11 ++++ 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java index e405ff1bf..eea7b7f2b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java @@ -15,6 +15,7 @@ import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; +import android.graphics.Color; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; @@ -26,6 +27,7 @@ import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; +import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; @@ -62,6 +64,7 @@ public abstract class CommentsFragment extends SherlockListFragment { protected UpdateAdapter updateAdapter; protected EditText addCommentField; protected ViewGroup listHeader; + protected Button footerView = null; protected ImageButton pictureButton; @@ -120,6 +123,10 @@ public abstract class CommentsFragment extends SherlockListFragment { protected abstract void performFetch(boolean manual, SyncMessageCallback done); + protected abstract boolean canLoadMoreHistory(); + + protected abstract void loadMoreHistory(int offset, SyncMessageCallback callback); + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); @@ -266,32 +273,47 @@ public abstract class CommentsFragment extends SherlockListFragment { if (activity instanceof CommentsActivity) setLastViewed(); + + if (footerView != null) { + listView.removeFooterView(footerView); + if (canLoadMoreHistory()) { + footerView = new Button(getActivity()); + footerView.setText(R.string.TEA_load_more); + footerView.setBackgroundColor(Color.alpha(0)); + footerView.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + loadMoreHistory(0, doneRunnable); + } + }); + } + } } protected void setLastViewed() { // } + private final SyncMessageCallback doneRunnable = new SyncMessageCallback() { + @Override + public void runOnSuccess() { + synchronized (this) { + Activity activity = getActivity(); + if (activity != null) + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + refreshUpdatesList(); + } + }); + } + } + + @Override + public void runOnErrors(List errors) {/**/} + }; + protected void refreshActivity(boolean manual) { if (actFmPreferenceService.isLoggedIn()) { - SyncMessageCallback doneRunnable = new SyncMessageCallback() { - @Override - public void runOnSuccess() { - synchronized (this) { - Activity activity = getActivity(); - if (activity != null) - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - refreshUpdatesList(); - } - }); - } - } - - @Override - public void runOnErrors(List errors) {/**/} - }; if (hasModel()) { performFetch(manual, doneRunnable); } else { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java index c0bc1219c..062b8c89b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java @@ -88,6 +88,17 @@ public class TagCommentsFragment extends CommentsFragment { return (tagData == null) ? UpdateAdapter.FROM_RECENT_ACTIVITY_VIEW : UpdateAdapter.FROM_TAG_VIEW; } + @Override + protected boolean canLoadMoreHistory() { + return tagData.getValue(TagData.HISTORY_HAS_MORE) > 0; + } + + @Override + protected void loadMoreHistory(int offset, SyncMessageCallback callback) { + new FetchHistory(tagDataDao, TagData.HISTORY_FETCH_DATE, TagData.HISTORY_HAS_MORE, NameMaps.TABLE_ID_TAGS, + tagData.getUuid(), null, 0, offset, true, callback).execute(); + } + @Override protected void addHeaderToListView(ListView listView) { if (AstridPreferences.useTabletLayout(getActivity()) && tagData != null) { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java index cde9e9cf2..5bf6980a2 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java @@ -79,6 +79,17 @@ public class TaskCommentsFragment extends CommentsFragment { // Do nothing } + @Override + protected boolean canLoadMoreHistory() { + return task.getValue(Task.HISTORY_HAS_MORE) > 0; + } + + @Override + protected void loadMoreHistory(int offset, SyncMessageCallback callback) { + new FetchHistory(taskDao, Task.HISTORY_FETCH_DATE, Task.HISTORY_HAS_MORE, NameMaps.TABLE_ID_TASKS, + task.getUuid(), task.getValue(Task.TITLE), 0, offset, false, callback).execute(); + } + @Override protected void performFetch(boolean manual, SyncMessageCallback done) { if (task != null) {