From: kruland2607 Date: Wed, 22 Aug 2012 02:43:18 +0000 (+0000) Subject: Rework the loading workflow to be more natural and fix some nasty bugs. Make the... X-Git-Tag: upstream/12.09^2~48 X-Git-Url: https://git.gag.com/?p=debian%2Fopenrocket;a=commitdiff_plain;h=121456e8dbb3d43058bdc5aa74d59a4e08d06e81 Rework the loading workflow to be more natural and fix some nasty bugs. Make the dialogs more localizable by extracting strings into resources. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@976 180e2498-e6e9-4542-8430-84ac67f01cd8 --- diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index 371d2b97..626b40d2 100644 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -3,6 +3,9 @@ OpenRocket version 12.07-b7 + Cancel + OK + Dismiss Load Save Add @@ -10,6 +13,9 @@ Download About Preferences + Missing Motors + The following motors are missing: + Would you like to download them from Thrustcurve? Change Plot View Events Select Series And Events diff --git a/android/src/net/sf/openrocket/android/ActivityHelpers.java b/android/src/net/sf/openrocket/android/ActivityHelpers.java index 95ce5393..02e920e4 100644 --- a/android/src/net/sf/openrocket/android/ActivityHelpers.java +++ b/android/src/net/sf/openrocket/android/ActivityHelpers.java @@ -11,7 +11,6 @@ public abstract class ActivityHelpers { public static void goHome( Activity parent ) { Intent i = new Intent(parent, Main.class); - i.putExtra(Main.restartFlag, true); i.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_ACTIVITY_NEW_TASK ); parent.startActivity(i); } diff --git a/android/src/net/sf/openrocket/android/Main.java b/android/src/net/sf/openrocket/android/Main.java index 9c94130d..7b6eb48e 100644 --- a/android/src/net/sf/openrocket/android/Main.java +++ b/android/src/net/sf/openrocket/android/Main.java @@ -2,7 +2,6 @@ package net.sf.openrocket.android; import net.sf.openrocket.R; import net.sf.openrocket.android.rocket.OpenRocketLoaderActivity; -import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; @@ -13,17 +12,10 @@ import com.actionbarsherlock.view.MenuItem; public class Main extends OpenRocketLoaderActivity { - public final static String restartFlag = "restart"; - /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - Intent i = getIntent(); - // Rocket already loaded. go to viewer unless we want to restart. - if ( ( i.getBooleanExtra(restartFlag, false) == false) && CurrentRocketHolder.getCurrentRocket().getRocketDocument() != null ) { - moveOnToViewer(); - } setContentView(R.layout.main); ((Button) findViewById(R.id.main_open)).setOnClickListener( new View.OnClickListener() { @@ -48,6 +40,15 @@ public class Main extends OpenRocketLoaderActivity { }); } + @Override + protected void onPostResume() { + super.onPostResume(); + // Rocket already loaded. + if ( !isLoading() && CurrentRocketHolder.getCurrentRocket().getRocketDocument() != null ) { + moveOnToViewer(); + } + } + @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); diff --git a/android/src/net/sf/openrocket/android/rocket/ErrorLoadingFileDialogFragment.java b/android/src/net/sf/openrocket/android/rocket/ErrorLoadingFileDialogFragment.java new file mode 100644 index 00000000..8a957f87 --- /dev/null +++ b/android/src/net/sf/openrocket/android/rocket/ErrorLoadingFileDialogFragment.java @@ -0,0 +1,59 @@ +package net.sf.openrocket.android.rocket; + +import net.sf.openrocket.R; +import net.sf.openrocket.android.util.AndroidLogWrapper; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; + +import com.actionbarsherlock.app.SherlockDialogFragment; + +public class ErrorLoadingFileDialogFragment extends SherlockDialogFragment { + + public static ErrorLoadingFileDialogFragment newInstance( int titleRes, String message ) { + ErrorLoadingFileDialogFragment dialog = new ErrorLoadingFileDialogFragment(); + Bundle b = new Bundle(); + b.putString("message", message); + b.putInt("titleRes", titleRes); + dialog.setArguments(b); + dialog.setCancelable(true); + return dialog; + } + + + @Override + public void onCancel(DialogInterface dialog) { + ((OpenRocketLoaderActivity)getActivity()).doDismissErrorDialog(); + } + + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AndroidLogWrapper.d(ErrorLoadingFileDialogFragment.class,"onCreateDialog"); + + String message = getArguments().getString("message"); + final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + + if ( getArguments().containsKey("titleRes") ) { + int titleRes = getArguments().getInt("titleRes"); + builder.setTitle(titleRes); + } + + builder.setMessage(message); + builder.setNeutralButton(R.string.dismiss, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface arg0, int arg1) { + ((OpenRocketLoaderActivity)getActivity()).doDismissErrorDialog(); + } + + }); + + final AlertDialog dialog = builder.create(); + dialog.setOwnerActivity(getActivity()); + return dialog; + } + + +} diff --git a/android/src/net/sf/openrocket/android/rocket/MissingMotorDialogFragment.java b/android/src/net/sf/openrocket/android/rocket/MissingMotorDialogFragment.java index d7592bf5..a0c08eec 100644 --- a/android/src/net/sf/openrocket/android/rocket/MissingMotorDialogFragment.java +++ b/android/src/net/sf/openrocket/android/rocket/MissingMotorDialogFragment.java @@ -2,6 +2,8 @@ package net.sf.openrocket.android.rocket; import java.util.Set; +import net.sf.openrocket.R; +import net.sf.openrocket.android.util.AndroidLogWrapper; import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder; import android.app.AlertDialog; import android.app.Dialog; @@ -11,72 +13,68 @@ import android.os.Bundle; import com.actionbarsherlock.app.SherlockDialogFragment; public class MissingMotorDialogFragment extends SherlockDialogFragment { - - private final static String MESSAGE_ARG_KEY = "message"; + + private final static String MESSAGES_ARG_KEY = "messages"; public static MissingMotorDialogFragment newInstance( Set missingMotors ) { MissingMotorDialogFragment frag = new MissingMotorDialogFragment(); Bundle b = new Bundle(); - b.putString(MESSAGE_ARG_KEY, buildMessage(missingMotors)); + String[] messages = new String[ missingMotors.size() ]; + int index = 0; + for( ThrustCurveMotorPlaceholder m : missingMotors ) { + messages[index++] = m.getManufacturer() + " " + m.getDesignation(); + } + b.putStringArray(MESSAGES_ARG_KEY, messages); frag.setArguments(b); + frag.setCancelable(false); return frag; } - private static String buildMessage( Set missingMotors ) { + private String buildMessage( String[] missingMotors ) { StringBuilder sb = new StringBuilder(); - sb.append("The following motors are missing:"); - for( ThrustCurveMotorPlaceholder m : missingMotors ) { - sb.append("\n").append(m.getManufacturer()).append(" ").append(m.getDesignation()); + sb.append(this.getString(R.string.missingMotorsMessageStart)); + for( String m : missingMotors ) { + sb.append("\n").append(m); } - sb.append("\nWould you like to download them from Thrustcurve?"); + sb.append("\n").append(this.getString(R.string.missingMotorsMessageEnd)); return sb.toString(); } - + @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setRetainInstance(true); - setCancelable(false); + public void onCancel(DialogInterface dialog) { + ((OpenRocketLoaderActivity)getActivity()).doNotFixMissingMotors(); + super.onCancel(dialog); } - @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - String message = getArguments().getString(MESSAGE_ARG_KEY); - + AndroidLogWrapper.d(MissingMotorDialogFragment.class,"onCreateDialog"); + + String[] messages = getArguments().getStringArray(MESSAGES_ARG_KEY); + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // .setIcon(android.R.drawable.alert_dialog_icon) - builder.setTitle("Missing Motors"); - builder.setMessage(message); - builder.setPositiveButton("OK", + builder.setTitle(R.string.missingMotors); + builder.setMessage(buildMessage(messages)); + builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { ((OpenRocketLoaderActivity)getActivity()).doFixMissingMotors(); } - } - ); - builder.setNegativeButton("Cancel", + }); + + builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { ((OpenRocketLoaderActivity)getActivity()).doNotFixMissingMotors(); } - } - ); - return builder.create(); - } + }); - /** - * Work around for dialog getting dismissed on orientation change. See code.google.com/p/android/issues/detail?id=17423 - */ - @Override - public void onDestroyView() { - if ( getDialog() != null && getRetainInstance() ) { - getDialog().setDismissMessage(null); - } - super.onDestroyView(); + AlertDialog dialog = builder.create(); + dialog.setOwnerActivity(getActivity()); + return dialog; } - - + } diff --git a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java index 46398da3..9a3a8431 100644 --- a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java +++ b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java @@ -12,8 +12,6 @@ import net.sf.openrocket.android.thrustcurve.TCQueryAction; import net.sf.openrocket.android.util.AndroidLogWrapper; import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder; import net.sf.openrocket.rocketcomponent.Rocket; -import android.app.AlertDialog; -import android.app.Dialog; import android.content.ActivityNotFoundException; import android.content.Intent; import android.content.SharedPreferences; @@ -42,6 +40,12 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO * Set to the Uri of the file we are supposed to load. Is saved in InstanceState. */ private Uri fileToLoad = null; + + protected boolean isLoading() { + AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading " + this.hashCode()); + AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading); + return isLoading; + } @Override protected void onPostCreate(Bundle savedInstanceState) { @@ -57,7 +61,8 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO @Override protected void onSaveInstanceState(Bundle outState) { - AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onSaveInstanceState"); + AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onSaveInstanceState " + this.hashCode()); + AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading); outState.putBoolean("isLoading", isLoading); if ( fileToLoad != null ) { outState.putParcelable("fileToLoad", fileToLoad); @@ -69,6 +74,7 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO protected void onRestoreInstanceState(Bundle savedInstanceState) { AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onRestoreInstanceState"); isLoading = savedInstanceState.getBoolean("isLoading",false); + AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading); if ( savedInstanceState.containsKey("fileToLoad") ) { fileToLoad = savedInstanceState.getParcelable("fileToLoad"); } @@ -164,16 +170,10 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO * @param result */ public void onOpenRocketFileLoaded(OpenRocketLoaderResult result) { - isLoading = false; if ( result.loadingError != null ) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); - dialogBuilder.setTitle( R.string.loadingErrorMessage ); - dialogBuilder.setMessage( result.loadingError.getLocalizedMessage()); - dialogBuilder.setCancelable(true); - Dialog d = dialogBuilder.create(); - d.setCanceledOnTouchOutside(true); - d.show(); + ErrorLoadingFileDialogFragment errorDialog = ErrorLoadingFileDialogFragment.newInstance(R.string.loadingErrorMessage, result.loadingError.getLocalizedMessage()); + errorDialog.show(getSupportFragmentManager(),"errorDialog"); } else { CurrentRocketHolder.getCurrentRocket().setRocketDocument( result.rocket ); @@ -188,8 +188,8 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO Set missingMotors = MissingMotorHelpers.findMissingMotors(rocket); if ( missingMotors.size() > 0 ) { - DialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors ); - getSupportFragmentManager().beginTransaction().add(missingMotorDialog, MISSING_MOTOR_DIAG_FRAGMENT_TAG).commit(); + MissingMotorDialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors ); + missingMotorDialog.show(getSupportFragmentManager(), MISSING_MOTOR_DIAG_FRAGMENT_TAG); return; } @@ -235,7 +235,13 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO displayWarningDialog(); } + public void doDismissErrorDialog() { + isLoading = false; + fileToLoad = null; + } + public void moveOnToViewer() { + isLoading = false; Intent i = new Intent(this,OpenRocketViewer.class); startActivity(i); finish(); diff --git a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java index 18fbb819..e6dc5dd3 100644 --- a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java +++ b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java @@ -18,7 +18,9 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -public class OpenRocketLoaderFragment extends Fragment { +import com.actionbarsherlock.app.SherlockFragment; + +public class OpenRocketLoaderFragment extends SherlockFragment { private final static String FILE_ARG_KEY = "file"; diff --git a/android/src/net/sf/openrocket/android/rocket/WarningDialogFragment.java b/android/src/net/sf/openrocket/android/rocket/WarningDialogFragment.java index 07ca6247..891062bf 100644 --- a/android/src/net/sf/openrocket/android/rocket/WarningDialogFragment.java +++ b/android/src/net/sf/openrocket/android/rocket/WarningDialogFragment.java @@ -15,6 +15,7 @@ public class WarningDialogFragment extends DialogFragment { WarningDialogFragment frag = new WarningDialogFragment(); Bundle args = new Bundle(); frag.setArguments(args); + frag.setCancelable(false); return frag; } @@ -35,11 +36,7 @@ public class WarningDialogFragment extends DialogFragment { ((OpenRocketLoaderActivity)getActivity()).moveOnToViewer(); } }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() { - public void onCancel(DialogInterface dialog) { - ((OpenRocketLoaderActivity)getActivity()).moveOnToViewer(); - } - }); - return builder.create(); + Dialog dialog = builder.create(); + return dialog; } }