Android Open Source - js-android-sdk Js Async Task Manager






From Project

Back to project page js-android-sdk.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project js-android-sdk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2012 Jaspersoft Corporation. All rights reserved.
 * http://community.jaspersoft.com/project/mobile-sdk-android
 */*w  ww . j  a v a  2  s .  c om*/
 * Unless you have purchased a commercial license agreement from Jaspersoft,
 * the following license terms apply:
 *
 * This program is part of Jaspersoft Mobile SDK for Android.
 *
 * Jaspersoft Mobile SDK 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 3 of the License, or
 * (at your option) any later version.
 *
 * Jaspersoft Mobile SDK 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 Jaspersoft Mobile SDK for Android. If not, see
 * <http://www.gnu.org/licenses/lgpl>.
 */

package com.jaspersoft.android.sdk.client.async;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Build;
import android.util.Log;
import android.view.WindowManager;

import com.jaspersoft.android.sdk.client.async.task.JsAsyncTask;

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

/**
 * <p>Declaration of <strong>Asynchronous Task Manager</strong>,
 * used to manage <strong>Asynchronous Task</strong>s. It responsible for the following: <br>
 * 1) Creating a <strong>Progress dialog</strong> during it initialization; <br>
 * 2) Executing the task when received into <strong>Asynchronous Task Manager</strong> control;   <br>
 * 3) Displaying the status of the target <strong>Asynchronous Task</strong> in the <strong>Progress dialog</strong>; <br>
 * 4) Retaining/restoring the list of <strong>Asynchronous Task</strong>s from <strong>state</strong> during
 * <strong>Activity</strong> recovery  <br>
 * 5) Canceling the strong>Asynchronous task</strong> when <strong>Progress dialog</strong> is canceled.  <br>
 * 6) Closing the <strong>Progress dialog</strong> when all active <strong>Asynchronous Task</strong>s are completed.   <br>
 * 7) Informing Activity about completion or cancellation of <strong>Asynchronous Task</strong>s</p>.  <br>
 *
 * @author Volodya Sabadosh (vsabadosh@jaspersoft.com)
 * @author Ivan Gadzhega
 * @since 1.0
 *
 * @deprecated  Use {@link JsXmlSpiceService} instead.
 */

@Deprecated
public class JsAsyncTaskManager implements JsProgressTracker, DialogInterface.OnCancelListener {

    private static final String TAG = "JsAsyncTaskManager";

    private final JsOnTaskCallbackListener jsTaskCompleteListener;
    private AlertDialog progressDialog;
    private List<JsAsyncTask> jsAsyncTaskList = new ArrayList<JsAsyncTask>();

    /**
     * Creates a new <strong>Asynchronous Task Manager</strong> entity with the specified parameters.
     *
     * @param context <strong>Android</strong> context.
     * @param jsTaskCompleteListener <strong>Asynchronous task callback listener</strong>.
     */
    public JsAsyncTaskManager(Context context, JsOnTaskCallbackListener jsTaskCompleteListener) {
        this(context, jsTaskCompleteListener, null);
    }

    /**
     * Creates a new <strong>Asynchronous Task Manager</strong> entity with the specified parameters.
     *
     * @param context <strong>Android</strong> context.
     * @param jsTaskCompleteListener <strong>Asynchronous Task Callback Listener</strong>.
     * @param progressDialog <strong>Progress dialog</strong>.
     */
    public JsAsyncTaskManager(Context context, JsOnTaskCallbackListener jsTaskCompleteListener, AlertDialog progressDialog) {
        // Save reference to complete listener (activity)
        this.jsTaskCompleteListener = jsTaskCompleteListener;

        if (progressDialog == null) {
            // Setup default progress dialog.
            this.progressDialog = new ProgressDialog(context);
            this.progressDialog.setCancelable(true);
            this.progressDialog.setOnCancelListener(this);
            this.progressDialog.dismiss();
        }  else {
            this.progressDialog = progressDialog;
        }
    }

