Support mute/unmute long press for folders.

This commit is contained in:
Mark Anderson 2016-10-20 23:04:09 +01:00
parent 55a6106ad5
commit 190ea94dbb
6 changed files with 54 additions and 17 deletions

View file

@ -3,5 +3,11 @@
<item android:id="@+id/menu_mark_folder_as_read" <item android:id="@+id/menu_mark_folder_as_read"
android:title="@string/menu_mark_folder_as_read" /> android:title="@string/menu_mark_folder_as_read" />
<item android:id="@+id/menu_mute_folder"
android:title="@string/menu_mute_folder" />
<item android:id="@+id/menu_unmute_folder"
android:title="@string/menu_unmute_folder" />
</menu> </menu>

View file

@ -132,6 +132,8 @@
<string name="menu_search_stories">Search…</string> <string name="menu_search_stories">Search…</string>
<string name="menu_mute_feed">Mute feed</string> <string name="menu_mute_feed">Mute feed</string>
<string name="menu_unmute_feed">Unmute feed</string> <string name="menu_unmute_feed">Unmute feed</string>
<string name="menu_mute_folder">Mute folder</string>
<string name="menu_unmute_folder">Unmute folder</string>
<string name="toast_story_unread">Story marked as unread</string> <string name="toast_story_unread">Story marked as unread</string>

View file

@ -522,10 +522,20 @@ public class BlurDatabaseHelper {
} }
} }
public void setFeedActive(String feedId, boolean active) { public void setFeedsActive(List<Feed> feeds, boolean active) {
ContentValues values = new ContentValues(); synchronized (RW_MUTEX) {
values.put(DatabaseConstants.FEED_ACTIVE, active); dbRW.beginTransaction();
synchronized (RW_MUTEX) {dbRW.update(DatabaseConstants.FEED_TABLE, values, DatabaseConstants.FEED_ID + " = ?", new String[]{feedId});} 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();
}
}
} }
/** /**

View file

@ -625,6 +625,10 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
return activeFolderChildren.get(convertGroupPositionToActiveFolderIndex(groupPosition)).get(childPosition); return activeFolderChildren.get(convertGroupPositionToActiveFolderIndex(groupPosition)).get(childPosition);
} }
public List<Feed> getFeeds(int groupPosition) {
return activeFolderChildren.get(convertGroupPositionToActiveFolderIndex(groupPosition));
}
/** Get the cached SocialFeed object for the feed at the given list location. */ /** Get the cached SocialFeed object for the feed at the given list location. */
public SocialFeed getSocialFeed(int groupPosition, int childPosition) { public SocialFeed getSocialFeed(int groupPosition, int childPosition) {
return socialFeedsOrdered.get(childPosition); return socialFeedsOrdered.get(childPosition);

View file

@ -1,6 +1,8 @@
package com.newsblur.fragment; package com.newsblur.fragment;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import android.app.LoaderManager; import android.app.LoaderManager;
import android.content.Loader; import android.content.Loader;
@ -289,9 +291,17 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
DialogFragment chooseFoldersFragment = ChooseFoldersFragment.newInstance(adapter.getFeed(groupPosition, childPosition)); DialogFragment chooseFoldersFragment = ChooseFoldersFragment.newInstance(adapter.getFeed(groupPosition, childPosition));
chooseFoldersFragment.show(getFragmentManager(), "dialog"); chooseFoldersFragment.show(getFragmentManager(), "dialog");
} else if (item.getItemId() == R.id.menu_mute_feed) { } else if (item.getItemId() == R.id.menu_mute_feed) {
FeedUtils.muteFeed(getActivity(), adapter.getFeed(groupPosition, childPosition)); List<Feed> feeds = new ArrayList<Feed>();
feeds.add(adapter.getFeed(groupPosition, childPosition));
FeedUtils.muteFeeds(getActivity(), feeds);
} else if (item.getItemId() == R.id.menu_unmute_feed) { } else if (item.getItemId() == R.id.menu_unmute_feed) {
FeedUtils.unmuteFeed(getActivity(), adapter.getFeed(groupPosition, childPosition)); List<Feed> feeds = new ArrayList<Feed>();
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); return super.onContextItemSelected(item);

View file

@ -2,6 +2,7 @@ package com.newsblur.util;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import android.content.Context; import android.content.Context;
@ -287,31 +288,35 @@ public class FeedUtils {
}.execute(); }.execute();
} }
public static void muteFeed(final Context context, final Feed feed) { public static void muteFeeds(final Context context, final List<Feed> feeds) {
updateFeedActiveState(context, feed, false); updateFeedActiveState(context, feeds, false);
} }
public static void unmuteFeed(final Context context, final Feed feed) { public static void unmuteFeeds(final Context context, final List<Feed> feeds) {
updateFeedActiveState(context, feed, true); 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<Feed> feeds, final boolean active) {
new AsyncTask<Void, Void, NewsBlurResponse>() { new AsyncTask<Void, Void, NewsBlurResponse>() {
@Override @Override
protected NewsBlurResponse doInBackground(Void... arg) { protected NewsBlurResponse doInBackground(Void... arg) {
APIManager apiManager = new APIManager(context); APIManager apiManager = new APIManager(context);
Set<String> activeFeeds = dbHelper.getAllActiveFeeds(); Set<String> activeFeeds = dbHelper.getAllActiveFeeds();
if (active) { for (Feed feed : feeds) {
activeFeeds.add(feed.feedId); if (active) {
} else { activeFeeds.add(feed.feedId);
activeFeeds.remove(feed.feedId); } else {
activeFeeds.remove(feed.feedId);
}
} }
return apiManager.saveFeedChooser(activeFeeds); return apiManager.saveFeedChooser(activeFeeds);
} }
@Override @Override
protected void onPostExecute(NewsBlurResponse result) { protected void onPostExecute(NewsBlurResponse result) {
feed.active = active; for (Feed feed : feeds) {
dbHelper.setFeedActive(feed.feedId, active); feed.active = active;
}
dbHelper.setFeedsActive(feeds, active);
NbActivity.updateAllActivities(NbActivity.UPDATE_METADATA); NbActivity.updateAllActivities(NbActivity.UPDATE_METADATA);
triggerSync(context); triggerSync(context);
} }