1 package net.sf.openrocket.android.rocket;
\r
5 import net.sf.openrocket.R;
\r
6 import net.sf.openrocket.android.util.AndroidLogWrapper;
\r
7 import net.sf.openrocket.android.util.ProgressDialogFragment;
\r
8 import net.sf.openrocket.document.OpenRocketDocument;
\r
9 import net.sf.openrocket.file.DatabaseMotorFinderWithMissingMotors;
\r
10 import net.sf.openrocket.file.GeneralRocketLoader;
\r
11 import net.sf.openrocket.file.RocketLoadException;
\r
12 import android.app.Activity;
\r
13 import android.os.AsyncTask;
\r
14 import android.os.Bundle;
\r
15 import android.support.v4.app.DialogFragment;
\r
16 import android.support.v4.app.Fragment;
\r
17 import android.view.LayoutInflater;
\r
18 import android.view.View;
\r
19 import android.view.ViewGroup;
\r
21 public class OpenRocketLoaderFragment extends Fragment {
\r
23 private final static String FILE_ARG_KEY = "file";
\r
25 public interface OnOpenRocketFileLoaded {
\r
26 public void onOpenRocketFileLoaded( OpenRocketLoaderResult result );
\r
30 private OpenRocketLoaderTask task;
\r
31 private OnOpenRocketFileLoaded listener;
\r
33 public static OpenRocketLoaderFragment newInstance(File file) {
\r
34 OpenRocketLoaderFragment frag = new OpenRocketLoaderFragment();
\r
35 Bundle b = new Bundle();
\r
36 b.putSerializable(FILE_ARG_KEY, file);
\r
37 frag.setArguments(b);
\r
42 public void onCreate(Bundle savedInstanceState) {
\r
43 super.onCreate(savedInstanceState);
\r
44 setRetainInstance(true);
\r
45 Bundle b = getArguments();
\r
46 file = (File) b.getSerializable(FILE_ARG_KEY);
\r
47 if ( task == null ) {
\r
48 // since we retain instance state, task will be non-null if it is already loading.
\r
49 task = new OpenRocketLoaderTask();
\r
55 public View onCreateView(LayoutInflater inflater, ViewGroup container,
\r
56 Bundle savedInstanceState) {
\r
61 public void onActivityCreated(Bundle arg0) {
\r
62 super.onActivityCreated(arg0);
\r
63 Activity parent = getActivity();
\r
64 if ( parent instanceof OnOpenRocketFileLoaded ) {
\r
65 listener = (OnOpenRocketFileLoaded) parent;
\r
69 public class OpenRocketLoaderTask extends AsyncTask<File, Void, OpenRocketLoaderResult> {
\r
71 private final static String PROGRESS_DIALOG_TAG = "progress_dialog";
\r
74 protected void onPreExecute() {
\r
75 super.onPreExecute();
\r
76 String loading = getActivity().getResources().getString(R.string.loading);
\r
77 DialogFragment newFragment = ProgressDialogFragment.newInstance("", loading);
\r
78 newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);
\r
82 * @see android.os.AsyncTask#doInBackground(Params[])
\r
85 protected OpenRocketLoaderResult doInBackground(File... arg0) {
\r
86 AndroidLogWrapper.d(OpenRocketLoaderTask.class, "doInBackgroud");
\r
88 GeneralRocketLoader rocketLoader = new GeneralRocketLoader();
\r
89 OpenRocketLoaderResult result = new OpenRocketLoaderResult();
\r
91 OpenRocketDocument rocket = rocketLoader.load(arg0[0], new DatabaseMotorFinderWithMissingMotors());
\r
92 rocket.getDefaultConfiguration().setAllStages();
\r
93 result.rocket = rocket;
\r
94 result.warnings = rocketLoader.getWarnings();
\r
95 } catch (RocketLoadException ex) {
\r
96 AndroidLogWrapper.e(OpenRocketLoaderTask.class, "doInBackground rocketLaoder.load threw {}", ex);
\r
97 result.loadingError = ex;
\r
104 protected void onPostExecute(OpenRocketLoaderResult result) {
\r
105 super.onPostExecute(result);
\r
106 AndroidLogWrapper.d(OpenRocketLoaderFragment.class,"Finished loading " + OpenRocketLoaderTask.this);
\r
107 Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);
\r
108 if ( progress != null ) {
\r
109 // Remove the fragment instead of trying to use DialogFragment.dismiss.
\r
110 // If the dialog is now currently shown, dismiss fails.
\r
111 getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();
\r
113 if ( listener != null ) {
\r
114 listener.onOpenRocketFileLoaded(result);
\r