From 6611d7c02ecaeb2bb52d0c15fb2be59a76103b34 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 6 Jan 2021 11:18:45 -0300 Subject: [PATCH] Move removal of named groups into ViewModel --- .../briar/android/forum/ForumActivity.java | 22 +--------------- .../android/forum/ForumControllerImpl.java | 10 ------- .../briar/android/forum/ForumViewModel.java | 16 ++++++++++++ .../conversation/GroupActivity.java | 26 +++++++------------ .../conversation/GroupControllerImpl.java | 10 ------- .../conversation/GroupViewModel.java | 10 +++++++ .../threaded/ThreadListController.java | 3 --- .../threaded/ThreadListControllerImpl.java | 22 ---------------- 8 files changed, 36 insertions(+), 83 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java index 41ddde2cd..c9c7637ef 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java @@ -6,15 +6,12 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.widget.Toast; import org.briarproject.bramble.api.contact.ContactId; -import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; -import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler; import org.briarproject.briar.android.forum.ForumController.ForumListener; import org.briarproject.briar.android.sharing.ForumSharingStatusActivity; import org.briarproject.briar.android.sharing.ShareForumActivity; @@ -33,7 +30,6 @@ import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; -import static android.widget.Toast.LENGTH_SHORT; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_SHARE_FORUM; import static org.briarproject.briar.android.util.UiUtils.observeOnce; import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH; @@ -149,7 +145,7 @@ public class ForumActivity extends } private void showUnsubscribeDialog() { - OnClickListener okListener = (dialog, which) -> deleteForum(); + OnClickListener okListener = (dialog, which) -> viewModel.deleteForum(); AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.BriarDialogTheme); builder.setTitle(getString(R.string.dialog_title_leave_forum)); @@ -159,22 +155,6 @@ public class ForumActivity extends builder.show(); } - private void deleteForum() { - forumController.deleteNamedGroup( - new UiResultExceptionHandler(this) { - @Override - public void onResultUi(Void v) { - Toast.makeText(ForumActivity.this, - R.string.forum_left_toast, LENGTH_SHORT).show(); - } - - @Override - public void onExceptionUi(DbException exception) { - handleException(exception); - } - }); - } - @Override public void onForumLeft(ContactId c) { sharingController.remove(c); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java index 6ad325d5b..6a931f991 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java @@ -98,11 +98,6 @@ class ForumControllerImpl extends } } - @Override - protected Forum loadNamedGroup() throws DbException { - return forumManager.getForum(getGroupId()); - } - @Override protected Collection loadHeaders() throws DbException { return forumManager.getPostHeaders(getGroupId()); @@ -172,11 +167,6 @@ class ForumControllerImpl extends return forumManager.addLocalPost(p); } - @Override - protected void deleteNamedGroup(Forum forum) throws DbException { - forumManager.removeForum(forum); - } - @Override protected ForumPostItem buildItem(ForumPostHeader header, String text) { return new ForumPostItem(header, text); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumViewModel.java index f469bec8b..2e2045568 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumViewModel.java @@ -1,6 +1,7 @@ package org.briarproject.briar.android.forum; import android.app.Application; +import android.widget.Toast; import org.briarproject.bramble.api.crypto.CryptoExecutor; import org.briarproject.bramble.api.db.DatabaseExecutor; @@ -14,6 +15,7 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.bramble.api.system.Clock; +import org.briarproject.briar.R; import org.briarproject.briar.android.threaded.ThreadListViewModel; import org.briarproject.briar.api.android.AndroidNotificationManager; import org.briarproject.briar.api.forum.Forum; @@ -28,6 +30,7 @@ import javax.inject.Inject; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import static android.widget.Toast.LENGTH_SHORT; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.LogUtils.logException; @@ -79,4 +82,17 @@ class ForumViewModel extends ThreadListViewModel { return forum; } + void deleteForum() { + runOnDbThread(() -> { + try { + Forum f = forumManager.getForum(groupId); + forumManager.removeForum(f); + } catch (DbException e) { + logException(LOG, WARNING, e); + } + }); + Toast.makeText(getApplication(), R.string.forum_left_toast, + LENGTH_SHORT).show(); + } + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java index a5079e5e0..bd0bcd8c2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java @@ -1,7 +1,5 @@ package org.briarproject.briar.android.privategroup.conversation; -import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.os.Bundle; import android.view.Menu; @@ -15,7 +13,6 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; -import org.briarproject.briar.android.controller.handler.UiExceptionHandler; import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler; import org.briarproject.briar.android.privategroup.conversation.GroupController.GroupListener; import org.briarproject.briar.android.privategroup.creation.GroupInviteActivity; @@ -45,7 +42,7 @@ import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_ @ParametersNotNullByDefault public class GroupActivity extends ThreadListActivity - implements GroupListener, OnClickListener { + implements GroupListener { @Inject ViewModelProvider.Factory viewModelFactory; @@ -244,7 +241,8 @@ public class GroupActivity extends new AlertDialog.Builder(this, R.style.BriarDialogTheme); builder.setTitle(getString(R.string.groups_leave_dialog_title)); builder.setMessage(getString(R.string.groups_leave_dialog_message)); - builder.setNegativeButton(R.string.dialog_button_leave, this); + builder.setNegativeButton(R.string.dialog_button_leave, + (d, w) -> deleteGroup()); builder.setPositiveButton(R.string.cancel, null); builder.show(); } @@ -254,22 +252,16 @@ public class GroupActivity extends new AlertDialog.Builder(this, R.style.BriarDialogTheme); builder.setTitle(getString(R.string.groups_dissolve_dialog_title)); builder.setMessage(getString(R.string.groups_dissolve_dialog_message)); - builder.setNegativeButton(R.string.groups_dissolve_button, this); + builder.setNegativeButton(R.string.groups_dissolve_button, + (d, w) -> deleteGroup()); builder.setPositiveButton(R.string.cancel, null); builder.show(); } - @Override - public void onClick(DialogInterface dialog, int which) { - controller.deleteNamedGroup( - new UiExceptionHandler(this) { - // The activity is going to be destroyed by the - // GroupRemovedEvent being fired - @Override - public void onExceptionUi(DbException exception) { - handleException(exception); - } - }); + private void deleteGroup() { + // The activity is going to be destroyed by the + // GroupRemovedEvent being fired + viewModel.deletePrivateGroup(); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java index e35d5b0c3..e88f8be6a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java @@ -108,11 +108,6 @@ class GroupControllerImpl extends } } - @Override - protected PrivateGroup loadNamedGroup() throws DbException { - return privateGroupManager.getPrivateGroup(getGroupId()); - } - @Override protected Collection loadHeaders() throws DbException { return privateGroupManager.getHeaders(getGroupId()); @@ -196,11 +191,6 @@ class GroupControllerImpl extends return privateGroupManager.addLocalMessage(message); } - @Override - protected void deleteNamedGroup(PrivateGroup group) throws DbException { - privateGroupManager.removePrivateGroup(group.getId()); - } - @Override protected GroupMessageItem buildItem(GroupMessageHeader header, String text) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupViewModel.java index 6fb39aeb6..d47e544df 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupViewModel.java @@ -91,6 +91,16 @@ class GroupViewModel }); } + void deletePrivateGroup() { + runOnDbThread(() -> { + try { + privateGroupManager.removePrivateGroup(groupId); + } catch (DbException e) { + logException(LOG, WARNING, e); + } + }); + } + LiveData getPrivateGroup() { return privateGroup; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java index a1c30b901..4992722ff 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java @@ -6,7 +6,6 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.android.controller.ActivityLifecycleController; -import org.briarproject.briar.android.controller.handler.ExceptionHandler; import org.briarproject.briar.android.controller.handler.ResultExceptionHandler; import org.briarproject.briar.api.client.NamedGroup; @@ -35,8 +34,6 @@ public interface ThreadListController handler); - void deleteNamedGroup(ExceptionHandler handler); - interface ThreadListListener extends ThreadListDataSource { @UiThread diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java index 9435e3017..021d4af75 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java @@ -17,7 +17,6 @@ import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.event.GroupRemovedEvent; import org.briarproject.bramble.api.system.Clock; import org.briarproject.briar.android.controller.DbControllerImpl; -import org.briarproject.briar.android.controller.handler.ExceptionHandler; import org.briarproject.briar.android.controller.handler.ResultExceptionHandler; import org.briarproject.briar.android.threaded.ThreadListController.ThreadListListener; import org.briarproject.briar.api.android.AndroidNotificationManager; @@ -130,9 +129,6 @@ public abstract class ThreadListControllerImpl, DbException> handler) { @@ -211,24 +207,6 @@ public abstract class ThreadListControllerImpl handler) { - runOnDbThread(() -> { - try { - long start = now(); - G groupItem = loadNamedGroup(); - deleteNamedGroup(groupItem); - logDuration(LOG, "Removing group", start); - } catch (DbException e) { - logException(LOG, WARNING, e); - handler.onException(e); - } - }); - } - - @DatabaseExecutor - protected abstract void deleteNamedGroup(G groupItem) throws DbException; - private ThreadItemList buildItems(Collection headers) throws DbException { ThreadItemList items = new ThreadItemListImpl<>();