Second checkpoint commit of OpenRocketLoader to make it orientation change safe....
[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.Application;\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.content.Intent;\r
15 import android.net.Uri;\r
16 import android.os.Bundle;\r
17 import android.support.v4.app.DialogFragment;\r
18 import android.support.v4.app.FragmentActivity;\r
19 \r
20 public class OpenRocketLoaderActivity extends FragmentActivity\r
21 implements TCQueryAction.OnComplete, OpenRocketLoaderFragment.OnOpenRocketFileLoaded\r
22 {\r
23 \r
24         private final static String MISSING_MOTOR_DIAG_FRAGMENT_TAG = "missingmotordialog";\r
25         \r
26         private TCMissingMotorDownloadAction missingMotorDownloadAction;\r
27 \r
28         @Override\r
29         protected void onCreate(Bundle savedInstanceState) {\r
30                 super.onCreate(savedInstanceState);\r
31                 setContentView(R.layout.main);\r
32                 missingMotorDownloadAction = new TCMissingMotorDownloadAction(this);\r
33                 if ( savedInstanceState == null || savedInstanceState.getBoolean("isLoading", false) == false ) {\r
34                         Intent i = getIntent();\r
35                         Uri file = i.getData();\r
36                         loadOrkFile(file);\r
37                 } else {\r
38                 }\r
39         }\r
40 \r
41         @Override\r
42         protected void onSaveInstanceState(Bundle outState) {\r
43                 super.onSaveInstanceState(outState);\r
44                 outState.putBoolean("isLoading", true);\r
45         }\r
46 \r
47         @Override\r
48         protected void onDestroy() {\r
49                 if ( missingMotorDownloadAction != null ) {\r
50                         missingMotorDownloadAction.dismiss();\r
51                 }\r
52 \r
53                 super.onDestroy();\r
54         }\r
55 \r
56         private void loadOrkFile( Uri file ) {\r
57                 AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + file);\r
58                 String path = file.getPath();\r
59                 File orkFile = new File(path);\r
60                 \r
61                 getSupportFragmentManager().beginTransaction().add( OpenRocketLoaderFragment.newInstance(orkFile), "loader").commit();\r
62                 \r
63         }\r
64 \r
65         /**\r
66          * Called by the OpenRocketLoaderTask when it completes.\r
67          * is default visibility so it can be called from this package.\r
68          * \r
69          * @param result\r
70          */\r
71         public void onOpenRocketFileLoaded(OpenRocketLoaderResult result) {\r
72                 ((Application)OpenRocketLoaderActivity.this.getApplication()).setRocketDocument( result.rocket );\r
73                 ((Application)OpenRocketLoaderActivity.this.getApplication()).setWarnings( result.warnings );\r
74                 \r
75                 updateMissingMotors();\r
76 \r
77         }\r
78 \r
79         private void updateMissingMotors() {\r
80                 Rocket rocket = ((Application)OpenRocketLoaderActivity.this.getApplication()).getRocketDocument().getRocket();\r
81                 Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
82 \r
83                 if ( missingMotors.size() > 0 ) {\r
84                         DialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );\r
85                         getSupportFragmentManager().beginTransaction().add(missingMotorDialog, MISSING_MOTOR_DIAG_FRAGMENT_TAG).commit();\r
86                         return;\r
87                 }\r
88 \r
89                 displayWarningDialog();\r
90         }\r
91 \r
92         /**\r
93          * Called when the TCMissingMotorDownload process finishes.\r
94          */\r
95         @Override\r
96         public void onComplete() {\r
97 \r
98                 Rocket rocket = ((Application)OpenRocketLoaderActivity.this.getApplication()).getRocketDocument().getRocket();\r
99                 WarningSet warnings = ((Application)OpenRocketLoaderActivity.this.getApplication()).getWarnings();\r
100                 // Need to update the motor references.\r
101                 MissingMotorHelpers.updateMissingMotors(rocket, warnings);\r
102 \r
103                 displayWarningDialog();\r
104         }\r
105 \r
106         private void displayWarningDialog() {\r
107                 WarningSet warnings = ((Application)OpenRocketLoaderActivity.this.getApplication()).getWarnings();\r
108                 if (warnings == null || warnings.isEmpty()) {\r
109                 } else {\r
110                         // TODO - Build a warning listing dialog\r
111                         DialogFragment newFragment = WarningDialogFragment.newInstance();\r
112                         newFragment.show(getSupportFragmentManager(), "dialog");\r
113                         return;\r
114                 }\r
115 \r
116                 moveOnToViewer();\r
117         }\r
118 \r
119         public void doFixMissingMotors() {\r
120                 Rocket rocket = ((Application)OpenRocketLoaderActivity.this.getApplication()).getRocketDocument().getRocket();\r
121                 Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
122 \r
123                 missingMotorDownloadAction.setMissingMotors(missingMotors);\r
124                 missingMotorDownloadAction.start();\r
125 \r
126         }\r
127 \r
128         public void doNotFixMissingMotors() {\r
129                 displayWarningDialog();\r
130         }\r
131 \r
132         private void moveOnToViewer() {\r
133                 Intent i = new Intent(this,OpenRocketViewer.class);\r
134                 startActivity(i);\r
135                 finish();\r
136         }\r
137 }\r