package it.niedermann.nextcloud.deck.ui.board.managelabels; import android.app.Dialog; import android.content.Context; import android.database.sqlite.SQLiteConstraintException; import android.os.Bundle; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; import java.util.Random; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogBoardManageLabelsBinding; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData; import it.niedermann.nextcloud.deck.ui.MainViewModel; import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDeleteAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToFAB; public class ManageLabelsDialogFragment extends BrandedDialogFragment implements ManageLabelListener, EditLabelListener { private MainViewModel viewModel; private DialogBoardManageLabelsBinding binding; private ManageLabelsAdapter adapter; private String[] colors; private static final String KEY_BOARD_ID = "board_id"; private long boardId; private SyncManager syncManager; @Override public void onAttach(@NonNull Context context) { super.onAttach(context); final Bundle args = getArguments(); if (args == null || !args.containsKey(KEY_BOARD_ID)) { throw new IllegalArgumentException(KEY_BOARD_ID + " must be provided as arguments"); } this.boardId = args.getLong(KEY_BOARD_ID); if (this.boardId <= 0L) { throw new IllegalArgumentException(KEY_BOARD_ID + " must be a valid local id and not be less or equal 0"); } } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class); final AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); binding = DialogBoardManageLabelsBinding.inflate(requireActivity().getLayoutInflater()); colors = getResources().getStringArray(R.array.board_default_colors); adapter = new ManageLabelsAdapter(this, requireContext()); binding.labels.setAdapter(adapter); syncManager = new SyncManager(requireActivity()); syncManager.getFullBoardById(viewModel.getCurrentAccount().getId(), boardId).observe(this, (fullBoard) -> { if (fullBoard == null) { throw new IllegalStateException("FullBoard should not be null"); } this.adapter.update(fullBoard.getLabels()); }); binding.fab.setOnClickListener((v) -> { binding.fab.setEnabled(false); final Label label = new Label(); label.setBoardId(boardId); label.setTitle(binding.addLabelTitle.getText().toString()); label.setColor(colors[new Random().nextInt(colors.length)]); WrappedLiveData