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