Use group manager for MMS groups.
This commit is contained in:
parent
d467c04749
commit
dfb5562142
7 changed files with 35 additions and 24 deletions
|
@ -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)));
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue