diff --git a/briar-android/res/menu/forum_actions.xml b/briar-android/res/menu/forum_actions.xml
index a4ff00a86..7eabf7e5e 100644
--- a/briar-android/res/menu/forum_actions.xml
+++ b/briar-android/res/menu/forum_actions.xml
@@ -15,4 +15,10 @@
android:title="@string/forum_share_button"
app:showAsAction="ifRoom"/>
+
+
\ No newline at end of file
diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index 4bbeca768..2da9399cc 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -78,8 +78,8 @@
- %d forums shared by contacts
Show
- Unsubscribe
- Unsubscribed
+ Leave Forum
+ Forum Left
No posts
New Forum
Choose a name for your forum:
@@ -194,7 +194,10 @@
Add a contact to start communicating securely or press the icon in the upper left corner of the screen for more options.
Briar has crashed
Would you like to review the crash report and send it to the developers? It will be stored encrypted on your device until the next time you log into Briar, and then sent securely to the developers.
+ Confirm Leaving Forum
+ Are you sure that you want to remove this forum? Contacts you have shared this forum with might get cut off from receiving updates for this forum.
OK
+ Remove
Introduce
Accept
Decline
diff --git a/briar-android/src/org/briarproject/android/forum/ForumActivity.java b/briar-android/src/org/briarproject/android/forum/ForumActivity.java
index 6dd00d231..8ecb6bf5f 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumActivity.java
@@ -1,9 +1,11 @@
package org.briarproject.android.forum;
+import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
+import android.support.v7.app.AlertDialog;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -13,6 +15,7 @@ import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
+import android.widget.Toast;
import org.briarproject.R;
import org.briarproject.android.AndroidComponent;
@@ -51,6 +54,7 @@ import static android.view.Gravity.CENTER_HORIZONTAL;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static android.widget.LinearLayout.VERTICAL;
+import static android.widget.Toast.LENGTH_SHORT;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
import static org.briarproject.android.forum.ReadForumPostActivity.RESULT_PREV_NEXT;
@@ -163,6 +167,9 @@ public class ForumActivity extends BriarActivity implements EventListener,
android.R.anim.slide_out_right);
ActivityCompat.startActivity(this, i2, options.toBundle());
return true;
+ case R.id.action_forum_delete:
+ showUnsubscribeDialog();
+ return true;
default:
return super.onOptionsItemSelected(item);
}
@@ -381,4 +388,43 @@ public class ForumActivity extends BriarActivity implements EventListener,
i.putExtra("briar.POSITION", position);
startActivityForResult(i, REQUEST_READ);
}
+
+ private void showUnsubscribeDialog() {
+ DialogInterface.OnClickListener okListener =
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ unsubscribe(forum);
+ Toast.makeText(ForumActivity.this,
+ R.string.forum_left_toast, LENGTH_SHORT)
+ .show();
+ }
+ };
+ AlertDialog.Builder builder =
+ new AlertDialog.Builder(ForumActivity.this,
+ R.style.BriarDialogTheme);
+ builder.setTitle(getString(R.string.dialog_title_remove_forum));
+ builder.setMessage(getString(R.string.dialog_message_remove_forum));
+ builder.setPositiveButton(R.string.dialog_button_remove, okListener);
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.show();
+ }
+
+ private void unsubscribe(final Forum f) {
+ runOnDbThread(new Runnable() {
+ public void run() {
+ try {
+ long now = System.currentTimeMillis();
+ forumManager.removeForum(f);
+ long duration = System.currentTimeMillis() - now;
+ if (LOG.isLoggable(INFO))
+ LOG.info("Removing forum took " + duration + " ms");
+ } catch (DbException e) {
+ if (LOG.isLoggable(WARNING))
+ LOG.log(WARNING, e.toString(), e);
+ }
+ }
+ });
+ }
+
}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java
index dea9d1fe4..bd5a62026 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java
@@ -5,8 +5,6 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
-import android.view.ContextMenu;
-import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -14,11 +12,9 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
-import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
-import android.widget.Toast;
import org.briarproject.R;
import org.briarproject.android.AndroidComponent;
@@ -46,11 +42,9 @@ import javax.inject.Inject;
import static android.support.design.widget.Snackbar.LENGTH_INDEFINITE;
import static android.view.Gravity.CENTER;
import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.Menu.NONE;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static android.widget.LinearLayout.VERTICAL;
-import static android.widget.Toast.LENGTH_SHORT;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
import static org.briarproject.android.BriarActivity.GROUP_ID;
@@ -75,8 +69,6 @@ public class ForumListFragment extends BaseEventFragment implements
return fragment;
}
- private static final int MENU_ITEM_UNSUBSCRIBE = 1;
-
private TextView empty = null;
private ForumListAdapter adapter = null;
private ListView list = null;
@@ -112,7 +104,6 @@ public class ForumListFragment extends BaseEventFragment implements
list.setLayoutParams(MATCH_WRAP_1);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
- list.setOnCreateContextMenuListener(this);
list.setVisibility(GONE);
layout.addView(list);
@@ -376,40 +367,4 @@ public class ForumListFragment extends BaseEventFragment implements
startActivity(i);
}
- @Override
- public void onCreateContextMenu(ContextMenu menu, View view,
- ContextMenuInfo info) {
- String delete = getString(R.string.unsubscribe);
- menu.add(NONE, MENU_ITEM_UNSUBSCRIBE, NONE, delete);
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem menuItem) {
- if (menuItem.getItemId() == MENU_ITEM_UNSUBSCRIBE) {
- ContextMenuInfo info = menuItem.getMenuInfo();
- int position = ((AdapterContextMenuInfo) info).position;
- ForumListItem item = adapter.getItem(position);
- unsubscribe(item.getForum());
- String unsubscribed = getString(R.string.unsubscribed_toast);
- Toast.makeText(getContext(), unsubscribed, LENGTH_SHORT).show();
- }
- return true;
- }
-
- private void unsubscribe(final Forum f) {
- listener.runOnDbThread(new Runnable() {
- public void run() {
- try {
- long now = System.currentTimeMillis();
- forumManager.removeForum(f);
- long duration = System.currentTimeMillis() - now;
- if (LOG.isLoggable(INFO))
- LOG.info("Removing forum took " + duration + " ms");
- } catch (DbException e) {
- if (LOG.isLoggable(WARNING))
- LOG.log(WARNING, e.toString(), e);
- }
- }
- });
- }
}