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"
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>

View file

@ -132,6 +132,8 @@
<string name="menu_search_stories">Search…</string>
<string name="menu_mute_feed">Mute 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>

View file

@ -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<Feed> 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();
}
}
}
/**

View file

@ -625,6 +625,10 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
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. */
public SocialFeed getSocialFeed(int groupPosition, int childPosition) {
return socialFeedsOrdered.get(childPosition);

View file

@ -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<Feed> feeds = new ArrayList<Feed>();
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<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);

View file

@ -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<Feed> 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<Feed> 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<Feed> feeds, final boolean active) {
new AsyncTask<Void, Void, NewsBlurResponse>() {
@Override
protected NewsBlurResponse doInBackground(Void... arg) {
APIManager apiManager = new APIManager(context);
Set<String> 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);
}