package org.ostrya.presencepublisher.ui.dialog; import android.app.Dialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.EditText; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import com.hypertrack.hyperlog.HyperLog; import org.ostrya.presencepublisher.R; public class EditTextDialog extends DialogFragment { private static final String TAG = "EditTextDialog"; private Callback callback; private int titleId; private String text; public static EditTextDialog getInstance(final Callback callback, int titleId) { EditTextDialog fragment = new EditTextDialog(); fragment.setCallback(callback); fragment.setTitleId(titleId); return fragment; } public static EditTextDialog getInstance(final Callback callback, int titleId, String text) { EditTextDialog fragment = new EditTextDialog(); fragment.setCallback(callback); fragment.setTitleId(titleId); fragment.setText(text); return fragment; } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); LayoutInflater inflater = LayoutInflater.from(getContext()); View view = inflater.inflate(R.layout.dialog_edit_text, null); EditText editText = view.findViewById(android.R.id.edit); if (editText != null) { editText.requestFocus(); editText.setSelection(0); editText.setText(text); } builder.setTitle(titleId) .setView(view) .setPositiveButton(R.string.dialog_ok, (dialog, id) -> { if (editText != null) { callback.accept(editText.getText().toString()); } else { HyperLog.e(TAG, "Unable to find edit text field"); } }) .setNegativeButton(R.string.dialog_cancel, null); AlertDialog alertDialog = builder.create(); Window window = alertDialog.getWindow(); if (window != null) { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } return alertDialog; } private void setCallback(Callback callback) { this.callback = callback; } private void setTitleId(int titleId) { this.titleId = titleId; } private void setText(String text) { this.text = text; } public interface Callback { void accept(String newValue); } }