package org.wordpress.android.ui.prefs; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.Fragment; import android.content.DialogInterface; import android.graphics.Typeface; import android.os.Bundle; import android.text.Editable; import android.text.Spannable; import android.text.SpannableString; import android.text.TextWatcher; import android.text.style.StyleSpan; import android.view.View; import android.widget.Button; import android.widget.EditText; import org.wordpress.android.R; public class DeleteSiteDialogFragment extends DialogFragment implements TextWatcher, DialogInterface.OnShowListener { public static final String SITE_DOMAIN_KEY = "site-domain"; private AlertDialog mDeleteSiteDialog; private EditText mUrlConfirmation; private Button mDeleteButton; private String mSiteDomain = ""; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); retrieveSiteDomain(); configureAlertViewBuilder(builder); mDeleteSiteDialog = builder.create(); mDeleteSiteDialog.setOnShowListener(this); return mDeleteSiteDialog; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (isUrlConfirmationTextValid()) { mDeleteButton.setEnabled(true); } else { mDeleteButton.setEnabled(false); } } @Override public void onShow(DialogInterface dialog) { mDeleteButton = mDeleteSiteDialog.getButton(DialogInterface.BUTTON_POSITIVE); mDeleteButton.setEnabled(false); } private void configureAlertViewBuilder(AlertDialog.Builder builder) { builder.setTitle(R.string.confirm_delete_site); builder.setMessage(confirmationPromptString()); configureUrlConfirmation(builder); configureButtons(builder); } private void configureButtons(AlertDialog.Builder builder) { builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dismiss(); } }); builder.setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Fragment target = getTargetFragment(); if (target != null) { target.onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, null); } dismiss(); } }); } private Spannable confirmationPromptString() { String deletePrompt = String.format(getString(R.string.confirm_delete_site_prompt), mSiteDomain); Spannable promptSpannable = new SpannableString(deletePrompt); int beginning = deletePrompt.indexOf(mSiteDomain); int end = beginning + mSiteDomain.length(); promptSpannable.setSpan(new StyleSpan(Typeface.BOLD), beginning, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return promptSpannable; } private void configureUrlConfirmation(AlertDialog.Builder builder) { View view = getActivity().getLayoutInflater().inflate(R.layout.delete_site_dialog, null); mUrlConfirmation = (EditText) view.findViewById(R.id.url_confirmation); mUrlConfirmation.addTextChangedListener(this); builder.setView(view); } private void retrieveSiteDomain() { Bundle args = getArguments(); mSiteDomain = getString(R.string.wordpress_dot_com).toLowerCase(); if (args != null) { mSiteDomain = args.getString(SITE_DOMAIN_KEY); } } private boolean isUrlConfirmationTextValid() { String confirmationText = mUrlConfirmation.getText().toString().trim().toLowerCase(); String hintText = mSiteDomain.toLowerCase(); return confirmationText.equals(hintText); } }