Various fixes which should probably be broken into multiple commits:)
[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.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
14 \r
15 public class OpenRocketSaverFragment extends Fragment {\r
16         \r
17         private final static String SAVING_MESSAGE = "Savinging file...";\r
18 \r
19         public static OpenRocketSaverFragment newInstance() {\r
20                 OpenRocketSaverFragment frag = new OpenRocketSaverFragment();\r
21                 Bundle b = new Bundle();\r
22                 frag.setArguments(b);\r
23                 return frag;\r
24         }\r
25         \r
26         public interface OnOpenRocketFileSaved {\r
27                 public void onOpenRocketFileSaved( Boolean result );\r
28         }\r
29         \r
30         private OpenRocketSaverTask task;\r
31         private OnOpenRocketFileSaved listener;\r
32         \r
33         @Override\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
41                         task.execute();\r
42                 }\r
43         }\r
44 \r
45         @Override\r
46         public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
47                         Bundle savedInstanceState) {\r
48                 return null;\r
49         }\r
50 \r
51         @Override\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
57                 }\r
58         }\r
59 \r
60         public class OpenRocketSaverTask extends AsyncTask<Void, Void, Boolean> {\r
61                 \r
62                 private final static String PROGRESS_DIALOG_TAG = "progress_dialog";\r
63                 \r
64                 @Override\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
69                 }\r
70 \r
71                 /* (non-Javadoc)\r
72                  * @see android.os.AsyncTask#doInBackground(Params[])\r
73                  */\r
74                 @Override\r
75                 protected Boolean doInBackground(Void... arg0) {\r
76                         AndroidLogWrapper.d(OpenRocketSaverTask.class, "doInBackgroud");\r
77                         \r
78                         try {\r
79                                 CurrentRocketHolder.getCurrentRocket().saveOpenRocketDocument();\r
80                                 return true;\r
81                         } catch (Throwable ex) {\r
82                                 AndroidLogWrapper.e(OpenRocketSaverTask.class, "doInBackground rocketLaoder.load threw {}", ex);\r
83                         }\r
84                         return false;\r
85                         \r
86                 }\r
87 \r
88                 @Override\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
97                         }\r
98                         if ( listener != null ) {\r
99                                 listener.onOpenRocketFileSaved(result);\r
100                         }\r
101                 }\r
102 \r
103         }\r
104 \r
105 }\r