com.jaspersoft.android.jaspermobile.dialog.NumberPickerDialogFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.jaspersoft.android.jaspermobile.dialog.NumberPickerDialogFragment.java

Source

/*
 * Copyright  2016 TIBCO Software,Inc.All rights reserved.
 * http://community.jaspersoft.com/project/jaspermobile-android
 *
 * Unless you have purchased a commercial license agreement from TIBCO Jaspersoft,
 * the following license terms apply:
 *
 * This program is part of TIBCO Jaspersoft Mobile for Android.
 *
 * TIBCO Jaspersoft Mobile is free software:you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation,either version 3of the License,or
 * (at your option)any later version.
 *
 * TIBCO Jaspersoft Mobile is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY;without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with TIBCO Jaspersoft Mobile for Android.If not,see
 * <http://www.gnu.org/licenses/lgpl>.
 */

package com.jaspersoft.android.jaspermobile.dialog;

import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.NumberPicker;

import com.jaspersoft.android.jaspermobile.R;

import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.SystemService;

/**
 * @author Tom Koptel
 * @since 1.9
 */
@EFragment
public class NumberPickerDialogFragment extends BaseDialogFragment
        implements DialogInterface.OnShowListener, DialogInterface.OnClickListener {

    private final static String MIN_VALUE_ARG = "min_value";
    private final static String MAX_VALUE_ARG = "max_value";
    private final static String CURRENT_VALUE_ARG = "mSelectedValue";

    private int mMinValue;
    private int mMaxValue;
    private int mSelectedValue;

    private EditText etNumber;
    private NumberPicker numberPicker;

    @SystemService
    protected InputMethodManager inputMethodManager;

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        ViewGroup customView = (ViewGroup) LayoutInflater.from(getActivity()).inflate(R.layout.number_dialog_layout,
                (ViewGroup) getView(), false);

        numberPicker = (NumberPicker) customView.findViewById(R.id.numberPicker);
        numberPicker.setMinValue(mMinValue);
        numberPicker.setMaxValue(mMaxValue);

        int inputId = getActivity().getResources().getIdentifier("numberpicker_input", "id", "android");
        etNumber = (EditText) numberPicker.findViewById(inputId);
        etNumber.addTextChangedListener(new PickerTextWatcher());

        builder.setTitle(R.string.dialog_current_page);
        builder.setView(customView);
        builder.setCancelable(true);
        builder.setPositiveButton(R.string.ok, this);
        builder.setNegativeButton(R.string.cancel, this);

        AlertDialog dialog = builder.create();
        if (savedInstanceState == null) {
            dialog.setOnShowListener(this);
        }

        return dialog;
    }

    @Override
    public void onShow(DialogInterface dialog) {
        numberPicker.setValue(mSelectedValue);
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        if (which == DialogInterface.BUTTON_POSITIVE && mDialogListener != null) {
            ((NumberDialogClickListener) mDialogListener).onNumberPicked(numberPicker.getValue(), requestCode);
        }
        inputMethodManager.hideSoftInputFromWindow(etNumber.getWindowToken(), 0);
    }

    @Override
    protected Class<NumberDialogClickListener> getDialogCallbackClass() {
        return NumberDialogClickListener.class;
    }

    protected void initDialogParams() {
        super.initDialogParams();

        Bundle args = getArguments();
        if (args != null) {
            if (args.containsKey(MIN_VALUE_ARG)) {
                mMinValue = args.getInt(MIN_VALUE_ARG);
            }
            if (args.containsKey(MAX_VALUE_ARG)) {
                mMaxValue = args.getInt(MAX_VALUE_ARG);
            }
            if (args.containsKey(CURRENT_VALUE_ARG)) {
                mSelectedValue = args.getInt(CURRENT_VALUE_ARG);
            }
        }
    }

    public static NumberDialogFragmentBuilder createBuilder(FragmentManager fragmentManager) {
        return new NumberDialogFragmentBuilder(fragmentManager);
    }

    //---------------------------------------------------------------------
    // Dialog Builder
    //---------------------------------------------------------------------

    public static class NumberDialogFragmentBuilder extends BaseDialogFragmentBuilder<NumberPickerDialogFragment> {

        public NumberDialogFragmentBuilder(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

        public NumberDialogFragmentBuilder setMinValue(int minValue) {
            args.putInt(MIN_VALUE_ARG, minValue);
            return this;
        }

        public NumberDialogFragmentBuilder setMaxValue(int maxValue) {
            args.putInt(MAX_VALUE_ARG, maxValue);
            return this;
        }

        public NumberDialogFragmentBuilder setCurrentValue(int value) {
            args.putInt(CURRENT_VALUE_ARG, value);
            return this;
        }

        @Override
        protected NumberPickerDialogFragment build() {
            return new NumberPickerDialogFragment_();
        }
    }

    //---------------------------------------------------------------------
    // Dialog Callback
    //---------------------------------------------------------------------

    public interface NumberDialogClickListener extends DialogClickListener {
        void onNumberPicked(int number, int requestCode);
    }

    //---------------------------------------------------------------------
    // Nested classes
    //---------------------------------------------------------------------

    private class PickerTextWatcher implements TextWatcher {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence sequence, int start, int before, int count) {
            try {
                int value = Integer.valueOf(String.valueOf(sequence));
                if (value >= numberPicker.getMinValue() && value <= numberPicker.getMaxValue()) {
                    numberPicker.setValue(value);
                }

            } catch (NumberFormatException ex) {
                // swallow error
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    }

}