package com.boardgamegeek.ui.dialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.text.InputType; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.EditText; import com.boardgamegeek.R; import com.boardgamegeek.util.DialogUtils; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; public class UpdateBuddyNicknameDialogFragment extends DialogFragment { public interface UpdateBuddyNicknameDialogListener { void onFinishEditDialog(String newNickname, boolean shouldUpdatePlays); } private static final String KEY_TITLE_ID = "title_id"; @StringRes private int titleResId; private ViewGroup root; private UpdateBuddyNicknameDialogListener listener; private Unbinder unbinder; @BindView(R.id.edit_nickname) EditText editText; @BindView(R.id.change_plays) CheckBox changePlays; private String nickname; @NonNull public static UpdateBuddyNicknameDialogFragment newInstance( @StringRes int titleResId, @Nullable ViewGroup root, UpdateBuddyNicknameDialogListener listener) { UpdateBuddyNicknameDialogFragment fragment = new UpdateBuddyNicknameDialogFragment(); fragment.initialize(titleResId, root, listener); return fragment; } private void initialize( @StringRes int titleResId, @Nullable ViewGroup root, UpdateBuddyNicknameDialogListener listener) { this.titleResId = titleResId; this.root = root; this.listener = listener; setArguments(this.titleResId); } public void setArguments(@StringRes int titleResId) { Bundle bundle = new Bundle(); bundle.putInt(KEY_TITLE_ID, titleResId); setArguments(bundle); } @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); View rootView = layoutInflater.inflate(R.layout.dialog_edit_nickname, root, false); unbinder = ButterKnife.bind(this, rootView); if (getArguments() != null) { titleResId = getArguments().getInt(KEY_TITLE_ID); } setAndSelectExistingText(); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Theme_bgglight_Dialog_Alert); if (titleResId > 0) { builder.setTitle(titleResId); } builder.setView(rootView) .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (listener != null) { listener.onFinishEditDialog(editText.getText().toString().trim(), changePlays.isChecked()); } } }); final AlertDialog dialog = builder.create(); int inputType = InputType.TYPE_TEXT_FLAG_CAP_WORDS; editText.setInputType(editText.getInputType() | inputType); DialogUtils.requestFocus(dialog, editText); return dialog; } @Override public void onDestroyView() { super.onDestroyView(); if (unbinder != null) unbinder.unbind(); } public void setNickname(String nickname) { this.nickname = nickname; } private void setAndSelectExistingText() { if (editText != null && !TextUtils.isEmpty(nickname)) { editText.setText(nickname); editText.setSelection(0, nickname.length()); } } }