mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Merge branch 'remove-forum-without-opening' into 'master'
Allow forums to be removed without opening them See merge request briar/briar!1841
This commit is contained in:
@@ -13,15 +13,18 @@ import androidx.recyclerview.widget.ListAdapter;
|
|||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
class ForumListAdapter extends ListAdapter<ForumListItem, ForumViewHolder> {
|
class ForumListAdapter extends ListAdapter<ForumListItem, ForumViewHolder> {
|
||||||
|
|
||||||
ForumListAdapter() {
|
private final ForumListViewModel viewModel;
|
||||||
|
|
||||||
|
ForumListAdapter(ForumListViewModel viewModel) {
|
||||||
super(new ForumListCallback());
|
super(new ForumListCallback());
|
||||||
|
this.viewModel = viewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ForumViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ForumViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
View v = LayoutInflater.from(parent.getContext()).inflate(
|
View v = LayoutInflater.from(parent.getContext()).inflate(
|
||||||
R.layout.list_item_forum, parent, false);
|
R.layout.list_item_forum, parent, false);
|
||||||
return new ForumViewHolder(v);
|
return new ForumViewHolder(v, viewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class ForumListFragment extends BaseFragment implements
|
|||||||
private ForumListViewModel viewModel;
|
private ForumListViewModel viewModel;
|
||||||
private BriarRecyclerView list;
|
private BriarRecyclerView list;
|
||||||
private Snackbar snackbar;
|
private Snackbar snackbar;
|
||||||
private final ForumListAdapter adapter = new ForumListAdapter();
|
private ForumListAdapter adapter;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
ViewModelProvider.Factory viewModelFactory;
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
@@ -54,6 +54,7 @@ public class ForumListFragment extends BaseFragment implements
|
|||||||
component.inject(this);
|
component.inject(this);
|
||||||
viewModel = new ViewModelProvider(this, viewModelFactory)
|
viewModel = new ViewModelProvider(this, viewModelFactory)
|
||||||
.get(ForumListViewModel.class);
|
.get(ForumListViewModel.class);
|
||||||
|
adapter = new ForumListAdapter(viewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
@@ -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.contact.event.ContactRemovedEvent;
|
import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
|
||||||
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||||
@@ -15,6 +16,7 @@ import org.briarproject.bramble.api.sync.GroupId;
|
|||||||
import org.briarproject.bramble.api.sync.event.GroupAddedEvent;
|
import org.briarproject.bramble.api.sync.event.GroupAddedEvent;
|
||||||
import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
|
import org.briarproject.bramble.api.sync.event.GroupRemovedEvent;
|
||||||
import org.briarproject.bramble.api.system.AndroidExecutor;
|
import org.briarproject.bramble.api.system.AndroidExecutor;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.viewmodel.DbViewModel;
|
import org.briarproject.briar.android.viewmodel.DbViewModel;
|
||||||
import org.briarproject.briar.android.viewmodel.LiveResult;
|
import org.briarproject.briar.android.viewmodel.LiveResult;
|
||||||
import org.briarproject.briar.api.android.AndroidNotificationManager;
|
import org.briarproject.briar.api.android.AndroidNotificationManager;
|
||||||
@@ -40,6 +42,7 @@ import androidx.annotation.UiThread;
|
|||||||
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.Logger.getLogger;
|
import static java.util.logging.Logger.getLogger;
|
||||||
import static org.briarproject.bramble.util.LogUtils.logDuration;
|
import static org.briarproject.bramble.util.LogUtils.logDuration;
|
||||||
import static org.briarproject.bramble.util.LogUtils.now;
|
import static org.briarproject.bramble.util.LogUtils.now;
|
||||||
@@ -180,4 +183,17 @@ class ForumListViewModel extends DbViewModel implements EventListener {
|
|||||||
return numInvitations;
|
return numInvitations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void deleteForum(GroupId groupId) {
|
||||||
|
runOnDbThread(() -> {
|
||||||
|
try {
|
||||||
|
Forum f = forumManager.getForum(groupId);
|
||||||
|
forumManager.removeForum(f);
|
||||||
|
androidExecutor.runOnUiThread(() -> Toast
|
||||||
|
.makeText(getApplication(), R.string.forum_left_toast,
|
||||||
|
LENGTH_SHORT).show());
|
||||||
|
} catch (DbException e) {
|
||||||
|
handleException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
@@ -20,6 +21,7 @@ import static org.briarproject.briar.android.activity.BriarActivity.GROUP_NAME;
|
|||||||
|
|
||||||
class ForumViewHolder extends RecyclerView.ViewHolder {
|
class ForumViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
private final ForumListViewModel viewModel;
|
||||||
private final Context ctx;
|
private final Context ctx;
|
||||||
private final ViewGroup layout;
|
private final ViewGroup layout;
|
||||||
private final TextAvatarView avatar;
|
private final TextAvatarView avatar;
|
||||||
@@ -27,8 +29,9 @@ class ForumViewHolder extends RecyclerView.ViewHolder {
|
|||||||
private final TextView postCount;
|
private final TextView postCount;
|
||||||
private final TextView date;
|
private final TextView date;
|
||||||
|
|
||||||
ForumViewHolder(View v) {
|
ForumViewHolder(View v, ForumListViewModel viewModel) {
|
||||||
super(v);
|
super(v);
|
||||||
|
this.viewModel = viewModel;
|
||||||
ctx = v.getContext();
|
ctx = v.getContext();
|
||||||
layout = (ViewGroup) v;
|
layout = (ViewGroup) v;
|
||||||
avatar = v.findViewById(R.id.avatarView);
|
avatar = v.findViewById(R.id.avatarView);
|
||||||
@@ -64,6 +67,21 @@ class ForumViewHolder extends RecyclerView.ViewHolder {
|
|||||||
date.setVisibility(VISIBLE);
|
date.setVisibility(VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Open popup menu on long click
|
||||||
|
layout.setOnLongClickListener(v -> {
|
||||||
|
PopupMenu pm = new PopupMenu(ctx, v);
|
||||||
|
pm.getMenuInflater().inflate(R.menu.forum_list_item_actions,
|
||||||
|
pm.getMenu());
|
||||||
|
pm.setOnMenuItemClickListener(it -> {
|
||||||
|
if (it.getItemId() == R.id.action_forum_delete) {
|
||||||
|
viewModel.deleteForum(item.getForum().getId());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
pm.show();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
// Open Forum on Click
|
// Open Forum on Click
|
||||||
layout.setOnClickListener(v -> {
|
layout.setOnClickListener(v -> {
|
||||||
Intent i = new Intent(ctx, ForumActivity.class);
|
Intent i = new Intent(ctx, ForumActivity.class);
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
android:layout_width="@dimen/listitem_picture_frame_size"
|
android:layout_width="@dimen/listitem_picture_frame_size"
|
||||||
android:layout_height="@dimen/listitem_picture_frame_size"
|
android:layout_height="@dimen/listitem_picture_frame_size"
|
||||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/divider"
|
app:layout_constraintBottom_toTopOf="@+id/divider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
@@ -38,7 +37,6 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/margin_medium"
|
android:layout_marginTop="@dimen/margin_medium"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:layout_marginRight="8dp"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
android:textSize="@dimen/text_size_small"
|
android:textSize="@dimen/text_size_small"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/dateView"
|
app:layout_constraintEnd_toStartOf="@+id/dateView"
|
||||||
@@ -51,7 +49,6 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
android:textSize="@dimen/text_size_small"
|
android:textSize="@dimen/text_size_small"
|
||||||
app:layout_constraintBaseline_toBaselineOf="@+id/postCountView"
|
app:layout_constraintBaseline_toBaselineOf="@+id/postCountView"
|
||||||
@@ -63,7 +60,6 @@
|
|||||||
style="@style/Divider.ThreadItem"
|
style="@style/Divider.ThreadItem"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_marginStart="@dimen/margin_medium"
|
android:layout_marginStart="@dimen/margin_medium"
|
||||||
android:layout_marginLeft="@dimen/margin_medium"
|
|
||||||
android:layout_marginTop="@dimen/listitem_horizontal_margin"
|
android:layout_marginTop="@dimen/listitem_horizontal_margin"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_forum_delete"
|
||||||
|
android:title="@string/forum_leave" />
|
||||||
|
|
||||||
|
</menu>
|
||||||
Reference in New Issue
Block a user