Showing
3 changed files
with
154 additions
and
2 deletions
... | @@ -44,6 +44,8 @@ import java.util.Arrays; | ... | @@ -44,6 +44,8 @@ import java.util.Arrays; |
44 | 44 | ||
45 | import io.github.inflationx.viewpump.ViewPumpContextWrapper; | 45 | import io.github.inflationx.viewpump.ViewPumpContextWrapper; |
46 | import ly.warp.sdk.R; | 46 | import ly.warp.sdk.R; |
47 | +import ly.warp.sdk.io.callbacks.CallbackReceiver; | ||
48 | +import ly.warp.sdk.utils.managers.WarplyManager; | ||
47 | 49 | ||
48 | /** | 50 | /** |
49 | * Created by Panagiotis Triantafyllou on 26/June/2023. | 51 | * Created by Panagiotis Triantafyllou on 26/June/2023. |
... | @@ -245,7 +247,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -245,7 +247,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
245 | 247 | ||
246 | if (requestCode == PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE) { | 248 | if (requestCode == PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE) { |
247 | if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { | 249 | if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { |
248 | - saveAccelerationDataToExternalStorage(jsonArray); | 250 | +// saveAccelerationDataToExternalStorage(jsonArray); |
251 | + sendAccelerationDataToServer(jsonArray); | ||
249 | } else { | 252 | } else { |
250 | Snackbar.make(mLlTelematicsMain, "Storage Permission Denied", Snackbar.LENGTH_SHORT).show(); | 253 | Snackbar.make(mLlTelematicsMain, "Storage Permission Denied", Snackbar.LENGTH_SHORT).show(); |
251 | } | 254 | } |
... | @@ -451,6 +454,7 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -451,6 +454,7 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
451 | jobjData.putOpt("latitude", mLatitude); | 454 | jobjData.putOpt("latitude", mLatitude); |
452 | jobjData.putOpt("longitude", mLongitude); | 455 | jobjData.putOpt("longitude", mLongitude); |
453 | jobjData.putOpt("limit", getCutOffLimit()); | 456 | jobjData.putOpt("limit", getCutOffLimit()); |
457 | + jobjData.putOpt("samples", TextUtils.isEmpty(mEtSampleTime.getText()) ? RECORDS_INTERVAL : Integer.valueOf(mEtSampleTime.getText().toString())); | ||
454 | jobj.putOpt(timestamp, jobjData); | 458 | jobj.putOpt(timestamp, jobjData); |
455 | mAccelerationTimestamps.add(jobj); | 459 | mAccelerationTimestamps.add(jobj); |
456 | recordsCount[0]++; | 460 | recordsCount[0]++; |
... | @@ -484,6 +488,17 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -484,6 +488,17 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
484 | jsonArray = new JSONArray(); | 488 | jsonArray = new JSONArray(); |
485 | 489 | ||
486 | for (JSONObject jsonObject : mAccelerationTimestamps) { | 490 | for (JSONObject jsonObject : mAccelerationTimestamps) { |
491 | + if (jsonObject.keys().hasNext()) { | ||
492 | + String parent = jsonObject.keys().next(); | ||
493 | + JSONObject jobj = jsonObject.optJSONObject(parent); | ||
494 | + if (jobj != null) { | ||
495 | + try { | ||
496 | + jobj.put("stop_time", mStopTimestamp); | ||
497 | + } catch (JSONException e) { | ||
498 | + throw new RuntimeException(e); | ||
499 | + } | ||
500 | + } | ||
501 | + } | ||
487 | jsonArray.put(jsonObject); | 502 | jsonArray.put(jsonObject); |
488 | } | 503 | } |
489 | 504 | ||
... | @@ -494,7 +509,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -494,7 +509,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
494 | new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, | 509 | new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, |
495 | PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); | 510 | PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); |
496 | } else { | 511 | } else { |
497 | - saveAccelerationDataToExternalStorage(jsonArray); | 512 | +// saveAccelerationDataToExternalStorage(jsonArray); |
513 | + sendAccelerationDataToServer(jsonArray); | ||
498 | } | 514 | } |
499 | } | 515 | } |
500 | 516 | ||
... | @@ -521,6 +537,10 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -521,6 +537,10 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
521 | } | 537 | } |
522 | } | 538 | } |
523 | 539 | ||
540 | + private void sendAccelerationDataToServer(JSONArray jsonArray) { | ||
541 | + WarplyManager.sendAccelerationDataToServer(jsonArray, mTelematicsCallback); | ||
542 | + } | ||
543 | + | ||
524 | private final View.OnTouchListener mTripTouchListener = new View.OnTouchListener() { | 544 | private final View.OnTouchListener mTripTouchListener = new View.OnTouchListener() { |
525 | @Override | 545 | @Override |
526 | public boolean onTouch(View view, MotionEvent motionEvent) { | 546 | public boolean onTouch(View view, MotionEvent motionEvent) { |
... | @@ -554,6 +574,18 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -554,6 +574,18 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
554 | } | 574 | } |
555 | }; | 575 | }; |
556 | 576 | ||
577 | + private final CallbackReceiver<Integer> mTelematicsCallback = new CallbackReceiver<Integer>() { | ||
578 | + @Override | ||
579 | + public void onSuccess(Integer result) { | ||
580 | + Snackbar.make(mLlTelematicsMain, "Success sending data to server", Snackbar.LENGTH_SHORT).show(); | ||
581 | + } | ||
582 | + | ||
583 | + @Override | ||
584 | + public void onFailure(int errorCode) { | ||
585 | + Snackbar.make(mLlTelematicsMain, "Error sending data to server", Snackbar.LENGTH_SHORT).show(); | ||
586 | + } | ||
587 | + }; | ||
588 | + | ||
557 | // // Low-pass filter function using Exponential Moving Average (EMA) | 589 | // // Low-pass filter function using Exponential Moving Average (EMA) |
558 | // private float lowPassFilter(float currentValue) { | 590 | // private float lowPassFilter(float currentValue) { |
559 | // float filteredValue = alpha * currentValue + (1 - alpha) * previousFilteredValue; | 591 | // float filteredValue = alpha * currentValue + (1 - alpha) * previousFilteredValue; | ... | ... |
... | @@ -88,6 +88,18 @@ public interface ApiService { | ... | @@ -88,6 +88,18 @@ public interface ApiService { |
88 | @Header(WarpConstants.HEADER_WEB_ID) String webId, | 88 | @Header(WarpConstants.HEADER_WEB_ID) String webId, |
89 | @Header(WarpConstants.HEADER_SIGNATURE) String signature); | 89 | @Header(WarpConstants.HEADER_SIGNATURE) String signature); |
90 | 90 | ||
91 | + @Headers("Content-Type: application/json") | ||
92 | + @POST("/oauth/{appUuid}/context") | ||
93 | + Call<ResponseBody> sendTelematicsData(@Path("appUuid") String appUuid, | ||
94 | + @Body RequestBody request, | ||
95 | + @Header(WarpConstants.HEADER_DATE) String timeStamp, | ||
96 | + @Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId, | ||
97 | + @Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId, | ||
98 | + @Header(WarpConstants.HEADER_CHANNEL) String channel, | ||
99 | + @Header(WarpConstants.HEADER_WEB_ID) String webId, | ||
100 | + @Header(WarpConstants.HEADER_SIGNATURE) String signature, | ||
101 | + @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer); | ||
102 | + | ||
91 | // =========================================================== | 103 | // =========================================================== |
92 | // Getter & Setter | 104 | // Getter & Setter |
93 | // =========================================================== | 105 | // =========================================================== | ... | ... |
... | @@ -2022,6 +2022,44 @@ public class WarplyManager { | ... | @@ -2022,6 +2022,44 @@ public class WarplyManager { |
2022 | }); | 2022 | }); |
2023 | } | 2023 | } |
2024 | 2024 | ||
2025 | + public static void sendAccelerationDataToServer(JSONArray telematicsData, final CallbackReceiver<Integer> receiver) { | ||
2026 | + WarpUtils.log("************* WARPLY User Telematics Request ********************"); | ||
2027 | + WarpUtils.log("[WARP Trace] WARPLY User Telematics Request is active"); | ||
2028 | + WarpUtils.log("**************************************************"); | ||
2029 | + ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class); | ||
2030 | + sendTelematicsData(service, telematicsData, new Callback<ResponseBody>() { | ||
2031 | + @Override | ||
2032 | + public void onResponse(Call<ResponseBody> call, Response<ResponseBody> responseTelematics) { | ||
2033 | + if (responseTelematics.code() == 200 && responseTelematics.body() != null) { | ||
2034 | + JSONObject jobjTelematicsResponse = null; | ||
2035 | + try { | ||
2036 | + jobjTelematicsResponse = new JSONObject(responseTelematics.body().string()); | ||
2037 | + } catch (Exception e) { | ||
2038 | + e.printStackTrace(); | ||
2039 | + } | ||
2040 | + | ||
2041 | + if (jobjTelematicsResponse != null && jobjTelematicsResponse.has("status") && jobjTelematicsResponse.optString("status", "2").equals("1")) { | ||
2042 | + Integer status = new Integer(jobjTelematicsResponse.optString("status", "2")); | ||
2043 | + receiver.onSuccess(status); | ||
2044 | + } else { | ||
2045 | + receiver.onFailure(2); | ||
2046 | + } | ||
2047 | + | ||
2048 | + } else { | ||
2049 | + receiver.onFailure(responseTelematics.code()); | ||
2050 | + } | ||
2051 | + } | ||
2052 | + | ||
2053 | + @Override | ||
2054 | + public void onFailure(Call<ResponseBody> call, Throwable t) { | ||
2055 | + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel(); | ||
2056 | + dynatraceEvent.setEventName("custom_error_couponsets_sm_loyalty"); | ||
2057 | + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent)); | ||
2058 | + receiver.onFailure(2); | ||
2059 | + } | ||
2060 | + }); | ||
2061 | + } | ||
2062 | + | ||
2025 | public static void getUserCouponsWithCouponsets(WarplyUserCouponsRequest request, final CallbackReceiver<CouponList> receiver) { | 2063 | public static void getUserCouponsWithCouponsets(WarplyUserCouponsRequest request, final CallbackReceiver<CouponList> receiver) { |
2026 | WarpUtils.log("************* WARPLY User Coupons Request ********************"); | 2064 | WarpUtils.log("************* WARPLY User Coupons Request ********************"); |
2027 | WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active"); | 2065 | WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active"); |
... | @@ -2577,6 +2615,76 @@ public class WarplyManager { | ... | @@ -2577,6 +2615,76 @@ public class WarplyManager { |
2577 | }); | 2615 | }); |
2578 | } | 2616 | } |
2579 | 2617 | ||
2618 | + private static void sendTelematicsData(ApiService service, JSONArray accelerationTimestamps, Callback<ResponseBody> callback) { | ||
2619 | + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); | ||
2620 | + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); | ||
2621 | + String webId = WarpUtils.getWebId(Warply.getWarplyContext()); | ||
2622 | + | ||
2623 | + if (accelerationTimestamps == null || (accelerationTimestamps != null && accelerationTimestamps.length() == 0)) { | ||
2624 | + return; | ||
2625 | + } | ||
2626 | + | ||
2627 | + String startTime = ""; | ||
2628 | + String stopTime = ""; | ||
2629 | + int samples = 0; | ||
2630 | + | ||
2631 | + if (accelerationTimestamps.optJSONObject(0).keys().hasNext()) { | ||
2632 | + String parent = accelerationTimestamps.optJSONObject(0).keys().next(); | ||
2633 | + JSONObject jobj = accelerationTimestamps.optJSONObject(0).optJSONObject(parent); | ||
2634 | + if (jobj != null) { | ||
2635 | + startTime = jobj.optString("start_time"); | ||
2636 | + stopTime = jobj.optString("stop_time"); | ||
2637 | + samples = jobj.optInt("samples"); | ||
2638 | + } | ||
2639 | + } | ||
2640 | + | ||
2641 | + Map<String, Object> jsonParamsTelematics = new ArrayMap<>(); | ||
2642 | + Map<String, Object> jsonParams = new ArrayMap<>(); | ||
2643 | + jsonParams.put("action", "submit_telematics"); | ||
2644 | + JSONObject rawDataObj = new JSONObject(); | ||
2645 | + try { | ||
2646 | + rawDataObj.putOpt("total_km", 0.0f); | ||
2647 | + rawDataObj.putOpt("average_speed", 0.0f); | ||
2648 | + rawDataObj.putOpt("smoothness", 0.0f); | ||
2649 | + rawDataObj.putOpt("focus", 0.0f); | ||
2650 | + rawDataObj.putOpt("trip_start", DateFormat.format("yyyy-MM-dd HH:mm:ss", Long.valueOf(startTime)).toString()); | ||
2651 | + rawDataObj.putOpt("trip_stop", DateFormat.format("yyyy-MM-dd HH:mm:ss", Long.valueOf(stopTime)).toString()); | ||
2652 | + rawDataObj.putOpt("samples", samples); | ||
2653 | + rawDataObj.putOpt("sample_rate", (samples / 1000)); | ||
2654 | + rawDataObj.putOpt("metadata", accelerationTimestamps); | ||
2655 | + } catch (JSONException e) { | ||
2656 | + throw new RuntimeException(e); | ||
2657 | + } | ||
2658 | + jsonParams.put("raw_data", rawDataObj); | ||
2659 | + | ||
2660 | + jsonParamsTelematics.put("telematics", jsonParams); | ||
2661 | + RequestBody couponsetsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsTelematics)).toString()); | ||
2662 | + | ||
2663 | + Call<ResponseBody> telematicsCall = service.getCouponsets( | ||
2664 | + WarplyProperty.getAppUuid(Warply.getWarplyContext()), | ||
2665 | + couponsetsRequest, | ||
2666 | + timeStamp, | ||
2667 | + "android:" + Warply.getWarplyContext().getPackageName(), | ||
2668 | + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(), | ||
2669 | + "mobile", | ||
2670 | + webId, | ||
2671 | + WarpUtils.produceSignature(apiKey + timeStamp), | ||
2672 | + "Bearer " + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token") | ||
2673 | + ); | ||
2674 | + | ||
2675 | + telematicsCall.enqueue(new Callback<ResponseBody>() { | ||
2676 | + @Override | ||
2677 | + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { | ||
2678 | + callback.onResponse(call, response); | ||
2679 | + } | ||
2680 | + | ||
2681 | + @Override | ||
2682 | + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { | ||
2683 | + callback.onFailure(call, t); | ||
2684 | + } | ||
2685 | + }); | ||
2686 | + } | ||
2687 | + | ||
2580 | private static void getUnifiedCouponsRetro(ApiService service, Callback<ResponseBody> callback) { | 2688 | private static void getUnifiedCouponsRetro(ApiService service, Callback<ResponseBody> callback) { |
2581 | String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); | 2689 | String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); |
2582 | String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); | 2690 | String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); | ... | ... |
-
Please register or login to post a comment