tharak-android 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +1 -0
  2. package/build.gradle +45 -0
  3. package/consumer-rules.pro +0 -0
  4. package/libs/vital-sdk.aar +0 -0
  5. package/package.json +22 -0
  6. package/proguard-rules.pro +21 -0
  7. package/src/androidTest/androidTest.iml +11 -0
  8. package/src/androidTest/java/org/tharak/core/ExampleInstrumentedTest.java +27 -0
  9. package/src/androidTest/java/org/thiragatisoft/core/ExampleInstrumentedTest.java +26 -0
  10. package/src/main/AndroidManifest.xml +5 -0
  11. package/src/main/java/org/thiragatisoft/core/AppUtils.java +31 -0
  12. package/src/main/java/org/thiragatisoft/core/FileSelector.java +162 -0
  13. package/src/main/java/org/thiragatisoft/core/MainActivity.java +27 -0
  14. package/src/main/java/org/thiragatisoft/core/RestClient.java +298 -0
  15. package/src/main/java/org/thiragatisoft/core/VitalActivity.java +612 -0
  16. package/src/main/java/org/thiragatisoft/core/VitalsPlugin.java +15 -0
  17. package/src/main/java/org/thiragatisoft/core/VolleyMultipartRequest.java +218 -0
  18. package/src/main/java/org/thiragatisoft/core/http/CapacitorCookieManager.java +175 -0
  19. package/src/main/java/org/thiragatisoft/core/http/CapacitorHttpUrlConnection.java +408 -0
  20. package/src/main/java/org/thiragatisoft/core/http/FilesystemUtils.java +65 -0
  21. package/src/main/java/org/thiragatisoft/core/http/FormUploader.java +219 -0
  22. package/src/main/java/org/thiragatisoft/core/http/Http.java +275 -0
  23. package/src/main/java/org/thiragatisoft/core/http/HttpRequestHandler.java +515 -0
  24. package/src/main/java/org/thiragatisoft/core/http/ICapacitorHttpUrlConnection.java +15 -0
  25. package/src/main/java/org/thiragatisoft/core/http/JSValue.java +68 -0
  26. package/src/main/java/org/thiragatisoft/core/http/MimeType.java +17 -0
  27. package/src/main/main.iml +12 -0
  28. package/src/test/java/org/tharak/ExampleUnitTest.java +17 -0
  29. package/src/test/java/org/tharak/JSObjectTest.java +209 -0
  30. package/src/test/java/org/tharak/PluginMethodHandleTest.java +44 -0
  31. package/src/test/java/org/tharak/util/HostMaskTest.java +70 -0
  32. package/src/test/java/org/thiragatisoft/core/ExampleUnitTest.java +17 -0
  33. package/src/test/test.iml +11 -0
