diff --git a/briar-android/res/menu/blogs_my_blog_actions.xml b/briar-android/res/menu/blogs_my_blog_actions.xml index 5c9052edb01da64626f8a04b6e59f8728a37bf1f..95cb880e767e1eb826d1df231d74cb0ec25800c0 100644 --- a/briar-android/res/menu/blogs_my_blog_actions.xml +++ b/briar-android/res/menu/blogs_my_blog_actions.xml @@ -9,4 +9,10 @@ android:title="@string/blogs_write_blog_post" app:showAsAction="ifRoom"/> + <item + android:id="@+id/action_delete_blog" + android:icon="@drawable/action_delete_white" + android:title="@string/blogs_delete_blog" + app:showAsAction="never"/> + </menu> \ No newline at end of file diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index d283c5c978ccdc6b3803b3532c97a5e72297951c..0c5bfab9328633695c421ec5ee9f0d60d6923734 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -269,6 +269,11 @@ <string name="blogs_publish_blog_post">Publish</string> <string name="blogs_blog_failed_to_load">Blog failed to load</string> <string name="blogs_blog_post_failed_to_load">Blog Post failed to load</string> + <string name="blogs_delete_blog">Delete Blog</string> + <string name="blogs_delete_blog_dialog_message">Are you sure that you want to delete this Blog and all posts?\nNote that this will not delete the blog from other people\'s devices.</string> + <string name="blogs_delete_blog_ok">Delete Blog</string> + <string name="blogs_delete_blog_cancel">Keep</string> + <string name="blogs_remove_blog">Remove Blog</string> <string name="blogs_blog_list">Blog List</string> <string name="blogs_available_blogs">Available Blogs</string> diff --git a/briar-android/res/values/themes.xml b/briar-android/res/values/themes.xml index e87077f031f9ec1e2db96c41eba58cd7f88ff95c..49c05904f621ef1462ff5b771b7b73cf5dddc11d 100644 --- a/briar-android/res/values/themes.xml +++ b/briar-android/res/values/themes.xml @@ -42,6 +42,8 @@ <item name="colorPrimary">@color/briar_primary</item> <item name="colorPrimaryDark">@color/briar_primary_dark</item> <item name="colorAccent">@color/briar_accent</item> + <item name="buttonBarPositiveButtonStyle">@style/BriarButtonFlat.Positive</item> + <item name="buttonBarNegativeButtonStyle">@style/BriarButtonFlat.Negative</item> <item name="android:textColorPrimary">@color/briar_text_primary</item> <item name="android:textColorPrimaryInverse">@color/briar_text_primary_inverse</item> <item name="android:textColorSecondary">@color/briar_text_secondary</item> @@ -49,6 +51,12 @@ <item name="android:textColorTertiary">@color/briar_text_tertiary</item> <item name="android:textColorTertiaryInverse">@color/briar_text_tertiary_inverse</item> <item name="android:textColorLink">@color/briar_text_link</item> + <item name="android:windowAnimationStyle">@style/DialogAnimation</item> + </style> + + <style name="DialogAnimation" parent="@android:style/Animation.Dialog"> + <item name="android:windowEnterAnimation">@android:anim/fade_in</item> + <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style> <!-- This fixes a UI bug in the support preference library --> diff --git a/briar-android/src/org/briarproject/android/blogs/BlogController.java b/briar-android/src/org/briarproject/android/blogs/BlogController.java index ba9d085c2400d91ce520891bfc275e24f6060ca4..a805c2d344e52c6295d60b90e7a79b563604583e 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogController.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogController.java @@ -22,6 +22,8 @@ public interface BlogController extends ActivityLifecycleController { @Nullable MessageId getBlogPostId(int position); + void deleteBlog(final UiResultHandler<Boolean> resultHandler); + interface BlogPostListener { void onBlogPostAdded(final BlogPostItem post, final boolean local); } diff --git a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java index f90a930953fe4e8f909bd39b1d79d1da8eb851a6..eca0bd340be3ce76bfd812c6029d196553adadc3 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java @@ -5,6 +5,7 @@ import android.support.annotation.Nullable; import org.briarproject.android.controller.DbControllerImpl; import org.briarproject.android.controller.handler.UiResultHandler; +import org.briarproject.api.blogs.Blog; import org.briarproject.api.blogs.BlogManager; import org.briarproject.api.blogs.BlogPostHeader; import org.briarproject.api.db.DbException; @@ -168,4 +169,25 @@ public class BlogControllerImpl extends DbControllerImpl return null; } + @Override + public void deleteBlog(final UiResultHandler<Boolean> resultHandler) { + runOnDbThread(new Runnable() { + @Override + public void run() { + if (data.getGroupId() == null) { + resultHandler.onResult(false); + return; + } + try { + Blog b = blogManager.getBlog(data.getGroupId()); + blogManager.removeBlog(b); + } catch (DbException e) { + if (LOG.isLoggable(WARNING)) + LOG.log(WARNING, e.toString(), e); + resultHandler.onResult(false); + } + } + }); + } + } diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java index 430cc611a1ef448f66b93d021427b1c5aebddd1a..ba142cf4e253ef6fb4b569a7adbb99616fa34cb8 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java @@ -1,11 +1,13 @@ package org.briarproject.android.blogs; +import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityOptionsCompat; +import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.view.LayoutInflater; import android.view.Menu; @@ -144,6 +146,9 @@ public class BlogFragment extends BaseFragment implements BlogPostListener { ActivityCompat.startActivityForResult(getActivity(), i, REQUEST_WRITE_POST, options.toBundle()); return true; + case R.id.action_delete_blog: + showDeleteDialog(); + return true; default: return super.onOptionsItemSelected(item); } @@ -188,4 +193,34 @@ public class BlogFragment extends BaseFragment implements BlogPostListener { loadData(true); } + private void showDeleteDialog() { + DialogInterface.OnClickListener okListener = + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + deleteBlog(); + } + }; + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), + R.style.BriarDialogTheme); + builder.setTitle(getString(R.string.blogs_delete_blog)); + builder.setMessage(getString(R.string.blogs_delete_blog_dialog_message)); + builder.setPositiveButton(R.string.blogs_delete_blog_cancel, null); + builder.setNegativeButton(R.string.blogs_delete_blog_ok, okListener); + builder.show(); + } + + private void deleteBlog() { + blogController.deleteBlog( + new UiResultHandler<Boolean>(getActivity()) { + @Override + public void onResultUi(Boolean result) { + if (!result) return; + Toast.makeText(getActivity(), R.string.forum_left_toast, + LENGTH_SHORT).show(); + getActivity().supportFinishAfterTransition(); + } + }); + } + }