From b27198286d28af1cb7e1f1f3d2ae95baad7303a7 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Fri, 5 Jun 2020 21:44:06 -0300 Subject: [PATCH] MMS proof new group UI. --- .../securesms/contacts/ContactsCursorLoader.java | 13 +++++++++++-- .../conversation/ConversationActivity.java | 6 +++--- .../details/AddGroupDetailsFragment.java | 7 ++++++- .../details/AddGroupDetailsViewModel.java | 16 ++++++++-------- .../ui/managegroup/ManageGroupActivity.java | 2 +- .../res/layout/add_group_details_fragment.xml | 4 ++-- app/src/main/res/values/strings.xml | 2 ++ 7 files changed, 33 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java index 43ba4736bf..9e949094f2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java @@ -300,7 +300,7 @@ public class ContactsCursorLoader extends CursorLoader { private Cursor getNewNumberCursor() { MatrixCursor newNumberCursor = new MatrixCursor(CONTACT_PROJECTION, 1); newNumberCursor.addRow(new Object[] { null, - getContext().getString(R.string.contact_selection_list__unknown_contact), + getUnknownContactTitle(), filter, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM, "\u21e2", @@ -311,7 +311,7 @@ public class ContactsCursorLoader extends CursorLoader { private Cursor getUsernameSearchCursor() { MatrixCursor cursor = new MatrixCursor(CONTACT_PROJECTION, 1); cursor.addRow(new Object[] { null, - getContext().getString(R.string.contact_selection_list__unknown_contact), + getUnknownContactTitle(), filter, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM, "\u21e2", @@ -319,6 +319,11 @@ public class ContactsCursorLoader extends CursorLoader { return cursor; } + private String getUnknownContactTitle() { + return getContext().getString(newConversation(mode) ? R.string.contact_selection_list__unknown_contact + : R.string.contact_selection_list__unknown_contact_add_to_group); + } + private @NonNull Cursor filterNonPushContacts(@NonNull Cursor cursor) { try { final long startMillis = System.currentTimeMillis(); @@ -355,6 +360,10 @@ public class ContactsCursorLoader extends CursorLoader { return flagSet(mode, DisplayMode.FLAG_SELF); } + private static boolean newConversation(int mode) { + return groupsEnabled(mode); + } + private static boolean pushEnabled(int mode) { return flagSet(mode, DisplayMode.FLAG_PUSH); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 3093136e49..310d0967cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -1019,8 +1019,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } private void handleConversationSettings() { - if (FeatureFlags.newGroupUI() && isGroupConversation()) { - startActivitySceneTransition(ManageGroupActivity.newIntent(this, getRecipient().requireGroupId()), + if (FeatureFlags.newGroupUI() && isPushGroupConversation()) { + startActivitySceneTransition(ManageGroupActivity.newIntent(this, getRecipient().requireGroupId().requirePush()), titleView.findViewById(R.id.contact_photo_image), "avatar"); return; @@ -1190,7 +1190,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } private void handleManagePushGroup() { - startActivityForResult(ManageGroupActivity.newIntent(ConversationActivity.this, recipient.get().requireGroupId()), GROUP_EDIT); + startActivityForResult(ManageGroupActivity.newIntent(ConversationActivity.this, recipient.get().requireGroupId().requirePush()), GROUP_EDIT); } private void handleDistributionBroadcastEnabled(MenuItem item) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java index f6e6a6d637..e300e06fd8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java @@ -118,7 +118,12 @@ public class AddGroupDetailsFragment extends Fragment { create.setOnClickListener(v -> handleCreateClicked()); viewModel.getMembers().observe(getViewLifecycleOwner(), members::setMembers); viewModel.getCanSubmitForm().observe(getViewLifecycleOwner(), isFormValid -> setCreateEnabled(isFormValid, true)); - viewModel.getIsMms().observe(getViewLifecycleOwner(), isMms -> mmsWarning.setVisibility(isMms ? View.VISIBLE : View.GONE)); + viewModel.getIsMms().observe(getViewLifecycleOwner(), isMms -> { + mmsWarning.setVisibility(isMms ? View.VISIBLE : View.GONE); + name.setVisibility(isMms ? View.GONE : View.VISIBLE); + avatar.setVisibility(isMms ? View.GONE : View.VISIBLE); + toolbar.setTitle(isMms ? R.string.AddGroupDetailsFragment__create_group : R.string.AddGroupDetailsFragment__name_this_group); + }); viewModel.getAvatar().observe(getViewLifecycleOwner(), avatarBytes -> { if (avatarBytes == null) { avatar.setImageDrawable(new InsetDrawable(avatarPlaceholder, ViewUtil.dpToPx(AVATAR_PLACEHOLDER_INSET_DP))); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java index 2413641512..1626889dc8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java @@ -14,11 +14,9 @@ import com.annimon.stream.Collectors; import com.annimon.stream.Stream; import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry; -import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.SingleLiveEvent; -import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import java.util.HashSet; @@ -32,9 +30,9 @@ public final class AddGroupDetailsViewModel extends ViewModel { private final DefaultValueLiveData> deleted = new DefaultValueLiveData<>(new HashSet<>()); private final MutableLiveData name = new MutableLiveData<>(""); private final MutableLiveData avatar = new MutableLiveData<>(); - private final LiveData isMms; private final SingleLiveEvent groupCreateResult = new SingleLiveEvent<>(); - private final LiveData canSubmitForm = Transformations.map(name, name -> !TextUtils.isEmpty(name)); + private final LiveData isMms; + private final LiveData canSubmitForm; private final AddGroupDetailsRepository repository; private AddGroupDetailsViewModel(@NonNull RecipientId[] recipientIds, @@ -44,8 +42,10 @@ public final class AddGroupDetailsViewModel extends ViewModel { MutableLiveData> initialMembers = new MutableLiveData<>(); - members = LiveDataUtil.combineLatest(initialMembers, deleted, AddGroupDetailsViewModel::filterDeletedMembers); - isMms = Transformations.map(members, this::isAnyForcedSms); + LiveData isValidName = Transformations.map(name, name -> !TextUtils.isEmpty(name)); + members = LiveDataUtil.combineLatest(initialMembers, deleted, AddGroupDetailsViewModel::filterDeletedMembers); + isMms = Transformations.map(members, this::isAnyForcedSms); + canSubmitForm = LiveDataUtil.combineLatest(isMms, isValidName, (mms, validName) -> mms || validName); repository.resolveMembers(recipientIds, initialMembers::postValue); } @@ -93,10 +93,10 @@ public final class AddGroupDetailsViewModel extends ViewModel { List members = Objects.requireNonNull(this.members.getValue()); Set memberIds = Stream.of(members).map(member -> member.getMember().getId()).collect(Collectors.toSet()); byte[] avatarBytes = avatar.getValue(); - String groupName = name.getValue(); boolean isGroupMms = isMms.getValue() == Boolean.TRUE; + String groupName = isGroupMms ? "" : name.getValue(); - if (TextUtils.isEmpty(groupName)) { + if (!isGroupMms && TextUtils.isEmpty(groupName)) { groupCreateResult.postValue(GroupCreateResult.error(GroupCreateResult.Error.Type.ERROR_INVALID_NAME)); return; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupActivity.java index b6b02b02d4..0d25a79f6d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupActivity.java @@ -18,7 +18,7 @@ public class ManageGroupActivity extends PassphraseRequiredActionBarActivity { private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme(); - public static Intent newIntent(@NonNull Context context, @NonNull GroupId groupId) { + public static Intent newIntent(@NonNull Context context, @NonNull GroupId.Push groupId) { Intent intent = new Intent(context, ManageGroupActivity.class); intent.putExtra(GROUP_ID, groupId.toString()); return intent; diff --git a/app/src/main/res/layout/add_group_details_fragment.xml b/app/src/main/res/layout/add_group_details_fragment.xml index bbf6ca2c1e..35ccb370b0 100644 --- a/app/src/main/res/layout/add_group_details_fragment.xml +++ b/app/src/main/res/layout/add_group_details_fragment.xml @@ -11,8 +11,8 @@ android:layout_height="?actionBarSize" app:layout_constraintTop_toTopOf="parent" app:navigationIcon="@drawable/ic_arrow_left_24" - app:title="@string/AddGroupDetailsFragment__name_this_group" - app:titleTextAppearance="@style/TextAppearance.Signal.Body1.Bold" /> + app:titleTextAppearance="@style/TextAppearance.Signal.Body1.Bold" + tools:title="@string/AddGroupDetailsFragment__name_this_group" /> Name this group + Create group Create Members Group name (required) @@ -1895,6 +1896,7 @@ New message to… + Add to group Call