Signal-Android/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationInfoBottom...

116 wiersze
5.2 KiB
Java

package org.thoughtcrime.securesms.groups.ui.migration;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.ViewModelProvider;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange;
import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.BottomSheetUtil;
import org.thoughtcrime.securesms.util.ThemeUtil;
import java.util.List;
/**
* Shows more info about a GV1->GV2 migration event. Looks similar to
* {@link GroupsV1MigrationInitiationBottomSheetDialogFragment}, but only displays static data.
*/
public final class GroupsV1MigrationInfoBottomSheetDialogFragment extends BottomSheetDialogFragment {
private static final String KEY_MEMBERSHIP_CHANGE = "membership_change";
private GroupsV1MigrationInfoViewModel viewModel;
private GroupMemberListView pendingList;
private TextView pendingTitle;
private View pendingContainer;
private GroupMemberListView droppedList;
private TextView droppedTitle;
private View droppedContainer;
public static void show(@NonNull FragmentManager manager, @NonNull GroupMigrationMembershipChange membershipChange) {
Bundle args = new Bundle();
args.putString(KEY_MEMBERSHIP_CHANGE, membershipChange.serialize());
GroupsV1MigrationInfoBottomSheetDialogFragment fragment = new GroupsV1MigrationInfoBottomSheetDialogFragment();
fragment.setArguments(args);
fragment.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) {
return inflater.inflate(R.layout.groupsv1_migration_learn_more_bottom_sheet, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
this.pendingContainer = view.findViewById(R.id.gv1_learn_more_pending_container);
this.pendingTitle = view.findViewById(R.id.gv1_learn_more_pending_title);
this.pendingList = view.findViewById(R.id.gv1_learn_more_pending_list);
this.droppedContainer = view.findViewById(R.id.gv1_learn_more_dropped_container);
this.droppedTitle = view.findViewById(R.id.gv1_learn_more_dropped_title);
this.droppedList = view.findViewById(R.id.gv1_learn_more_dropped_list);
pendingList.initializeAdapter(getViewLifecycleOwner());
droppedList.initializeAdapter(getViewLifecycleOwner());
//noinspection ConstantConditions
GroupMigrationMembershipChange membershipChange = GroupMigrationMembershipChange.deserialize(getArguments().getString(KEY_MEMBERSHIP_CHANGE));
this.viewModel = new ViewModelProvider(this, new GroupsV1MigrationInfoViewModel.Factory(membershipChange)).get(GroupsV1MigrationInfoViewModel.class);
viewModel.getPendingMembers().observe(getViewLifecycleOwner(), this::onPendingMembersChanged);
viewModel.getDroppedMembers().observe(getViewLifecycleOwner(), this::onDroppedMembersChanged);
view.findViewById(R.id.gv1_learn_more_ok_button).setOnClickListener(v -> dismiss());
}
@Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) {
BottomSheetUtil.show(manager, tag, this);
}
private void onPendingMembersChanged(@NonNull List<Recipient> pendingMembers) {
if (pendingMembers.size() == 1 && pendingMembers.get(0).isSelf()) {
pendingContainer.setVisibility(View.VISIBLE);
pendingTitle.setText(R.string.GroupsV1MigrationLearnMore_you_will_need_to_accept_an_invite_to_join_this_group_again);
} else if (pendingMembers.size() > 0) {
pendingContainer.setVisibility(View.VISIBLE);
pendingTitle.setText(getResources().getQuantityText(R.plurals.GroupsV1MigrationLearnMore_these_members_will_need_to_accept_an_invite, pendingMembers.size()));
pendingList.setDisplayOnlyMembers(pendingMembers);
} else {
pendingContainer.setVisibility(View.GONE);
}
}
private void onDroppedMembersChanged(@NonNull List<Recipient> droppedMembers) {
if (droppedMembers.size() > 0) {
droppedContainer.setVisibility(View.VISIBLE);
droppedTitle.setText(getResources().getQuantityText(R.plurals.GroupsV1MigrationLearnMore_these_members_were_removed_from_the_group, droppedMembers.size()));
droppedList.setDisplayOnlyMembers(droppedMembers);
} else {
droppedContainer.setVisibility(View.GONE);
}
}
}