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

Java tutorial

Introduction

Here is the source code for com.jaspersoft.android.jaspermobile.dialog.OutputFormatDialogFragment.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 com.jaspersoft.android.jaspermobile.R;
import com.jaspersoft.android.jaspermobile.ui.entity.job.JobFormViewEntity;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Andrew Tivodar
 * @since 2.3
 */
public class OutputFormatDialogFragment extends BaseDialogFragment
        implements DialogInterface.OnMultiChoiceClickListener {

    private final static String SELECTED_FORMATS_ARG = "SELECTED_FORMATS_ARG";
    private final static String FORMATS_ARG = "FORMATS_ARG";

    private List<JobFormViewEntity.OutputFormat> selectedFormats;
    private List<JobFormViewEntity.OutputFormat> formats;

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.sr_output_format);
        builder.setMultiChoiceItems(getLabels(), getSelected(), this);
        builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (mDialogListener != null) {
                    ((OutputFormatClickListener) mDialogListener).onOutputFormatSelected(selectedFormats);
                }
            }
        });

        builder.setNegativeButton(R.string.cancel, null);

        Dialog dialog = builder.create();
        dialog.setCanceledOnTouchOutside(true);
        return dialog;
    }

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

        Bundle args = getArguments();
        if (args != null) {
            selectedFormats = args.getParcelableArrayList(SELECTED_FORMATS_ARG);
            formats = args.getParcelableArrayList(FORMATS_ARG);
        }
    }

    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        if (which >= formats.size())
            return;

        JobFormViewEntity.OutputFormat item = formats.get(which);
        if (isChecked) {
            selectedFormats.add(item);
        } else {
            selectedFormats.remove(item);
        }
    }

    private String[] getLabels() {
        int size = formats.size();
        String[] labels = new String[size];
        for (int i = 0; i < size; i++) {
            labels[i] = formats.get(i).toString();
        }
        return labels;
    }

    private boolean[] getSelected() {
        boolean[] selected = new boolean[formats.size()];
        for (JobFormViewEntity.OutputFormat selectedFormat : selectedFormats) {
            int index = formats.indexOf(selectedFormat);
            selected[index] = true;
        }
        return selected;
    }

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

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

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

    public static class OutputFormatFragmentBuilder extends BaseDialogFragmentBuilder<OutputFormatDialogFragment> {

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

        public OutputFormatFragmentBuilder setSelected(List<JobFormViewEntity.OutputFormat> formats) {
            args.putParcelableArrayList(SELECTED_FORMATS_ARG, new ArrayList<>(formats));
            return this;
        }

        public OutputFormatFragmentBuilder setFormats(List<JobFormViewEntity.OutputFormat> formats) {
            args.putParcelableArrayList(FORMATS_ARG, new ArrayList<>(formats));
            return this;
        }

        @Override
        protected OutputFormatDialogFragment build() {
            return new OutputFormatDialogFragment();
        }
    }

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

    public interface OutputFormatClickListener extends DialogClickListener {
        void onOutputFormatSelected(List<JobFormViewEntity.OutputFormat> selectedFormats);
    }
}