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