package org.wordpress.android.ui.prefs; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import org.wordpress.android.R; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.WPPrefUtils; import org.wordpress.android.widgets.WPTextView; public class ProfileInputDialogFragment extends DialogFragment { private static final String TITLE_TAG = "title"; private static final String INITIAL_TEXT_TAG = "initial_text"; private static final String HINT_TAG = "hint"; private static final String IS_MULTILINE_TAG = "is_multiline"; private static final String CALLBACK_ID_TAG = "callback_id"; public static ProfileInputDialogFragment newInstance(String title, String initialText, String hint, boolean isMultiline, int callbackId) { ProfileInputDialogFragment profileInputDialogFragment = new ProfileInputDialogFragment(); Bundle args = new Bundle(); args.putString(TITLE_TAG, title); args.putString(INITIAL_TEXT_TAG, initialText); args.putString(HINT_TAG, hint); args.putBoolean(IS_MULTILINE_TAG, isMultiline); args.putInt(CALLBACK_ID_TAG, callbackId); profileInputDialogFragment.setArguments(args); return profileInputDialogFragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); View promptView = layoutInflater.inflate(R.layout.my_profile_dialog, null); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); alertDialogBuilder.setView(promptView); final WPTextView textView = (WPTextView) promptView.findViewById(R.id.my_profile_dialog_label); final EditText editText = (EditText) promptView.findViewById(R.id.my_profile_dialog_input); final WPTextView hintView = (WPTextView) promptView.findViewById(R.id.my_profile_dialog_hint); Bundle args = getArguments(); String title = args.getString(TITLE_TAG); String hint = args.getString(HINT_TAG); Boolean isMultiline = args.getBoolean(IS_MULTILINE_TAG); String initialText = args.getString(INITIAL_TEXT_TAG); final int callbackId = args.getInt(CALLBACK_ID_TAG); textView.setText(title); if (!TextUtils.isEmpty(hint)) { hintView.setText(hint); } else { hintView.setVisibility(View.GONE); } if (!isMultiline) { editText.setMaxLines(1); } if (!TextUtils.isEmpty(initialText)) { editText.setText(initialText); editText.setSelection(0, initialText.length()); } alertDialogBuilder.setCancelable(true) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { if (getTargetFragment() instanceof Callback) { ((Callback) getTargetFragment()).onSuccessfulInput(editText.getText().toString(), callbackId); } else { AppLog.e(AppLog.T.UTILS, "Target fragment doesn't implement ProfileInputDialogFragment.Callback"); } } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); return alertDialogBuilder.create(); } @Override public void onStart() { super.onStart(); AlertDialog dialog = (AlertDialog) getDialog(); Button positive = dialog.getButton(DialogInterface.BUTTON_POSITIVE); Button negative = dialog.getButton(DialogInterface.BUTTON_NEGATIVE); if (positive != null) WPPrefUtils.layoutAsFlatButton(positive); if (negative != null) WPPrefUtils.layoutAsFlatButton(negative); } public interface Callback { void onSuccessfulInput(String input, int callbackId); } }