Rework the loading workflow to be more natural and fix some nasty bugs. Make the...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Wed, 22 Aug 2012 02:43:18 +0000 (02:43 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Wed, 22 Aug 2012 02:43:18 +0000 (02:43 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@976 180e2498-e6e9-4542-8430-84ac67f01cd8

android/res/values/strings.xml
android/src/net/sf/openrocket/android/ActivityHelpers.java
android/src/net/sf/openrocket/android/Main.java
android/src/net/sf/openrocket/android/rocket/ErrorLoadingFileDialogFragment.java [new file with mode: 0644]
android/src/net/sf/openrocket/android/rocket/MissingMotorDialogFragment.java
android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java
android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java
android/src/net/sf/openrocket/android/rocket/WarningDialogFragment.java

index 371d2b97c0bfedcc867bdbf40c3fc94e0589a476..626b40d2583da08af00c5aec87ece474f924e5dd 100644 (file)
@@ -3,6 +3,9 @@
 \r
     <string name="app_name">OpenRocket</string>\r
     <string name="version">version 12.07-b7</string>\r
+    <string name="cancel">Cancel</string>\r
+    <string name="ok">OK</string>\r
+    <string name="dismiss">Dismiss</string>\r
     <string name="load">Load</string>\r
     <string name="save">Save</string>\r
     <string name="Add">Add</string>\r
@@ -10,6 +13,9 @@
     <string name="Download">Download</string>\r
     <string name="About">About</string>\r
     <string name="Preferences">Preferences</string>\r
+    <string name="missingMotors">Missing Motors</string>\r
+    <string name="missingMotorsMessageStart">The following motors are missing:</string>\r
+    <string name="missingMotorsMessageEnd">Would you like to download them from Thrustcurve?</string>\r
     <string name="configurePlot">Change Plot</string>\r
     <string name="view_events">View Events</string>\r
     <string name="simulationPlotDialogTitle">Select Series And Events</string>\r
index 95ce5393f724ecb2ebc51e632894a0e4ae35a94a..02e920e4c24d9246179f578d62c6a28ff192e1de 100644 (file)
@@ -11,7 +11,6 @@ public abstract class ActivityHelpers {
 \r
        public static void goHome( Activity parent ) {\r
                Intent i = new Intent(parent, Main.class);\r
-               i.putExtra(Main.restartFlag, true);\r
                i.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_ACTIVITY_NEW_TASK );\r
                parent.startActivity(i);\r
        }\r
index 9c94130da2a8055950227993648122120900d788..7b6eb48e3e39a03e34205d3cfa1c9d04824ea2b9 100644 (file)
@@ -2,7 +2,6 @@ package net.sf.openrocket.android;
 \r
 import net.sf.openrocket.R;\r
 import net.sf.openrocket.android.rocket.OpenRocketLoaderActivity;\r
-import android.content.Intent;\r
 import android.os.Bundle;\r
 import android.view.View;\r
 import android.widget.Button;\r
@@ -13,17 +12,10 @@ import com.actionbarsherlock.view.MenuItem;
 \r
 public class Main extends OpenRocketLoaderActivity {\r
 \r
-       public final static String restartFlag = "restart";\r
-\r
        /** Called when the activity is first created. */\r
        @Override\r
        public void onCreate(Bundle icicle) {\r
                super.onCreate(icicle);\r
-               Intent i = getIntent();\r
-               // Rocket already loaded.  go to viewer unless we want to restart.\r
-               if ( ( i.getBooleanExtra(restartFlag, false) == false)  && CurrentRocketHolder.getCurrentRocket().getRocketDocument() != null ) {\r
-                       moveOnToViewer();\r
-               }\r
                setContentView(R.layout.main);\r
                ((Button) findViewById(R.id.main_open)).setOnClickListener(\r
                                new View.OnClickListener() {\r
@@ -48,6 +40,15 @@ public class Main extends OpenRocketLoaderActivity {
                                });\r
        }\r
 \r
+       @Override\r
+       protected void onPostResume() {\r
+               super.onPostResume();\r
+               // Rocket already loaded.\r
+               if ( !isLoading() && CurrentRocketHolder.getCurrentRocket().getRocketDocument() != null ) {\r
+                       moveOnToViewer();\r
+               }\r
+       }\r
+\r
        @Override\r
        public boolean onCreateOptionsMenu(Menu menu) {\r
                MenuInflater inflater = getSupportMenuInflater();\r
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 (file)
index 0000000..8a957f8
--- /dev/null
@@ -0,0 +1,59 @@
+package net.sf.openrocket.android.rocket;\r
+\r
+import net.sf.openrocket.R;\r
+import net.sf.openrocket.android.util.AndroidLogWrapper;\r
+import android.app.AlertDialog;\r
+import android.app.Dialog;\r
+import android.content.DialogInterface;\r
+import android.os.Bundle;\r
+\r
+import com.actionbarsherlock.app.SherlockDialogFragment;\r
+\r
+public class ErrorLoadingFileDialogFragment extends SherlockDialogFragment {\r
+\r
+       public static ErrorLoadingFileDialogFragment newInstance( int titleRes, String message ) {\r
+               ErrorLoadingFileDialogFragment dialog = new ErrorLoadingFileDialogFragment();\r
+               Bundle b = new Bundle();\r
+               b.putString("message", message);\r
+               b.putInt("titleRes", titleRes);\r
+               dialog.setArguments(b);\r
+               dialog.setCancelable(true);\r
+               return dialog;\r
+       }\r
+       \r
+\r
+       @Override\r
+       public void onCancel(DialogInterface dialog) {\r
+               ((OpenRocketLoaderActivity)getActivity()).doDismissErrorDialog();\r
+       }\r
+\r
+\r
+       @Override\r
+       public Dialog onCreateDialog(Bundle savedInstanceState) {\r
+               AndroidLogWrapper.d(ErrorLoadingFileDialogFragment.class,"onCreateDialog");\r
+\r
+               String message = getArguments().getString("message");\r
+               final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
+\r
+               if ( getArguments().containsKey("titleRes") ) {\r
+                       int titleRes = getArguments().getInt("titleRes");\r
+                       builder.setTitle(titleRes);\r
+               }\r
+               \r
+               builder.setMessage(message);\r
+               builder.setNeutralButton(R.string.dismiss,  new DialogInterface.OnClickListener() {\r
+\r
+                       @Override\r
+                       public void onClick(DialogInterface arg0, int arg1) {\r
+                               ((OpenRocketLoaderActivity)getActivity()).doDismissErrorDialog();\r
+                       }\r
+\r
+               });\r
+               \r
+               final AlertDialog dialog = builder.create();\r
+               dialog.setOwnerActivity(getActivity());\r
+               return dialog;\r
+       }\r
+\r
+\r
+}\r
index d7592bf5f3cda7ef53aae71ad1f753cbe0b13c7f..a0c08eecc9b2f0bfe8135118aa78a3704dea96c3 100644 (file)
@@ -2,6 +2,8 @@ package net.sf.openrocket.android.rocket;
 \r
 import java.util.Set;\r
 \r
+import net.sf.openrocket.R;\r
+import net.sf.openrocket.android.util.AndroidLogWrapper;\r
 import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;\r
 import android.app.AlertDialog;\r
 import android.app.Dialog;\r
@@ -11,72 +13,68 @@ import android.os.Bundle;
 import com.actionbarsherlock.app.SherlockDialogFragment;\r
 \r
 public class MissingMotorDialogFragment extends SherlockDialogFragment {\r
-       \r
-       private final static String MESSAGE_ARG_KEY = "message";\r
+\r
+       private final static String MESSAGES_ARG_KEY = "messages";\r
 \r
        public static MissingMotorDialogFragment newInstance( Set<ThrustCurveMotorPlaceholder> missingMotors ) {\r
                MissingMotorDialogFragment frag = new MissingMotorDialogFragment();\r
                Bundle b = new Bundle();\r
-               b.putString(MESSAGE_ARG_KEY, buildMessage(missingMotors));\r
+               String[] messages = new String[ missingMotors.size() ];\r
+               int index = 0;\r
+               for( ThrustCurveMotorPlaceholder m : missingMotors ) {\r
+                       messages[index++] = m.getManufacturer() + " " + m.getDesignation();\r
+               }\r
+               b.putStringArray(MESSAGES_ARG_KEY, messages);\r
                frag.setArguments(b);\r
+               frag.setCancelable(false);\r
                return frag;\r
        }\r
 \r
-       private static String buildMessage( Set<ThrustCurveMotorPlaceholder> missingMotors ) {\r
+       private String buildMessage( String[] missingMotors ) {\r
                StringBuilder sb = new StringBuilder();\r
-               sb.append("The following motors are missing:");\r
-               for( ThrustCurveMotorPlaceholder m : missingMotors ) {\r
-                       sb.append("\n").append(m.getManufacturer()).append(" ").append(m.getDesignation());\r
+               sb.append(this.getString(R.string.missingMotorsMessageStart));\r
+               for( String m : missingMotors ) {\r
+                       sb.append("\n").append(m);\r
                }\r
-               sb.append("\nWould you like to download them from Thrustcurve?");\r
+               sb.append("\n").append(this.getString(R.string.missingMotorsMessageEnd));\r
                return sb.toString();\r
        }\r
-       \r
+\r
        @Override\r
-       public void onCreate(Bundle savedInstanceState) {\r
-               super.onCreate(savedInstanceState);\r
-               setRetainInstance(true);\r
-               setCancelable(false);\r
+       public void onCancel(DialogInterface dialog) {\r
+               ((OpenRocketLoaderActivity)getActivity()).doNotFixMissingMotors();\r
+               super.onCancel(dialog);\r
        }\r
 \r
-\r
        @Override\r
        public Dialog onCreateDialog(Bundle savedInstanceState) {\r
 \r
-               String message = getArguments().getString(MESSAGE_ARG_KEY);\r
-               \r
+               AndroidLogWrapper.d(MissingMotorDialogFragment.class,"onCreateDialog");\r
+\r
+               String[] messages = getArguments().getStringArray(MESSAGES_ARG_KEY);\r
+\r
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
                //                      .setIcon(android.R.drawable.alert_dialog_icon)\r
-               builder.setTitle("Missing Motors");\r
-               builder.setMessage(message);\r
-               builder.setPositiveButton("OK",\r
+               builder.setTitle(R.string.missingMotors);\r
+               builder.setMessage(buildMessage(messages));\r
+               builder.setPositiveButton(R.string.yes,\r
                                new DialogInterface.OnClickListener() {\r
                        public void onClick(DialogInterface dialog, int whichButton) {\r
                                ((OpenRocketLoaderActivity)getActivity()).doFixMissingMotors();\r
                        }\r
-               }\r
-                               );\r
-               builder.setNegativeButton("Cancel",\r
+               });\r
+\r
+               builder.setNegativeButton(R.string.no,\r
                                new DialogInterface.OnClickListener() {\r
                        public void onClick(DialogInterface dialog, int whichButton) {\r
                                ((OpenRocketLoaderActivity)getActivity()).doNotFixMissingMotors();\r
                        }\r
-               }\r
-                               );\r
-               return builder.create();\r
-       }\r
+               });\r
 \r
-       /**\r
-        * Work around for dialog getting dismissed on orientation change.  See code.google.com/p/android/issues/detail?id=17423\r
-        */\r
-       @Override\r
-       public void onDestroyView() {\r
-               if ( getDialog() != null  && getRetainInstance() ) {\r
-                       getDialog().setDismissMessage(null);\r
-               }\r
-               super.onDestroyView();\r
+               AlertDialog dialog =  builder.create();\r
+               dialog.setOwnerActivity(getActivity());\r
+               return dialog;\r
        }\r
-       \r
-       \r
+\r
 }\r
 \r
index 46398da33528adad9b431ae68aa3d5fdeea3a904..9a3a84310d9890cfc508b68abf28f6ef9044e4a2 100644 (file)
@@ -12,8 +12,6 @@ import net.sf.openrocket.android.thrustcurve.TCQueryAction;
 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
 import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;\r
 import net.sf.openrocket.rocketcomponent.Rocket;\r
-import android.app.AlertDialog;\r
-import android.app.Dialog;\r
 import android.content.ActivityNotFoundException;\r
 import android.content.Intent;\r
 import android.content.SharedPreferences;\r
@@ -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.\r
         */\r
        private Uri fileToLoad = null;\r
+       \r
+       protected boolean isLoading() {\r
+               AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading " + this.hashCode());\r
+               AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading);\r
+               return isLoading;\r
+       }\r
 \r
        @Override\r
        protected void onPostCreate(Bundle savedInstanceState) {\r
@@ -57,7 +61,8 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
 \r
        @Override\r
        protected void onSaveInstanceState(Bundle outState) {\r
-               AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onSaveInstanceState");\r
+               AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onSaveInstanceState " + this.hashCode());\r
+               AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading);\r
                outState.putBoolean("isLoading", isLoading);\r
                if ( fileToLoad != null ) {\r
                        outState.putParcelable("fileToLoad", fileToLoad);\r
@@ -69,6 +74,7 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
        protected void onRestoreInstanceState(Bundle savedInstanceState) {\r
                AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onRestoreInstanceState");\r
                isLoading = savedInstanceState.getBoolean("isLoading",false);\r
+               AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading);\r
                if ( savedInstanceState.containsKey("fileToLoad") ) {\r
                        fileToLoad = savedInstanceState.getParcelable("fileToLoad");\r
                }\r
@@ -164,16 +170,10 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
         * @param result\r
         */\r
        public void onOpenRocketFileLoaded(OpenRocketLoaderResult result) {\r
-               isLoading = false;\r
                if ( result.loadingError != null ) {\r
 \r
-                       AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);\r
-                       dialogBuilder.setTitle( R.string.loadingErrorMessage );\r
-                       dialogBuilder.setMessage( result.loadingError.getLocalizedMessage());\r
-                       dialogBuilder.setCancelable(true);\r
-                       Dialog d = dialogBuilder.create();\r
-                       d.setCanceledOnTouchOutside(true);\r
-                       d.show();\r
+                       ErrorLoadingFileDialogFragment errorDialog = ErrorLoadingFileDialogFragment.newInstance(R.string.loadingErrorMessage, result.loadingError.getLocalizedMessage());\r
+                       errorDialog.show(getSupportFragmentManager(),"errorDialog");\r
 \r
                } else {\r
                        CurrentRocketHolder.getCurrentRocket().setRocketDocument( result.rocket );\r
@@ -188,8 +188,8 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
                Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
 \r
                if ( missingMotors.size() > 0 ) {\r
-                       DialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );\r
-                       getSupportFragmentManager().beginTransaction().add(missingMotorDialog, MISSING_MOTOR_DIAG_FRAGMENT_TAG).commit();\r
+                       MissingMotorDialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );\r
+                       missingMotorDialog.show(getSupportFragmentManager(), MISSING_MOTOR_DIAG_FRAGMENT_TAG);\r
                        return;\r
                }\r
 \r
@@ -235,7 +235,13 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
                displayWarningDialog();\r
        }\r
 \r
+       public void doDismissErrorDialog() {\r
+               isLoading = false;\r
+               fileToLoad = null;\r
+       }\r
+       \r
        public void moveOnToViewer() {\r
+               isLoading = false;\r
                Intent i = new Intent(this,OpenRocketViewer.class);\r
                startActivity(i);\r
                finish();\r
index 18fbb8193296006224ae4647114a3cd903211873..e6dc5dd3b2e751c2af2d0b43fdee85406abe872b 100644 (file)
@@ -18,7 +18,9 @@ import android.view.LayoutInflater;
 import android.view.View;\r
 import android.view.ViewGroup;\r
 \r
-public class OpenRocketLoaderFragment extends Fragment {\r
+import com.actionbarsherlock.app.SherlockFragment;\r
+\r
+public class OpenRocketLoaderFragment extends SherlockFragment {\r
        \r
        private final static String FILE_ARG_KEY = "file";\r
        \r
index 07ca6247b92b8bfeca0739ec29f26a248bc78d97..891062bfe0ca28e49cd43cfd537c502a05c93a32 100644 (file)
@@ -15,6 +15,7 @@ public class WarningDialogFragment extends DialogFragment {
                WarningDialogFragment frag = new WarningDialogFragment();\r
                Bundle args = new Bundle();\r
                frag.setArguments(args);\r
+               frag.setCancelable(false);\r
                return frag;\r
        }\r
 \r
@@ -35,11 +36,7 @@ public class WarningDialogFragment extends DialogFragment {
                                ((OpenRocketLoaderActivity)getActivity()).moveOnToViewer();\r
                        }\r
                });\r
-               builder.setOnCancelListener(new DialogInterface.OnCancelListener() {\r
-                       public void onCancel(DialogInterface dialog) {\r
-                               ((OpenRocketLoaderActivity)getActivity()).moveOnToViewer();\r
-                       }\r
-               });\r
-               return builder.create();\r
+               Dialog dialog = builder.create();\r
+               return dialog;\r
        }\r
 }\r