diff --git a/clients/android/NewsBlur/res/menu/context_folder.xml b/clients/android/NewsBlur/res/menu/context_folder.xml
index 4fedd9247..524746cf1 100644
--- a/clients/android/NewsBlur/res/menu/context_folder.xml
+++ b/clients/android/NewsBlur/res/menu/context_folder.xml
@@ -3,5 +3,11 @@
+
+
+
+
\ No newline at end of file
diff --git a/clients/android/NewsBlur/res/values/strings.xml b/clients/android/NewsBlur/res/values/strings.xml
index b384ec703..03ff2ca3d 100644
--- a/clients/android/NewsBlur/res/values/strings.xml
+++ b/clients/android/NewsBlur/res/values/strings.xml
@@ -132,6 +132,8 @@
Search…
Mute feed
Unmute feed
+ Mute folder
+ Unmute folder
Story marked as unread
diff --git a/clients/android/NewsBlur/src/com/newsblur/database/BlurDatabaseHelper.java b/clients/android/NewsBlur/src/com/newsblur/database/BlurDatabaseHelper.java
index 6585e1cf0..39f22e8e3 100644
--- a/clients/android/NewsBlur/src/com/newsblur/database/BlurDatabaseHelper.java
+++ b/clients/android/NewsBlur/src/com/newsblur/database/BlurDatabaseHelper.java
@@ -522,10 +522,20 @@ public class BlurDatabaseHelper {
}
}
- public void setFeedActive(String feedId, boolean active) {
- ContentValues values = new ContentValues();
- values.put(DatabaseConstants.FEED_ACTIVE, active);
- synchronized (RW_MUTEX) {dbRW.update(DatabaseConstants.FEED_TABLE, values, DatabaseConstants.FEED_ID + " = ?", new String[]{feedId});}
+ public void setFeedsActive(List feeds, boolean active) {
+ synchronized (RW_MUTEX) {
+ dbRW.beginTransaction();
+ try {
+ ContentValues values = new ContentValues();
+ values.put(DatabaseConstants.FEED_ACTIVE, active);
+ for (Feed feed : feeds) {
+ dbRW.update(DatabaseConstants.FEED_TABLE, values, DatabaseConstants.FEED_ID + " = ?", new String[]{feed.feedId});
+ }
+ dbRW.setTransactionSuccessful();
+ } finally {
+ dbRW.endTransaction();
+ }
+ }
}
/**
diff --git a/clients/android/NewsBlur/src/com/newsblur/database/FolderListAdapter.java b/clients/android/NewsBlur/src/com/newsblur/database/FolderListAdapter.java
index 9f50784ae..9ebc36534 100644
--- a/clients/android/NewsBlur/src/com/newsblur/database/FolderListAdapter.java
+++ b/clients/android/NewsBlur/src/com/newsblur/database/FolderListAdapter.java
@@ -625,6 +625,10 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
return activeFolderChildren.get(convertGroupPositionToActiveFolderIndex(groupPosition)).get(childPosition);
}
+ public List getFeeds(int groupPosition) {
+ return activeFolderChildren.get(convertGroupPositionToActiveFolderIndex(groupPosition));
+ }
+
/** Get the cached SocialFeed object for the feed at the given list location. */
public SocialFeed getSocialFeed(int groupPosition, int childPosition) {
return socialFeedsOrdered.get(childPosition);
diff --git a/clients/android/NewsBlur/src/com/newsblur/fragment/FolderListFragment.java b/clients/android/NewsBlur/src/com/newsblur/fragment/FolderListFragment.java
index 0356b199b..f794b673f 100644
--- a/clients/android/NewsBlur/src/com/newsblur/fragment/FolderListFragment.java
+++ b/clients/android/NewsBlur/src/com/newsblur/fragment/FolderListFragment.java
@@ -1,6 +1,8 @@
package com.newsblur.fragment;
import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
import android.app.LoaderManager;
import android.content.Loader;
@@ -289,9 +291,17 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
DialogFragment chooseFoldersFragment = ChooseFoldersFragment.newInstance(adapter.getFeed(groupPosition, childPosition));
chooseFoldersFragment.show(getFragmentManager(), "dialog");
} else if (item.getItemId() == R.id.menu_mute_feed) {
- FeedUtils.muteFeed(getActivity(), adapter.getFeed(groupPosition, childPosition));
+ List feeds = new ArrayList();
+ feeds.add(adapter.getFeed(groupPosition, childPosition));
+ FeedUtils.muteFeeds(getActivity(), feeds);
} else if (item.getItemId() == R.id.menu_unmute_feed) {
- FeedUtils.unmuteFeed(getActivity(), adapter.getFeed(groupPosition, childPosition));
+ List feeds = new ArrayList();
+ feeds.add(adapter.getFeed(groupPosition, childPosition));
+ FeedUtils.unmuteFeeds(getActivity(), feeds);
+ } else if (item.getItemId() == R.id.menu_mute_folder) {
+ FeedUtils.muteFeeds(getActivity(), adapter.getFeeds(groupPosition));
+ } else if (item.getItemId() == R.id.menu_unmute_folder) {
+ FeedUtils.unmuteFeeds(getActivity(), adapter.getFeeds(groupPosition));
}
return super.onContextItemSelected(item);
diff --git a/clients/android/NewsBlur/src/com/newsblur/util/FeedUtils.java b/clients/android/NewsBlur/src/com/newsblur/util/FeedUtils.java
index 1e4dbfd05..88a349b82 100644
--- a/clients/android/NewsBlur/src/com/newsblur/util/FeedUtils.java
+++ b/clients/android/NewsBlur/src/com/newsblur/util/FeedUtils.java
@@ -2,6 +2,7 @@ package com.newsblur.util;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import android.content.Context;
@@ -287,31 +288,35 @@ public class FeedUtils {
}.execute();
}
- public static void muteFeed(final Context context, final Feed feed) {
- updateFeedActiveState(context, feed, false);
+ public static void muteFeeds(final Context context, final List feeds) {
+ updateFeedActiveState(context, feeds, false);
}
- public static void unmuteFeed(final Context context, final Feed feed) {
- updateFeedActiveState(context, feed, true);
+ public static void unmuteFeeds(final Context context, final List feeds) {
+ updateFeedActiveState(context, feeds, true);
}
- private static void updateFeedActiveState(final Context context, final Feed feed, final boolean active) {
+ private static void updateFeedActiveState(final Context context, final List feeds, final boolean active) {
new AsyncTask() {
@Override
protected NewsBlurResponse doInBackground(Void... arg) {
APIManager apiManager = new APIManager(context);
Set activeFeeds = dbHelper.getAllActiveFeeds();
- if (active) {
- activeFeeds.add(feed.feedId);
- } else {
- activeFeeds.remove(feed.feedId);
+ for (Feed feed : feeds) {
+ if (active) {
+ activeFeeds.add(feed.feedId);
+ } else {
+ activeFeeds.remove(feed.feedId);
+ }
}
return apiManager.saveFeedChooser(activeFeeds);
}
@Override
protected void onPostExecute(NewsBlurResponse result) {
- feed.active = active;
- dbHelper.setFeedActive(feed.feedId, active);
+ for (Feed feed : feeds) {
+ feed.active = active;
+ }
+ dbHelper.setFeedsActive(feeds, active);
NbActivity.updateAllActivities(NbActivity.UPDATE_METADATA);
triggerSync(context);
}