Refactor the RocketDocument and corresponding data and methods out of Application...
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketLoaderActivity.java
1 package net.sf.openrocket.android.rocket;\r
2 \r
3 import java.io.File;\r
4 import java.util.Set;\r
5 \r
6 import net.sf.openrocket.R;\r
7 import net.sf.openrocket.aerodynamics.WarningSet;\r
8 import net.sf.openrocket.android.CurrentRocketHolder;\r
9 import net.sf.openrocket.android.thrustcurve.TCMissingMotorDownloadAction;\r
10 import net.sf.openrocket.android.thrustcurve.TCQueryAction;\r
11 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
12 import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;\r
13 import net.sf.openrocket.rocketcomponent.Rocket;\r
14 import android.app.AlertDialog;\r
15 import android.content.DialogInterface;\r
16 import android.content.Intent;\r
17 import android.net.Uri;\r
18 import android.os.Bundle;\r
19 import android.support.v4.app.DialogFragment;\r
20 \r
21 import com.actionbarsherlock.app.SherlockFragmentActivity;\r
22 \r
23 public class OpenRocketLoaderActivity extends SherlockFragmentActivity\r
24 implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnOpenRocketFileLoaded\r
25 {\r
26 \r
27         private final static String MISSING_MOTOR_DIAG_FRAGMENT_TAG = "missingmotordialog";\r
28         private final static String MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG = "missingmotortask";\r
29 \r
30         @Override\r
31         protected void onCreate(Bundle savedInstanceState) {\r
32                 super.onCreate(savedInstanceState);\r
33                 setTitle("");\r
34                 setContentView(R.layout.main);\r
35                 if ( savedInstanceState == null || savedInstanceState.getBoolean("isLoading", false) == false ) {\r
36                         Intent i = getIntent();\r
37                         Uri file = i.getData();\r
38                         loadOrkFile(file);\r
39                 } else {\r
40                 }\r
41         }\r
42 \r
43         @Override\r
44         protected void onSaveInstanceState(Bundle outState) {\r
45                 super.onSaveInstanceState(outState);\r
46                 outState.putBoolean("isLoading", true);\r
47         }\r
48 \r
49         private void loadOrkFile( Uri file ) {\r
50                 CurrentRocketHolder.getCurrentRocket().setFileUri( file );\r
51                 AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + file);\r
52                 String path = file.getPath();\r
53                 File orkFile = new File(path);\r
54 \r
55                 getSupportFragmentManager().beginTransaction().add( OpenRocketLoaderFragment.newInstance(orkFile), "loader").commit();\r
56 \r
57         }\r
58 \r
59         /**\r
60          * Called by the OpenRocketLoaderTask when it completes.\r
61          * is default visibility so it can be called from this package.\r
62          * \r
63          * @param result\r
64          */\r
65         public void onOpenRocketFileLoaded(OpenRocketLoaderResult result) {\r
66                 if ( result.loadingError != null ) {\r
67                         \r
68                         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);\r
69                         dialogBuilder.setTitle("Error Loading File" );\r
70                         dialogBuilder.setMessage( result.loadingError.getLocalizedMessage());\r
71                         dialogBuilder.setOnCancelListener( new DialogInterface.OnCancelListener() {\r
72                                 @Override\r
73                                 public void onCancel(DialogInterface dialog) {\r
74                                         OpenRocketLoaderActivity.this.finish();\r
75                                 }\r
76                         });\r
77                         dialogBuilder.create().show();\r
78 \r
79                 } else {\r
80                         CurrentRocketHolder.getCurrentRocket().setRocketDocument( result.rocket );\r
81                         CurrentRocketHolder.getCurrentRocket().setWarnings( result.warnings );\r
82 \r
83                         updateMissingMotors();\r
84                 }\r
85         }\r
86 \r
87         private void updateMissingMotors() {\r
88                 Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
89                 Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
90 \r
91                 if ( missingMotors.size() > 0 ) {\r
92                         DialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );\r
93                         getSupportFragmentManager().beginTransaction().add(missingMotorDialog, MISSING_MOTOR_DIAG_FRAGMENT_TAG).commit();\r
94                         return;\r
95                 }\r
96 \r
97                 displayWarningDialog();\r
98         }\r
99 \r
100         /**\r
101          * Called when the TCMissingMotorDownload process finishes.\r
102          */\r
103         @Override\r
104         public void onTCQueryComplete(String message) {\r
105 \r
106                 Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
107                 WarningSet warnings = CurrentRocketHolder.getCurrentRocket().getWarnings();\r
108                 // Need to update the motor references.\r
109                 MissingMotorHelpers.updateMissingMotors(rocket, warnings);\r
110 \r
111                 displayWarningDialog();\r
112         }\r
113 \r
114         private void displayWarningDialog() {\r
115                 WarningSet warnings = CurrentRocketHolder.getCurrentRocket().getWarnings();\r
116                 if (warnings == null || warnings.isEmpty()) {\r
117                 } else {\r
118                         DialogFragment newFragment = WarningDialogFragment.newInstance();\r
119                         newFragment.show(getSupportFragmentManager(), "dialog");\r
120                         return;\r
121                 }\r
122 \r
123                 moveOnToViewer();\r
124         }\r
125 \r
126         public void doFixMissingMotors() {\r
127                 Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
128                 Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
129 \r
130                 TCMissingMotorDownloadAction motorfrag = TCMissingMotorDownloadAction.newInstance( missingMotors );\r
131                 getSupportFragmentManager().beginTransaction().add( motorfrag, MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG).commit();\r
132 \r
133         }\r
134 \r
135         public void doNotFixMissingMotors() {\r
136                 displayWarningDialog();\r
137         }\r
138 \r
139         public void moveOnToViewer() {\r
140                 Intent i = new Intent(this,OpenRocketViewer.class);\r
141                 startActivity(i);\r
142                 finish();\r
143         }\r
144 }\r