    /**
     * Executes target <strong>Asynchronous Task</strong>.
     *
     * @param jsAsyncTask <strong>Asynchronous Task</strong>.
     */
    public void executeTask(JsAsyncTask jsAsyncTask) {
        // Keep async tasks
        jsAsyncTaskList.add(jsAsyncTask);
        // Wire task to tracker (this)
        jsAsyncTask.setProgressTracker(this);
        // Start task
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            jsAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        }
        else {
            jsAsyncTask.execute();
        }
    }

    /**
     * {@inheritDoc}
     */
    public void onProgress(JsAsyncTask jsAsyncTask, String message) {
        if (jsAsyncTask.isShowProgressDialog()) {
            // Show dialog if it wasn't shown yet or was removed on configuration (rotation) change
            if (!progressDialog.isShowing()) {
                try {
                    progressDialog.show();
                } catch (WindowManager.BadTokenException ex) {
                    jsAsyncTask.cancel(true);
                    jsAsyncTaskList.remove(jsAsyncTask);
                    Log.w(TAG, ex.getMessage());
                }
            }
            // Show current message in progress dialog
            progressDialog.setMessage(message);
        }
    }

    /**
     * {@inheritDoc}
     */
    public void onCancel(DialogInterface dialog) {
        if(!this.jsAsyncTaskList.isEmpty()) {
            for (JsAsyncTask task : jsAsyncTaskList) {
                task.cancel(true);
                this.jsTaskCompleteListener.onTaskComplete(task);
                jsAsyncTaskList.remove(task);
            }
        }
    }

    /**
     * {@inheritDoc}
     */
    public void onComplete(JsAsyncTask asyncTask) {
        // Notify activity about completion
        jsTaskCompleteListener.onTaskComplete(asyncTask);
        // Reset task
        jsAsyncTaskList.remove(asyncTask);

        // Close progress dialog when all task is done
        finishTaskHandler(asyncTask);
    }

    /**
     * {@inheritDoc}
     */
    public void onException(JsAsyncTask asyncTask) {
        // Notify activity about completion
        jsTaskCompleteListener.onTaskException(asyncTask);
        // Reset task
        jsAsyncTaskList.remove(asyncTask);

        finishTaskHandler(asyncTask);
    }

    /**
     * Retains and detaches from <strong>progress tracker</strong> the list of <strong>Asynchronous Task</strong>s in
     * <strong>state</strong> during <strong>Activity</strong> destruction.
     *
     * @return list of <strong>Asynchronous task</strong>s.
     */
    public Object retainTasks() {
        // Detach task from tracker (this) before retain
        for (JsAsyncTask task : jsAsyncTaskList) {
            task.setProgressTracker(null);
        }
        // Retains task
        return jsAsyncTaskList;
    }

    /**
     * Restores the list of <strong>Asynchronous Task</strong>s from <strong>state</strong> during
     * <strong>Activity</strong> recovery.
     *
     * @param retainedTasksList list of <strong>Asynchronous Task</strong>s.
     */
    public void handleRetainedTasks(List<JsAsyncTask> retainedTasksList) {
        if (retainedTasksList != null) {
            jsAsyncTaskList.addAll(retainedTasksList);
            for (JsAsyncTask task : jsAsyncTaskList) {
                task.setProgressTracker(this);
            }
        }
    }

    /**
     * Closes progress dialog when all task is done and target progress dialog showing is required for target.
     * <strong>Asynchronous task</strong>.
     *
     * @param asyncTask <strong>Asynchronous Task</strong>.
     */
    private void finishTaskHandler(JsAsyncTask asyncTask) {
        if (progressDialog.isShowing() && asyncTask.isShowProgressDialog() && jsAsyncTaskList.isEmpty()) {
            try {
                progressDialog.dismiss();
            } catch (IllegalArgumentException ex) {
                Log.w(TAG, ex.getMessage());
            }

        }
    }

    /**
     * Tracks current status of <strong>Asynchronous Task</strong>s.
     *
     * @return <code>true</code> if there are <strong>Asynchronous Task</strong>s executing, otherwise
     * <code>false</code>.
     */
    public boolean isWorking() {
        return !jsAsyncTaskList.isEmpty();
    }

    /**
     * Tracks current status of the target <strong>Asynchronous Task</strong>.
     *
     * @return <code>true</code> if given <strong>Asynchronous Task</strong> is executing, otherwise
     * <code>false</code>.
     */
    public boolean isTaskWorking(JsAsyncTask asyncTask) {
        return jsAsyncTaskList.contains(asyncTask);
    }
}




