diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/prefs/NumberPickerDialog.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/prefs/NumberPickerDialog.java | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/NumberPickerDialog.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/NumberPickerDialog.java new file mode 100644 index 000000000..2f72ab6fe --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/NumberPickerDialog.java @@ -0,0 +1,166 @@ +package org.wordpress.android.ui.prefs; + +import android.annotation.SuppressLint; +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.content.Intent; +import android.os.Bundle; +import android.support.v7.widget.SwitchCompat; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.NumberPicker; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import org.wordpress.android.R; +import org.wordpress.android.util.WPPrefUtils; + +public class NumberPickerDialog extends DialogFragment + implements DialogInterface.OnClickListener, + CompoundButton.OnCheckedChangeListener { + + public static final String SHOW_SWITCH_KEY = "show-switch"; + public static final String SWITCH_ENABLED_KEY = "switch-enabled"; + public static final String SWITCH_TITLE_KEY = "switch-title"; + public static final String SWITCH_DESC_KEY = "switch-description"; + public static final String TITLE_KEY = "dialog-title"; + public static final String HEADER_TEXT_KEY = "header-text"; + public static final String MIN_VALUE_KEY = "min-value"; + public static final String MAX_VALUE_KEY = "max-value"; + public static final String CUR_VALUE_KEY = "cur-value"; + + private static final int DEFAULT_MIN_VALUE = 0; + private static final int DEFAULT_MAX_VALUE = 99; + + private SwitchCompat mSwitch; + private TextView mHeaderText; + private NumberPicker mNumberPicker; + private NumberPicker.Formatter mFormat; + private int mMinValue; + private int mMaxValue; + private boolean mConfirmed; + + public NumberPickerDialog() { + mMinValue = DEFAULT_MIN_VALUE; + mMaxValue = DEFAULT_MAX_VALUE; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Calypso_AlertDialog); + View view = View.inflate(getActivity(), R.layout.number_picker_dialog, null); + TextView switchText = (TextView) view.findViewById(R.id.number_picker_text); + mSwitch = (SwitchCompat) view.findViewById(R.id.number_picker_switch); + mHeaderText = (TextView) view.findViewById(R.id.number_picker_header); + mNumberPicker = (NumberPicker) view.findViewById(R.id.number_picker); + int value = mMinValue; + + Bundle args = getArguments(); + if (args != null) { + if (args.getBoolean(SHOW_SWITCH_KEY, false)) { + mSwitch.setVisibility(View.VISIBLE); + mSwitch.setText(args.getString(SWITCH_TITLE_KEY, "")); + mSwitch.setChecked(args.getBoolean(SWITCH_ENABLED_KEY, false)); + final View toggleContainer = view.findViewById(R.id.number_picker_toggleable); + toggleContainer.setEnabled(mSwitch.isChecked()); + mNumberPicker.setEnabled(mSwitch.isChecked()); + } else { + mSwitch.setVisibility(View.GONE); + } + switchText.setText(args.getString(SWITCH_DESC_KEY, "")); + mHeaderText.setText(args.getString(HEADER_TEXT_KEY, "")); + mMinValue = args.getInt(MIN_VALUE_KEY, DEFAULT_MIN_VALUE); + mMaxValue = args.getInt(MAX_VALUE_KEY, DEFAULT_MAX_VALUE); + value = args.getInt(CUR_VALUE_KEY, mMinValue); + + builder.setCustomTitle(getDialogTitleView(args.getString(TITLE_KEY, ""))); + } + + mNumberPicker.setFormatter(mFormat); + mNumberPicker.setMinValue(mMinValue); + mNumberPicker.setMaxValue(mMaxValue); + mNumberPicker.setValue(value); + + mSwitch.setOnCheckedChangeListener(this); + + // hide empty text views + if (TextUtils.isEmpty(switchText.getText())) { + switchText.setVisibility(View.GONE); + } + if (TextUtils.isEmpty(mHeaderText.getText())) { + mHeaderText.setVisibility(View.GONE); + } + + builder.setPositiveButton(R.string.ok, this); + builder.setNegativeButton(R.string.cancel, this); + builder.setView(view); + + return builder.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); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + mConfirmed = which == DialogInterface.BUTTON_POSITIVE; + dismiss(); + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + mNumberPicker.setEnabled(isChecked); + mHeaderText.setEnabled(isChecked); + } + + @Override + public void onDismiss(DialogInterface dialog) { + Fragment target = getTargetFragment(); + if (target != null) { + target.onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, getResultIntent()); + } + + super.onDismiss(dialog); + } + + public void setNumberFormat(NumberPicker.Formatter format) { + mFormat = format; + } + + private View getDialogTitleView(String title) { + LayoutInflater inflater = LayoutInflater.from(getActivity()); + @SuppressLint("InflateParams") + View titleView = inflater.inflate(R.layout.detail_list_preference_title, null); + TextView titleText = ((TextView) titleView.findViewById(R.id.title)); + titleText.setText(title); + titleText.setLayoutParams(new RelativeLayout.LayoutParams( + RelativeLayout.LayoutParams.MATCH_PARENT, + RelativeLayout.LayoutParams.WRAP_CONTENT)); + return titleView; + } + + private Intent getResultIntent() { + if (mConfirmed) { + return new Intent() + .putExtra(SWITCH_ENABLED_KEY, mSwitch.isChecked()) + .putExtra(CUR_VALUE_KEY, mNumberPicker.getValue()); + } + + return null; + } +} |