Panagiotis Triantafyllou

fixes

...@@ -133,6 +133,11 @@ ...@@ -133,6 +133,11 @@
133 android:permission="android.permission.BIND_JOB_SERVICE" /> 133 android:permission="android.permission.BIND_JOB_SERVICE" />
134 134
135 <service 135 <service
136 + android:name="ly.warp.sdk.services.EventCampaignCouponService"
137 + android:exported="false"
138 + android:permission="android.permission.BIND_JOB_SERVICE" />
139 +
140 + <service
136 android:name="ly.warp.sdk.services.EventCampaignService" 141 android:name="ly.warp.sdk.services.EventCampaignService"
137 android:exported="false" 142 android:exported="false"
138 android:permission="android.permission.BIND_JOB_SERVICE" /> 143 android:permission="android.permission.BIND_JOB_SERVICE" />
......
...@@ -102,6 +102,22 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -102,6 +102,22 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
102 super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); 102 super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
103 } 103 }
104 104
105 +// @Override
106 +// public void onRequestPermissionsResult(
107 +// int requestCode,
108 +// String permissions[],
109 +// int[] grantResults) {
110 +// switch (requestCode) {
111 +// case REQUEST_PERMISSION_PHONE_STATE:
112 +// if (grantResults.length > 0
113 +// && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
114 +// Toast.makeText(MainActivity.this, "Permission Granted!", Toast.LENGTH_SHORT).show();
115 +// } else {
116 +// Toast.makeText(MainActivity.this, "Permission Denied!", Toast.LENGTH_SHORT).show();
117 +// }
118 +// }
119 +// }
120 +
105 @Override 121 @Override
106 public void onMapReady(@NonNull GoogleMap googleMap) { 122 public void onMapReady(@NonNull GoogleMap googleMap) {
107 mMap = googleMap; 123 mMap = googleMap;
...@@ -115,6 +131,9 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -115,6 +131,9 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
115 } 131 }
116 } else { 132 } else {
117 mMap.setMyLocationEnabled(false); 133 mMap.setMyLocationEnabled(false);
134 +// ActivityCompat.requestPermissions(this,
135 +// new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
136 +// Manifest.permission.ACCESS_COARSE_LOCATION}, 501);
118 } 137 }
119 138
120 mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 139 mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
......
...@@ -64,6 +64,7 @@ import ly.warp.sdk.io.callbacks.CallbackReceiver; ...@@ -64,6 +64,7 @@ import ly.warp.sdk.io.callbacks.CallbackReceiver;
64 import ly.warp.sdk.io.models.CouponList; 64 import ly.warp.sdk.io.models.CouponList;
65 import ly.warp.sdk.io.request.PacingCalculateRequest; 65 import ly.warp.sdk.io.request.PacingCalculateRequest;
66 import ly.warp.sdk.io.request.WarplyUserCouponsRequest; 66 import ly.warp.sdk.io.request.WarplyUserCouponsRequest;
67 +import ly.warp.sdk.services.EventCampaignCouponService;
67 import ly.warp.sdk.services.EventQuestionnaireService; 68 import ly.warp.sdk.services.EventQuestionnaireService;
68 import ly.warp.sdk.services.PushEventsClickedWorkerService; 69 import ly.warp.sdk.services.PushEventsClickedWorkerService;
69 import ly.warp.sdk.services.WarplyHealthService; 70 import ly.warp.sdk.services.WarplyHealthService;
...@@ -151,9 +152,10 @@ public class WarpViewActivity extends WarpBaseActivity { ...@@ -151,9 +152,10 @@ public class WarpViewActivity extends WarpBaseActivity {
151 setResult(RESULT_OK, new Intent()); 152 setResult(RESULT_OK, new Intent());
152 finish(); 153 finish();
153 } 154 }
154 -// if (event.getCoupon() != null) { 155 + if (event.getCoupon() != null) {
155 -// WarplyManager.getUserCouponsWithCouponsets(new WarplyUserCouponsRequest(), mUserCouponsReceiver); 156 + OneTimeWorkRequest mywork = new OneTimeWorkRequest.Builder(EventCampaignCouponService.class).build();
156 -// } 157 + WorkManager.getInstance(WarpViewActivity.this).enqueue(mywork);
158 + }
157 // if (event.getPacingCard() != null) 159 // if (event.getPacingCard() != null)
158 // finish(); 160 // finish();
159 // if (event.getPacingService() != null) 161 // if (event.getPacingService() != null)
......
...@@ -198,14 +198,14 @@ public class Merchant implements Parcelable, Serializable, ClusterItem { ...@@ -198,14 +198,14 @@ public class Merchant implements Parcelable, Serializable, ClusterItem {
198 */ 198 */
199 public Merchant(JSONObject json) { 199 public Merchant(JSONObject json) {
200 if (json != null) { 200 if (json != null) {
201 - this.address = json.optString(ADDRESS); 201 + this.address = json.isNull(ADDRESS) ? "" : json.optString(ADDRESS);
202 this.id = json.optString(ID); 202 this.id = json.optString(ID);
203 this.store_id = json.optString(STORE_ID); 203 this.store_id = json.optString(STORE_ID);
204 - this.name = json.optString(NAME); 204 + this.name = json.isNull(NAME) ? "" : json.optString(NAME);
205 this.logo = json.optString(LOGO); 205 this.logo = json.optString(LOGO);
206 this.website = json.optString(WEBSITE); 206 this.website = json.optString(WEBSITE);
207 this.email = json.optString(EMAIL); 207 this.email = json.optString(EMAIL);
208 - this.telephone = json.optString(TELEPHONE); 208 + this.telephone = json.isNull(TELEPHONE) ? "" : json.optString(TELEPHONE);
209 this.category = json.optString(CATEGORY); 209 this.category = json.optString(CATEGORY);
210 this.description = json.optString(DESCRIPTION); 210 this.description = json.optString(DESCRIPTION);
211 this.short_description = json.optString(SHORT_DESCRIPTION); 211 this.short_description = json.optString(SHORT_DESCRIPTION);
......
1 +package ly.warp.sdk.services;
2 +
3 +import android.content.Context;
4 +
5 +import androidx.annotation.NonNull;
6 +import androidx.work.OneTimeWorkRequest;
7 +import androidx.work.WorkManager;
8 +import androidx.work.Worker;
9 +import androidx.work.WorkerParameters;
10 +
11 +import org.greenrobot.eventbus.EventBus;
12 +
13 +import ly.warp.sdk.Warply;
14 +import ly.warp.sdk.activities.CouponsetInfoActivity;
15 +import ly.warp.sdk.io.callbacks.CallbackReceiver;
16 +import ly.warp.sdk.io.models.CampaignList;
17 +import ly.warp.sdk.io.models.CouponList;
18 +import ly.warp.sdk.io.models.CouponsEventModel;
19 +import ly.warp.sdk.io.models.LoyaltyEventModel;
20 +import ly.warp.sdk.io.models.WarplyCouponsChangedEventModel;
21 +import ly.warp.sdk.io.request.WarplyGetCampaignsRequest;
22 +import ly.warp.sdk.io.request.WarplyUserCouponsRequest;
23 +import ly.warp.sdk.utils.managers.WarplyEventBusManager;
24 +import ly.warp.sdk.utils.managers.WarplyManager;
25 +
26 +/**
27 + * Created by Panagiotis Triantafyllou on 05/Sept/2022.
28 + */
29 +public class EventCampaignCouponService extends Worker {
30 +
31 + public EventCampaignCouponService(@NonNull Context context, @NonNull WorkerParameters workerParams) {
32 + super(context, workerParams);
33 + }
34 +
35 + @NonNull
36 + @Override
37 + public Result doWork() {
38 + WarplyManager.getUserCouponsWithCouponsets(new WarplyUserCouponsRequest(), mUserCouponsReceiver);
39 + WarplyManager.getCampaigns(new WarplyGetCampaignsRequest().setLanguage("en"), mCampaignsCallback);
40 +
41 + return Result.success();
42 + }
43 +
44 + private final CallbackReceiver<CouponList> mUserCouponsReceiver = new CallbackReceiver<CouponList>() {
45 + @Override
46 + public void onSuccess(CouponList result) {
47 + WarplyCouponsChangedEventModel couponsChanged = new WarplyCouponsChangedEventModel();
48 + couponsChanged.setChanged(true);
49 + EventBus.getDefault().post(new WarplyEventBusManager(couponsChanged));
50 + }
51 +
52 + @Override
53 + public void onFailure(int errorCode) {
54 + Thread.currentThread().interrupt();
55 + }
56 + };
57 +
58 + private CallbackReceiver<CampaignList> mCampaignsCallback = new CallbackReceiver<CampaignList>() {
59 + @Override
60 + public void onSuccess(CampaignList result) {
61 + LoyaltyEventModel campaignsAdded = new LoyaltyEventModel();
62 + EventBus.getDefault().post(new WarplyEventBusManager(campaignsAdded));
63 + }
64 +
65 + @Override
66 + public void onFailure(int errorCode) {
67 + Thread.currentThread().interrupt();
68 + }
69 + };
70 +}
...@@ -346,7 +346,7 @@ public class FCMBaseMessagingService extends FirebaseMessagingService { ...@@ -346,7 +346,7 @@ public class FCMBaseMessagingService extends FirebaseMessagingService {
346 nm.notify(tag, uid, notification_build); 346 nm.notify(tag, uid, notification_build);
347 }*/ 347 }*/
348 348
349 - public void showNotification(Context context, PushCampaign pc, Intent newIntent, List<NotificationCompat.Action> actions, RemoteViews remoteViews, String tag, int id) { 349 + public static void showNotification(Context context, PushCampaign pc, Intent newIntent, List<NotificationCompat.Action> actions, RemoteViews remoteViews, String tag, int id) {
350 350
351 SecureRandom randomGenerator = new SecureRandom(); 351 SecureRandom randomGenerator = new SecureRandom();
352 int uid = randomGenerator.nextInt(1000); 352 int uid = randomGenerator.nextInt(1000);
......
...@@ -27,6 +27,8 @@ package ly.warp.sdk.utils; ...@@ -27,6 +27,8 @@ package ly.warp.sdk.utils;
27 27
28 import android.content.Context; 28 import android.content.Context;
29 import android.content.Intent; 29 import android.content.Intent;
30 +import android.content.pm.PackageManager;
31 +import android.os.Bundle;
30 import android.text.TextUtils; 32 import android.text.TextUtils;
31 import android.util.Log; 33 import android.util.Log;
32 34
...@@ -43,6 +45,7 @@ import java.io.Serializable; ...@@ -43,6 +45,7 @@ import java.io.Serializable;
43 import java.util.ArrayList; 45 import java.util.ArrayList;
44 import java.util.HashMap; 46 import java.util.HashMap;
45 import java.util.HashSet; 47 import java.util.HashSet;
48 +import java.util.Map;
46 49
47 import ly.warp.sdk.R; 50 import ly.warp.sdk.R;
48 import ly.warp.sdk.Warply; 51 import ly.warp.sdk.Warply;
...@@ -66,12 +69,14 @@ import ly.warp.sdk.io.models.LoyaltyBadgeModel; ...@@ -66,12 +69,14 @@ import ly.warp.sdk.io.models.LoyaltyBadgeModel;
66 import ly.warp.sdk.io.models.LoyaltyContextualOfferModel; 69 import ly.warp.sdk.io.models.LoyaltyContextualOfferModel;
67 import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage; 70 import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage;
68 import ly.warp.sdk.io.models.MerchantList; 71 import ly.warp.sdk.io.models.MerchantList;
72 +import ly.warp.sdk.io.models.PushCampaign;
69 import ly.warp.sdk.io.models.WarplyCouponsChangedEventModel; 73 import ly.warp.sdk.io.models.WarplyCouponsChangedEventModel;
70 import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest; 74 import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest;
71 import ly.warp.sdk.io.request.CosmoteSharingRequest; 75 import ly.warp.sdk.io.request.CosmoteSharingRequest;
72 import ly.warp.sdk.io.request.WarplyIntegrationRequest; 76 import ly.warp.sdk.io.request.WarplyIntegrationRequest;
73 import ly.warp.sdk.io.request.WarplyUserCouponsRequest; 77 import ly.warp.sdk.io.request.WarplyUserCouponsRequest;
74 import ly.warp.sdk.services.EventService; 78 import ly.warp.sdk.services.EventService;
79 +import ly.warp.sdk.services.FCMBaseMessagingService;
75 import ly.warp.sdk.utils.managers.WarplyEventBusManager; 80 import ly.warp.sdk.utils.managers.WarplyEventBusManager;
76 import ly.warp.sdk.utils.managers.WarplyManager; 81 import ly.warp.sdk.utils.managers.WarplyManager;
77 82
...@@ -1129,6 +1134,42 @@ public class WarplyManagerHelper { ...@@ -1129,6 +1134,42 @@ public class WarplyManagerHelper {
1129 mDealsSum = sum; 1134 mDealsSum = sum;
1130 } 1135 }
1131 1136
1137 + public static boolean checkForLoyaltySDKNotification(Map<String, String> pushPayload) {
1138 + Bundle data = convertToBundle(pushPayload);
1139 + if (data == null || !data.containsKey("loyalty-action"))
1140 + return false;
1141 + PushCampaign pc = new PushCampaign(data);
1142 +
1143 + WarpUtils.log("Received push with action: " + pc.getAction());
1144 + if (pc.getAction() == 0 && !pc.hasActions())
1145 + FCMBaseMessagingService.showCampaignNotification(Warply.getWarplyContext(), pc);
1146 + else
1147 + showDefaultNotification(Warply.getWarplyContext(), data);
1148 +
1149 + return true;
1150 + }
1151 +
1152 + private static Bundle convertToBundle(Map<String, String> data) {
1153 + Bundle bundle = new Bundle();
1154 + for (Map.Entry<String, String> entry : data.entrySet()) {
1155 + bundle.putString(entry.getKey(), entry.getValue());
1156 + }
1157 +
1158 + return bundle;
1159 + }
1160 +
1161 + private static void showDefaultNotification(Context context, Bundle data) {
1162 + PushCampaign pc = new PushCampaign(data);
1163 +
1164 + if (pc != null) {
1165 + PackageManager pm = context.getPackageManager();
1166 + Intent newIntent = pm.getLaunchIntentForPackage(context.getPackageName());
1167 +
1168 + FCMBaseMessagingService.showNotification(context, pc, newIntent, null, null, null, 0);
1169 + }
1170 +
1171 + }
1172 +
1132 // =========================================================== 1173 // ===========================================================
1133 // Inner and Anonymous Classes 1174 // Inner and Anonymous Classes
1134 // =========================================================== 1175 // ===========================================================
......
...@@ -418,7 +418,7 @@ public class WarpView extends WebView { ...@@ -418,7 +418,7 @@ public class WarpView extends WebView {
418 EventBus.getDefault().post(new WarplyEventBusManager(questionnaireEvent)); 418 EventBus.getDefault().post(new WarplyEventBusManager(questionnaireEvent));
419 } 419 }
420 } else if (parts[1].equals("couponRetrieved")) { 420 } else if (parts[1].equals("couponRetrieved")) {
421 -// EventBus.getDefault().post(new WarplyEventBusManager(new CouponEventModel())); 421 + EventBus.getDefault().post(new WarplyEventBusManager(new CouponEventModel()));
422 } else if (parts[1].equals("couponShared")) { 422 } else if (parts[1].equals("couponShared")) {
423 // EventBus.getDefault().post(new WarplyEventBusManager(new CouponEventModel())); 423 // EventBus.getDefault().post(new WarplyEventBusManager(new CouponEventModel()));
424 } else if (parts[1].equals("steps") && parts[2].equals("widgetDisabled")) { // This is for the pacing widget 424 } else if (parts[1].equals("steps") && parts[2].equals("widgetDisabled")) { // This is for the pacing widget
......
...@@ -52,7 +52,8 @@ ...@@ -52,7 +52,8 @@
52 android:layout_marginTop="4dp" 52 android:layout_marginTop="4dp"
53 android:clipToPadding="false" 53 android:clipToPadding="false"
54 android:orientation="vertical" 54 android:orientation="vertical"
55 - android:paddingTop="44dp" /> 55 + android:paddingTop="44dp"
56 + android:overScrollMode="never"/>
56 </RelativeLayout> 57 </RelativeLayout>
57 58
58 <TextView 59 <TextView
......
...@@ -115,7 +115,8 @@ ...@@ -115,7 +115,8 @@
115 android:layout_width="match_parent" 115 android:layout_width="match_parent"
116 android:layout_height="match_parent" 116 android:layout_height="match_parent"
117 android:layout_marginTop="-24dp" 117 android:layout_marginTop="-24dp"
118 - android:fillViewport="true"> 118 + android:fillViewport="true"
119 + android:overScrollMode="never">
119 120
120 <RelativeLayout 121 <RelativeLayout
121 android:layout_width="match_parent" 122 android:layout_width="match_parent"
......