create changelog entry
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketSaverFragment.java
1 package net.sf.openrocket.android.rocket;\r
2 \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
16 \r
17 import com.actionbarsherlock.app.SherlockFragmentActivity;\r
18 \r
19 public class OpenRocketSaverFragment extends Fragment {\r
20         \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
26                 return frag;\r
27         }\r
28         \r
29         public interface OnOpenRocketFileSaved {\r
30                 public void onOpenRocketFileSaved( Boolean result );\r
31         }\r
32 \r
33         private final static String SHOW_PRGRESS_DIALOG_ARG = "net.sf.openrocket.android.ShowProgressDialog";\r
34         \r
35         private boolean showProgressDialog = true;\r
36         private OpenRocketSaverTask task;\r
37         private OnOpenRocketFileSaved listener;\r
38         \r
39         @Override\r
40         public void onCreate(Bundle savedInstanceState) {\r
41                 super.onCreate(savedInstanceState);\r
42                 setRetainInstance(true);\r
43                 Bundle b = getArguments();\r
44                 if ( b != null ) {\r
45                         showProgressDialog = b.getBoolean(SHOW_PRGRESS_DIALOG_ARG, true);\r
46                 }\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
50                         task.execute();\r
51                 }\r
52         }\r
53 \r
54         @Override\r
55         public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
56                         Bundle savedInstanceState) {\r
57                 return null;\r
58         }\r
59 \r
60         @Override\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
66                 }\r
67         }\r
68 \r
69         public class OpenRocketSaverTask extends AsyncTask<Void, Void, Boolean> {\r
70                 \r
71                 private final static String PROGRESS_DIALOG_TAG = "progress_dialog";\r
72                 \r
73                 @Override\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
80                         } else {\r
81                                 ((SherlockFragmentActivity)getActivity()).setSupportProgressBarIndeterminate(true);\r
82                                 ((SherlockFragmentActivity)getActivity()).setSupportProgress(0);\r
83                         }\r
84                         \r
85                 }\r
86 \r
87                 /* (non-Javadoc)\r
88                  * @see android.os.AsyncTask#doInBackground(Params[])\r
89                  */\r
90                 @Override\r
91                 protected Boolean doInBackground(Void... arg0) {\r
92                         AndroidLogWrapper.d(OpenRocketSaverTask.class, "doInBackgroud");\r
93                         \r
94                         try {\r
95                                 CurrentRocketHolder.getCurrentRocket().saveOpenRocketDocument();\r
96                                 return true;\r
97                         } catch (Throwable ex) {\r
98                                 AndroidLogWrapper.e(OpenRocketSaverTask.class, "doInBackground rocketLaoder.load threw {}", ex);\r
99                         }\r
100                         return false;\r
101                         \r
102                 }\r
103 \r
104                 @Override\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
114                                 }\r
115                         } else {\r
116                                 ((SherlockFragmentActivity)getActivity()).setSupportProgress(Window.PROGRESS_END);\r
117                                 ((SherlockFragmentActivity)getActivity()).setSupportProgressBarVisibility(false);\r
118                         }\r
119                         if ( listener != null ) {\r
120                                 listener.onOpenRocketFileSaved(result);\r
121                         }\r
122                 }\r
123 \r
124         }\r
125 \r
126 }\r