diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java index 8e6067729..56f948f4b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java @@ -1,15 +1,16 @@ package org.briarproject.briar.android.blog; +import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.Snackbar; +import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import org.briarproject.bramble.api.db.DbException; -import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; @@ -34,7 +35,6 @@ public class RssFeedManageActivity extends BriarActivity private BriarRecyclerView list; private RssFeedAdapter adapter; - private GroupId groupId; @Inject @SuppressWarnings("WeakerAccess") @@ -44,12 +44,6 @@ public class RssFeedManageActivity extends BriarActivity public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // GroupId from Intent - Intent i = getIntent(); - byte[] b = i.getByteArrayExtra(GROUP_ID); - if (b == null) throw new IllegalStateException("No Group in intent."); - groupId = new GroupId(b); - setContentView(R.layout.activity_rss_feed_manage); adapter = new RssFeedAdapter(this, this); @@ -101,19 +95,22 @@ public class RssFeedManageActivity extends BriarActivity @Override public void onDeleteClick(final Feed feed) { - runOnDbThread(new Runnable() { - @Override - public void run() { - try { - feedManager.removeFeed(feed.getUrl()); - onFeedDeleted(feed); - } catch (DbException e) { - if (LOG.isLoggable(WARNING)) - LOG.log(WARNING, e.toString(), e); - onDeleteError(); - } - } - }); + DialogInterface.OnClickListener okListener = + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + deleteFeed(feed); + } + }; + AlertDialog.Builder builder = new AlertDialog.Builder(this, + R.style.BriarDialogTheme); + builder.setTitle(getString(R.string.blogs_rss_remove_feed)); + builder.setMessage( + getString(R.string.blogs_rss_remove_feed_dialog_message)); + builder.setPositiveButton(R.string.cancel, null); + builder.setNegativeButton(R.string.blogs_rss_remove_feed_ok, + okListener); + builder.show(); } private void loadFeeds() { @@ -148,6 +145,22 @@ public class RssFeedManageActivity extends BriarActivity }); } + private void deleteFeed(final Feed feed) { + runOnDbThread(new Runnable() { + @Override + public void run() { + try { + feedManager.removeFeed(feed); + onFeedDeleted(feed); + } catch (DbException e) { + if (LOG.isLoggable(WARNING)) + LOG.log(WARNING, e.toString(), e); + onDeleteError(); + } + } + }); + } + private void onLoadError() { runOnUiThreadUnlessDestroyed(new Runnable() { @Override diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 99e86b60e..5103e596b 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -304,6 +304,9 @@ Imported: Author: Last Updated: + Remove Feed + Are you sure that you want to remove this feed and all its posts?\nNote that this will not remove the feed\'s blog from other people\'s devices. + Remove Feed The feed could not be deleted! You haven\'t imported any RSS feeds.\n\nWhy don\'t you click the plus in the top right screen corner to add your first? There was a problem loading your feeds. Please try again later. diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java index 20ffb991c..041d474a4 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java @@ -41,6 +41,11 @@ public interface BlogManager { */ void removeBlog(Blog b) throws DbException; + /** + * Removes and deletes a blog with the given {@link Transaction}. + */ + void removeBlog(Transaction txn, Blog b) throws DbException; + /** * Stores a local blog post. */ diff --git a/briar-api/src/main/java/org/briarproject/briar/api/feed/FeedManager.java b/briar-api/src/main/java/org/briarproject/briar/api/feed/FeedManager.java index 74a762eaf..7d83b22c1 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/feed/FeedManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/feed/FeedManager.java @@ -23,7 +23,7 @@ public interface FeedManager { /** * Removes an RSS feed. */ - void removeFeed(String url) throws DbException; + void removeFeed(Feed feed) throws DbException; /** * Returns a list of all added RSS feeds diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java index 496b308fb..22b800916 100644 --- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java @@ -224,6 +224,11 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager, } } + @Override + public void removeBlog(Transaction txn, Blog b) throws DbException { + removeBlog(txn, b, false); + } + private void removeBlog(Transaction txn, Blog b, boolean forced) throws DbException { if (!forced && !canBeRemoved(txn, b.getId())) diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java index 8168d58b1..8db542e8b 100644 --- a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java @@ -203,22 +203,20 @@ class FeedManagerImpl implements FeedManager, Client, EventListener { } @Override - public void removeFeed(String url) throws DbException { + public void removeFeed(Feed feed) throws DbException { LOG.info("Removing RSS feed..."); Transaction txn = db.startTransaction(false); try { List feeds = getFeeds(txn); - Feed feed = null; for (Feed f : feeds) { - if (f.getUrl().equals(url)) { + if (f.getBlogId().equals(feed.getBlogId())) { feed = f; feeds.remove(f); break; } } - if (feed == null) throw new DbException(); storeFeeds(txn, feeds); - // TODO blogManager.removeBlog(txn, feed.getBlog()); + blogManager.removeBlog(txn, feed.getBlog()); db.commitTransaction(txn); } finally { db.endTransaction(txn);