mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 08:39:22 +01:00
Allow setting local group names and avatars for MMS groups.
This commit is contained in:
@@ -8,6 +8,7 @@ import androidx.annotation.WorkerThread;
|
||||
import androidx.core.util.Consumer;
|
||||
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.groups.GroupChangeException;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.groups.GroupManager;
|
||||
@@ -22,14 +23,14 @@ import org.whispersystems.libsignal.util.guava.Optional;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
class EditPushGroupProfileRepository implements EditProfileRepository {
|
||||
class EditGroupProfileRepository implements EditProfileRepository {
|
||||
|
||||
private static final String TAG = Log.tag(EditPushGroupProfileRepository.class);
|
||||
private static final String TAG = Log.tag(EditGroupProfileRepository.class);
|
||||
|
||||
private final Context context;
|
||||
private final GroupId.Push groupId;
|
||||
private final Context context;
|
||||
private final GroupId groupId;
|
||||
|
||||
EditPushGroupProfileRepository(@NonNull Context context, @NonNull GroupId.Push groupId) {
|
||||
EditGroupProfileRepository(@NonNull Context context, @NonNull GroupId groupId) {
|
||||
this.context = context.getApplicationContext();
|
||||
this.groupId = groupId;
|
||||
}
|
||||
@@ -64,7 +65,18 @@ class EditPushGroupProfileRepository implements EditProfileRepository {
|
||||
|
||||
@Override
|
||||
public void getCurrentName(@NonNull Consumer<String> nameConsumer) {
|
||||
SimpleTask.run(() -> Recipient.resolved(getRecipientId()).getName(context), nameConsumer::accept);
|
||||
SimpleTask.run(() -> {
|
||||
RecipientId recipientId = getRecipientId();
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
|
||||
return DatabaseFactory.getGroupDatabase(context)
|
||||
.getGroup(recipientId)
|
||||
.transform(groupRecord -> {
|
||||
String title = groupRecord.getTitle();
|
||||
return title == null ? "" : title;
|
||||
})
|
||||
.or(() -> recipient.getName(context));
|
||||
}, nameConsumer::accept);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,7 +44,7 @@ public class EditProfileActivity extends BaseActivity implements EditProfileFrag
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static @NonNull Intent getIntentForGroupProfile(@NonNull Context context, @NonNull GroupId.Push groupId) {
|
||||
public static @NonNull Intent getIntentForGroupProfile(@NonNull Context context, @NonNull GroupId groupId) {
|
||||
Intent intent = new Intent(context, EditProfileActivity.class);
|
||||
intent.putExtra(EditProfileActivity.SHOW_TOOLBAR, true);
|
||||
intent.putExtra(EditProfileActivity.GROUP_ID, groupId.toString());
|
||||
|
||||
@@ -119,11 +119,10 @@ public class EditProfileFragment extends LoggingFragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
final GroupId groupId = GroupId.parseNullableOrThrow(requireArguments().getString(GROUP_ID, null));
|
||||
final GroupId.Push pushGroupId = groupId != null ? groupId.requirePush() : null;
|
||||
GroupId groupId = GroupId.parseNullableOrThrow(requireArguments().getString(GROUP_ID, null));
|
||||
|
||||
initializeResources(view, pushGroupId != null);
|
||||
initializeViewModel(requireArguments().getBoolean(EXCLUDE_SYSTEM, false), pushGroupId, savedInstanceState != null);
|
||||
initializeResources(view, groupId);
|
||||
initializeViewModel(requireArguments().getBoolean(EXCLUDE_SYSTEM, false), groupId, savedInstanceState != null);
|
||||
initializeProfileAvatar();
|
||||
initializeProfileName();
|
||||
initializeUsername();
|
||||
@@ -174,11 +173,11 @@ public class EditProfileFragment extends LoggingFragment {
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeViewModel(boolean excludeSystem, @Nullable GroupId.Push groupId, boolean hasSavedInstanceState) {
|
||||
private void initializeViewModel(boolean excludeSystem, @Nullable GroupId groupId, boolean hasSavedInstanceState) {
|
||||
EditProfileRepository repository;
|
||||
|
||||
if (groupId != null) {
|
||||
repository = new EditPushGroupProfileRepository(requireContext(), groupId);
|
||||
repository = new EditGroupProfileRepository(requireContext(), groupId);
|
||||
} else {
|
||||
repository = new EditSelfProfileRepository(requireContext(), excludeSystem);
|
||||
}
|
||||
@@ -189,8 +188,9 @@ public class EditProfileFragment extends LoggingFragment {
|
||||
.get(EditProfileViewModel.class);
|
||||
}
|
||||
|
||||
private void initializeResources(@NonNull View view, boolean isEditingGroup) {
|
||||
Bundle arguments = requireArguments();
|
||||
private void initializeResources(@NonNull View view, @Nullable GroupId groupId) {
|
||||
Bundle arguments = requireArguments();
|
||||
boolean isEditingGroup = groupId != null;
|
||||
|
||||
this.toolbar = view.findViewById(R.id.toolbar);
|
||||
this.title = view.findViewById(R.id.title);
|
||||
@@ -213,10 +213,13 @@ public class EditProfileFragment extends LoggingFragment {
|
||||
|
||||
this.avatar.setOnClickListener(v -> startAvatarSelection());
|
||||
|
||||
this.givenName .addTextChangedListener(new AfterTextChanged(s -> {
|
||||
trimInPlace(s, isEditingGroup);
|
||||
viewModel.setGivenName(s.toString());
|
||||
}));
|
||||
this.givenName.addTextChangedListener(new AfterTextChanged(s -> {
|
||||
trimInPlace(s, isEditingGroup);
|
||||
viewModel.setGivenName(s.toString());
|
||||
}));
|
||||
|
||||
view.findViewById(R.id.mms_group_hint)
|
||||
.setVisibility(isEditingGroup && groupId.isMms() ? View.VISIBLE : View.GONE);
|
||||
|
||||
if (isEditingGroup) {
|
||||
givenName.setHint(R.string.EditProfileFragment__group_name);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.thoughtcrime.securesms.profiles.edit;
|
||||
|
||||
import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.util.Consumer;
|
||||
@@ -30,13 +29,15 @@ class EditProfileViewModel extends ViewModel {
|
||||
private final MutableLiveData<byte[]> originalAvatar = new MutableLiveData<>();
|
||||
private final MutableLiveData<Optional<String>> internalUsername = new MutableLiveData<>();
|
||||
private final MutableLiveData<String> originalDisplayName = new MutableLiveData<>();
|
||||
private final LiveData<Boolean> isFormValid = Transformations.map(trimmedGivenName, s -> s.length() > 0);
|
||||
private final LiveData<Boolean> isFormValid;
|
||||
private final EditProfileRepository repository;
|
||||
private final GroupId groupId;
|
||||
|
||||
private EditProfileViewModel(@NonNull EditProfileRepository repository, boolean hasInstanceState, @Nullable GroupId groupId) {
|
||||
this.repository = repository;
|
||||
this.groupId = groupId;
|
||||
this.repository = repository;
|
||||
this.groupId = groupId;
|
||||
this.isFormValid = groupId != null && groupId.isMms() ? LiveDataUtil.just(true)
|
||||
: Transformations.map(trimmedGivenName, s -> s.length() > 0);
|
||||
|
||||
if (!hasInstanceState) {
|
||||
if (groupId != null) {
|
||||
|
||||
Reference in New Issue
Block a user