Address first round of review feedback for thread list view model migration

This commit is contained in:
Torsten Grote
2021-01-26 16:56:43 -03:00
parent e5d78a858d
commit 239c4a27ad
7 changed files with 38 additions and 48 deletions

View File

@@ -103,16 +103,16 @@ public class ForumActivity extends
// Handle presses on the action bar items
int itemId = item.getItemId();
if (itemId == R.id.action_forum_share) {
Intent i2 = new Intent(this, ShareForumActivity.class);
i2.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
i2.putExtra(GROUP_ID, groupId.getBytes());
startActivityForResult(i2, REQUEST_SHARE_FORUM);
Intent i = new Intent(this, ShareForumActivity.class);
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra(GROUP_ID, groupId.getBytes());
startActivityForResult(i, REQUEST_SHARE_FORUM);
return true;
} else if (itemId == R.id.action_forum_sharing_status) {
Intent i3 = new Intent(this, ForumSharingStatusActivity.class);
i3.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
i3.putExtra(GROUP_ID, groupId.getBytes());
startActivity(i3);
Intent i = new Intent(this, ForumSharingStatusActivity.class);
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra(GROUP_ID, groupId.getBytes());
startActivity(i);
return true;
} else if (itemId == R.id.action_forum_delete) {
showUnsubscribeDialog();

View File

@@ -25,6 +25,7 @@ import androidx.lifecycle.ViewModelProvider;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_GROUP_INVITE;
import static org.briarproject.briar.android.util.UiUtils.observeOnce;
import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_TEXT_LENGTH;
@@ -110,26 +111,26 @@ public class GroupActivity extends
startActivity(i);
return true;
} else if (itemId == R.id.action_group_reveal) {
if (viewModel.isCreator().getValue())
if (requireNonNull(viewModel.isCreator().getValue()))
throw new IllegalStateException();
Intent i = new Intent(this, RevealContactsActivity.class);
i.putExtra(GROUP_ID, groupId.getBytes());
startActivity(i);
return true;
} else if (itemId == R.id.action_group_invite) {
if (!viewModel.isCreator().getValue())
if (!requireNonNull(viewModel.isCreator().getValue()))
throw new IllegalStateException();
Intent i = new Intent(this, GroupInviteActivity.class);
i.putExtra(GROUP_ID, groupId.getBytes());
startActivityForResult(i, REQUEST_GROUP_INVITE);
return true;
} else if (itemId == R.id.action_group_leave) {
if (viewModel.isCreator().getValue())
if (requireNonNull(viewModel.isCreator().getValue()))
throw new IllegalStateException();
showLeaveGroupDialog();
return true;
} else if (itemId == R.id.action_group_dissolve) {
if (!viewModel.isCreator().getValue())
if (!requireNonNull(viewModel.isCreator().getValue()))
throw new IllegalStateException();
showDissolveGroupDialog();
return true;
@@ -152,7 +153,8 @@ public class GroupActivity extends
@Override
public void onReplyClick(GroupMessageItem item) {
if (!viewModel.isDissolved().getValue()) super.onReplyClick(item);
Boolean isDissolved = viewModel.isDissolved().getValue();
if (isDissolved != null && !isDissolved) super.onReplyClick(item);
}
private void setGroupEnabled(boolean enabled) {
@@ -195,7 +197,7 @@ public class GroupActivity extends
viewModel.deletePrivateGroup();
}
public void onGroupDissolved() {
private void onGroupDissolved() {
AlertDialog.Builder builder =
new AlertDialog.Builder(this, R.style.BriarDialogTheme);
builder.setTitle(getString(R.string.groups_dissolved_dialog_title));

View File

@@ -104,6 +104,9 @@ class GroupViewModel extends ThreadListViewModel<GroupMessageItem> {
LOG.info("Group message received, adding...");
GroupMessageItem item = buildItem(g.getHeader(), g.getText());
addItem(item);
// In case the join message comes from the creator,
// we need to reload the sharing contacts
// in case it was delayed and the sharing count is wrong (#850).
if (item instanceof JoinMessageItem &&
(((JoinMessageItem) item).isInitial())) {
loadSharingContacts();

View File

@@ -16,7 +16,7 @@ class JoinMessageItem extends GroupMessageItem {
JoinMessageItem(JoinMessageHeader h, String text) {
super(h, text);
this.isInitial = h.isInitial();
isInitial = h.isInitial();
}
@Override

View File

@@ -4,8 +4,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.util.ItemReturningAdapter;
@@ -21,8 +20,7 @@ import androidx.recyclerview.widget.ListAdapter;
import static androidx.recyclerview.widget.RecyclerView.NO_POSITION;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
public class ThreadItemAdapter<I extends ThreadItem>
extends ListAdapter<I, BaseThreadItemViewHolder<I>>
implements ItemReturningAdapter<I> {
@@ -41,7 +39,7 @@ public class ThreadItemAdapter<I extends ThreadItem>
@Override
public boolean areContentsTheSame(I a, I b) {
return a.isHighlighted() == b.isHighlighted() &&
a.isRead() && b.isRead();
a.isRead() == b.isRead();
}
});
this.listener = listener;
@@ -63,7 +61,7 @@ public class ThreadItemAdapter<I extends ThreadItem>
ui.bind(item, listener);
}
public int findItemPosition(MessageId id) {
int findItemPosition(MessageId id) {
for (int i = 0; i < getItemCount(); i++) {
if (id.equals(getItem(i).getId())) return i;
}
@@ -91,8 +89,7 @@ public class ThreadItemAdapter<I extends ThreadItem>
@Nullable
I getHighlightedItem() {
for (int i = 0; i < getItemCount(); i++) {
I item = getItem(i);
for (I item : getCurrentList()) {
if (item.isHighlighted()) return item;
}
return null;

View File

@@ -67,7 +67,6 @@ public abstract class ThreadListViewModel<I extends ThreadItem>
private final MessageTracker messageTracker;
private final EventBus eventBus;
@DatabaseExecutor
private final MessageTree<I> messageTree = new MessageTreeImpl<>();
private final MutableLiveData<LiveResult<List<I>>> items =
new MutableLiveData<>();
@@ -126,12 +125,12 @@ public abstract class ThreadListViewModel<I extends ThreadItem>
protected abstract void clearNotifications();
public void blockAndClearNotifications() {
void blockAndClearNotifications() {
notificationManager.blockNotification(groupId);
clearNotifications();
}
public void unblockNotifications() {
void unblockNotifications() {
notificationManager.unblockNotification(groupId);
}
@@ -221,24 +220,26 @@ public abstract class ThreadListViewModel<I extends ThreadItem>
PostHeader header) throws DbException;
@UiThread
public void setReplyId(@Nullable MessageId id) {
void setReplyId(@Nullable MessageId id) {
replyId = id;
}
@UiThread
@Nullable
public MessageId getReplyId() {
MessageId getReplyId() {
return replyId;
}
void storeMessageId(@Nullable MessageId messageId) {
if (messageId != null) runOnDbThread(() -> {
try {
messageTracker.storeMessageId(groupId, messageId);
} catch (DbException e) {
logException(LOG, WARNING, e);
}
});
if (messageId != null) {
runOnDbThread(() -> {
try {
messageTracker.storeMessageId(groupId, messageId);
} catch (DbException e) {
logException(LOG, WARNING, e);
}
});
}
}
protected abstract void markItemRead(I item);