Switch to GeneralRocketLoader so the app can load compressed ork files. Added dialog...
[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.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 import android.support.v4.app.FragmentActivity;\r
21 \r
22 public class OpenRocketLoaderActivity extends FragmentActivity\r
23 implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnOpenRocketFileLoaded\r
24 {\r
25 \r
26         private final static String MISSING_MOTOR_DIAG_FRAGMENT_TAG = "missingmotordialog";\r
27         private final static String MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG = "missingmotortask";\r
28 \r
29         @Override\r
30         protected void onCreate(Bundle savedInstanceState) {\r
31                 super.onCreate(savedInstanceState);\r
32                 setContentView(R.layout.main);\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         private void loadOrkFile( Uri file ) {\r
48                 AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + file);\r
49                 String path = file.getPath();\r
50                 File orkFile = new File(path);\r
51 \r
52                 getSupportFragmentManager().beginTransaction().add( OpenRocketLoaderFragment.newInstance(orkFile), "loader").commit();\r
53 \r
54         }\r
55 \r
56         /**\r
57          * Called by the OpenRocketLoaderTask when it completes.\r
58          * is default visibility so it can be called from this package.\r
59          * \r
60          * @param result\r
61          */\r
62         public void onOpenRocketFileLoaded(OpenRocketLoaderResult result) {\r
63                 if ( result.loadingError != null ) {\r
64                         \r
65                         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);\r
66                         dialogBuilder.setTitle("Error Loading File" );\r
67                         dialogBuilder.setMessage( result.loadingError.getLocalizedMessage());\r
68                         dialogBuilder.setOnCancelListener( new DialogInterface.OnCancelListener() {\r
69                                 @Override\r
70                                 public void onCancel(DialogInterface dialog) {\r
71                                         OpenRocketLoaderActivity.this.finish();\r
72                                 }\r
73                         });\r
74                         dialogBuilder.create().show();\r
75 \r
76                 } else {\r
77                         ((Application)OpenRocketLoaderActivity.this.getApplication()).setRocketDocument( result.rocket );\r
78                         ((Application)OpenRocketLoaderActivity.this.getApplication()).setWarnings( result.warnings );\r
79 \r
80                         updateMissingMotors();\r
81                 }\r
82         }\r
83 \r
84         private void updateMissingMotors() {\r
85                 Rocket rocket = ((Application)OpenRocketLoaderActivity.this.getApplication()).getRocketDocument().getRocket();\r
86                 Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
87 \r
88                 if ( missingMotors.size() > 0 ) {\r
89                         DialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );\r
90                         getSupportFragmentManager().beginTransaction().add(missingMotorDialog, MISSING_MOTOR_DIAG_FRAGMENT_TAG).commit();\r
91                         return;\r
92                 }\r
93 \r
94                 displayWarningDialog();\r
95         }\r
96 \r
97         /**\r
98          * Called when the TCMissingMotorDownload process finishes.\r
99          */\r
100         @Override\r
101         public void onTCQueryComplete(String message) {\r
102 \r
103                 Rocket rocket = ((Application)OpenRocketLoaderActivity.this.getApplication()).getRocketDocument().getRocket();\r
104                 WarningSet warnings = ((Application)OpenRocketLoaderActivity.this.getApplication()).getWarnings();\r
105                 // Need to update the motor references.\r
106                 MissingMotorHelpers.updateMissingMotors(rocket, warnings);\r
107 \r
108                 displayWarningDialog();\r
109         }\r
110 \r
111         private void displayWarningDialog() {\r
112                 WarningSet warnings = ((Application)OpenRocketLoaderActivity.this.getApplication()).getWarnings();\r
113                 if (warnings == null || warnings.isEmpty()) {\r
114                 } else {\r
115                         // TODO - Build a warning listing dialog\r
116                         DialogFragment newFragment = WarningDialogFragment.newInstance();\r
117                         newFragment.show(getSupportFragmentManager(), "dialog");\r
118                         return;\r
119                 }\r
120 \r
121                 moveOnToViewer();\r
122         }\r
123 \r
124         public void doFixMissingMotors() {\r
125                 Rocket rocket = ((Application)OpenRocketLoaderActivity.this.getApplication()).getRocketDocument().getRocket();\r
126                 Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
127 \r
128                 TCMissingMotorDownloadAction motorfrag = TCMissingMotorDownloadAction.newInstance( missingMotors );\r
129                 getSupportFragmentManager().beginTransaction().add( motorfrag, MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG).commit();\r
130 \r
131         }\r
132 \r
133         public void doNotFixMissingMotors() {\r
134                 displayWarningDialog();\r
135         }\r
136 \r
137         private void moveOnToViewer() {\r
138                 Intent i = new Intent(this,OpenRocketViewer.class);\r
139                 startActivity(i);\r
140                 finish();\r
141         }\r
142 }\r