From 81cb5abcb1fd3b8b8c4a945ea9aee0906b22ade9 Mon Sep 17 00:00:00 2001 From: Kevin Ruland Date: Thu, 9 Feb 2012 04:04:29 +0000 Subject: [PATCH] Rewrite the ThrustCurve search and download process to be orientation friendly. --- .../rocket/OpenRocketLoaderActivity.java | 21 +- .../TCMissingMotorDownloadAction.java | 75 +++----- .../android/thrustcurve/TCQueryAction.java | 179 ++++++++++-------- .../android/thrustcurve/TCQueryActivity.java | 43 ++--- .../android/thrustcurve/TCSearchAction.java | 72 ++----- .../android/util/ErrorDialogFragment.java | 46 +++++ .../android/util/ProgressDialogFragment.java | 25 ++- 7 files changed, 235 insertions(+), 226 deletions(-) create mode 100644 android/src/net/sf/openrocket/android/util/ErrorDialogFragment.java diff --git a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java index 48d6e4917..272b4b6d5 100644 --- a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java +++ b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java @@ -18,18 +18,16 @@ import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; public class OpenRocketLoaderActivity extends FragmentActivity -implements TCQueryAction.OnComplete, OpenRocketLoaderFragment.OnOpenRocketFileLoaded +implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnOpenRocketFileLoaded { private final static String MISSING_MOTOR_DIAG_FRAGMENT_TAG = "missingmotordialog"; + private final static String MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG = "missingmotortask"; - private TCMissingMotorDownloadAction missingMotorDownloadAction; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); - missingMotorDownloadAction = new TCMissingMotorDownloadAction(this); if ( savedInstanceState == null || savedInstanceState.getBoolean("isLoading", false) == false ) { Intent i = getIntent(); Uri file = i.getData(); @@ -44,15 +42,6 @@ implements TCQueryAction.OnComplete, OpenRocketLoaderFragment.OnOpenRocketFileLo outState.putBoolean("isLoading", true); } - @Override - protected void onDestroy() { - if ( missingMotorDownloadAction != null ) { - missingMotorDownloadAction.dismiss(); - } - - super.onDestroy(); - } - private void loadOrkFile( Uri file ) { AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + file); String path = file.getPath(); @@ -93,7 +82,7 @@ implements TCQueryAction.OnComplete, OpenRocketLoaderFragment.OnOpenRocketFileLo * Called when the TCMissingMotorDownload process finishes. */ @Override - public void onComplete() { + public void onTCQueryComplete(String message) { Rocket rocket = ((Application)OpenRocketLoaderActivity.this.getApplication()).getRocketDocument().getRocket(); WarningSet warnings = ((Application)OpenRocketLoaderActivity.this.getApplication()).getWarnings(); @@ -120,8 +109,8 @@ implements TCQueryAction.OnComplete, OpenRocketLoaderFragment.OnOpenRocketFileLo Rocket rocket = ((Application)OpenRocketLoaderActivity.this.getApplication()).getRocketDocument().getRocket(); Set missingMotors = MissingMotorHelpers.findMissingMotors(rocket); - missingMotorDownloadAction.setMissingMotors(missingMotors); - missingMotorDownloadAction.start(); + TCMissingMotorDownloadAction motorfrag = TCMissingMotorDownloadAction.newInstance( missingMotors ); + getSupportFragmentManager().beginTransaction().add( motorfrag, MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG).commit(); } diff --git a/android/src/net/sf/openrocket/android/thrustcurve/TCMissingMotorDownloadAction.java b/android/src/net/sf/openrocket/android/thrustcurve/TCMissingMotorDownloadAction.java index 7f6cb7077..c64bb02d4 100644 --- a/android/src/net/sf/openrocket/android/thrustcurve/TCMissingMotorDownloadAction.java +++ b/android/src/net/sf/openrocket/android/thrustcurve/TCMissingMotorDownloadAction.java @@ -2,29 +2,25 @@ package net.sf.openrocket.android.thrustcurve; import java.util.Set; -import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor; import net.sf.openrocket.android.util.AndroidLogWrapper; import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder; -import android.app.Activity; public class TCMissingMotorDownloadAction extends TCQueryAction { - private Set missingMotors; - - public TCMissingMotorDownloadAction(Activity parent) { - super(parent); + public static TCMissingMotorDownloadAction newInstance( Set missingMotors ) { + TCMissingMotorDownloadAction frag = new TCMissingMotorDownloadAction(); + frag.task = frag.new Downloader(missingMotors); + return frag; } - public void setMissingMotors( Set missingMotors ) { - this.missingMotors = missingMotors; - } - - protected Runnable getTask() { - return new Downloader(); - } - - private class Downloader implements Runnable { + private class Downloader extends TCQueryAction.TCQueryTask { + private Set missingMotors; + + private Downloader( Set missingMotors ) { + this.missingMotors = missingMotors; + } + private void downloadMissingMotor( ThrustCurveMotorPlaceholder motor ) { try { SearchRequest request = new SearchRequest(); @@ -55,55 +51,32 @@ public class TCMissingMotorDownloadAction extends TCQueryAction { continue; } - MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id()); - AndroidLogWrapper.d(TCQueryAction.class, mi.toString()); - ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor(); + MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id()); - m.setThrustCurveMotor( b.getThrustCurveMotor() ); + writeMotor( mi, b); - // Convert impulse class. ThrustCurve puts mmx, 1/4a and 1/2a as A. - m.setImpulseClass(mi.getImpulse_class()); - if ( "a".equalsIgnoreCase(mi.getImpulse_class())) { - if( mi.getCommon_name().startsWith("1/2A") ) { - m.setImpulseClass("1/2A"); - } else if (mi.getCommon_name().startsWith("1/4A") ) { - m.setImpulseClass("1/4A"); - } else if (mi.getCommon_name().startsWith("Micro") ) { - m.setImpulseClass("1/8A"); - } - } - - // Convert Case Info. - if ( mi.getCase_info() == null - || "single use".equalsIgnoreCase(mi.getCase_info()) - || "single-use".equalsIgnoreCase(mi.getCase_info())) { - m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength()); - } else { - m.setCaseInfo(mi.getCase_info()); - } - - AndroidLogWrapper.d(TCQueryAction.class,"adding motor " + m.toString()); - // Write motor. - mDbHelper.getMotorDao().insertOrUpdateMotor(m); } } catch( Exception ex){ AndroidLogWrapper.d(TCQueryAction.class,ex.toString()); - handler.post( new Error(ex.toString()) ); + handler.post( new UpdateMessage("Failed") ); + } } - @Override - public void run() { - for ( ThrustCurveMotorPlaceholder motor : missingMotors ) { - AndroidLogWrapper.d(TCMissingMotorDownloadAction.class, "Motor: {}", motor); - downloadMissingMotor(motor); + @Override + protected String doInBackground(Void... arg0) { + for ( ThrustCurveMotorPlaceholder motor : missingMotors ) { + AndroidLogWrapper.d(TCMissingMotorDownloadAction.class, "Motor: {}", motor); + downloadMissingMotor(motor); + } + dismiss(); + return null; } - handler.post( new Dismiss() ); + } -} } diff --git a/android/src/net/sf/openrocket/android/thrustcurve/TCQueryAction.java b/android/src/net/sf/openrocket/android/thrustcurve/TCQueryAction.java index 6cc486eb6..d6f266f55 100644 --- a/android/src/net/sf/openrocket/android/thrustcurve/TCQueryAction.java +++ b/android/src/net/sf/openrocket/android/thrustcurve/TCQueryAction.java @@ -1,11 +1,18 @@ package net.sf.openrocket.android.thrustcurve; import net.sf.openrocket.android.db.DbAdapter; +import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor; +import net.sf.openrocket.android.util.AndroidLogWrapper; +import net.sf.openrocket.android.util.ProgressDialogFragment; import android.app.Activity; -import android.app.AlertDialog; -import android.app.ProgressDialog; -import android.content.DialogInterface; +import android.os.AsyncTask; +import android.os.Bundle; import android.os.Handler; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; /** * TCQueryAction is a class which provides all the functionality required @@ -25,62 +32,111 @@ import android.os.Handler; * When the parent Activity is dismissed, it must call TCQueryAction.dismiss() to free resources. * */ -public abstract class TCQueryAction { +public abstract class TCQueryAction extends Fragment { - public interface OnComplete { - public void onComplete(); + private final static String PROGRESS_DIALOG_TAG = "progress_dialog"; + + public interface OnTCQueryCompleteListener { + public void onTCQueryComplete(String message); } - protected DbAdapter mDbHelper; - - private ProgressDialog progress; - private Thread downloadThread; + protected AsyncTask task; protected Handler handler; - private final Activity parent; - private OnComplete onCompleteListener; + private OnTCQueryCompleteListener onCompleteListener; - /** - * Create a new TCQueryAction. - * - * If the parent implements TCQueryAction.OnComplete, it will be used as the - * onCompleteListener and notified when the process is finished. - * - * @param parent - */ - public TCQueryAction( Activity parent ) { - this.parent = parent; - - mDbHelper = new DbAdapter(this.parent); - mDbHelper.open(); - - if (parent instanceof OnComplete ) { - this.onCompleteListener = (OnComplete) parent; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setRetainInstance(true); + handler = new Handler(); + if ( savedInstanceState == null ) { + // this means we are starting for the first time. + task.execute((Void)null); } } - public void setOnCompleteListener(OnComplete onCompleteListener) { - this.onCompleteListener = onCompleteListener; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return null; } - protected abstract Runnable getTask(); - - public void start() { - handler = new Handler(); - progress = ProgressDialog.show(parent, null, ""); - - downloadThread = new Thread( getTask() ); - downloadThread.start(); - + @Override + public void onActivityCreated(Bundle arg0) { + super.onActivityCreated(arg0); + Activity parent = getActivity(); + if ( parent instanceof OnTCQueryCompleteListener ) { + onCompleteListener = (OnTCQueryCompleteListener) parent; + } } + /** + * The return value is a message string which may be displayed by the caller. + * + */ + protected abstract class TCQueryTask extends AsyncTask { + @Override + protected void onPreExecute() { + super.onPreExecute(); + DialogFragment newFragment = ProgressDialogFragment.newInstance("", ""); + newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG); + } - public void dismiss() { - // TODO - need to kill the thread. + @Override + protected void onPostExecute(String obj) { + super.onPostExecute(obj); + AndroidLogWrapper.d(TCQueryAction.class,"Finished loading " + TCQueryAction.this); + dismiss(); + if (onCompleteListener != null ) { + onCompleteListener.onTCQueryComplete(obj); + } + } + } - mDbHelper.close(); + protected void writeMotor( TCMotor mi, MotorBurnFile b) throws Exception { - if ( progress != null && progress.isShowing() ) { + DbAdapter mDbHelper = new DbAdapter(getActivity()); + mDbHelper.open(); + try { + ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor(); + + m.setThrustCurveMotor( b.getThrustCurveMotor() ); + + // Convert impulse class. ThrustCurve puts mmx, 1/4a and 1/2a as A. + m.setImpulseClass(mi.getImpulse_class()); + if ( "a".equalsIgnoreCase(mi.getImpulse_class())) { + if( mi.getCommon_name().startsWith("1/2A") ) { + m.setImpulseClass("1/2A"); + } else if (mi.getCommon_name().startsWith("1/4A") ) { + m.setImpulseClass("1/4A"); + } else if (mi.getCommon_name().startsWith("Micro") ) { + m.setImpulseClass("1/8A"); + } + } + + // Convert Case Info. + if ( mi.getCase_info() == null + || "single use".equalsIgnoreCase(mi.getCase_info()) + || "single-use".equalsIgnoreCase(mi.getCase_info())) { + m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength()); + } else { + m.setCaseInfo(mi.getCase_info()); + } + + AndroidLogWrapper.d(TCQueryAction.class,"adding motor " + m.toString()); + // Write motor. + mDbHelper.getMotorDao().insertOrUpdateMotor(m); + } finally { + mDbHelper.close(); + } + } + + protected void dismiss() { + AndroidLogWrapper.d(TCQueryAction.class,"dismiss the progress"); + ProgressDialogFragment progress = (ProgressDialogFragment) getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG); + if ( progress != null ) { progress.dismiss(); } } @@ -92,40 +148,9 @@ public abstract class TCQueryAction { } @Override public void run() { - progress.setMessage(newMessage); - } - } - - protected class Dismiss implements Runnable { - @Override - public void run() { - progress.dismiss(); - if (onCompleteListener != null ) { - onCompleteListener.onComplete(); - } - // TCQueryActivity.this.finish(); - } - } - - protected class Error implements Runnable { - private String newMessage; - Error( String message ) { - this.newMessage = message; - } - @Override - public void run() { - progress.dismiss(); - final AlertDialog dialog = new AlertDialog.Builder(parent).create(); - dialog.setMessage(newMessage); - dialog.setButton(DialogInterface.BUTTON_NEUTRAL,"Dismiss", new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface arg0, int arg1) { - dialog.dismiss(); - } - - }); - dialog.show(); + ProgressDialogFragment progress = (ProgressDialogFragment) getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG); + if ( progress != null ) + progress.setMessage(newMessage); } } diff --git a/android/src/net/sf/openrocket/android/thrustcurve/TCQueryActivity.java b/android/src/net/sf/openrocket/android/thrustcurve/TCQueryActivity.java index 619ed7a3e..681ca0c1c 100644 --- a/android/src/net/sf/openrocket/android/thrustcurve/TCQueryActivity.java +++ b/android/src/net/sf/openrocket/android/thrustcurve/TCQueryActivity.java @@ -2,25 +2,23 @@ package net.sf.openrocket.android.thrustcurve; import net.sf.openrocket.R; import net.sf.openrocket.android.util.AndroidLogWrapper; -import android.app.Activity; +import net.sf.openrocket.android.util.ErrorDialogFragment; +import android.content.DialogInterface; import android.os.Bundle; +import android.support.v4.app.FragmentActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; -public class TCQueryActivity extends Activity -implements TCQueryAction.OnComplete +public class TCQueryActivity extends FragmentActivity +implements TCQueryAction.OnTCQueryCompleteListener { - private TCSearchAction queryAction; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tcqueryform); - - queryAction = new TCSearchAction(this); final Spinner manufacturerField = (Spinner) findViewById(R.id.TCMotorSearchFormManufacturerField); final Spinner impulseField = (Spinner) findViewById(R.id.TCMotorSearchFormImpulseField); @@ -33,7 +31,7 @@ implements TCQueryAction.OnComplete @Override public void onClick( View v ) { AndroidLogWrapper.d(TCQueryActivity.class,"submit button clicked"); - + String commonName = commonNameField.getText().toString(); SearchRequest r = new SearchRequest(); @@ -54,29 +52,20 @@ implements TCQueryAction.OnComplete } r.setCommon_name(commonName); - queryAction.setRequest(r); - queryAction.start(); + TCSearchAction motorfrag = TCSearchAction.newInstance( r ); + getSupportFragmentManager().beginTransaction().add( motorfrag, "dloader").commit(); } - } - ); + }); } @Override - public void onComplete() { - finish(); - } - - /* - * TODO - ?? - @Override - public Object onRetainNonConfigurationInstance() { - return downloadThread; - } - */ - @Override - protected void onDestroy() { - queryAction.dismiss(); - super.onDestroy(); + public void onTCQueryComplete(String message) { + if ( message != null) { + ErrorDialogFragment error = ErrorDialogFragment.newInstance(message); + error.show(getSupportFragmentManager(), "ErrorDialog"); + } else { + finish(); + } } } diff --git a/android/src/net/sf/openrocket/android/thrustcurve/TCSearchAction.java b/android/src/net/sf/openrocket/android/thrustcurve/TCSearchAction.java index 33ca9e99e..1354e872f 100644 --- a/android/src/net/sf/openrocket/android/thrustcurve/TCSearchAction.java +++ b/android/src/net/sf/openrocket/android/thrustcurve/TCSearchAction.java @@ -1,32 +1,28 @@ package net.sf.openrocket.android.thrustcurve; -import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor; import net.sf.openrocket.android.util.AndroidLogWrapper; -import android.app.Activity; public class TCSearchAction extends TCQueryAction { - private SearchRequest request; - - public TCSearchAction(Activity parent) { - super(parent); - } - - public void setRequest( SearchRequest request ) { - this.request = request; + public static TCSearchAction newInstance( SearchRequest searchRequest ) { + TCSearchAction frag = new TCSearchAction(); + frag.task = frag.new Downloader(searchRequest); + return frag; } - protected Runnable getTask() { - return new Downloader(); - } - - private class Downloader implements Runnable { + private class Downloader extends TCQueryAction.TCQueryTask { + + private SearchRequest searchRequest; + + private Downloader( SearchRequest searchRequest ) { + this.searchRequest = searchRequest; + } @Override - public void run() { + protected String doInBackground(Void... params) { try { handler.post( new UpdateMessage("Quering Thrustcurve")); - SearchResponse res = new ThrustCurveAPI().doSearch(request); + SearchResponse res = new ThrustCurveAPI().doSearch(searchRequest); int total = res.getResults().size(); int count = 1; @@ -48,50 +44,24 @@ public class TCSearchAction extends TCQueryAction { continue; } - MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id()); - AndroidLogWrapper.d(TCQueryAction.class, mi.toString()); - ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor(); + MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id()); - m.setThrustCurveMotor( b.getThrustCurveMotor() ); - - // Convert impulse class. ThrustCurve puts mmx, 1/4a and 1/2a as A. - m.setImpulseClass(mi.getImpulse_class()); - if ( "a".equalsIgnoreCase(mi.getImpulse_class())) { - if( mi.getCommon_name().startsWith("1/2A") ) { - m.setImpulseClass("1/2A"); - } else if (mi.getCommon_name().startsWith("1/4A") ) { - m.setImpulseClass("1/4A"); - } else if (mi.getCommon_name().startsWith("Micro") ) { - m.setImpulseClass("1/8A"); - } - } - - // Convert Case Info. - if ( mi.getCase_info() == null - || "single use".equalsIgnoreCase(mi.getCase_info()) - || "single-use".equalsIgnoreCase(mi.getCase_info())) { - m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength()); - } else { - m.setCaseInfo(mi.getCase_info()); - } - - AndroidLogWrapper.d(TCQueryAction.class,"adding motor " + m.toString()); - // Write motor. - mDbHelper.getMotorDao().insertOrUpdateMotor(m); + writeMotor( mi, b); } if ( total < res.getMatches() ) { - handler.post( new Error( total + " motors downloaded, " + res.getMatches() + " matched. Try restricting the query more.") ); + dismiss(); + return "" + total + " motors downloaded, " + res.getMatches() + " matched. Try restricting the query more."; } else { - handler.post( new Dismiss()); + dismiss(); + return null; } } catch( Exception ex){ - AndroidLogWrapper.d(TCQueryAction.class,ex.toString()); - handler.post( new Error(ex.toString()) ); + AndroidLogWrapper.d(TCSearchAction.class,ex.toString()); + return ex.toString(); } - } } diff --git a/android/src/net/sf/openrocket/android/util/ErrorDialogFragment.java b/android/src/net/sf/openrocket/android/util/ErrorDialogFragment.java new file mode 100644 index 000000000..57e714274 --- /dev/null +++ b/android/src/net/sf/openrocket/android/util/ErrorDialogFragment.java @@ -0,0 +1,46 @@ +package net.sf.openrocket.android.util; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.v4.app.DialogFragment; + +public class ErrorDialogFragment extends DialogFragment { + + public static ErrorDialogFragment newInstance( String message ) { + ErrorDialogFragment dialog = new ErrorDialogFragment(); + Bundle b = new Bundle(); + b.putString("message",message); + dialog.setArguments(b); + return dialog; + } + + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + String message = getArguments().getString("message"); + final AlertDialog dialog = new AlertDialog.Builder(getActivity()).create(); + dialog.setOwnerActivity(getActivity()); + dialog.setMessage(message); + dialog.setCancelable(false); + dialog.setCanceledOnTouchOutside(false); + dialog.setButton(DialogInterface.BUTTON_NEUTRAL,"Dismiss", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface arg0, int arg1) { + dialog.dismiss(); + } + + }); + return dialog; + } + +} + diff --git a/android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java b/android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java index bb2c29e13..d095a5c9e 100644 --- a/android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java +++ b/android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java @@ -6,6 +6,8 @@ import android.support.v4.app.DialogFragment; public class ProgressDialogFragment extends DialogFragment { + ProgressDialog progressDialog; + public static ProgressDialogFragment newInstance(String title, String message) { ProgressDialogFragment fragment = new ProgressDialogFragment(); Bundle args = new Bundle(); @@ -16,20 +18,35 @@ public class ProgressDialogFragment extends DialogFragment { return fragment; } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + @Override public ProgressDialog onCreateDialog(Bundle savedInstanceState) { - String title = getArguments().getString("title"); - String message = getArguments().getString("message"); + String title = null; + String message = null; + Bundle args = getArguments(); + if ( args != null ) { + title = getArguments().getString("title"); + message = getArguments().getString("message"); + } - ProgressDialog progressDialog = new ProgressDialog(getActivity()); + AndroidLogWrapper.d(ProgressDialogFragment.class, "onCreateDialog"); + progressDialog = new ProgressDialog(getActivity()); progressDialog.setTitle(title); progressDialog.setMessage(message); progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); progressDialog.show(); - return progressDialog; } + public void setMessage( String message ) { + progressDialog.setMessage(message); + } }