Add mark all stories as read menu option to all stories view

This commit is contained in:
Mark Anderson 2013-02-21 23:01:22 +00:00
parent 0d75d9ecd8
commit e4cca45e0b
6 changed files with 85 additions and 3 deletions

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.newsblur"
android:versionCode="29"
android:versionName="1.0.55" >
android:versionCode="30"
android:versionName="1.0.6" >
<uses-sdk
android:minSdkVersion="8"

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_mark_all_as_read"
android:title="@string/menu_mark_all_as_read"
android:showAsAction="never" />
</menu>

View file

@ -137,5 +137,6 @@
<string name="let_s_go_">Let&amp;apos;s go!</string>
<string name="public_comment_count">%d PUBLIC COMMENTS</string>
<string name="friends_comments_count">%d COMMENTS</string>
<string name="toast_marked_all_stories_as_read">All stories marked as read</string>
</resources>

View file

@ -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<String> 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<String>();
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() {

View file

@ -74,4 +74,7 @@ public class ValueMultimap implements Serializable {
return builder.toString();
}
public int size() {
return multimap.size();
}
}

View file

@ -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<ValueMultimap, Void, Boolean> {
List<String> feedIds = new ArrayList<String>();
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);
}