--- /dev/null
+package net.sf.openrocket.android.rocket;\r
+\r
+import net.sf.openrocket.R;\r
+import net.sf.openrocket.android.CurrentRocketHolder;\r
+import net.sf.openrocket.android.util.AndroidLogWrapper;\r
+import net.sf.openrocket.android.util.ProgressDialogFragment;\r
+import android.app.Activity;\r
+import android.os.AsyncTask;\r
+import android.os.Bundle;\r
+import android.support.v4.app.DialogFragment;\r
+import android.support.v4.app.Fragment;\r
+import android.view.LayoutInflater;\r
+import android.view.View;\r
+import android.view.ViewGroup;\r
+import android.view.Window;\r
+\r
+import com.actionbarsherlock.app.SherlockFragmentActivity;\r
+\r
+public class OpenRocketSaverFragment extends Fragment {\r
+ \r
+ public static OpenRocketSaverFragment newInstance( boolean showProgressDialog) {\r
+ OpenRocketSaverFragment frag = new OpenRocketSaverFragment();\r
+ Bundle b = new Bundle();\r
+ b.putBoolean(SHOW_PRGRESS_DIALOG_ARG, showProgressDialog);\r
+ frag.setArguments(b);\r
+ return frag;\r
+ }\r
+ \r
+ public interface OnOpenRocketFileSaved {\r
+ public void onOpenRocketFileSaved( Boolean result );\r
+ }\r
+\r
+ private final static String SHOW_PRGRESS_DIALOG_ARG = "net.sf.openrocket.android.ShowProgressDialog";\r
+ \r
+ private boolean showProgressDialog = true;\r
+ private OpenRocketSaverTask task;\r
+ private OnOpenRocketFileSaved listener;\r
+ \r
+ @Override\r
+ public void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setRetainInstance(true);\r
+ Bundle b = getArguments();\r
+ if ( b != null ) {\r
+ showProgressDialog = b.getBoolean(SHOW_PRGRESS_DIALOG_ARG, true);\r
+ }\r
+ if ( task == null ) {\r
+ // since we retain instance state, task will be non-null if it is already loading.\r
+ task = new OpenRocketSaverTask();\r
+ task.execute();\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
+ Bundle savedInstanceState) {\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public void onActivityCreated(Bundle arg0) {\r
+ super.onActivityCreated(arg0);\r
+ Activity parent = getActivity();\r
+ if ( parent instanceof OnOpenRocketFileSaved ) {\r
+ listener = (OnOpenRocketFileSaved) parent;\r
+ }\r
+ }\r
+\r
+ public class OpenRocketSaverTask extends AsyncTask<Void, Void, Boolean> {\r
+ \r
+ private final static String PROGRESS_DIALOG_TAG = "progress_dialog";\r
+ \r
+ @Override\r
+ protected void onPreExecute() {\r
+ super.onPreExecute();\r
+ if ( showProgressDialog ) {\r
+ String savingMessage = getActivity().getResources().getString(R.string.saving);\r
+ DialogFragment newFragment = ProgressDialogFragment.newInstance("", savingMessage);\r
+ newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);\r
+ } else {\r
+ ((SherlockFragmentActivity)getActivity()).setSupportProgressBarIndeterminate(true);\r
+ ((SherlockFragmentActivity)getActivity()).setSupportProgress(0);\r
+ }\r
+ \r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see android.os.AsyncTask#doInBackground(Params[])\r
+ */\r
+ @Override\r
+ protected Boolean doInBackground(Void... arg0) {\r
+ AndroidLogWrapper.d(OpenRocketSaverTask.class, "doInBackgroud");\r
+ \r
+ try {\r
+ CurrentRocketHolder.getCurrentRocket().saveOpenRocketDocument();\r
+ return true;\r
+ } catch (Throwable ex) {\r
+ AndroidLogWrapper.e(OpenRocketSaverTask.class, "doInBackground rocketLaoder.load threw {}", ex);\r
+ }\r
+ return false;\r
+ \r
+ }\r
+\r
+ @Override\r
+ protected void onPostExecute(Boolean result) {\r
+ super.onPostExecute(result);\r
+ AndroidLogWrapper.d(OpenRocketSaverFragment.class,"Finished saving " + OpenRocketSaverTask.this);\r
+ if ( showProgressDialog ) {\r
+ Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);\r
+ if ( progress != null ) {\r
+ // Remove the fragment instead of trying to use DialogFragment.dismiss.\r
+ // If the dialog is now currently shown, dismiss fails.\r
+ getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();\r
+ }\r
+ } else {\r
+ ((SherlockFragmentActivity)getActivity()).setSupportProgress(Window.PROGRESS_END);\r
+ ((SherlockFragmentActivity)getActivity()).setSupportProgressBarVisibility(false);\r
+ }\r
+ if ( listener != null ) {\r
+ listener.onOpenRocketFileSaved(result);\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+}\r