Change the initial screen handling and add file load to OpenRocketViewer activity...
[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.filebrowser.SimpleFileBrowser;\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.ActivityNotFoundException;\r
17 import android.content.DialogInterface;\r
18 import android.content.Intent;\r
19 import android.content.SharedPreferences;\r
20 import android.content.res.Resources;\r
21 import android.net.Uri;\r
22 import android.os.Bundle;\r
23 import android.preference.PreferenceManager;\r
24 import android.support.v4.app.DialogFragment;\r
25 \r
26 import com.actionbarsherlock.app.SherlockFragmentActivity;\r
27 \r
28 public class OpenRocketLoaderActivity extends SherlockFragmentActivity\r
29 implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnOpenRocketFileLoaded\r
30 {\r
31 \r
32         private static final int PICK_ORK_FILE_RESULT = 1;\r
33 \r
34         private final static String MISSING_MOTOR_DIAG_FRAGMENT_TAG = "missingmotordialog";\r
35         private final static String MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG = "missingmotortask";\r
36 \r
37         private boolean isLoading = false;\r
38 \r
39         @Override\r
40         protected void onPostCreate(Bundle savedInstanceState) {\r
41                 super.onPostCreate(savedInstanceState);\r
42                 Intent i = getIntent();\r
43                 if (Intent.ACTION_VIEW.equals(i.getAction()) && i.getData() != null ) {\r
44                         Uri file = i.getData();\r
45                         loadOrkFile(file);\r
46                 } else {\r
47                 }\r
48         }\r
49 \r
50         @Override\r
51         protected void onSaveInstanceState(Bundle outState) {\r
52                 super.onSaveInstanceState(outState);\r
53                 outState.putBoolean("isLoading", isLoading);\r
54         }\r
55 \r
56         /* (non-Javadoc)\r
57          * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)\r
58          */\r
59         @Override\r
60         protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
61                 switch ( requestCode ) {\r
62                 case PICK_ORK_FILE_RESULT:\r
63                         if(resultCode==RESULT_OK){\r
64                                 Uri file = data.getData();\r
65                                 loadOrkFile(file);\r
66                         }\r
67                         break;\r
68                 default:\r
69                         super.onActivityResult(requestCode, resultCode, data);\r
70                 }\r
71         }\r
72 \r
73         protected void pickOrkFiles( ) {\r
74                 Resources resources = this.getResources();\r
75                 String key = resources.getString(R.string.PreferenceUseInternalFileBrowserOption);\r
76                 SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);\r
77 \r
78                 boolean useinternalbrowser = pref.getBoolean(key, true);\r
79 \r
80                 if ( useinternalbrowser ) {\r
81                         Intent intent = new Intent(OpenRocketLoaderActivity.this, SimpleFileBrowser.class);\r
82                         startActivityForResult(intent,PICK_ORK_FILE_RESULT);\r
83                 } else {\r
84                         try {\r
85                                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\r
86                                 intent.setType("file/*");\r
87                                 startActivityForResult(intent,PICK_ORK_FILE_RESULT);\r
88                         } catch ( ActivityNotFoundException ex ) { \r
89                                 // No activity for ACTION_GET_CONTENT  use internal file browser\r
90                                 // update the preference value.\r
91                                 pref.edit().putBoolean(key, false).commit();\r
92                                 // fire our browser\r
93                                 Intent intent = new Intent(OpenRocketLoaderActivity.this, SimpleFileBrowser.class);\r
94                                 startActivityForResult(intent,PICK_ORK_FILE_RESULT);\r
95                         }\r
96                 }               \r
97         }\r
98 \r
99         private void loadOrkFile( Uri file ) {\r
100                 isLoading = true;\r
101                 CurrentRocketHolder.getCurrentRocket().setFileUri( file );\r
102                 AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + file);\r
103                 String path = file.getPath();\r
104                 File orkFile = new File(path);\r
105 \r
106                 getSupportFragmentManager().beginTransaction().add( OpenRocketLoaderFragment.newInstance(orkFile), "loader").commit();\r
107 \r
108         }\r
109 \r
110         /**\r
111          * Called by the OpenRocketLoaderTask when it completes.\r
112          * is default visibility so it can be called from this package.\r
113          * \r
114          * @param result\r
115          */\r
116         public void onOpenRocketFileLoaded(OpenRocketLoaderResult result) {\r
117                 isLoading = false;\r
118                 if ( result.loadingError != null ) {\r
119 \r
120                         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);\r
121                         dialogBuilder.setTitle("Error Loading File" );\r
122                         dialogBuilder.setMessage( result.loadingError.getLocalizedMessage());\r
123                         dialogBuilder.setOnCancelListener( new DialogInterface.OnCancelListener() {\r
124                                 @Override\r
125                                 public void onCancel(DialogInterface dialog) {\r
126                                         OpenRocketLoaderActivity.this.finish();\r
127                                 }\r
128                         });\r
129                         dialogBuilder.create().show();\r
130 \r
131                 } else {\r
132                         CurrentRocketHolder.getCurrentRocket().setRocketDocument( result.rocket );\r
133                         CurrentRocketHolder.getCurrentRocket().setWarnings( result.warnings );\r
134 \r
135                         updateMissingMotors();\r
136                 }\r
137         }\r
138 \r
139         private void updateMissingMotors() {\r
140                 Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
141                 Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
142 \r
143                 if ( missingMotors.size() > 0 ) {\r
144                         DialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );\r
145                         getSupportFragmentManager().beginTransaction().add(missingMotorDialog, MISSING_MOTOR_DIAG_FRAGMENT_TAG).commit();\r
146                         return;\r
147                 }\r
148 \r
149                 displayWarningDialog();\r
150         }\r
151 \r
152         /**\r
153          * Called when the TCMissingMotorDownload process finishes.\r
154          */\r
155         @Override\r
156         public void onTCQueryComplete(String message) {\r
157 \r
158                 Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
159                 WarningSet warnings = CurrentRocketHolder.getCurrentRocket().getWarnings();\r
160                 // Need to update the motor references.\r
161                 MissingMotorHelpers.updateMissingMotors(rocket, warnings);\r
162 \r
163                 displayWarningDialog();\r
164         }\r
165 \r
166         private void displayWarningDialog() {\r
167                 WarningSet warnings = CurrentRocketHolder.getCurrentRocket().getWarnings();\r
168                 if (warnings == null || warnings.isEmpty()) {\r
169                 } else {\r
170                         DialogFragment newFragment = WarningDialogFragment.newInstance();\r
171                         newFragment.show(getSupportFragmentManager(), "dialog");\r
172                         return;\r
173                 }\r
174 \r
175                 moveOnToViewer();\r
176         }\r
177 \r
178         public void doFixMissingMotors() {\r
179                 Rocket rocket = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket();\r
180                 Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);\r
181 \r
182                 TCMissingMotorDownloadAction motorfrag = TCMissingMotorDownloadAction.newInstance( missingMotors );\r
183                 getSupportFragmentManager().beginTransaction().add( motorfrag, MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG).commit();\r
184 \r
185         }\r
186 \r
187         public void doNotFixMissingMotors() {\r
188                 displayWarningDialog();\r
189         }\r
190 \r
191         public void moveOnToViewer() {\r
192                 Intent i = new Intent(this,OpenRocketViewer.class);\r
193                 startActivity(i);\r
194                 finish();\r
195         }\r
196 }\r