Panagiotis Triantafyllou

sm coupons possible fix

1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="CompilerConfiguration"> 3 <component name="CompilerConfiguration">
4 - <bytecodeTargetLevel target="21" /> 4 + <bytecodeTargetLevel target="17" />
5 </component> 5 </component>
6 </project> 6 </project>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -184,7 +184,7 @@ ...@@ -184,7 +184,7 @@
184 </map> 184 </map>
185 </option> 185 </option>
186 </component> 186 </component>
187 - <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK"> 187 + <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="zulu-17" project-jdk-type="JavaSDK">
188 <output url="file://$PROJECT_DIR$/build/classes" /> 188 <output url="file://$PROJECT_DIR$/build/classes" />
189 </component> 189 </component>
190 <component name="ProjectType"> 190 <component name="ProjectType">
......
...@@ -404,16 +404,11 @@ public class CouponShareActivity extends Activity implements View.OnClickListene ...@@ -404,16 +404,11 @@ public class CouponShareActivity extends Activity implements View.OnClickListene
404 .concat(mCoupon.getCouponsetDetails().getName())); 404 .concat(mCoupon.getCouponsetDetails().getName()));
405 mPbLoading.setVisibility(View.VISIBLE); 405 mPbLoading.setVisibility(View.VISIBLE);
406 406
407 - new Thread(() -> { 407 + WarplyManager.cosmoteCouponSharing(
408 - if (!Thread.currentThread().isInterrupted()) { 408 + mCoupon.getCoupon(),
409 - WarplyManager.cosmoteCouponSharing(new CosmoteCouponSharingRequest() 409 + mSender,
410 - .setCoupon(mCoupon.getCoupon()) 410 + mEdtReceiver.getText().toString(),
411 - .setSender(mSender) 411 + mCouponSharingCallback);
412 - .setReceiver(mEdtReceiver.getText().toString())
413 - , mCouponSharingCallback);
414 - }
415 - Thread.currentThread().interrupt();
416 - }).start();
417 }) 412 })
418 .setNegativeButton(R.string.cos_dlg_negative_button2, (dialogNegative, whichNegative) -> { 413 .setNegativeButton(R.string.cos_dlg_negative_button2, (dialogNegative, whichNegative) -> {
419 mIsSharePressed = false; 414 mIsSharePressed = false;
...@@ -438,6 +433,7 @@ public class CouponShareActivity extends Activity implements View.OnClickListene ...@@ -438,6 +433,7 @@ public class CouponShareActivity extends Activity implements View.OnClickListene
438 private final CallbackReceiver<JSONObject> mCouponSharingCallback = new CallbackReceiver<JSONObject>() { 433 private final CallbackReceiver<JSONObject> mCouponSharingCallback = new CallbackReceiver<JSONObject>() {
439 @Override 434 @Override
440 public void onSuccess(JSONObject result) { 435 public void onSuccess(JSONObject result) {
436 + mPbLoading.setVisibility(View.GONE);
441 mIsSharePressed = false; 437 mIsSharePressed = false;
442 int status = result.optInt("status", 2); 438 int status = result.optInt("status", 2);
443 String message = result.optString("msg", ""); 439 String message = result.optString("msg", "");
...@@ -446,31 +442,24 @@ public class CouponShareActivity extends Activity implements View.OnClickListene ...@@ -446,31 +442,24 @@ public class CouponShareActivity extends Activity implements View.OnClickListene
446 // WarplyManager.getUserCouponsWithCouponsetsInternal(mUserCouponsReceiver); 442 // WarplyManager.getUserCouponsWithCouponsetsInternal(mUserCouponsReceiver);
447 WarplyManagerHelper.removeCouponItem(mCoupon); 443 WarplyManagerHelper.removeCouponItem(mCoupon);
448 /* New Addition end */ 444 /* New Addition end */
449 - }
450 445
451 - runOnUiThread(() -> { 446 + WarplyCouponsChangedEventModel couponsChanged = new WarplyCouponsChangedEventModel();
452 - mPbLoading.setVisibility(View.GONE); 447 + couponsChanged.setChanged(true);
453 - if (status == 1) { 448 + EventBus.getDefault().post(new WarplyEventBusManager(couponsChanged));
454 - WarplyCouponsChangedEventModel couponsChanged = new WarplyCouponsChangedEventModel(); 449 +
455 - couponsChanged.setChanged(true); 450 + acceptSharingDialog();
456 - EventBus.getDefault().post(new WarplyEventBusManager(couponsChanged)); 451 + } else if (status == 4)
457 - 452 + wrongNumberDialog(message);
458 - acceptSharingDialog(); 453 + else
459 - } else if (status == 4) 454 + errorSharingDialog();
460 - wrongNumberDialog(message);
461 - else
462 - errorSharingDialog();
463 - });
464 } 455 }
465 456
466 @Override 457 @Override
467 public void onFailure(int errorCode) { 458 public void onFailure(int errorCode) {
468 mIsSharePressed = false; 459 mIsSharePressed = false;
469 Log.v("COUPON_SHARE", String.valueOf(errorCode)); 460 Log.v("COUPON_SHARE", String.valueOf(errorCode));
470 - runOnUiThread(() -> { 461 + mPbLoading.setVisibility(View.GONE);
471 - mPbLoading.setVisibility(View.GONE); 462 + errorSharingDialog();
472 - errorSharingDialog();
473 - });
474 } 463 }
475 }; 464 };
476 465
......
...@@ -135,6 +135,18 @@ public interface ApiService { ...@@ -135,6 +135,18 @@ public interface ApiService {
135 @Header(WarpConstants.HEADER_SIGNATURE) String signature); 135 @Header(WarpConstants.HEADER_SIGNATURE) String signature);
136 136
137 @Headers("Content-Type: application/json") 137 @Headers("Content-Type: application/json")
138 + @POST("/oauth/{appUuid}/context")
139 + Call<ResponseBody> shareCoupon(@Path("appUuid") String appUuid,
140 + @Body RequestBody request,
141 + @Header(WarpConstants.HEADER_DATE) String timeStamp,
142 + @Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
143 + @Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
144 + @Header(WarpConstants.HEADER_CHANNEL) String channel,
145 + @Header(WarpConstants.HEADER_WEB_ID) String webId,
146 + @Header(WarpConstants.HEADER_SIGNATURE) String signature,
147 + @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer);
148 +
149 + @Headers("Content-Type: application/json")
138 @POST("/api/mobile/v2/{appUuid}/context/") 150 @POST("/api/mobile/v2/{appUuid}/context/")
139 Call<ResponseBody> getCampaigns(@Path("appUuid") String appUuid, 151 Call<ResponseBody> getCampaigns(@Path("appUuid") String appUuid,
140 @Body RequestBody request, 152 @Body RequestBody request,
......
...@@ -5301,4 +5301,147 @@ public class WarplyManager { ...@@ -5301,4 +5301,147 @@ public class WarplyManager {
5301 } 5301 }
5302 }, executorService); 5302 }, executorService);
5303 } 5303 }
5304 +
5305 + public static void cosmoteCouponSharing(String coupon, String sender, String receiverMsisdn, final CallbackReceiver<JSONObject> receiver) {
5306 + WarpUtils.log("************* WARPLY Cosmote Coupon Sharing Request ********************");
5307 + WarpUtils.log("[WARP Trace] WARPLY Cosmote Coupon Sharing Request is active");
5308 + WarpUtils.log("**************************************************");
5309 +
5310 + ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class);
5311 + ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(1));
5312 +
5313 + ListenableFuture<JSONObject> futureSharing = cosmoteSharingRetro(service, coupon, sender, receiverMsisdn);
5314 +
5315 + ListenableFuture<List<Object>> allResultsFuture = Futures.allAsList(futureSharing);
5316 + ListenableFuture<JSONObject> mergedResultFuture = Futures.transformAsync(
5317 + allResultsFuture,
5318 + results -> {
5319 + JSONObject resultCoupons = (JSONObject) results.get(0);
5320 + return executorService.submit(() -> resultCoupons);
5321 + },
5322 + executorService
5323 + );
5324 +
5325 + Futures.addCallback(mergedResultFuture, new FutureCallback<JSONObject>() {
5326 + @Override
5327 + public void onSuccess(JSONObject mergedResult) {
5328 + executorService.shutdownNow();
5329 + new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(mergedResult));
5330 + }
5331 +
5332 + @Override
5333 + public void onFailure(Throwable throwable) {
5334 + executorService.shutdownNow();
5335 + new Handler(Looper.getMainLooper()).post(() -> receiver.onFailure(2));
5336 + }
5337 + }, executorService);
5338 + }
5339 +
5340 + private static /*void*/ ListenableFuture<JSONObject> cosmoteSharingRetro(ApiService service, String coupon, String sender, String receiver) {
5341 + SettableFuture<JSONObject> future = SettableFuture.create();
5342 +
5343 + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
5344 + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
5345 + String webId = WarpUtils.getWebId(Warply.getWarplyContext());
5346 +
5347 + Map<String, Object> jsonParamsShare = new ArrayMap<>();
5348 + Map<String, Object> jsonParams = new ArrayMap<>();
5349 + jsonParams.put("action", "share");
5350 + jsonParams.put("coupon", coupon);
5351 + jsonParams.put("sender_msisdn", sender);
5352 + jsonParams.put("receiver_msisdn", receiver);
5353 +
5354 + jsonParamsShare.put("coupon", jsonParams);
5355 + RequestBody merchantsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsShare)).toString());
5356 +
5357 + Call<ResponseBody> shareCall = service.shareCoupon(
5358 + WarplyProperty.getAppUuid(Warply.getWarplyContext()),
5359 + merchantsRequest,
5360 + timeStamp,
5361 + "android:" + Warply.getWarplyContext().getPackageName(),
5362 + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(),
5363 + "mobile",
5364 + webId,
5365 + WarpUtils.produceSignature(apiKey + timeStamp),
5366 + "Bearer " + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token")
5367 + );
5368 +
5369 + shareCall.enqueue(new Callback<ResponseBody>() {
5370 + @Override
5371 + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
5372 + if (response.code() == 200 && response.body() != null) {
5373 + JSONObject jobjSharingResponse = null;
5374 + try {
5375 + jobjSharingResponse = new JSONObject(response.body().string());
5376 + } catch (Exception e) {
5377 + e.printStackTrace();
5378 + }
5379 +
5380 + if (jobjSharingResponse != null && jobjSharingResponse.has("status")) {
5381 + int status = jobjSharingResponse.optInt("status", 2);
5382 + JSONObject jResponse = new JSONObject();
5383 +
5384 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
5385 + if (status == 1 || status == 3 || status == 4) {
5386 + dynatraceEvent.setEventName("custom_success_coupon_sharing_loyalty");
5387 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
5388 + try {
5389 + jResponse.putOpt("status", status);
5390 + jResponse.putOpt("msg", jobjSharingResponse.optString("msg", ""));
5391 + } catch (JSONException e) {
5392 + throw new RuntimeException(e);
5393 + }
5394 + } else {
5395 + dynatraceEvent.setEventName("custom_error_coupon_sharing_loyalty");
5396 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
5397 + try {
5398 + jResponse.putOpt("status", 2);
5399 + jResponse.putOpt("msg", jobjSharingResponse.optString("msg", ""));
5400 + } catch (JSONException e) {
5401 + throw new RuntimeException(e);
5402 + }
5403 + }
5404 + future.set(jResponse);
5405 + } else {
5406 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
5407 + dynatraceEvent.setEventName("custom_error_coupon_sharing_loyalty");
5408 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
5409 + future.set(new JSONObject());
5410 + }
5411 + } else if (response.code() == 401) {
5412 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
5413 + @Override
5414 + public void onSuccess(JSONObject result) {
5415 + int status = result.optInt("status", 2);
5416 + if (status == 1)
5417 + cosmoteSharingRetro(service, coupon, sender, receiver);
5418 + else {
5419 + future.setException(new Throwable());
5420 + }
5421 + }
5422 +
5423 + @Override
5424 + public void onFailure(int errorCode) {
5425 + future.setException(new Throwable());
5426 + }
5427 + });
5428 + } else {
5429 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
5430 + dynatraceEvent.setEventName("custom_error_coupon_sharing_loyalty");
5431 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
5432 + future.setException(new Throwable());
5433 + }
5434 + }
5435 +
5436 + @Override
5437 + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
5438 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
5439 + dynatraceEvent.setEventName("custom_error_coupon_sharing_loyalty");
5440 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
5441 + future.setException(new Throwable());
5442 + }
5443 + });
5444 +
5445 + return future;
5446 + }
5304 } 5447 }
......