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}