public abstract class

SimpleAsyncGameActivity

extends BaseGameActivity
package org.andengine.ui.activity;

import org.andengine.entity.scene.Scene;
import org.andengine.util.ActivityUtils;
import org.andengine.util.call.Callback;
import org.andengine.util.progress.IProgressListener;
import org.andengine.util.progress.ProgressCallable;

/**
 * (c) Zynga 2011
 *
 * @author Nicolas Gramlich <ngramlich@zynga.com>
 * @since 01:24:18 - 03.12.2011
 */
public abstract class SimpleAsyncGameActivity extends BaseGameActivity {
	// ===========================================================
	// Constants
	// ===========================================================

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

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

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

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

	public abstract void onCreateResourcesAsync(final IProgressListener pProgressListener) throws Exception; // TODO Rename
	public abstract Scene onCreateSceneAsync(final IProgressListener pProgressListener) throws Exception; // TODO Rename
	public abstract void onPopulateSceneAsync(final Scene pScene, IProgressListener pProgressListener) throws Exception; // TODO Rename

	@Override
	public void onCreateResources(final OnCreateResourcesCallback pOnCreateResourcesCallback) {
		this.runOnUiThread(new Runnable() {
			@Override
			public void run() {
				ActivityUtils.doProgressAsync(SimpleAsyncGameActivity.this, "Loading Resources...", android.R.drawable.ic_menu_rotate, new ProgressCallable<Void>() {
					@Override
					public Void call(final IProgressListener pProgressListener) throws Exception {
						SimpleAsyncGameActivity.this.onCreateResourcesAsync(pProgressListener);

						pProgressListener.onProgressChanged(100);

						pOnCreateResourcesCallback.onCreateResourcesFinished();

						return null;
					}
				}, new Callback<Void>() {
					@Override
					public void onCallback(final Void pCallbackValue) {
						/* Nothing. */
					}
				});
			}
		});
	}

	@Override
	public void onCreateScene(final OnCreateSceneCallback pOnCreateSceneCallback) {
		this.runOnUiThread(new Runnable() {
			@Override
			public void run() {
				ActivityUtils.doProgressAsync(SimpleAsyncGameActivity.this, "Loading Scene...", android.R.drawable.ic_menu_rotate, new ProgressCallable<Void>() {
					@Override
					public Void call(final IProgressListener pProgressListener) throws Exception {
						final Scene scene = SimpleAsyncGameActivity.this.onCreateSceneAsync(pProgressListener);

						pProgressListener.onProgressChanged(100);

						pOnCreateSceneCallback.onCreateSceneFinished(scene);

						return null;
					}
				}, new Callback<Void>() {
					@Override
					public void onCallback(final Void pCallbackValue) {
						/* Nothing. */
					}
				});
			}
		});
	}
	
	@Override
	public void onPopulateScene(final Scene pScene, final OnPopulateSceneCallback pOnPopulateSceneCallback) {
		this.runOnUiThread(new Runnable() {
			@Override
			public void run() {
				ActivityUtils.doProgressAsync(SimpleAsyncGameActivity.this, "Populating Scene...", android.R.drawable.ic_menu_rotate, new ProgressCallable<Void>() {
					@Override
					public Void call(final IProgressListener pProgressListener) throws Exception {
						SimpleAsyncGameActivity.this.onPopulateSceneAsync(pScene, pProgressListener);
						
						pProgressListener.onProgressChanged(100);
						
						pOnPopulateSceneCallback.onPopulateSceneFinished();
						
						return null;
					}
				}, new Callback<Void>() {
					@Override
					public void onCallback(final Void pCallbackValue) {
						/* Nothing. */
					}
				});
			}
		});
	}

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

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