BaseActivity.java :  » Graphics-3D-2D-OpenGL » andengine » org » anddev » andengine » ui » activity » Android Open Source

Android Open Source » Graphics 3D 2D OpenGL » andengine 
andengine » org » anddev » andengine » ui » activity » BaseActivity.java
package org.anddev.andengine.ui.activity;

import java.util.concurrent.Callable;

import org.anddev.andengine.util.AsyncCallable;
import org.anddev.andengine.util.Callback;
import org.anddev.andengine.util.Debug;
import org.anddev.andengine.util.progress.IProgressListener;
import org.anddev.andengine.util.progress.ProgressCallable;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;

/**
 * @author Nicolas Gramlich
 * @since 18:35:28 - 29.08.2009
 */
public abstract class BaseActivity extends Activity {
  // ===========================================================
  // Constants
  // ===========================================================

  // ===========================================================
  // Fields
  // ===========================================================

  // ===========================================================
  // Constructors
  // ===========================================================

  // ===========================================================
  // Getter & Setter
  // ===========================================================

  // ===========================================================
  // Methods for/from SuperClass/Interfaces
  // ===========================================================

  // ===========================================================
  // Methods
  // ===========================================================

  /**
   * Performs a task in the background, showing a {@link ProgressDialog},
   * while the {@link Callable} is being processed.
   * 
   * @param <T>
   * @param pTitleResID
   * @param pMessageResID
   * @param pErrorMessageResID
   * @param pCallable
   * @param pCallback
   */
  protected <T> void doAsync(final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback) {
    this.doAsync(pTitleResID, pMessageResID, pCallable, pCallback, null);
  }

  /**
   * Performs a task in the background, showing a indeterminate {@link ProgressDialog},
   * while the {@link Callable} is being processed.
   * 
   * @param <T>
   * @param pTitleResID
   * @param pMessageResID
   * @param pErrorMessageResID
   * @param pCallable
   * @param pCallback
   * @param pExceptionCallback
   */
  protected <T> void doAsync(final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {
    new AsyncTask<Void, Void, T>() {
      private ProgressDialog mPD;
      private Exception mException = null;

      @Override
      public void onPreExecute() {
        this.mPD = ProgressDialog.show(BaseActivity.this, BaseActivity.this.getString(pTitleResID), BaseActivity.this.getString(pMessageResID));
        super.onPreExecute();
      }

      @Override
      public T doInBackground(final Void... params) {
        try {
          return pCallable.call();
        } catch (final Exception e) {
          this.mException = e;
        }
        return null;
      }

      @Override
      public void onPostExecute(final T result) {
        try {
          this.mPD.dismiss();
        } catch (final Exception e) {
          Debug.e("Error", e);
        }

        if(this.isCancelled()) {
          this.mException = new CancelledException();
        }

        if(this.mException == null) {
          pCallback.onCallback(result);
        } else {
          if(pExceptionCallback == null) {
            Debug.e("Error", this.mException);
          } else {
            pExceptionCallback.onCallback(this.mException);
          }
        }

        super.onPostExecute(result);
      }
    }.execute((Void[]) null);
  }

  /**
   * Performs a task in the background, showing a {@link ProgressDialog} with an ProgressBar,
   * while the {@link AsyncCallable} is being processed.
   * 
   * @param <T>
   * @param pTitleResID
   * @param pMessageResID
   * @param pErrorMessageResID
   * @param pAsyncCallable
   * @param pCallback
   */
  protected <T> void doProgressAsync(final int pTitleResID, final ProgressCallable<T> pCallable, final Callback<T> pCallback) {
    this.doProgressAsync(pTitleResID, pCallable, pCallback, null);
  }

  /**
   * Performs a task in the background, showing a {@link ProgressDialog} with a ProgressBar,
   * while the {@link AsyncCallable} is being processed.
   * 
   * @param <T>
   * @param pTitleResID
   * @param pMessageResID
   * @param pErrorMessageResID
   * @param pAsyncCallable
   * @param pCallback
   * @param pExceptionCallback
   */
  protected <T> void doProgressAsync(final int pTitleResID, final ProgressCallable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {
    new AsyncTask<Void, Integer, T>() {
      private ProgressDialog mPD;
      private Exception mException = null;

      @Override
      public void onPreExecute() {
        this.mPD = new ProgressDialog(BaseActivity.this);
        this.mPD.setTitle(pTitleResID);
        this.mPD.setIcon(android.R.drawable.ic_menu_save);
        this.mPD.setIndeterminate(false);
        this.mPD.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        this.mPD.show();
        super.onPreExecute();
      }

      @Override
      public T doInBackground(final Void... params) {
        try {
          return pCallable.call(new IProgressListener() {
            @Override
            public void onProgressChanged(final int pProgress) {
              onProgressUpdate(pProgress);
            }
          });
        } catch (final Exception e) {
          this.mException = e;
        }
        return null;
      }

      @Override
      public void onProgressUpdate(final Integer... values) {
        this.mPD.setProgress(values[0]);
      }

      @Override
      public void onPostExecute(final T result) {
        try {
          this.mPD.dismiss();
        } catch (final Exception e) {
          Debug.e("Error", e);
          /* Nothing. */
        }

        if(this.isCancelled()) {
          this.mException = new CancelledException();
        }

        if(this.mException == null) {
          pCallback.onCallback(result);
        } else {
          if(pExceptionCallback == null) {
            Debug.e("Error", this.mException);
          } else {
            pExceptionCallback.onCallback(this.mException);
          }
        }

        super.onPostExecute(result);
      }
    }.execute((Void[]) null);
  }

  /**
   * Performs a task in the background, showing an indeterminate {@link ProgressDialog},
   * while the {@link AsyncCallable} is being processed.
   * 
   * @param <T>
   * @param pTitleResID
   * @param pMessageResID
   * @param pErrorMessageResID
   * @param pAsyncCallable
   * @param pCallback
   * @param pExceptionCallback
   */
  protected <T> void doAsync(final int pTitleResID, final int pMessageResID, final AsyncCallable<T> pAsyncCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {
    final ProgressDialog pd = ProgressDialog.show(BaseActivity.this, this.getString(pTitleResID), this.getString(pMessageResID));
    pAsyncCallable.call(new Callback<T>() {
      @Override
      public void onCallback(final T result) {
        try {
          pd.dismiss();
        } catch (final Exception e) {
          Debug.e("Error", e);
          /* Nothing. */
        }

        pCallback.onCallback(result);
      }
    }, pExceptionCallback);
  }

  // ===========================================================
  // Inner and Anonymous Classes
  // ===========================================================

  public static class CancelledException extends Exception {
    private static final long serialVersionUID = -78123211381435596L;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.