From e4cca45e0b88a46a3a37690166371e759a3840e4 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Thu, 21 Feb 2013 23:01:22 +0000 Subject: [PATCH] Add mark all stories as read menu option to all stories view --- media/android/NewsBlur/AndroidManifest.xml | 4 +- .../res/menu/allstories_itemslist.xml | 6 +++ media/android/NewsBlur/res/values/strings.xml | 1 + .../activity/AllStoriesItemsList.java | 40 ++++++++++++++++++- .../com/newsblur/domain/ValueMultimap.java | 3 ++ .../network/MarkAllStoriesAsReadTask.java | 34 ++++++++++++++++ 6 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 media/android/NewsBlur/res/menu/allstories_itemslist.xml create mode 100644 media/android/NewsBlur/src/com/newsblur/network/MarkAllStoriesAsReadTask.java diff --git a/media/android/NewsBlur/AndroidManifest.xml b/media/android/NewsBlur/AndroidManifest.xml index 1ab1ba669..88b3ccffb 100644 --- a/media/android/NewsBlur/AndroidManifest.xml +++ b/media/android/NewsBlur/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="30" + android:versionName="1.0.6" > + + + \ No newline at end of file diff --git a/media/android/NewsBlur/res/values/strings.xml b/media/android/NewsBlur/res/values/strings.xml index b1c18ff1d..086dd49ba 100644 --- a/media/android/NewsBlur/res/values/strings.xml +++ b/media/android/NewsBlur/res/values/strings.xml @@ -137,5 +137,6 @@ Let&apos;s go! %d PUBLIC COMMENTS %d COMMENTS + All stories marked as read \ No newline at end of file diff --git a/media/android/NewsBlur/src/com/newsblur/activity/AllStoriesItemsList.java b/media/android/NewsBlur/src/com/newsblur/activity/AllStoriesItemsList.java index 5ae896e78..6049627ac 100644 --- a/media/android/NewsBlur/src/com/newsblur/activity/AllStoriesItemsList.java +++ b/media/android/NewsBlur/src/com/newsblur/activity/AllStoriesItemsList.java @@ -6,18 +6,26 @@ import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.FragmentTransaction; +import android.widget.Toast; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; import com.newsblur.R; import com.newsblur.database.DatabaseConstants; import com.newsblur.database.FeedProvider; +import com.newsblur.domain.Story; +import com.newsblur.domain.ValueMultimap; import com.newsblur.fragment.AllStoriesItemListFragment; import com.newsblur.fragment.FeedItemListFragment; import com.newsblur.fragment.SyncUpdateFragment; +import com.newsblur.network.APIManager; +import com.newsblur.network.MarkAllStoriesAsReadTask; import com.newsblur.service.SyncService; public class AllStoriesItemsList extends ItemsList { private ArrayList feedIds; + private APIManager apiManager; private boolean stopLoading = false; @Override @@ -27,6 +35,7 @@ public class AllStoriesItemsList extends ItemsList { setTitle(getResources().getString(R.string.all_stories)); feedIds = new ArrayList(); + apiManager = new APIManager(this); Cursor cursor = getContentResolver().query(FeedProvider.FEEDS_URI, null, FeedProvider.getStorySelectionFromState(currentState), null, null); @@ -76,8 +85,37 @@ public class AllStoriesItemsList extends ItemsList { @Override - public void markItemListAsRead() { } + public void markItemListAsRead() { + Cursor stories = getContentResolver().query(FeedProvider.ALL_STORIES_URI, null, FeedProvider.getStorySelectionFromState(currentState), null, null); + ValueMultimap storiesToMarkAsRead = new ValueMultimap(); + for (int i = 0; i < stories.getCount(); i++) { + stories.moveToNext(); + Story story = Story.fromCursor(stories); + storiesToMarkAsRead.put(story.feedId, story.id); + } + + new MarkAllStoriesAsReadTask(apiManager) { + @Override + protected void onPostExecute(Boolean result) { + // TODO does main view refresh? + if (result) { + setResult(RESULT_OK); + Toast.makeText(AllStoriesItemsList.this, R.string.toast_marked_all_stories_as_read, Toast.LENGTH_SHORT).show(); + finish(); + } else { + Toast.makeText(AllStoriesItemsList.this, R.string.toast_error_marking_feed_as_read, Toast.LENGTH_SHORT).show(); + } + } + }.execute(storiesToMarkAsRead); + } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + MenuInflater inflater = getSupportMenuInflater(); + inflater.inflate(R.menu.allstories_itemslist, menu); + return true; + } @Override public void setNothingMoreToUpdate() { diff --git a/media/android/NewsBlur/src/com/newsblur/domain/ValueMultimap.java b/media/android/NewsBlur/src/com/newsblur/domain/ValueMultimap.java index 3c8e694a4..9c94eabd0 100644 --- a/media/android/NewsBlur/src/com/newsblur/domain/ValueMultimap.java +++ b/media/android/NewsBlur/src/com/newsblur/domain/ValueMultimap.java @@ -74,4 +74,7 @@ public class ValueMultimap implements Serializable { return builder.toString(); } + public int size() { + return multimap.size(); + } } diff --git a/media/android/NewsBlur/src/com/newsblur/network/MarkAllStoriesAsReadTask.java b/media/android/NewsBlur/src/com/newsblur/network/MarkAllStoriesAsReadTask.java new file mode 100644 index 000000000..579f2da56 --- /dev/null +++ b/media/android/NewsBlur/src/com/newsblur/network/MarkAllStoriesAsReadTask.java @@ -0,0 +1,34 @@ +package com.newsblur.network; + +import java.util.ArrayList; +import java.util.List; + +import android.content.ContentValues; +import android.os.AsyncTask; + +import com.newsblur.domain.ValueMultimap; + +public abstract class MarkAllStoriesAsReadTask extends AsyncTask { + List feedIds = new ArrayList(); + private APIManager apiManager; + + public MarkAllStoriesAsReadTask(final APIManager apiManager) { + this.apiManager = apiManager; + } + + @Override + protected Boolean doInBackground(ValueMultimap... params) { + ValueMultimap stories = params[0]; + if (stories.size() == 0) { + return true; + } + else { + ContentValues values = new ContentValues(); + values.put(APIConstants.PARAMETER_FEEDS_STORIES, stories.getJsonString()); + return apiManager.markMultipleStoriesAsRead(values); + } + } + + @Override + protected abstract void onPostExecute(Boolean result); +} \ No newline at end of file