Use group manager for MMS groups.

master
Alan Evans 2020-06-16 14:07:25 -03:00 committed by Greyson Parrelli
parent d467c04749
commit dfb5562142
7 changed files with 35 additions and 24 deletions

View File

@ -756,8 +756,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} else {
menu.findItem(R.id.menu_distribution_conversation).setChecked(true);
}
inflater.inflate(R.menu.conversation_active_group_options, menu);
} else if (isActiveV2Group || isActiveGroup && FeatureFlags.newGroupUI()) {
inflater.inflate(R.menu.conversation_push_group_v2_options, menu);
inflater.inflate(R.menu.conversation_active_group_options, menu);
} else if (isActiveGroup) {
inflater.inflate(R.menu.conversation_push_group_options, menu);
}
@ -802,7 +803,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
hideMenuItem(menu, R.id.menu_mute_notifications);
}
if (FeatureFlags.newGroupUI() && isPushGroupConversation()) {
if (FeatureFlags.newGroupUI()) {
hideMenuItem(menu, R.id.menu_group_recipients);
}
@ -884,7 +885,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
case R.id.menu_distribution_broadcast: handleDistributionBroadcastEnabled(item); return true;
case R.id.menu_distribution_conversation: handleDistributionConversationEnabled(item); return true;
case R.id.menu_edit_group: handleEditPushGroupV1(); return true;
case R.id.menu_group_settings: handleManagePushGroup(); return true;
case R.id.menu_group_settings: handleManageGroup(); return true;
case R.id.menu_leave: handleLeavePushGroup(); return true;
case R.id.menu_invite: handleInviteLink(); return true;
case R.id.menu_mute_notifications: handleMuteNotifications(); return true;
@ -1041,8 +1042,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
}
private void handleConversationSettings() {
if (FeatureFlags.newGroupUI() && isPushGroupConversation()) {
handleManagePushGroup();
if (FeatureFlags.newGroupUI() && isGroupConversation()) {
handleManageGroup();
return;
}
@ -1209,8 +1210,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
startActivityForResult(GroupCreateActivity.newEditGroupIntent(ConversationActivity.this, recipient.get().requireGroupId().requireV1()), GROUP_EDIT);
}
private void handleManagePushGroup() {
startActivityForResult(ManageGroupActivity.newIntent(ConversationActivity.this, recipient.get().requireGroupId().requirePush()),
private void handleManageGroup() {
startActivityForResult(ManageGroupActivity.newIntent(ConversationActivity.this, recipient.get().requireGroupId()),
GROUP_EDIT,
ManageGroupActivity.createTransitionBundle(this, titleView.findViewById(R.id.contact_photo_image)));
}

View File

@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.groups;
import android.content.Context;
import android.content.res.Resources;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.lifecycle.LiveData;
@ -52,7 +53,13 @@ public final class LiveGroup {
}
public LiveData<String> getTitle() {
return Transformations.map(groupRecord, GroupDatabase.GroupRecord::getTitle);
return LiveDataUtil.combineLatest(groupRecord, recipient, (groupRecord, recipient) -> {
String title = groupRecord.getTitle();
if (!TextUtils.isEmpty(title)) {
return title;
}
return recipient.getDisplayName(ApplicationDependencies.getApplication());
});
}
public LiveData<Recipient> getGroupRecipient() {

View File

@ -22,7 +22,7 @@ public class ManageGroupActivity extends PassphraseRequiredActionBarActivity {
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
public static Intent newIntent(@NonNull Context context, @NonNull GroupId.Push groupId) {
public static Intent newIntent(@NonNull Context context, @NonNull GroupId groupId) {
Intent intent = new Intent(context, ManageGroupActivity.class);
intent.putExtra(GROUP_ID, groupId.toString());
return intent;

View File

@ -79,8 +79,10 @@ public class ManageGroupFragment extends Fragment {
private TextView editGroupAccessValue;
private View editGroupMembershipRow;
private TextView editGroupMembershipValue;
private View disappearingMessagesCard;
private View disappearingMessagesRow;
private TextView disappearingMessages;
private View blockAndLeaveCard;
private TextView blockGroup;
private TextView unblockGroup;
private TextView leaveGroup;
@ -133,8 +135,10 @@ public class ManageGroupFragment extends Fragment {
editGroupAccessValue = view.findViewById(R.id.edit_group_access_value);
editGroupMembershipRow = view.findViewById(R.id.edit_group_membership_row);
editGroupMembershipValue = view.findViewById(R.id.edit_group_membership_value);
disappearingMessagesCard = view.findViewById(R.id.group_disappearing_messages_card);
disappearingMessagesRow = view.findViewById(R.id.disappearing_messages_row);
disappearingMessages = view.findViewById(R.id.disappearing_messages);
blockAndLeaveCard = view.findViewById(R.id.group_block_and_leave_card);
blockGroup = view.findViewById(R.id.blockGroup);
unblockGroup = view.findViewById(R.id.unblockGroup);
leaveGroup = view.findViewById(R.id.leaveGroup);
@ -154,9 +158,12 @@ public class ManageGroupFragment extends Fragment {
super.onActivityCreated(savedInstanceState);
Context context = requireContext();
GroupId.Push groupId = getPushGroupId();
GroupId groupId = getGroupId();
ManageGroupViewModel.Factory factory = new ManageGroupViewModel.Factory(context, groupId);
disappearingMessagesCard.setVisibility(groupId.isPush() ? View.VISIBLE : View.GONE);
blockAndLeaveCard.setVisibility(groupId.isPush() ? View.VISIBLE : View.GONE);
viewModel = ViewModelProviders.of(requireActivity(), factory).get(ManageGroupViewModel.class);
viewModel.getMembers().observe(getViewLifecycleOwner(), members -> groupMemberList.setMembers(members));
@ -320,15 +327,15 @@ public class ManageGroupFragment extends Fragment {
public boolean onMenuItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.action_edit) {
startActivity(EditProfileActivity.getIntentForGroupProfile(requireActivity(), getPushGroupId()));
startActivity(EditProfileActivity.getIntentForGroupProfile(requireActivity(), getGroupId().requirePush()));
return true;
}
return false;
}
private GroupId.Push getPushGroupId() {
return GroupId.parseOrThrow(Objects.requireNonNull(requireArguments().getString(GROUP_ID))).requirePush();
private GroupId getGroupId() {
return GroupId.parseOrThrow(Objects.requireNonNull(requireArguments().getString(GROUP_ID)));
}
private void setMediaCursorFactory(@Nullable ManageGroupViewModel.CursorFactory cursorFactory) {

View File

@ -7,10 +7,8 @@ import androidx.annotation.WorkerThread;
import androidx.core.util.Consumer;
import com.annimon.stream.Stream;
import com.google.protobuf.ByteString;
import org.signal.storageservice.protos.groups.local.DecryptedGroup;
import org.signal.zkgroup.util.UUIDUtil;
import org.thoughtcrime.securesms.ContactSelectionListFragment;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
@ -33,21 +31,19 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
final class ManageGroupRepository {
private static final String TAG = Log.tag(ManageGroupRepository.class);
private final Context context;
private final GroupId.Push groupId;
private final Context context;
private final GroupId groupId;
ManageGroupRepository(@NonNull Context context, @NonNull GroupId.Push groupId) {
ManageGroupRepository(@NonNull Context context, @NonNull GroupId groupId) {
this.context = context;
this.groupId = groupId;
}
@ -149,7 +145,7 @@ final class ManageGroupRepository {
void addMembers(@NonNull List<RecipientId> selected, @NonNull AddMembersResultCallback addMembersResultCallback, @NonNull GroupChangeErrorCallback error) {
SignalExecutors.UNBOUNDED.execute(() -> {
try {
GroupManager.addMembers(context, groupId, selected);
GroupManager.addMembers(context, groupId.requirePush(), selected);
addMembersResultCallback.onMembersAdded(selected.size());
} catch (GroupInsufficientRightsException | GroupNotAMemberException e) {
Log.w(TAG, e);

View File

@ -333,10 +333,10 @@ public class ManageGroupViewModel extends ViewModel {
}
public static class Factory implements ViewModelProvider.Factory {
private final Context context;
private final GroupId.Push groupId;
private final Context context;
private final GroupId groupId;
public Factory(@NonNull Context context, @NonNull GroupId.Push groupId) {
public Factory(@NonNull Context context, @NonNull GroupId groupId) {
this.context = context;
this.groupId = groupId;
}