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); }