1 package net.sf.openrocket.android.rocket;
\r
5 import net.sf.openrocket.android.util.AndroidLogWrapper;
\r
6 import net.sf.openrocket.android.util.ProgressDialogFragment;
\r
7 import net.sf.openrocket.document.OpenRocketDocument;
\r
8 import net.sf.openrocket.file.DatabaseMotorFinderWithMissingMotors;
\r
9 import net.sf.openrocket.file.RocketLoadException;
\r
10 import net.sf.openrocket.file.openrocket.importt.OpenRocketLoader;
\r
11 import android.app.Activity;
\r
12 import android.os.AsyncTask;
\r
13 import android.os.Bundle;
\r
14 import android.support.v4.app.DialogFragment;
\r
15 import android.support.v4.app.Fragment;
\r
16 import android.view.LayoutInflater;
\r
17 import android.view.View;
\r
18 import android.view.ViewGroup;
\r
20 public class OpenRocketLoaderFragment extends Fragment {
\r
22 private final static String FILE_ARG_KEY = "file";
\r
24 private final static String LOADING_MESSAGE = "Loading file...";
\r
26 public interface OnOpenRocketFileLoaded {
\r
27 public void onOpenRocketFileLoaded( OpenRocketLoaderResult result );
\r
31 private OpenRocketLoaderTask task;
\r
32 private OnOpenRocketFileLoaded listener;
\r
34 public static OpenRocketLoaderFragment newInstance(File file) {
\r
35 OpenRocketLoaderFragment frag = new OpenRocketLoaderFragment();
\r
36 Bundle b = new Bundle();
\r
37 b.putSerializable(FILE_ARG_KEY, file);
\r
38 frag.setArguments(b);
\r
43 public void onCreate(Bundle savedInstanceState) {
\r
44 super.onCreate(savedInstanceState);
\r
45 setRetainInstance(true);
\r
46 Bundle b = getArguments();
\r
47 file = (File) b.getSerializable(FILE_ARG_KEY);
\r
48 if ( task == null ) {
\r
49 // since we retain instance state, task will be non-null if it is already loading.
\r
50 task = new OpenRocketLoaderTask();
\r
56 public View onCreateView(LayoutInflater inflater, ViewGroup container,
\r
57 Bundle savedInstanceState) {
\r
62 public void onActivityCreated(Bundle arg0) {
\r
63 super.onActivityCreated(arg0);
\r
64 Activity parent = getActivity();
\r
65 if ( parent instanceof OnOpenRocketFileLoaded ) {
\r
66 listener = (OnOpenRocketFileLoaded) parent;
\r
70 public class OpenRocketLoaderTask extends AsyncTask<File, Void, OpenRocketLoaderResult> {
\r
72 private final static String PROGRESS_DIALOG_TAG = "progress_dialog";
\r
75 protected void onPreExecute() {
\r
76 super.onPreExecute();
\r
77 DialogFragment newFragment = ProgressDialogFragment.newInstance("", LOADING_MESSAGE);
\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 OpenRocketLoader rocketLoader = new OpenRocketLoader();
\r
90 OpenRocketLoaderResult result = new OpenRocketLoaderResult();
\r
91 OpenRocketDocument rocket = rocketLoader.load(arg0[0], new DatabaseMotorFinderWithMissingMotors());
\r
92 result.rocket = rocket;
\r
93 result.warnings = rocketLoader.getWarnings();
\r
95 } catch (RocketLoadException ex) {
\r
96 AndroidLogWrapper.e(OpenRocketLoaderTask.class, "doInBackground rocketLaoder.load threw", ex);
\r
103 protected void onPostExecute(OpenRocketLoaderResult result) {
\r
104 super.onPostExecute(result);
\r
105 AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Finished loading " + OpenRocketLoaderTask.this);
\r
106 Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);
\r
107 if ( progress != null ) {
\r
108 ((DialogFragment)progress).dismiss();
\r
110 if ( listener != null ) {
\r
111 listener.onOpenRocketFileLoaded(result);
\r