Many style and navigation changes. Pulled in ActionBarCompat from Android sample...
[debian/openrocket] / android / src / net / sf / openrocket / android / thrustcurve / TCQueryAction.java
1 package net.sf.openrocket.android.thrustcurve;\r
2 \r
3 import net.sf.openrocket.android.db.DbAdapter;\r
4 import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor;\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.os.Handler;\r
11 import android.support.v4.app.DialogFragment;\r
12 import android.support.v4.app.Fragment;\r
13 import android.view.LayoutInflater;\r
14 import android.view.View;\r
15 import android.view.ViewGroup;\r
16 \r
17 /**\r
18  * TCQueryAction is a class which provides all the functionality required\r
19  * to download motor data from thrustcurve.  It includes UI element for\r
20  * progress and error reporting dialogs.\r
21  * \r
22  * To use the class, instantiate a new instance of TCQueryAction passing in the\r
23  * owning Activity.\r
24  * \r
25  * The Activity should implement TCQueryAction.OnComplete or provide an implementation of\r
26  * TCQueryAction.OnComplete to be notified when the download process is complete.\r
27  * \r
28  * A search and download is started with TCQueryActivity.start( SearchRequest ).  The TCQueryActivity\r
29  * produces and updates a progress dialog.  When the process is complete, the TCQueryActivity will notify\r
30  * the registered TCQueryAction.OnComplete handler.\r
31  * \r
32  * When the parent Activity is dismissed, it must call TCQueryAction.dismiss() to free resources.\r
33  * \r
34  */\r
35 public abstract class TCQueryAction extends Fragment {\r
36 \r
37         private final static String PROGRESS_DIALOG_TAG = "progress_dialog";\r
38 \r
39         public interface OnTCQueryCompleteListener {\r
40                 public void onTCQueryComplete(String message);\r
41         }\r
42 \r
43         protected AsyncTask<Void,Void,String> task;\r
44         protected Handler handler;\r
45 \r
46         private OnTCQueryCompleteListener onCompleteListener;\r
47 \r
48         @Override\r
49         public void onCreate(Bundle savedInstanceState) {\r
50                 super.onCreate(savedInstanceState);\r
51                 setRetainInstance(true);\r
52                 handler = new Handler();\r
53                 if ( savedInstanceState == null ) {\r
54                         // this means we are starting for the first time.\r
55                         task.execute((Void)null);\r
56                 }\r
57         }\r
58 \r
59 \r
60         @Override\r
61         public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
62                         Bundle savedInstanceState) {\r
63                 return null;\r
64         }\r
65 \r
66         @Override\r
67         public void onActivityCreated(Bundle arg0) {\r
68                 super.onActivityCreated(arg0);\r
69                 Activity parent = getActivity();\r
70                 if ( parent instanceof OnTCQueryCompleteListener ) {\r
71                         onCompleteListener = (OnTCQueryCompleteListener) parent;\r
72                 }\r
73         }\r
74 \r
75         /**\r
76          * The return value is a message string which may be displayed by the caller.\r
77          *\r
78          */\r
79         protected abstract class TCQueryTask extends AsyncTask<Void,Void,String> {\r
80                 @Override\r
81                 protected void onPreExecute() {\r
82                         super.onPreExecute();\r
83                         DialogFragment newFragment = ProgressDialogFragment.newInstance("", "");\r
84                         newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);\r
85                 }\r
86 \r
87                 @Override\r
88                 protected void onPostExecute(String obj) {\r
89                         super.onPostExecute(obj);\r
90                         AndroidLogWrapper.d(TCQueryAction.class,"Finished loading " + TCQueryAction.this);\r
91                         dismiss();\r
92                         if (onCompleteListener != null ) {\r
93                                 onCompleteListener.onTCQueryComplete(obj);\r
94                         }\r
95                 }\r
96         }\r
97 \r
98         protected void writeMotor( TCMotor mi, MotorBurnFile b) throws Exception {\r
99 \r
100                 DbAdapter mDbHelper = new DbAdapter(getActivity());\r
101                 mDbHelper.open();\r
102                 try {\r
103                         ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor();\r
104 \r
105                         m.setThrustCurveMotor( b.getThrustCurveMotor() );\r
106 \r
107                         // Convert impulse class.  ThrustCurve puts mmx, 1/4a and 1/2a as A.\r
108                         m.setImpulseClass(mi.getImpulse_class());\r
109                         if ( "a".equalsIgnoreCase(mi.getImpulse_class())) {\r
110                                 if( mi.getCommon_name().startsWith("1/2A") ) {\r
111                                         m.setImpulseClass("1/2A");\r
112                                 } else if (mi.getCommon_name().startsWith("1/4A") ) {\r
113                                         m.setImpulseClass("1/4A");\r
114                                 } else if (mi.getCommon_name().startsWith("Micro") ) {\r
115                                         m.setImpulseClass("1/8A");\r
116                                 }\r
117                         }\r
118 \r
119                         // Convert Case Info.\r
120                         if ( mi.getCase_info() == null\r
121                                         || "single use".equalsIgnoreCase(mi.getCase_info())\r
122                                         || "single-use".equalsIgnoreCase(mi.getCase_info())) {\r
123                                 m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength());\r
124                         } else {\r
125                                 m.setCaseInfo(mi.getCase_info());\r
126                         }\r
127 \r
128                         AndroidLogWrapper.d(TCQueryAction.class,"adding motor " + m.toString());\r
129                         // Write motor.\r
130                         mDbHelper.getMotorDao().insertOrUpdateMotor(m);\r
131                 } finally {\r
132                         mDbHelper.close();\r
133                 }\r
134         }\r
135 \r
136         protected void dismiss() {\r
137                 AndroidLogWrapper.d(TCQueryAction.class,"dismiss the progress");\r
138                 ProgressDialogFragment progress = (ProgressDialogFragment) getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);\r
139                 if ( progress != null ) {\r
140                         progress.dismiss();\r
141                 }\r
142         }\r
143 \r
144         protected class UpdateMessage implements Runnable {\r
145                 private String newMessage;\r
146                 UpdateMessage( String message ) {\r
147                         this.newMessage = message;\r
148                 }\r
149                 @Override\r
150                 public void run() {\r
151                         ProgressDialogFragment progress = (ProgressDialogFragment) getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);\r
152                         if ( progress != null )\r
153                                 progress.setMessage(newMessage);\r
154                 }\r
155         }\r
156 \r
157 }\r