1 package net.sf.openrocket.android.rocket;
\r
3 import net.sf.openrocket.R;
\r
4 import net.sf.openrocket.android.CurrentRocketHolder;
\r
5 import net.sf.openrocket.android.util.AndroidLogWrapper;
\r
6 import net.sf.openrocket.android.util.ProgressDialogFragment;
\r
7 import android.app.Activity;
\r
8 import android.os.AsyncTask;
\r
9 import android.os.Bundle;
\r
10 import android.support.v4.app.DialogFragment;
\r
11 import android.support.v4.app.Fragment;
\r
12 import android.view.LayoutInflater;
\r
13 import android.view.View;
\r
14 import android.view.ViewGroup;
\r
15 import android.view.Window;
\r
17 import com.actionbarsherlock.app.SherlockFragmentActivity;
\r
19 public class OpenRocketSaverFragment extends Fragment {
\r
21 public static OpenRocketSaverFragment newInstance( boolean showProgressDialog) {
\r
22 OpenRocketSaverFragment frag = new OpenRocketSaverFragment();
\r
23 Bundle b = new Bundle();
\r
24 b.putBoolean(SHOW_PRGRESS_DIALOG_ARG, showProgressDialog);
\r
25 frag.setArguments(b);
\r
29 public interface OnOpenRocketFileSaved {
\r
30 public void onOpenRocketFileSaved( Boolean result );
\r
33 private final static String SHOW_PRGRESS_DIALOG_ARG = "net.sf.openrocket.android.ShowProgressDialog";
\r
35 private boolean showProgressDialog = true;
\r
36 private OpenRocketSaverTask task;
\r
37 private OnOpenRocketFileSaved listener;
\r
40 public void onCreate(Bundle savedInstanceState) {
\r
41 super.onCreate(savedInstanceState);
\r
42 setRetainInstance(true);
\r
43 Bundle b = getArguments();
\r
45 showProgressDialog = b.getBoolean(SHOW_PRGRESS_DIALOG_ARG, true);
\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 OpenRocketSaverTask();
\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 OnOpenRocketFileSaved ) {
\r
65 listener = (OnOpenRocketFileSaved) parent;
\r
69 public class OpenRocketSaverTask extends AsyncTask<Void, Void, Boolean> {
\r
71 private final static String PROGRESS_DIALOG_TAG = "progress_dialog";
\r
74 protected void onPreExecute() {
\r
75 super.onPreExecute();
\r
76 if ( showProgressDialog ) {
\r
77 String savingMessage = getActivity().getResources().getString(R.string.saving);
\r
78 DialogFragment newFragment = ProgressDialogFragment.newInstance("", savingMessage);
\r
79 newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);
\r
81 ((SherlockFragmentActivity)getActivity()).setSupportProgressBarIndeterminate(true);
\r
82 ((SherlockFragmentActivity)getActivity()).setSupportProgress(0);
\r
88 * @see android.os.AsyncTask#doInBackground(Params[])
\r
91 protected Boolean doInBackground(Void... arg0) {
\r
92 AndroidLogWrapper.d(OpenRocketSaverTask.class, "doInBackgroud");
\r
95 CurrentRocketHolder.getCurrentRocket().saveOpenRocketDocument();
\r
97 } catch (Throwable ex) {
\r
98 AndroidLogWrapper.e(OpenRocketSaverTask.class, "doInBackground rocketLaoder.load threw {}", ex);
\r
105 protected void onPostExecute(Boolean result) {
\r
106 super.onPostExecute(result);
\r
107 AndroidLogWrapper.d(OpenRocketSaverFragment.class,"Finished saving " + OpenRocketSaverTask.this);
\r
108 if ( showProgressDialog ) {
\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
116 ((SherlockFragmentActivity)getActivity()).setSupportProgress(Window.PROGRESS_END);
\r
117 ((SherlockFragmentActivity)getActivity()).setSupportProgressBarVisibility(false);
\r
119 if ( listener != null ) {
\r
120 listener.onOpenRocketFileSaved(result);
\r