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 import com.actionbarsherlock.app.SherlockFragment;
\r
23 public class OpenRocketLoaderFragment extends SherlockFragment {
\r
25 private final static String FILE_ARG_KEY = "file";
\r
27 public interface OnOpenRocketFileLoaded {
\r
28 public void onOpenRocketFileLoaded( OpenRocketLoaderResult result );
\r
32 private OpenRocketLoaderTask task;
\r
33 private OnOpenRocketFileLoaded listener;
\r
35 public static OpenRocketLoaderFragment newInstance(File file) {
\r
36 OpenRocketLoaderFragment frag = new OpenRocketLoaderFragment();
\r
37 Bundle b = new Bundle();
\r
38 b.putSerializable(FILE_ARG_KEY, file);
\r
39 frag.setArguments(b);
\r
44 public void onCreate(Bundle savedInstanceState) {
\r
45 super.onCreate(savedInstanceState);
\r
46 setRetainInstance(true);
\r
47 Bundle b = getArguments();
\r
48 file = (File) b.getSerializable(FILE_ARG_KEY);
\r
49 if ( task == null ) {
\r
50 // since we retain instance state, task will be non-null if it is already loading.
\r
51 task = new OpenRocketLoaderTask();
\r
57 public View onCreateView(LayoutInflater inflater, ViewGroup container,
\r
58 Bundle savedInstanceState) {
\r
63 public void onActivityCreated(Bundle arg0) {
\r
64 super.onActivityCreated(arg0);
\r
65 Activity parent = getActivity();
\r
66 if ( parent instanceof OnOpenRocketFileLoaded ) {
\r
67 listener = (OnOpenRocketFileLoaded) parent;
\r
71 public class OpenRocketLoaderTask extends AsyncTask<File, Void, OpenRocketLoaderResult> {
\r
73 private final static String PROGRESS_DIALOG_TAG = "progress_dialog";
\r
76 protected void onPreExecute() {
\r
77 super.onPreExecute();
\r
78 String loading = getActivity().getResources().getString(R.string.loading);
\r
79 DialogFragment newFragment = ProgressDialogFragment.newInstance("", loading);
\r
80 newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);
\r
84 * @see android.os.AsyncTask#doInBackground(Params[])
\r
87 protected OpenRocketLoaderResult doInBackground(File... arg0) {
\r
88 AndroidLogWrapper.d(OpenRocketLoaderTask.class, "doInBackgroud");
\r
90 GeneralRocketLoader rocketLoader = new GeneralRocketLoader();
\r
91 OpenRocketLoaderResult result = new OpenRocketLoaderResult();
\r
93 OpenRocketDocument rocket = rocketLoader.load(arg0[0], new DatabaseMotorFinderWithMissingMotors());
\r
94 rocket.getDefaultConfiguration().setAllStages();
\r
95 result.rocket = rocket;
\r
96 result.warnings = rocketLoader.getWarnings();
\r
97 } catch (RocketLoadException ex) {
\r
98 AndroidLogWrapper.e(OpenRocketLoaderTask.class, "doInBackground rocketLaoder.load threw {}", ex);
\r
99 result.loadingError = ex;
\r
106 protected void onPostExecute(OpenRocketLoaderResult result) {
\r
107 super.onPostExecute(result);
\r
108 AndroidLogWrapper.d(OpenRocketLoaderFragment.class,"Finished loading " + OpenRocketLoaderTask.this);
\r
109 Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);
\r
110 if ( progress != null ) {
\r
111 // Remove the fragment instead of trying to use DialogFragment.dismiss.
\r
112 // If the dialog is now currently shown, dismiss fails.
\r
113 getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();
\r
115 if ( listener != null ) {
\r
116 listener.onOpenRocketFileLoaded(result);
\r