Skip to content

Commit

Permalink
Legacy group learn more badge and info bottom sheet.
Browse files Browse the repository at this point in the history
  • Loading branch information
alan-signal committed Jul 21, 2020
1 parent 93f587b commit 96ce42a
Show file tree
Hide file tree
Showing 14 changed files with 273 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog;
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupInviteSentDialog;
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupRightsDialog;
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupsLearnMoreBottomSheetDialogFragment;
import org.thoughtcrime.securesms.groups.ui.pendingmemberinvites.PendingMemberInvitesActivity;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity;
Expand All @@ -51,6 +52,7 @@
import org.thoughtcrime.securesms.recipients.ui.notifications.CustomNotificationsDialogFragment;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.LifecycleCursorWrapper;
import org.thoughtcrime.securesms.util.views.LearnMoreTextView;

import java.util.List;
import java.util.Locale;
Expand All @@ -70,6 +72,7 @@ public class ManageGroupFragment extends LoggingFragment {
private TextView pendingMembersCount;
private Toolbar toolbar;
private TextView groupName;
private LearnMoreTextView groupV1Indicator;
private TextView memberCountUnderAvatar;
private TextView memberCountAboveList;
private AvatarImageView avatar;
Expand Down Expand Up @@ -125,6 +128,7 @@ static ManageGroupFragment newInstance(@NonNull String groupId) {
avatar = view.findViewById(R.id.group_avatar);
toolbar = view.findViewById(R.id.toolbar);
groupName = view.findViewById(R.id.name);
groupV1Indicator = view.findViewById(R.id.manage_group_group_v1_indicator);
memberCountUnderAvatar = view.findViewById(R.id.member_count);
memberCountAboveList = view.findViewById(R.id.member_count_2);
groupMemberList = view.findViewById(R.id.group_members);
Expand Down Expand Up @@ -154,6 +158,9 @@ static ManageGroupFragment newInstance(@NonNull String groupId) {
customNotificationsRow = view.findViewById(R.id.group_custom_notifications_row);
toggleAllMembers = view.findViewById(R.id.toggle_all_members);

groupV1Indicator.setOnLinkClickListener(v -> GroupsLearnMoreBottomSheetDialogFragment.show(requireFragmentManager()));
groupV1Indicator.setLearnMoreVisible(true);

return view;
}

Expand Down Expand Up @@ -208,6 +215,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {

viewModel.getTitle().observe(getViewLifecycleOwner(), groupName::setText);
viewModel.getMemberCountSummary().observe(getViewLifecycleOwner(), memberCountUnderAvatar::setText);
viewModel.getShowLegacyIndicator().observe(getViewLifecycleOwner(), showLegacyIndicators -> groupV1Indicator.setVisibility(showLegacyIndicators ? View.VISIBLE : View.GONE));
viewModel.getFullMemberCountSummary().observe(getViewLifecycleOwner(), memberCountAboveList::setText);
viewModel.getGroupRecipient().observe(getViewLifecycleOwner(), groupRecipient -> {
avatar.setRecipient(groupRecipient);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.util.DefaultValueLiveData;
import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.SingleLiveEvent;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
Expand Down Expand Up @@ -72,14 +73,16 @@ public class ManageGroupViewModel extends ViewModel {
private final DefaultValueLiveData<CollapseState> memberListCollapseState = new DefaultValueLiveData<>(CollapseState.COLLAPSED);
private final LiveData<Boolean> canLeaveGroup;
private final LiveData<Boolean> canBlockGroup;
private final LiveData<Boolean> showLegacyIndicator;

private ManageGroupViewModel(@NonNull Context context, @NonNull ManageGroupRepository manageGroupRepository) {
this.context = context;
this.manageGroupRepository = manageGroupRepository;

manageGroupRepository.getGroupState(this::groupStateLoaded);

LiveGroup liveGroup = new LiveGroup(manageGroupRepository.getGroupId());
GroupId groupId = manageGroupRepository.getGroupId();
LiveGroup liveGroup = new LiveGroup(groupId);

this.title = Transformations.map(liveGroup.getTitle(),
title -> TextUtils.isEmpty(title) ? context.getString(R.string.Recipient_unknown)
Expand All @@ -92,7 +95,11 @@ private ManageGroupViewModel(@NonNull Context context, @NonNull ManageGroupRepos
memberListCollapseState,
ManageGroupViewModel::filterMemberList);
this.pendingMemberCount = liveGroup.getPendingMemberCount();
this.memberCountSummary = liveGroup.getMembershipCountDescription(context.getResources());
this.showLegacyIndicator = new MutableLiveData<>(groupId.isV1() && FeatureFlags.groupsV2create());
this.memberCountSummary = LiveDataUtil.combineLatest(liveGroup.getMembershipCountDescription(context.getResources()),
this.showLegacyIndicator,
(description, legacy) -> legacy ? String.format("%s · %s", description, context.getString(R.string.ManageGroupActivity_legacy_group))
: description);
this.fullMemberCountSummary = liveGroup.getFullMembershipCountDescription(context.getResources());
this.editMembershipRights = liveGroup.getMembershipAdditionAccessControl();
this.editGroupAttributesRights = liveGroup.getAttributesAccessControl();
Expand Down Expand Up @@ -131,7 +138,11 @@ LiveData<String> getFullMemberCountSummary() {
return fullMemberCountSummary;
}

public LiveData<Recipient> getGroupRecipient() {
LiveData<Boolean> getShowLegacyIndicator() {
return showLegacyIndicator;
}

LiveData<Recipient> getGroupRecipient() {
return groupRecipient;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.thoughtcrime.securesms.groups.ui.managegroup.dialogs;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;

import com.google.android.material.bottomsheet.BottomSheetDialogFragment;

import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ThemeUtil;

public final class GroupsLearnMoreBottomSheetDialogFragment extends BottomSheetDialogFragment {

public static void show(@NonNull FragmentManager manager) {
new GroupsLearnMoreBottomSheetDialogFragment().show(manager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG);
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
setStyle(DialogFragment.STYLE_NORMAL,
ThemeUtil.isDarkTheme(requireContext()) ? R.style.Theme_Signal_RoundedBottomSheet
: R.style.Theme_Signal_RoundedBottomSheet_Light);

super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.groups_learn_more_bottom_sheet, container, false);

view.findViewById(R.id.lbs_ok_button).setOnClickListener(v -> dismiss());

return view;
}

@Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) {
BottomSheetUtil.show(manager, tag, this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import androidx.core.widget.TextViewCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProviders;

import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
Expand All @@ -32,6 +31,7 @@
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientExporter;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.Util;
Expand Down Expand Up @@ -88,8 +88,8 @@ public static BottomSheetDialogFragment create(@NonNull RecipientId recipientId,
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
setStyle(DialogFragment.STYLE_NORMAL,
ThemeUtil.isDarkTheme(requireContext()) ? R.style.Theme_Signal_RecipientBottomSheet
: R.style.Theme_Signal_RecipientBottomSheet_Light);
ThemeUtil.isDarkTheme(requireContext()) ? R.style.Theme_Signal_RoundedBottomSheet
: R.style.Theme_Signal_RoundedBottomSheet_Light);

super.onCreate(savedInstanceState);
}
Expand Down Expand Up @@ -256,8 +256,6 @@ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent d

@Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) {
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(this, tag);
transaction.commitAllowingStateLoss();
BottomSheetUtil.show(manager, tag, this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.thoughtcrime.securesms.util;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import com.google.android.material.bottomsheet.BottomSheetDialogFragment;

public final class BottomSheetUtil {

public static final String STANDARD_BOTTOM_SHEET_FRAGMENT_TAG = "BOTTOM";

private BottomSheetUtil() {}

/**
* Show preventing a possible IllegalStateException.
*/
public static void show(@NonNull FragmentManager manager,
@Nullable String tag,
@NonNull BottomSheetDialogFragment dialog)
{
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(dialog, tag);
transaction.commitAllowingStateLoss();
}
}
5 changes: 5 additions & 0 deletions app/src/main/res/drawable/round_background_dark.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="4dp" />
<solid android:color="@color/core_grey_90" />
</shape>
5 changes: 5 additions & 0 deletions app/src/main/res/drawable/round_background_light.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="4dp" />
<solid android:color="@color/core_grey_02" />
</shape>
19 changes: 19 additions & 0 deletions app/src/main/res/layout/group_manage_fragment.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,25 @@
android:textAppearance="@style/Signal.Text.Body"
android:textColor="?title_text_color_secondary"
tools:text="12 members (4 invited)" />

<org.thoughtcrime.securesms.util.views.LearnMoreTextView
android:id="@+id/manage_group_group_v1_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="8dp"
android:background="?secondary_background_bubble"
android:paddingStart="12dp"
android:paddingTop="10dp"
android:paddingEnd="12dp"
android:paddingBottom="10dp"
android:text="@string/ManageGroupActivity_legacy_group_learn_more"
android:textAppearance="@style/TextAppearance.Signal.Caption"
android:textColor="?title_text_color_secondary"
android:visibility="gone"
tools:visibility="visible" />

</LinearLayout>

<androidx.appcompat.widget.Toolbar
Expand Down
119 changes: 119 additions & 0 deletions app/src/main/res/layout/groups_learn_more_bottom_sheet.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:theme="@style/Theme.Signal.RoundedBottomSheet.Light">

<TextView
android:id="@+id/lbs_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="20dp"
android:text="@string/GroupsLearnMore_legacy_vs_new_groups"
android:textAppearance="@style/TextAppearance.Signal.Title2"
android:textColor="?title_text_color_primary"
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_1_header"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/lbs_paragraph_1_header"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="20dp"
android:text="@string/GroupsLearnMore_what_are_legacy_groups"
android:textAppearance="@style/TextAppearance.Signal.Body2.Bold"
android:textColor="?title_text_color_primary"
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lbs_title" />

<TextView
android:id="@+id/lbs_paragraph_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="20dp"
android:text="@string/GroupsLearnMore_paragraph_1"
android:textAppearance="@style/TextAppearance.Signal.Body2"
android:textColor="?title_text_color_secondary"
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_2_header"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lbs_paragraph_1_header" />

<TextView
android:id="@+id/lbs_paragraph_2_header"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="20dp"
android:text="@string/GroupsLearnMore_how_do_i_use_new_groups"
android:textAppearance="@style/TextAppearance.Signal.Body2.Bold"
android:textColor="?title_text_color_primary"
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_2_a"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lbs_paragraph_1" />

<TextView
android:id="@+id/lbs_paragraph_2_a"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="20dp"
android:text="@string/GroupsLearnMore_paragraph_2"
android:textAppearance="@style/TextAppearance.Signal.Body2"
android:textColor="?title_text_color_secondary"
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_2_b"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lbs_paragraph_2_header" />

<TextView
android:id="@+id/lbs_paragraph_2_b"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="20dp"
android:text="@string/GroupsLearnMore_paragraph_3"
android:textAppearance="@style/TextAppearance.Signal.Body2.Bold"
android:textColor="?title_text_color_secondary"
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lbs_paragraph_2_a" />

<Button
android:id="@+id/lbs_ok_button"
style="@style/Button.Primary"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginStart="32dp"
android:layout_marginTop="48dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="20dp"
android:text="@android:string/ok"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lbs_paragraph_2_b"
app:layout_constraintVertical_bias="0" />

</androidx.constraintlayout.widget.ConstraintLayout>
2 changes: 1 addition & 1 deletion app/src/main/res/layout/recipient_bottom_sheet.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:theme="@style/Theme.Signal.RecipientBottomSheet.Light">
tools:theme="@style/Theme.Signal.RoundedBottomSheet.Light">

<org.thoughtcrime.securesms.components.AvatarImageView
android:id="@+id/rbs_recipient_avatar"
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<attr name="attachment_keyboard_button_foreground" format="color" />

<attr name="secondary_background" format="reference" />
<attr name="secondary_background_bubble" format="reference" />

<attr name="conversation_list_item_background" format="reference"/>
<attr name="conversation_list_item_contact_color" format="reference|color"/>
Expand Down

0 comments on commit 96ce42a

Please sign in to comment.