Refactor the RocketDocument and corresponding data and methods out of Application...
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketLoaderActivity.java
index caf3a5f99bdfe584072c40c09bdae6b341a6e4f7..d3ef50861962f196cc2ee67a2ac6d705b9387fad 100644 (file)
 package net.sf.openrocket.android.rocket;\r
 \r
 import java.io.File;\r
+import java.util.Set;\r
 \r
 import net.sf.openrocket.R;\r
 import net.sf.openrocket.aerodynamics.WarningSet;\r
-import net.sf.openrocket.android.Application;\r
+import net.sf.openrocket.android.CurrentRocketHolder;\r
+import net.sf.openrocket.android.thrustcurve.TCMissingMotorDownloadAction;\r
+import net.sf.openrocket.android.thrustcurve.TCQueryAction;\r
 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.app.ProgressDialog;\r
 import android.content.DialogInterface;\r
 import android.content.Intent;\r
 import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.support.v4.app.DialogFragment;\r
-import android.support.v4.app.FragmentActivity;\r
 \r
-public class OpenRocketLoaderActivity extends FragmentActivity {\r
+import com.actionbarsherlock.app.SherlockFragmentActivity;\r
 \r
-       private ProgressDialog progress;\r
+public class OpenRocketLoaderActivity extends SherlockFragmentActivity\r
+implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnOpenRocketFileLoaded\r
+{\r
+\r
+       private final static String MISSING_MOTOR_DIAG_FRAGMENT_TAG = "missingmotordialog";\r
+       private final static String MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG = "missingmotortask";\r
 \r
        @Override\r
        protected void onCreate(Bundle savedInstanceState) {\r
                super.onCreate(savedInstanceState);\r
+               setTitle("");\r
                setContentView(R.layout.main);\r
-               Intent i = getIntent();\r
-               Uri file = i.getData();\r
-               loadOrkFile(file);\r
+               if ( savedInstanceState == null || savedInstanceState.getBoolean("isLoading", false) == false ) {\r
+                       Intent i = getIntent();\r
+                       Uri file = i.getData();\r
+                       loadOrkFile(file);\r
+               } else {\r
+               }\r
        }\r
 \r
        @Override\r
-       protected void onDestroy() {\r
-               if ( progress != null ) {\r
-                       if ( progress.isShowing() ) {\r
-                               progress.dismiss();\r
-                       }\r
-                       progress = null;\r
-               }\r
-               super.onDestroy();\r
+       protected void onSaveInstanceState(Bundle outState) {\r
+               super.onSaveInstanceState(outState);\r
+               outState.putBoolean("isLoading", true);\r
        }\r
 \r
        private void loadOrkFile( Uri file ) {\r
+               CurrentRocketHolder.getCurrentRocket().setFileUri( file );\r
                AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + file);\r
                String path = file.getPath();\r
                File orkFile = new File(path);\r
-               progress = ProgressDialog.show(this, "Loading file", "");\r
 \r
-               final OpenRocketLoaderTask task = new OpenRocketLoaderTask() {\r
+               getSupportFragmentManager().beginTransaction().add( OpenRocketLoaderFragment.newInstance(orkFile), "loader").commit();\r
 \r
-                       /* (non-Javadoc)\r
-                        * @see android.os.AsyncTask#onPostExecute(java.lang.Object)\r
-                        */\r
-                       @Override\r
-                       protected void onPostExecute(OpenRocketLoaderResult result) {\r
-                               super.onPostExecute(result);\r
-                               AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Finished loading " + OpenRocketLoaderActivity.this);\r
-                               finishedLoading(result);\r
-                       }\r
+       }\r
 \r
-               };\r
+       /**\r
+        * Called by the OpenRocketLoaderTask when it completes.\r
+        * is default visibility so it can be called from this package.\r
+        * \r
+        * @param result\r
+        */\r
+       public void onOpenRocketFileLoaded(OpenRocketLoaderResult result) {\r
+               if ( result.loadingError != null ) {\r
+                       \r
+                       AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);\r
+                       dialogBuilder.setTitle("Error Loading File" );\r
+                       dialogBuilder.setMessage( result.loadingError.getLocalizedMessage());\r
+                       dialogBuilder.setOnCancelListener( new DialogInterface.OnCancelListener() {\r
+                               @Override\r
+                               public void onCancel(DialogInterface dialog) {\r
+                                       OpenRocketLoaderActivity.this.finish();\r
+                               }\r
+                       });\r
+                       dialogBuilder.create().show();\r
 \r
-               task.execute(orkFile);\r
+               } else {\r
+                       CurrentRocketHolder.getCurrentRocket().setRocketDocument( result.rocket );\r
+                       CurrentRocketHolder.getCurrentRocket().setWarnings( result.warnings );\r
 \r
+                       updateMissingMotors();\r
+               }\r
        }\r
-       \r
-       private void finishedLoading(OpenRocketLoaderResult result) {\r
-               if ( progress.isShowing() ) {\r
-                       progress.dismiss();\r
+\r
+       private void updateMissingMotors() {\r
+               Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
+               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
+                       return;\r
                }\r
 \r
-               WarningSet warnings = result.warnings;\r
+               displayWarningDialog();\r
+       }\r
+\r
+       /**\r
+        * Called when the TCMissingMotorDownload process finishes.\r
+        */\r
+       @Override\r
+       public void onTCQueryComplete(String message) {\r
+\r
+               Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
+               WarningSet warnings = CurrentRocketHolder.getCurrentRocket().getWarnings();\r
+               // Need to update the motor references.\r
+               MissingMotorHelpers.updateMissingMotors(rocket, warnings);\r
+\r
+               displayWarningDialog();\r
+       }\r
+\r
+       private void displayWarningDialog() {\r
+               WarningSet warnings = CurrentRocketHolder.getCurrentRocket().getWarnings();\r
                if (warnings == null || warnings.isEmpty()) {\r
-                       ((Application)OpenRocketLoaderActivity.this.getApplication()).setRocketDocument( result.rocket );\r
-                       Intent i = new Intent(this,OpenRocketViewer.class);\r
-                       startActivity(i);\r
-                       finish();\r
                } else {\r
-                       // TODO - Build a warning listing dialog\r
                        DialogFragment newFragment = WarningDialogFragment.newInstance();\r
                        newFragment.show(getSupportFragmentManager(), "dialog");\r
+                       return;\r
                }\r
+\r
+               moveOnToViewer();\r
+       }\r
+\r
+       public void doFixMissingMotors() {\r
+               Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
+               Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
+\r
+               TCMissingMotorDownloadAction motorfrag = TCMissingMotorDownloadAction.newInstance( missingMotors );\r
+               getSupportFragmentManager().beginTransaction().add( motorfrag, MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG).commit();\r
+\r
+       }\r
+\r
+       public void doNotFixMissingMotors() {\r
+               displayWarningDialog();\r
        }\r
 \r
-    public void doPositiveClick() {\r
-        // Do stuff here.\r
-        AndroidLogWrapper.i(OpenRocketLoaderActivity.class, "Positive click!");\r
-        finish();\r
-    }\r
-\r
-    public void doNegativeClick() {\r
-        // Do stuff here.\r
-       AndroidLogWrapper.i(OpenRocketLoaderActivity.class, "Negative click!");\r
-        finish();\r
-    }\r
-\r
-    public static class WarningDialogFragment extends DialogFragment {\r
-\r
-           public static WarningDialogFragment newInstance() {\r
-               WarningDialogFragment frag = new WarningDialogFragment();\r
-               Bundle args = new Bundle();\r
-               frag.setArguments(args);\r
-               return frag;\r
-           }\r
-\r
-           @Override\r
-           public Dialog onCreateDialog(Bundle savedInstanceState) {\r
-\r
-               return new AlertDialog.Builder(getActivity())\r
-//                     .setIcon(android.R.drawable.alert_dialog_icon)\r
-                       .setTitle("Warnings")\r
-                       .setPositiveButton("OK",\r
-                           new DialogInterface.OnClickListener() {\r
-                               public void onClick(DialogInterface dialog, int whichButton) {\r
-                                   ((OpenRocketLoaderActivity)getActivity()).doPositiveClick();\r
-                               }\r
-                           }\r
-                       )\r
-                       .setNegativeButton("Cancel",\r
-                           new DialogInterface.OnClickListener() {\r
-                               public void onClick(DialogInterface dialog, int whichButton) {\r
-                                   ((OpenRocketLoaderActivity)getActivity()).doNegativeClick();\r
-                               }\r
-                           }\r
-                       )\r
-                       .create();\r
-           }\r
+       public void moveOnToViewer() {\r
+               Intent i = new Intent(this,OpenRocketViewer.class);\r
+               startActivity(i);\r
+               finish();\r
        }\r
 }\r