diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
index 371d2b97c..626b40d25 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 95ce5393f..02e920e4c 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 9c94130da..7b6eb48e3 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 000000000..8a957f879
--- /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 d7592bf5f..a0c08eecc 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);
- }
+ @Override
+ 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();
+ });
+
+ AlertDialog dialog = builder.create();
+ dialog.setOwnerActivity(getActivity());
+ return dialog;
}
- /**
- * 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();
- }
-
-
}
diff --git a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java
index 46398da33..9a3a84310 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 18fbb8193..e6dc5dd3b 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 07ca6247b..891062bfe 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;
}
}