@@ -0,0 +1,298 @@
1
+ package org.thiragatisoft.core;
2
+
3
+ import android.app.Activity;
4
+ import android.net.Uri;
5
+
6
+ import com.android.volley.AuthFailureError;
7
+ import com.android.volley.NetworkResponse;
8
+ import com.android.volley.Request;
9
+ import com.android.volley.RequestQueue;
10
+ import com.android.volley.Response;
11
+ import com.android.volley.ServerError;
12
+ import com.android.volley.VolleyError;
13
+ import com.android.volley.VolleyLog;
14
+ import com.android.volley.toolbox.HttpHeaderParser;
15
+ import com.android.volley.toolbox.JsonObjectRequest;
16
+ import com.android.volley.toolbox.StringRequest;
17
+ import com.android.volley.toolbox.Volley;
18
+ import com.getcapacitor.CapConfig;
19
+ import com.getcapacitor.JSObject;
20
+ import com.getcapacitor.NativePlugin;
21
+ import com.getcapacitor.Plugin;
22
+ import com.getcapacitor.PluginCall;
23
+ import com.getcapacitor.PluginMethod;
24
+ import com.getcapacitor.PluginResult;
25
+
26
+ import org.json.JSONObject;
27
+
28
+ import java.io.ByteArrayOutputStream;
29
+ import java.io.FileNotFoundException;
30
+ import java.io.InputStream;
31
+ import java.io.UnsupportedEncodingException;
32
+ import java.util.HashMap;
33
+ import java.util.Map;
34
+
35
+ @NativePlugin
36
+ public class RestClient extends Plugin {
37
+
38
+ @PluginMethod
39
+ public void invoke(PluginCall call) {
40
+ JSObject request = call.getObject("request");
41
+ String method = request.getString("method");
42
+ switch (method){
43
+ case "POST":
44
+ performBodyCall(call, Request.Method.POST);
45
+ break;
46
+ case "PUT":
47
+ performBodyCall(call, Request.Method.PUT);
48
+ break;
49
+ case "PATCH":
50
+ performBodyCall(call, Request.Method.PATCH);
51
+ break;
52
+ case "GET":
53
+ performUrlCall(call, Request.Method.GET);
54
+ break;
55
+ case "DELETE":
56
+ performUrlCall(call, Request.Method.DELETE);
57
+ break;
58
+ default:
59
+ performUrlCall(call, Request.Method.GET);
60
+ }
61
+ }
62
+ public void performUrlCall(PluginCall call, int method) {
63
+ JSObject request = call.getObject("request");
64
+ String requestURL = request.getString("url");
65
+ String responseType = request.getString("responseType");
66
+ JSONObject options = call.getObject("headers");
67
+ RequestQueue queue = Volley.newRequestQueue(bridge.getContext());
68
+ JsonObjectRequest stringRequest = new JsonObjectRequest(method, requestURL, null, new Response.Listener<JSONObject>() {
69
+ @Override
70
+ public void onResponse(JSONObject response) {
71
+ // Display the first 500 characters of the response string.
72
+ try {
73
+ call.success(new JSObject(response.toString()));
74
+ }catch (Exception ex){
75
+ ex.printStackTrace();
76
+ }
77
+ }
78
+ }, new Response.ErrorListener() {
79
+ @Override
80
+ public void onErrorResponse(VolleyError error) {
81
+ RestClient.addError(call, error);
82
+ }
83
+ }) {
84
+ //
85
+ @Override
86
+ public Map<String, String> getHeaders() {
87
+ return RestClient.getHeaders(options);
88
+ }
89
+ };
90
+ // Add the request to the RequestQueue.
91
+ queue.add(stringRequest);
92
+ }
93
+ public void performBodyCall(PluginCall call, int method) {
94
+ JSObject request = call.getObject("request");
95
+ String requestURL = request.getString("url");
96
+ String responseType = request.getString("responseType");
97
+ RequestQueue queue = Volley.newRequestQueue(bridge.getContext());
98
+ Request volyRequest = findRequest(call, method, requestURL, this.getActivity());
99
+ // Add the request to the RequestQueue.
100
+ queue.add(volyRequest);
101
+ }
102
+ private static Request findRequest(PluginCall call, int method, String requestURL, Activity activity) {
103
+ try {
104
+ JSONObject request = call.getObject("request");
105
+ JSONObject options = call.getObject("headers");
106
+ String ignoreType = options.getString("Ignore-Type");
107
+ String contentType = options.getString("Content-Type");
108
+ if("Y".equalsIgnoreCase(ignoreType)){
109
+ contentType = "multipart/formdata";
110
+ }
111
+ if(contentType == null)
112
+ contentType = "application/json";
113
+ if(contentType.contains("application/json")){
114
+ JSONObject body = null;
115
+ if(method != Request.Method.GET && method != Request.Method.DELETE){
116
+ body = request.getJSONObject("body");
117
+ }
118
+ return new JsonObjectRequest(method, requestURL, body, new Response.Listener<JSONObject>() {
119
+ @Override
120
+ public void onResponse(JSONObject response) {
121
+ // Display the first 500 characters of the response string.
122
+ try {
123
+ call.success(new JSObject(response.toString()));
124
+ }catch (Exception ex){
125
+ ex.printStackTrace();
126
+ }
127
+ }
128
+ }, new Response.ErrorListener() {
129
+ @Override
130
+ public void onErrorResponse(VolleyError error) {
131
+ RestClient.addError(call, error);
132
+ }
133
+ }){
134
+ //
135
+ @Override
136
+ public Map<String, String> getHeaders() {
137
+ return RestClient.getHeaders(options);
138
+ }
139
+ };
140
+ }else if(contentType.contains("multipart/")){
141
+ JSONObject body = null;
142
+ body = request.getJSONObject("body");
143
+ String fileName = body.getString("fileName");
144
+
145
+ JSONObject finalBody = body;
146
+ return new VolleyMultipartRequest(method, requestURL, new Response.Listener<NetworkResponse>() {
147
+ @Override
148
+ public void onResponse(NetworkResponse response) {
149
+ String resultResponse = new String(response.data);
150
+ try {
151
+ call.success(new JSObject(resultResponse));
152
+ } catch (Exception e) {
153
+ e.printStackTrace();
154
+ }
155
+ }
156
+ }, new Response.ErrorListener() {
157
+ @Override
158
+ public void onErrorResponse(VolleyError error) {
159
+ RestClient.addError(call, error);
160
+ }
161
+ }) {
162
+ @Override
163
+ protected Map<String, String> getParams() {
164
+ Map<String, String> params = new HashMap<>();
165
+ try {
166
+ if (finalBody != null) {
167
+ for (int idx = 0; idx < finalBody.names().length(); ++idx) {
168
+ String key = finalBody.names().getString(idx);
169
+ if("fileBase64".equalsIgnoreCase(key))
170
+ continue;
171
+ params.put(key, finalBody.getString(key));
172
+ }
173
+ }
174
+ }catch (Exception ex){
175
+ ex.printStackTrace();
176
+ }
177
+ // params.put("file", new DataPart(fileName, RestClient.getFileData(fileName)));
178
+ return params;
179
+ }
180
+
181
+ @Override
182
+ protected Map<String, DataPart> getByteData() {
183
+ Map<String, DataPart> params = new HashMap<>();
184
+ try {
185
+ String fileData = finalBody.getString("fileBase64");
186
+ params.put("file", new DataPart(fileName, fileData.getBytes()));
187
+ }catch (Exception ex){
188
+ ex.printStackTrace();
189
+ }
190
+ // file name could found file base or direct access from real path
191
+ // for now just get bitmap data from ImageView
192
+ //params.put("file", new DataPart(fileName, RestClient.getFileData(fileName, activity)));
193
+ return params;
194
+ }
195
+ @Override
196
+ public Map<String, String> getHeaders() {
197
+ return RestClient.getHeaders(options);
198
+ }
199
+ };
200
+ }else {
201
+ return new StringRequest(method, requestURL, new Response.Listener<String>() {
202
+ @Override
203
+ public void onResponse(String response) {
204
+ // Display the first 500 characters of the response string.
205
+ try {
206
+ call.success(new JSObject(response));
207
+ } catch (Exception ex) {
208
+ ex.printStackTrace();
209
+ }
210
+ }
211
+ }, new Response.ErrorListener() {
212
+ @Override
213
+ public void onErrorResponse(VolleyError error) {
214
+ RestClient.addError(call, error);
215
+ }
216
+ }){
217
+ //
218
+ @Override
219
+ public Map<String, String> getHeaders() {
220
+ return RestClient.getHeaders(options);
221
+ }
222
+ @Override
223
+ public String getBodyContentType() {
224
+ String bodyType = "";
225
+ try {
226
+ bodyType = options.getString("content-type") + "; charset=utf-8";
227
+ }catch (Exception ex){
228
+ ex.printStackTrace();
229
+ }
230
+ return bodyType;
231
+ }
232
+ @Override
233
+ public byte[] getBody() throws AuthFailureError {
234
+ String mRequestBody = "";
235
+ try {
236
+ mRequestBody = request.getString("body");
237
+ return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
238
+ } catch (Exception uee) {
239
+ VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
240
+ return null;
241
+ }
242
+ }
243
+ };
244
+ }
245
+ }catch (Exception ex){
246
+ ex.printStackTrace();
247
+ }
248
+ return null;
249
+ }
250
+ private static void addError(PluginCall call, VolleyError error) {
251
+ try {
252
+ // As of f605da3 the following should work
253
+ NetworkResponse response = error.networkResponse;
254
+ if (error instanceof ServerError && response != null) {
255
+ try {
256
+ String res = new String(response.data,
257
+ HttpHeaderParser.parseCharset(response.headers, "utf-8"));
258
+ // Now you can use any deserializer to make sense of data
259
+ System.out.println(res);
260
+ error = new VolleyError(res);
261
+ } catch (UnsupportedEncodingException e1) {
262
+ // Couldn't properly decode data to string
263
+ e1.printStackTrace();
264
+ }
265
+ }
266
+ int errorCode = 500;
267
+ if(response != null){
268
+ errorCode = response.statusCode;
269
+ }
270
+ /*PluginResult errorResult = new PluginResult();
271
+ errorResult.put("message", "Error");
272
+ errorResult.put("code", errorCode);
273
+ errorResult.put("status", errorCode);
274
+ call.successCallback(errorResult);*/
275
+ call.error("Error", String.valueOf(errorCode), error);
276
+ }catch (Exception ex){
277
+ ex.printStackTrace();
278
+ }
279
+ }
280
+
281
+ private static Map<String, String> getHeaders(JSONObject options) {
282
+ HashMap<String, String> headers = new HashMap<>();
283
+ String ignoreType = null;
284
+ try {
285
+ ignoreType = options.getString("Ignore-Type");
286
+ for (int idx = 0; idx < options.names().length(); ++idx) {
287
+ String key = options.names().getString(idx);
288
+ headers.put(key, options.getString(key));
289
+ }
290
+ }catch (Exception ex){
291
+ ex.printStackTrace();
292
+ }
293
+ if(!headers.containsKey("Content-Type") && !headers.containsKey("content-type") && !"Y".equalsIgnoreCase(ignoreType)){
294
+ headers.put("Content-Type", "application/json; charset=utf-8");
295
+ }
296
+ return headers;
297
+ }
298
+ }