1 package net.sf.openrocket.android.rocket;
\r
3 import net.sf.openrocket.android.CurrentRocketHolder;
\r
4 import net.sf.openrocket.android.util.AndroidLogWrapper;
\r
5 import net.sf.openrocket.android.util.ProgressDialogFragment;
\r
6 import android.app.Activity;
\r
7 import android.os.AsyncTask;
\r
8 import android.os.Bundle;
\r
9 import android.support.v4.app.DialogFragment;
\r
10 import android.support.v4.app.Fragment;
\r
11 import android.view.LayoutInflater;
\r
12 import android.view.View;
\r
13 import android.view.ViewGroup;
\r
15 public class OpenRocketSaverFragment extends Fragment {
\r
17 private final static String SAVING_MESSAGE = "Savinging file...";
\r
19 public static OpenRocketSaverFragment newInstance() {
\r
20 OpenRocketSaverFragment frag = new OpenRocketSaverFragment();
\r
21 Bundle b = new Bundle();
\r
22 frag.setArguments(b);
\r
26 public interface OnOpenRocketFileSaved {
\r
27 public void onOpenRocketFileSaved( Boolean result );
\r
30 private OpenRocketSaverTask task;
\r
31 private OnOpenRocketFileSaved listener;
\r
34 public void onCreate(Bundle savedInstanceState) {
\r
35 super.onCreate(savedInstanceState);
\r
36 setRetainInstance(true);
\r
37 Bundle b = getArguments();
\r
38 if ( task == null ) {
\r
39 // since we retain instance state, task will be non-null if it is already loading.
\r
40 task = new OpenRocketSaverTask();
\r
46 public View onCreateView(LayoutInflater inflater, ViewGroup container,
\r
47 Bundle savedInstanceState) {
\r
52 public void onActivityCreated(Bundle arg0) {
\r
53 super.onActivityCreated(arg0);
\r
54 Activity parent = getActivity();
\r
55 if ( parent instanceof OnOpenRocketFileSaved ) {
\r
56 listener = (OnOpenRocketFileSaved) parent;
\r
60 public class OpenRocketSaverTask extends AsyncTask<Void, Void, Boolean> {
\r
62 private final static String PROGRESS_DIALOG_TAG = "progress_dialog";
\r
65 protected void onPreExecute() {
\r
66 super.onPreExecute();
\r
67 DialogFragment newFragment = ProgressDialogFragment.newInstance("", SAVING_MESSAGE);
\r
68 newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);
\r
72 * @see android.os.AsyncTask#doInBackground(Params[])
\r
75 protected Boolean doInBackground(Void... arg0) {
\r
76 AndroidLogWrapper.d(OpenRocketSaverTask.class, "doInBackgroud");
\r
79 CurrentRocketHolder.getCurrentRocket().saveOpenRocketDocument();
\r
81 } catch (Throwable ex) {
\r
82 AndroidLogWrapper.e(OpenRocketSaverTask.class, "doInBackground rocketLaoder.load threw {}", ex);
\r
89 protected void onPostExecute(Boolean result) {
\r
90 super.onPostExecute(result);
\r
91 AndroidLogWrapper.d(OpenRocketSaverFragment.class,"Finished saving " + OpenRocketSaverTask.this);
\r
92 Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);
\r
93 if ( progress != null ) {
\r
94 // Remove the fragment instead of trying to use DialogFragment.dismiss.
\r
95 // If the dialog is now currently shown, dismiss fails.
\r
96 getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();
\r
98 if ( listener != null ) {
\r
99 listener.onOpenRocketFileSaved(result);
\r