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

Java tutorial

Introduction

Here is the source code for com.jaspersoft.android.jaspermobile.dialog.ProgressDialogFragment.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.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import com.jaspersoft.android.jaspermobile.R;

import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.FragmentArg;

import static android.content.DialogInterface.OnCancelListener;
import static android.content.DialogInterface.OnShowListener;

/**
 * @author Tom Koptel
 * @since 1.9
 */
@EFragment
public class ProgressDialogFragment extends DialogFragment {
    private static final String TAG = ProgressDialogFragment.class.getSimpleName();
    private DialogInterface.OnCancelListener onCancelListener;
    private DialogInterface.OnShowListener onShowListener;
    private static boolean isPreparing = false;

    @FragmentArg
    int loadingMessage;

    public void setOnCancelListener(OnCancelListener onCancelListener) {
        this.onCancelListener = onCancelListener;
    }

    public void setOnShowListener(OnShowListener onShowListener) {
        this.onShowListener = onShowListener;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View customLayout = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_progress, null);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        TextView message = (TextView) customLayout.findViewById(R.id.progressMessage);
        message.setText(getString(loadingMessage));
        builder.setView(customLayout);

        Dialog dialog = builder.create();
        dialog.setCanceledOnTouchOutside(false);

        dialog.setOnShowListener(new OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                if (!isPreparing) {
                    dialog.dismiss();
                    return;
                }
                if (onShowListener != null) {
                    onShowListener.onShow(dialog);
                }
                isPreparing = false;
            }
        });
        return dialog;
    }

    @Override
    public void onCancel(DialogInterface dialog) {
        super.onCancel(dialog);
        if (onCancelListener != null) {
            onCancelListener.onCancel(dialog);
        }
    }

    public static void dismiss(FragmentManager fm) {
        ProgressDialogFragment dialogFragment = getInstance(fm);
        if (dialogFragment != null) {
            dialogFragment.dismiss();
        } else if (isPreparing) {
            isPreparing = false;
        }
    }

    public static boolean isVisible(FragmentManager fm) {
        return (getInstance(fm) != null);
    }

    public static ProgressDialogFragment getInstance(FragmentManager fm) {
        if (fm == null)
            return null;
        return (ProgressDialogFragment) fm.findFragmentByTag(TAG);
    }

    public static Builder builder(FragmentManager fm) {
        return new Builder(fm);
    }

    public static class Builder {
        private OnCancelListener onCancelListener;
        private OnShowListener onShowListener;
        private int loadingMessage;
        private final FragmentManager fm;

        public Builder(FragmentManager fm) {
            this.fm = fm;
            this.loadingMessage = R.string.r_pd_running_report_msg;
        }

        public Builder setOnCancelListener(OnCancelListener onCancelListener) {
            this.onCancelListener = onCancelListener;
            return this;
        }

        public Builder setOnShowListener(OnShowListener onShowListener) {
            this.onShowListener = onShowListener;
            return this;
        }

        public Builder setLoadingMessage(int loadingMessage) {
            this.loadingMessage = loadingMessage;
            return this;
        }

        public CycleManager buildManager() {
            return new CycleManager(this);
        }

        public void show() {
            ProgressDialogFragment dialogFragment = getInstance(fm);

            if (dialogFragment == null) {
                dialogFragment = ProgressDialogFragment_.builder().loadingMessage(loadingMessage).build();
                dialogFragment.setOnCancelListener(onCancelListener);
                dialogFragment.setOnShowListener(onShowListener);
                dialogFragment.show(fm, TAG);

                isPreparing = true;
            }
        }

        public void display() {
            ProgressDialogFragment dialogFragment = ProgressDialogFragment_.builder().loadingMessage(loadingMessage)
                    .build();
            dialogFragment.setOnCancelListener(onCancelListener);
            dialogFragment.setOnShowListener(onShowListener);
            dialogFragment.show(fm, TAG);
        }
    }

    public static class CycleManager {
        private boolean paused;
        private boolean showed;

        private final ProgressDialogFragment.Builder progressBuilder;

        private CycleManager(ProgressDialogFragment.Builder progressBuilder) {
            this.progressBuilder = progressBuilder;
        }

        public void show() {
            showed = true;
            if (!paused) {
                progressBuilder.show();
            }
        }

        public void hide(FragmentActivity activity) {
            showed = false;
            if (!paused) {
                ProgressDialogFragment.dismiss(activity.getSupportFragmentManager());
            }
        }

        public void resume(FragmentActivity activity) {
            paused = false;
            trigger(activity);
        }

        public void pause(FragmentActivity activity) {
            paused = true;
            trigger(activity);
        }

        private void trigger(FragmentActivity activity) {
            if (showed) {
                showDialog();
            } else {
                ProgressDialogFragment.dismiss(activity.getSupportFragmentManager());
            }
        }

        private void showDialog() {
            progressBuilder.show();
        }
    }
}