1package eu.siacs.conversations.ui;
2
3import android.app.Dialog;
4import android.content.Context;
5import android.os.Bundle;
6import android.widget.AutoCompleteTextView;
7import androidx.annotation.NonNull;
8import androidx.databinding.DataBindingUtil;
9import androidx.fragment.app.DialogFragment;
10import com.google.android.material.dialog.MaterialAlertDialogBuilder;
11import eu.siacs.conversations.R;
12import eu.siacs.conversations.databinding.DialogCreateConferenceBinding;
13import eu.siacs.conversations.ui.util.DelayedHintHelper;
14import java.util.ArrayList;
15import java.util.List;
16
17public class CreatePrivateGroupChatDialog extends DialogFragment {
18
19 private static final String ACCOUNTS_LIST_KEY = "activated_accounts_list";
20 private CreateConferenceDialogListener mListener;
21
22 public static CreatePrivateGroupChatDialog newInstance(List<String> accounts) {
23 CreatePrivateGroupChatDialog dialog = new CreatePrivateGroupChatDialog();
24 Bundle bundle = new Bundle();
25 bundle.putStringArrayList(ACCOUNTS_LIST_KEY, (ArrayList<String>) accounts);
26 dialog.setArguments(bundle);
27 return dialog;
28 }
29
30 @Override
31 public void onActivityCreated(Bundle savedInstanceState) {
32 super.onActivityCreated(savedInstanceState);
33 setRetainInstance(true);
34 }
35
36 @NonNull
37 @Override
38 public Dialog onCreateDialog(Bundle savedInstanceState) {
39 final MaterialAlertDialogBuilder builder =
40 new MaterialAlertDialogBuilder(requireActivity());
41 builder.setTitle(R.string.create_private_group_chat);
42 final DialogCreateConferenceBinding binding =
43 DataBindingUtil.inflate(
44 getActivity().getLayoutInflater(),
45 R.layout.dialog_create_conference,
46 null,
47 false);
48 ArrayList<String> mActivatedAccounts = getArguments().getStringArrayList(ACCOUNTS_LIST_KEY);
49 StartConversationActivity.populateAccountSpinner(
50 getActivity(), mActivatedAccounts, binding.account);
51 builder.setView(binding.getRoot());
52 builder.setPositiveButton(
53 R.string.choose_participants,
54 (dialog, which) ->
55 mListener.onCreateDialogPositiveClick(
56 binding.account,
57 binding.groupChatName.getText().toString().trim()));
58 builder.setNegativeButton(R.string.cancel, null);
59 DelayedHintHelper.setHint(R.string.providing_a_name_is_optional, binding.groupChatName);
60 binding.groupChatName.setOnEditorActionListener(
61 (v, actionId, event) -> {
62 mListener.onCreateDialogPositiveClick(
63 binding.account, binding.groupChatName.getText().toString().trim());
64 return true;
65 });
66 return builder.create();
67 }
68
69 public interface CreateConferenceDialogListener {
70 void onCreateDialogPositiveClick(AutoCompleteTextView spinner, String subject);
71 }
72
73 @Override
74 public void onAttach(Context context) {
75 super.onAttach(context);
76 try {
77 mListener = (CreateConferenceDialogListener) context;
78 } catch (ClassCastException e) {
79 throw new ClassCastException(
80 context + " must implement CreateConferenceDialogListener");
81 }
82 }
83
84 @Override
85 public void onDestroyView() {
86 Dialog dialog = getDialog();
87 if (dialog != null && getRetainInstance()) {
88 dialog.setDismissMessage(null);
89 }
90 super.onDestroyView();
91 }
92}