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 8e60677299498170a6da23c93be30f0042ce5547..56f948f4b7d51297ba531bf9f05fe2ab8cc05a4b 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 99e86b60e60929346467ce67fc34962e99de9a73..5103e596b706520ba544bbdd88fa3a926c75f5d4 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -304,6 +304,9 @@ <string name="blogs_rss_feeds_manage_imported">Imported:</string> <string name="blogs_rss_feeds_manage_author">Author:</string> <string name="blogs_rss_feeds_manage_updated">Last Updated:</string> + <string name="blogs_rss_remove_feed">Remove Feed</string> + <string name="blogs_rss_remove_feed_dialog_message">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.</string> + <string name="blogs_rss_remove_feed_ok">Remove Feed</string> <string name="blogs_rss_feeds_manage_delete_error">The feed could not be deleted!</string> <string name="blogs_rss_feeds_manage_empty_state">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?</string> <string name="blogs_rss_feeds_manage_error">There was a problem loading your feeds. Please try again later.</string> 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 20ffb991cac62a97aa50182af88299e2b5ff08fd..041d474a4eca490b8444c47a9feac2c652792800 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 74a762eaf96bc9cdb75aaaa5314d39bffee5b934..7d83b22c151d70e37e69e7d04272001464b10a3b 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 496b308fb59513dfc948b0a5d21d7c02d5b98196..22b8009167f654c2381430b52bbde1e18c7d7d90 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 8168d58b19228ac048793a5aa8841e92afa66ef5..8db542e8b9a1034d2320990f7a526c3da80eefe4 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<Feed> 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);