Java Source Code List

com.jaspersoft.android.sdk.client.JsRestClient.java
com.jaspersoft.android.sdk.client.JsServerProfile.java
com.jaspersoft.android.sdk.client.async.JsAsyncTaskManager.java
com.jaspersoft.android.sdk.client.async.JsOnTaskCallbackListener.java
com.jaspersoft.android.sdk.client.async.JsProgressTracker.java
com.jaspersoft.android.sdk.client.async.JsXmlSpiceService.java
com.jaspersoft.android.sdk.client.async.request.BaseRequest.java
com.jaspersoft.android.sdk.client.async.request.CheckReportStatusRequest.java
com.jaspersoft.android.sdk.client.async.request.DeleteResourceRequest.java
com.jaspersoft.android.sdk.client.async.request.GetRootFolderDataRequest.java
com.jaspersoft.android.sdk.client.async.request.ModifyResourceRequest.java
com.jaspersoft.android.sdk.client.async.request.ReportDetailsRequest.java
com.jaspersoft.android.sdk.client.async.request.RunReportExecutionRequest.java
com.jaspersoft.android.sdk.client.async.request.RunReportExportOutputRequest.java
com.jaspersoft.android.sdk.client.async.request.RunReportExportsRequest.java
com.jaspersoft.android.sdk.client.async.request.SaveExportAttachmentRequest.java
com.jaspersoft.android.sdk.client.async.request.SaveExportOutputRequest.java
com.jaspersoft.android.sdk.client.async.request.SaveReportAttachmentRequest.java
com.jaspersoft.android.sdk.client.async.request.SaveReportAttachmentsRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.BaseInputControlsRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.CacheableRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.GetInputControlsRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.GetInputControlsValuesRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.GetReportRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.GetResourceLookupsRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.GetResourceRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.GetResourcesRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.GetServerInfoRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.SearchResourcesRequest.java
com.jaspersoft.android.sdk.client.async.request.cacheable.ValidateInputControlsValuesRequest.java
com.jaspersoft.android.sdk.client.async.task.DeleteResourceAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.GetInputControlsAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.GetReportAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.GetResourceAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.GetResourcesListAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.GetServerInfoAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.JsAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.JsRestAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.ModifyResourceAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.SaveReportAttachmentAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.SaveReportAttachmentsAsyncTask.java
com.jaspersoft.android.sdk.client.async.task.SearchResourcesAsyncTask.java
com.jaspersoft.android.sdk.client.ic.InputControlWrapper.java
com.jaspersoft.android.sdk.client.oxm.ReportAttachment.java
com.jaspersoft.android.sdk.client.oxm.ReportDescriptor.java
com.jaspersoft.android.sdk.client.oxm.ResourceDescriptor.java
com.jaspersoft.android.sdk.client.oxm.ResourceParameter.java
com.jaspersoft.android.sdk.client.oxm.ResourceProperty.java
com.jaspersoft.android.sdk.client.oxm.ResourcesList.java
com.jaspersoft.android.sdk.client.oxm.control.InputControlOption.java
com.jaspersoft.android.sdk.client.oxm.control.InputControlState.java
com.jaspersoft.android.sdk.client.oxm.control.InputControlStatesList.java
com.jaspersoft.android.sdk.client.oxm.control.InputControl.java
com.jaspersoft.android.sdk.client.oxm.control.InputControlsList.java
com.jaspersoft.android.sdk.client.oxm.control.validation.DateTimeFormatValidationRule.java
com.jaspersoft.android.sdk.client.oxm.control.validation.MandatoryValidationRule.java
com.jaspersoft.android.sdk.client.oxm.control.validation.ValidationRule.java
com.jaspersoft.android.sdk.client.oxm.control.validation.ValidationRulesList.java
com.jaspersoft.android.sdk.client.oxm.converter.ReportStatusConverter.java
com.jaspersoft.android.sdk.client.oxm.report.ErrorDescriptor.java
com.jaspersoft.android.sdk.client.oxm.report.ExecutionRequest.java
com.jaspersoft.android.sdk.client.oxm.report.ExportExecution.java
com.jaspersoft.android.sdk.client.oxm.report.ExportsRequest.java
com.jaspersoft.android.sdk.client.oxm.report.FolderDataResponse.java
com.jaspersoft.android.sdk.client.oxm.report.ReportDataResponse.java
com.jaspersoft.android.sdk.client.oxm.report.ReportExecutionRequest.java
com.jaspersoft.android.sdk.client.oxm.report.ReportExecutionResponse.java
com.jaspersoft.android.sdk.client.oxm.report.ReportOutputResource.java
com.jaspersoft.android.sdk.client.oxm.report.ReportParameter.java
com.jaspersoft.android.sdk.client.oxm.report.ReportParametersList.java
com.jaspersoft.android.sdk.client.oxm.report.ReportStatusResponse.java
com.jaspersoft.android.sdk.client.oxm.report.ReportStatus.java
com.jaspersoft.android.sdk.client.oxm.resource.ResourceLookupSearchCriteria.java
com.jaspersoft.android.sdk.client.oxm.resource.ResourceLookup.java
com.jaspersoft.android.sdk.client.oxm.resource.ResourceLookupsList.java
com.jaspersoft.android.sdk.client.oxm.server.ServerInfo.java
com.jaspersoft.android.sdk.integration.CheckReportStatusRequestTest.java
com.jaspersoft.android.sdk.integration.GetRootFolderDataRequestTest.java
com.jaspersoft.android.sdk.integration.ReportDetailsRequestTest.java
com.jaspersoft.android.sdk.integration.RunReportExportsRequestTest.java
com.jaspersoft.android.sdk.integration.utils.ProtoInstrumentation.java
com.jaspersoft.android.sdk.integration.utils.SampleData.java
com.jaspersoft.android.sdk.ui.adapters.FileArrayAdapter.java
com.jaspersoft.android.sdk.ui.adapters.ResourceDescriptorArrayAdapter.java
com.jaspersoft.android.sdk.ui.adapters.ResourceDescriptorComparator.java
com.jaspersoft.android.sdk.ui.adapters.ResourceLookupArrayAdapter.java
com.jaspersoft.android.sdk.ui.adapters.ResourceLookupComparator.java
com.jaspersoft.android.sdk.ui.adapters.ResourceLookupEndlessAdapter.java
com.jaspersoft.android.sdk.ui.adapters.ResourcePropertyArrayAdapter.java
com.jaspersoft.android.sdk.ui.widget.MultiSelectSpinner.java
com.jaspersoft.android.sdk.util.CookieHttpRequestInterceptor.java
com.jaspersoft.android.sdk.util.FileUtils.java
com.jaspersoft.android.sdk.util.KeepAliveHttpRequestInterceptor.java
com.jaspersoft.android.sdk.util.LocalesHttpRequestInterceptor.java
com.jaspersoft.android.sdk.util.StaticCacheHelper.java