]> git.gag.com Git - debian/openrocket/blob - android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java
30c313448be5bbb573a7ad905f3d4cd68d98ded3
[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 android.app.ProgressDialog;\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\r
22 {\r
23 \r
24         private OpenRocketLoaderResult result;\r
25         \r
26         private Set<ThrustCurveMotorPlaceholder> missingMotors;\r
27         private OpenRocketLoaderTask task;\r
28         private ProgressDialog progress;\r
29         private DialogFragment missingMotorDialog;\r
30         private TCMissingMotorDownloadAction missingMotorDownloadAction;\r
31 \r
32         @Override\r
33         protected void onCreate(Bundle savedInstanceState) {\r
34                 super.onCreate(savedInstanceState);\r
35                 setContentView(R.layout.main);\r
36                 missingMotorDownloadAction = new TCMissingMotorDownloadAction(this);\r
37                 if ( savedInstanceState == null || savedInstanceState.getBoolean("isLoading", false) == false ) {\r
38                         Intent i = getIntent();\r
39                         Uri file = i.getData();\r
40                         loadOrkFile(file);\r
41                 } else {\r
42                         progress = ProgressDialog.show(this, "Loading file", "");\r
43                 }\r
44         }\r
45 \r
46         @Override\r
47         protected void onSaveInstanceState(Bundle outState) {\r
48                 super.onSaveInstanceState(outState);\r
49                 outState.putBoolean("isLoading", true);\r
50         }\r
51 \r
52         @Override\r
53         protected void onDestroy() {\r
54                 if ( progress != null ) {\r
55                         if ( progress.isShowing() ) {\r
56                                 progress.dismiss();\r
57                         }\r
58                         progress = null;\r
59                 }\r
60                 if ( missingMotorDownloadAction != null ) {\r
61                         missingMotorDownloadAction.dismiss();\r
62                 }\r
63 \r
64                 super.onDestroy();\r
65         }\r
66 \r
67         private void loadOrkFile( Uri file ) {\r
68                 AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + file);\r
69                 String path = file.getPath();\r
70                 File orkFile = new File(path);\r
71                 progress = ProgressDialog.show(this, "Loading file", "");\r
72 \r
73                 task = new OpenRocketLoaderTask(this);\r
74 \r
75                 task.execute(orkFile);\r
76 \r
77         }\r
78 \r
79         /**\r
80          * Called by the OpenRocketLoaderTask when it completes.\r
81          * is default visibility so it can be called from this package.\r
82          * \r
83          * @param result\r
84          */\r
85         void finishedLoading(OpenRocketLoaderResult result) {\r
86                 if ( progress != null && progress.isShowing() ) {\r
87                         progress.dismiss();\r
88                 }\r
89                 this.result = result;\r
90                 ((Application)OpenRocketLoaderActivity.this.getApplication()).setRocketDocument( result.rocket );\r
91 \r
92                 updateMissingMotors();\r
93 \r
94         }\r
95 \r
96         private void updateMissingMotors() {\r
97                 missingMotors = MissingMotorHelpers.findMissingMotors(result.rocket.getRocket());\r
98 \r
99                 if ( missingMotors.size() > 0 ) {\r
100                         missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );\r
101                         missingMotorDialog.show(getSupportFragmentManager(), "missing motors");\r
102                         return;\r
103                 }\r
104 \r
105                 displayWarningDialog();\r
106         }\r
107 \r
108         /**\r
109          * Called when the TCMissingMotorDownload process finishes.\r
110          */\r
111         @Override\r
112         public void onComplete() {\r
113 \r
114                 // Need to update the motor references.\r
115                 MissingMotorHelpers.updateMissingMotors(result.rocket.getRocket(), result.warnings);\r
116 \r
117                 displayWarningDialog();\r
118         }\r
119 \r
120         private void displayWarningDialog() {\r
121                 WarningSet warnings = result.warnings;\r
122                 if (warnings == null || warnings.isEmpty()) {\r
123                 } else {\r
124                         // TODO - Build a warning listing dialog\r
125                         DialogFragment newFragment = WarningDialogFragment.newInstance();\r
126                         newFragment.show(getSupportFragmentManager(), "dialog");\r
127                         return;\r
128                 }\r
129 \r
130                 moveOnToViewer();\r
131         }\r
132 \r
133         public void doFixMissingMotors() {\r
134 \r
135                 missingMotorDialog.dismiss();\r
136 \r
137                 missingMotorDownloadAction.setMissingMotors(missingMotors);\r
138                 missingMotorDownloadAction.start();\r
139 \r
140         }\r
141 \r
142         public void doNotFixMissingMotors() {\r
143                 missingMotorDialog.dismiss();\r
144                 displayWarningDialog();\r
145         }\r
146 \r
147         private void moveOnToViewer() {\r
148                 Intent i = new Intent(this,OpenRocketViewer.class);\r
149                 startActivity(i);\r
150                 finish();\r
151         }\r
152 }\r