mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 13:19:52 +01:00
Move removal of named groups into ViewModel
This commit is contained in:
@@ -6,15 +6,12 @@ import android.os.Bundle;
|
|||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import org.briarproject.bramble.api.contact.ContactId;
|
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.MethodsNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
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.forum.ForumController.ForumListener;
|
||||||
import org.briarproject.briar.android.sharing.ForumSharingStatusActivity;
|
import org.briarproject.briar.android.sharing.ForumSharingStatusActivity;
|
||||||
import org.briarproject.briar.android.sharing.ShareForumActivity;
|
import org.briarproject.briar.android.sharing.ShareForumActivity;
|
||||||
@@ -33,7 +30,6 @@ import androidx.lifecycle.ViewModelProvider;
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
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.activity.RequestCodes.REQUEST_SHARE_FORUM;
|
||||||
import static org.briarproject.briar.android.util.UiUtils.observeOnce;
|
import static org.briarproject.briar.android.util.UiUtils.observeOnce;
|
||||||
import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
|
import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
|
||||||
@@ -149,7 +145,7 @@ public class ForumActivity extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void showUnsubscribeDialog() {
|
private void showUnsubscribeDialog() {
|
||||||
OnClickListener okListener = (dialog, which) -> deleteForum();
|
OnClickListener okListener = (dialog, which) -> viewModel.deleteForum();
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(this,
|
AlertDialog.Builder builder = new AlertDialog.Builder(this,
|
||||||
R.style.BriarDialogTheme);
|
R.style.BriarDialogTheme);
|
||||||
builder.setTitle(getString(R.string.dialog_title_leave_forum));
|
builder.setTitle(getString(R.string.dialog_title_leave_forum));
|
||||||
@@ -159,22 +155,6 @@ public class ForumActivity extends
|
|||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteForum() {
|
|
||||||
forumController.deleteNamedGroup(
|
|
||||||
new UiResultExceptionHandler<Void, DbException>(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
|
@Override
|
||||||
public void onForumLeft(ContactId c) {
|
public void onForumLeft(ContactId c) {
|
||||||
sharingController.remove(c);
|
sharingController.remove(c);
|
||||||
|
|||||||
@@ -98,11 +98,6 @@ class ForumControllerImpl extends
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Forum loadNamedGroup() throws DbException {
|
|
||||||
return forumManager.getForum(getGroupId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<ForumPostHeader> loadHeaders() throws DbException {
|
protected Collection<ForumPostHeader> loadHeaders() throws DbException {
|
||||||
return forumManager.getPostHeaders(getGroupId());
|
return forumManager.getPostHeaders(getGroupId());
|
||||||
@@ -172,11 +167,6 @@ class ForumControllerImpl extends
|
|||||||
return forumManager.addLocalPost(p);
|
return forumManager.addLocalPost(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void deleteNamedGroup(Forum forum) throws DbException {
|
|
||||||
forumManager.removeForum(forum);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ForumPostItem buildItem(ForumPostHeader header, String text) {
|
protected ForumPostItem buildItem(ForumPostHeader header, String text) {
|
||||||
return new ForumPostItem(header, text);
|
return new ForumPostItem(header, text);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.briarproject.briar.android.forum;
|
package org.briarproject.briar.android.forum;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.crypto.CryptoExecutor;
|
import org.briarproject.bramble.api.crypto.CryptoExecutor;
|
||||||
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
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.nullsafety.ParametersNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.system.AndroidExecutor;
|
import org.briarproject.bramble.api.system.AndroidExecutor;
|
||||||
import org.briarproject.bramble.api.system.Clock;
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.threaded.ThreadListViewModel;
|
import org.briarproject.briar.android.threaded.ThreadListViewModel;
|
||||||
import org.briarproject.briar.api.android.AndroidNotificationManager;
|
import org.briarproject.briar.api.android.AndroidNotificationManager;
|
||||||
import org.briarproject.briar.api.forum.Forum;
|
import org.briarproject.briar.api.forum.Forum;
|
||||||
@@ -28,6 +30,7 @@ import javax.inject.Inject;
|
|||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import static android.widget.Toast.LENGTH_SHORT;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
import static java.util.logging.Logger.getLogger;
|
import static java.util.logging.Logger.getLogger;
|
||||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||||
@@ -79,4 +82,17 @@ class ForumViewModel extends ThreadListViewModel<Forum, ForumPostItem> {
|
|||||||
return forum;
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package org.briarproject.briar.android.privategroup.conversation;
|
package org.briarproject.briar.android.privategroup.conversation;
|
||||||
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.DialogInterface.OnClickListener;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.Menu;
|
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.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
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.controller.handler.UiResultExceptionHandler;
|
||||||
import org.briarproject.briar.android.privategroup.conversation.GroupController.GroupListener;
|
import org.briarproject.briar.android.privategroup.conversation.GroupController.GroupListener;
|
||||||
import org.briarproject.briar.android.privategroup.creation.GroupInviteActivity;
|
import org.briarproject.briar.android.privategroup.creation.GroupInviteActivity;
|
||||||
@@ -45,7 +42,7 @@ import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_
|
|||||||
@ParametersNotNullByDefault
|
@ParametersNotNullByDefault
|
||||||
public class GroupActivity extends
|
public class GroupActivity extends
|
||||||
ThreadListActivity<PrivateGroup, GroupMessageItem, GroupMessageAdapter>
|
ThreadListActivity<PrivateGroup, GroupMessageItem, GroupMessageAdapter>
|
||||||
implements GroupListener, OnClickListener {
|
implements GroupListener {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
ViewModelProvider.Factory viewModelFactory;
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
@@ -244,7 +241,8 @@ public class GroupActivity extends
|
|||||||
new AlertDialog.Builder(this, R.style.BriarDialogTheme);
|
new AlertDialog.Builder(this, R.style.BriarDialogTheme);
|
||||||
builder.setTitle(getString(R.string.groups_leave_dialog_title));
|
builder.setTitle(getString(R.string.groups_leave_dialog_title));
|
||||||
builder.setMessage(getString(R.string.groups_leave_dialog_message));
|
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.setPositiveButton(R.string.cancel, null);
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
@@ -254,22 +252,16 @@ public class GroupActivity extends
|
|||||||
new AlertDialog.Builder(this, R.style.BriarDialogTheme);
|
new AlertDialog.Builder(this, R.style.BriarDialogTheme);
|
||||||
builder.setTitle(getString(R.string.groups_dissolve_dialog_title));
|
builder.setTitle(getString(R.string.groups_dissolve_dialog_title));
|
||||||
builder.setMessage(getString(R.string.groups_dissolve_dialog_message));
|
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.setPositiveButton(R.string.cancel, null);
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void deleteGroup() {
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
// The activity is going to be destroyed by the
|
||||||
controller.deleteNamedGroup(
|
// GroupRemovedEvent being fired
|
||||||
new UiExceptionHandler<DbException>(this) {
|
viewModel.deletePrivateGroup();
|
||||||
// The activity is going to be destroyed by the
|
|
||||||
// GroupRemovedEvent being fired
|
|
||||||
@Override
|
|
||||||
public void onExceptionUi(DbException exception) {
|
|
||||||
handleException(exception);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -108,11 +108,6 @@ class GroupControllerImpl extends
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected PrivateGroup loadNamedGroup() throws DbException {
|
|
||||||
return privateGroupManager.getPrivateGroup(getGroupId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<GroupMessageHeader> loadHeaders() throws DbException {
|
protected Collection<GroupMessageHeader> loadHeaders() throws DbException {
|
||||||
return privateGroupManager.getHeaders(getGroupId());
|
return privateGroupManager.getHeaders(getGroupId());
|
||||||
@@ -196,11 +191,6 @@ class GroupControllerImpl extends
|
|||||||
return privateGroupManager.addLocalMessage(message);
|
return privateGroupManager.addLocalMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void deleteNamedGroup(PrivateGroup group) throws DbException {
|
|
||||||
privateGroupManager.removePrivateGroup(group.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected GroupMessageItem buildItem(GroupMessageHeader header,
|
protected GroupMessageItem buildItem(GroupMessageHeader header,
|
||||||
String text) {
|
String text) {
|
||||||
|
|||||||
@@ -91,6 +91,16 @@ class GroupViewModel
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void deletePrivateGroup() {
|
||||||
|
runOnDbThread(() -> {
|
||||||
|
try {
|
||||||
|
privateGroupManager.removePrivateGroup(groupId);
|
||||||
|
} catch (DbException e) {
|
||||||
|
logException(LOG, WARNING, e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
LiveData<PrivateGroup> getPrivateGroup() {
|
LiveData<PrivateGroup> getPrivateGroup() {
|
||||||
return privateGroup;
|
return privateGroup;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
|||||||
import org.briarproject.bramble.api.sync.GroupId;
|
import org.briarproject.bramble.api.sync.GroupId;
|
||||||
import org.briarproject.bramble.api.sync.MessageId;
|
import org.briarproject.bramble.api.sync.MessageId;
|
||||||
import org.briarproject.briar.android.controller.ActivityLifecycleController;
|
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.android.controller.handler.ResultExceptionHandler;
|
||||||
import org.briarproject.briar.api.client.NamedGroup;
|
import org.briarproject.briar.api.client.NamedGroup;
|
||||||
|
|
||||||
@@ -35,8 +34,6 @@ public interface ThreadListController<G extends NamedGroup, I extends ThreadItem
|
|||||||
void createAndStoreMessage(String text, @Nullable I parentItem,
|
void createAndStoreMessage(String text, @Nullable I parentItem,
|
||||||
ResultExceptionHandler<I, DbException> handler);
|
ResultExceptionHandler<I, DbException> handler);
|
||||||
|
|
||||||
void deleteNamedGroup(ExceptionHandler<DbException> handler);
|
|
||||||
|
|
||||||
interface ThreadListListener<I> extends ThreadListDataSource {
|
interface ThreadListListener<I> extends ThreadListDataSource {
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import org.briarproject.bramble.api.sync.MessageId;
|
|||||||
import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
|
import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
|
||||||
import org.briarproject.bramble.api.system.Clock;
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
import org.briarproject.briar.android.controller.DbControllerImpl;
|
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.controller.handler.ResultExceptionHandler;
|
||||||
import org.briarproject.briar.android.threaded.ThreadListController.ThreadListListener;
|
import org.briarproject.briar.android.threaded.ThreadListController.ThreadListListener;
|
||||||
import org.briarproject.briar.api.android.AndroidNotificationManager;
|
import org.briarproject.briar.api.android.AndroidNotificationManager;
|
||||||
@@ -130,9 +129,6 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@DatabaseExecutor
|
|
||||||
protected abstract G loadNamedGroup() throws DbException;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadItems(
|
public void loadItems(
|
||||||
ResultExceptionHandler<ThreadItemList<I>, DbException> handler) {
|
ResultExceptionHandler<ThreadItemList<I>, DbException> handler) {
|
||||||
@@ -211,24 +207,6 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
|
|||||||
@DatabaseExecutor
|
@DatabaseExecutor
|
||||||
protected abstract H addLocalMessage(M message) throws DbException;
|
protected abstract H addLocalMessage(M message) throws DbException;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteNamedGroup(ExceptionHandler<DbException> 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<I> buildItems(Collection<H> headers)
|
private ThreadItemList<I> buildItems(Collection<H> headers)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
ThreadItemList<I> items = new ThreadItemListImpl<>();
|
ThreadItemList<I> items = new ThreadItemListImpl<>();
|
||||||
|
|||||||
Reference in New Issue
Block a user