Showing
15 changed files
with
833 additions
and
62 deletions
... | @@ -42,7 +42,7 @@ public class SplashActivity extends BaseActivity { | ... | @@ -42,7 +42,7 @@ public class SplashActivity extends BaseActivity { |
42 | // ); | 42 | // ); |
43 | 43 | ||
44 | WarplyManager.getCosmoteUser(new WarplyCosmoteUserRequest() | 44 | WarplyManager.getCosmoteUser(new WarplyCosmoteUserRequest() |
45 | - .setGuid("6012049323"), //6012049321, 6012049322, 6012049323 | 45 | + .setGuid("6012049321"), //6012049321, 6012049322, 6012049323 |
46 | mLoginReceiver); | 46 | mLoginReceiver); |
47 | 47 | ||
48 | // WarplyManager.verifyTicket(new WarplyVerifyTicketRequest() | 48 | // WarplyManager.verifyTicket(new WarplyVerifyTicketRequest() | ... | ... |
... | @@ -157,6 +157,11 @@ | ... | @@ -157,6 +157,11 @@ |
157 | android:permission="android.permission.BIND_JOB_SERVICE" /> | 157 | android:permission="android.permission.BIND_JOB_SERVICE" /> |
158 | 158 | ||
159 | <service | 159 | <service |
160 | + android:name="ly.warp.sdk.services.WarplyHealthService" | ||
161 | + android:exported="false" | ||
162 | + android:permission="android.permission.BIND_JOB_SERVICE" /> | ||
163 | + | ||
164 | + <service | ||
160 | android:name="ly.warp.sdk.services.WarplyBeaconsRangingService" | 165 | android:name="ly.warp.sdk.services.WarplyBeaconsRangingService" |
161 | android:exported="false" /> | 166 | android:exported="false" /> |
162 | 167 | ... | ... |
... | @@ -45,7 +45,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { | ... | @@ -45,7 +45,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { |
45 | private ImageView mIvBack, mIvDealsLogo, mIvProfilePhoto; | 45 | private ImageView mIvBack, mIvDealsLogo, mIvProfilePhoto; |
46 | private TextView mTvUsername, mTvDealsValue, mTvDealsValueAll, | 46 | private TextView mTvUsername, mTvDealsValue, mTvDealsValueAll, |
47 | mTvUserBadge, mTvGiftsValue, mTvGiftsValueAll, mTvActiveCode, mTvActiveDate, | 47 | mTvUserBadge, mTvGiftsValue, mTvGiftsValueAll, mTvActiveCode, mTvActiveDate, |
48 | - mTvActiveTitle; | 48 | + mTvActiveTitle, mTvActiveCouponsHeader; |
49 | private ConstraintLayout mClDealsBanner, mClDealsView, | 49 | private ConstraintLayout mClDealsBanner, mClDealsView, |
50 | mClGiftsBanner; | 50 | mClGiftsBanner; |
51 | private LinearLayout mLlQuestionnaire, mLlUserBadge; | 51 | private LinearLayout mLlQuestionnaire, mLlUserBadge; |
... | @@ -79,6 +79,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { | ... | @@ -79,6 +79,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { |
79 | mClDealsView = findViewById(R.id.cl_mygifts); | 79 | mClDealsView = findViewById(R.id.cl_mygifts); |
80 | mIvProfilePhoto = findViewById(R.id.iv_profile_photo); | 80 | mIvProfilePhoto = findViewById(R.id.iv_profile_photo); |
81 | mTvActiveTitle = findViewById(R.id.tv_active_gifts); | 81 | mTvActiveTitle = findViewById(R.id.tv_active_gifts); |
82 | + mTvActiveCouponsHeader = findViewById(R.id.tv_active_coupons_header); | ||
82 | 83 | ||
83 | if (WarplyManagerHelper.getActiveDFYCoupons() != null) { | 84 | if (WarplyManagerHelper.getActiveDFYCoupons() != null) { |
84 | Collections.sort(WarplyManagerHelper.getActiveDFYCoupons(), new Comparator<ActiveDFYCouponModel>() { | 85 | Collections.sort(WarplyManagerHelper.getActiveDFYCoupons(), new Comparator<ActiveDFYCouponModel>() { |
... | @@ -116,6 +117,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { | ... | @@ -116,6 +117,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { |
116 | } | 117 | } |
117 | if (view.getId() == R.id.ll_user_questionnaire || view.getId() == R.id.ll_user_badge) { | 118 | if (view.getId() == R.id.ll_user_questionnaire || view.getId() == R.id.ll_user_badge) { |
118 | startActivityForResult(WarpViewActivity.createIntentFromURL(LoyaltyWallet.this, WarplyManagerHelper.openQuestionnaire()), 1000); | 119 | startActivityForResult(WarpViewActivity.createIntentFromURL(LoyaltyWallet.this, WarplyManagerHelper.openQuestionnaire()), 1000); |
120 | +// startActivity(WarpViewActivity.createIntentFromURL(LoyaltyWallet.this, WarplyManagerHelper.openPacing())); | ||
119 | return; | 121 | return; |
120 | } | 122 | } |
121 | if (view.getId() == R.id.cl_deals_cos) { | 123 | if (view.getId() == R.id.cl_deals_cos) { |
... | @@ -171,15 +173,24 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { | ... | @@ -171,15 +173,24 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { |
171 | .subscribe(); | 173 | .subscribe(); |
172 | } | 174 | } |
173 | 175 | ||
176 | + if (WarplyManagerHelper.getDealsCouponsSum() > 0) { | ||
177 | + mTvDealsValue.setText(String.format(getString(R.string.cos_value), String.valueOf(/*couponDfyValue*/ WarplyManagerHelper.getDealsCouponsSum()))); | ||
178 | + mTvDealsValueAll.setText(String.format(getString(R.string.cos_deals_win_title_cos), String.valueOf(/*couponDfyValue*/WarplyManagerHelper.getDealsCouponsSum()))); | ||
179 | + } else { | ||
180 | + mClDealsBanner.setVisibility(View.GONE); | ||
181 | + } | ||
182 | + | ||
174 | if (WarplyManagerHelper.getLoyaltyBadge() != null) { | 183 | if (WarplyManagerHelper.getLoyaltyBadge() != null) { |
175 | - WarpUtils.log("LOYALTY_BADGE_COUNT: " + String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount())); | 184 | + if (WarplyManagerHelper.getLoyaltyBadge().getCouponCount() > 0) { |
176 | - WarpUtils.log("LOYALTY_BADGE_SUM: " + String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getValue())); | 185 | + mTvGiftsValue.setText(String.format(getString(R.string.cos_value), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getValue()))); |
186 | + mTvGiftsValueAll.setText(String.format(getString(R.string.cos_deals_win_title), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getValue()), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()))); | ||
187 | + } else { | ||
188 | + mClGiftsBanner.setVisibility(View.GONE); | ||
189 | + } | ||
190 | + } else { | ||
191 | + mClGiftsBanner.setVisibility(View.GONE); | ||
177 | } | 192 | } |
178 | 193 | ||
179 | - mTvGiftsValue.setText(String.format(getString(R.string.cos_value), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getValue()))); | ||
180 | - mTvGiftsValueAll.setText(String.format(getString(R.string.cos_deals_win_title), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getValue()), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()))); | ||
181 | - mTvDealsValue.setText(String.format(getString(R.string.cos_value), String.valueOf(/*couponDfyValue*/ WarplyManagerHelper.getDealsCouponsSum()))); | ||
182 | - mTvDealsValueAll.setText(String.format(getString(R.string.cos_deals_win_title_cos), String.valueOf(/*couponDfyValue*/WarplyManagerHelper.getDealsCouponsSum()))); | ||
183 | if (WarplyManagerHelper.getActiveDFYCoupons() != null && WarplyManagerHelper.getActiveDFYCoupons().size() > 0) { | 194 | if (WarplyManagerHelper.getActiveDFYCoupons() != null && WarplyManagerHelper.getActiveDFYCoupons().size() > 0) { |
184 | String codes = ""; | 195 | String codes = ""; |
185 | if (WarplyManagerHelper.getActiveDFYCoupons().size() == 1) { | 196 | if (WarplyManagerHelper.getActiveDFYCoupons().size() == 1) { |
... | @@ -208,6 +219,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { | ... | @@ -208,6 +219,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { |
208 | // e.printStackTrace(); | 219 | // e.printStackTrace(); |
209 | // } | 220 | // } |
210 | } else { | 221 | } else { |
222 | + mTvActiveCouponsHeader.setVisibility(View.GONE); | ||
211 | mIvDealsLogo.setVisibility(View.GONE); | 223 | mIvDealsLogo.setVisibility(View.GONE); |
212 | mClDealsView.setVisibility(View.GONE); | 224 | mClDealsView.setVisibility(View.GONE); |
213 | } | 225 | } | ... | ... |
... | @@ -183,7 +183,15 @@ public class TelcoActivity extends Activity implements View.OnClickListener { | ... | @@ -183,7 +183,15 @@ public class TelcoActivity extends Activity implements View.OnClickListener { |
183 | .setDataCategory(mCCMS.getDataCategory()) | 183 | .setDataCategory(mCCMS.getDataCategory()) |
184 | .setMinsValue(mCCMS.getMinsValue()) | 184 | .setMinsValue(mCCMS.getMinsValue()) |
185 | .setDataValue(mCCMS.getDataValue()) | 185 | .setDataValue(mCCMS.getDataValue()) |
186 | - .setProvStepValueMins(mCCMS.getProvStepValueMins()), | 186 | + .setProvStepValueMins(mCCMS.getProvStepValueMins()) |
187 | + .setOfferAudienceLevel(mCCMS.getOfferAudienceLevel()) | ||
188 | + .setUACIOfferTrackingCode(mCCMS.getUACIOfferTrackingCode()) | ||
189 | + .setOfferCode1(mCCMS.getOfferCode1()) | ||
190 | + .setScore(mCCMS.getScore()) | ||
191 | + .setZone(mCCMS.getZone()) | ||
192 | + .setWave(mCCMS.getWave()) | ||
193 | + .setValidity(mCCMS.getValidity()) | ||
194 | + .setTreatmentCode(mCCMS.getTreatmentCode()), | ||
187 | mSubmitCallback); | 195 | mSubmitCallback); |
188 | } | 196 | } |
189 | Thread.currentThread().interrupt(); | 197 | Thread.currentThread().interrupt(); |
... | @@ -250,25 +258,25 @@ public class TelcoActivity extends Activity implements View.OnClickListener { | ... | @@ -250,25 +258,25 @@ public class TelcoActivity extends Activity implements View.OnClickListener { |
250 | errorActivatingDialog(); | 258 | errorActivatingDialog(); |
251 | }); | 259 | }); |
252 | 260 | ||
253 | - if (status == 1) { | 261 | +// if (status == 1) { |
254 | - new Thread(() -> { | 262 | +// new Thread(() -> { |
255 | - if (!Thread.currentThread().isInterrupted()) { | 263 | +// if (!Thread.currentThread().isInterrupted()) { |
256 | - WarplyManager.postEvent(new CosmotePostEventRequest() | 264 | +// WarplyManager.postEvent(new CosmotePostEventRequest() |
257 | - .setCommunicationUuid(mLoyalty.getSessionUUID()) | 265 | +// .setCommunicationUuid(mLoyalty.getSessionUUID()) |
258 | - .setUserMsisdn(mSender) | 266 | +// .setUserMsisdn(mSender) |
259 | - .setOfferAudienceLevel(mCCMS.getOfferAudienceLevel()) | 267 | +// .setOfferAudienceLevel(mCCMS.getOfferAudienceLevel()) |
260 | - .setUACIOfferTrackingCode(mCCMS.getUACIOfferTrackingCode()) | 268 | +// .setUACIOfferTrackingCode(mCCMS.getUACIOfferTrackingCode()) |
261 | - .setOfferCode1(mCCMS.getOfferCode1()) | 269 | +// .setOfferCode1(mCCMS.getOfferCode1()) |
262 | - .setScore(mCCMS.getScore()) | 270 | +// .setScore(mCCMS.getScore()) |
263 | - .setZone(mCCMS.getZone()) | 271 | +// .setZone(mCCMS.getZone()) |
264 | - .setWave(mCCMS.getWave()) | 272 | +// .setWave(mCCMS.getWave()) |
265 | - .setValidity(mCCMS.getValidity()) | 273 | +// .setValidity(mCCMS.getValidity()) |
266 | - .setTreatmentCode(mCCMS.getTreatmentCode()), | 274 | +// .setTreatmentCode(mCCMS.getTreatmentCode()), |
267 | - mPostCallback); | 275 | +// mPostCallback); |
268 | - } | 276 | +// } |
269 | - Thread.currentThread().interrupt(); | 277 | +// Thread.currentThread().interrupt(); |
270 | - }).start(); | 278 | +// }).start(); |
271 | - } | 279 | +// } |
272 | } | 280 | } |
273 | 281 | ||
274 | @Override | 282 | @Override |
... | @@ -277,16 +285,16 @@ public class TelcoActivity extends Activity implements View.OnClickListener { | ... | @@ -277,16 +285,16 @@ public class TelcoActivity extends Activity implements View.OnClickListener { |
277 | } | 285 | } |
278 | }; | 286 | }; |
279 | 287 | ||
280 | - private CallbackReceiver<JSONObject> mPostCallback = new CallbackReceiver<JSONObject>() { | 288 | +// private CallbackReceiver<JSONObject> mPostCallback = new CallbackReceiver<JSONObject>() { |
281 | - @Override | 289 | +// @Override |
282 | - public void onSuccess(JSONObject result) { | 290 | +// public void onSuccess(JSONObject result) { |
283 | - Thread.currentThread().interrupt(); | 291 | +// Thread.currentThread().interrupt(); |
284 | - } | 292 | +// } |
285 | - | 293 | +// |
286 | - @Override | 294 | +// @Override |
287 | - public void onFailure(int errorCode) { | 295 | +// public void onFailure(int errorCode) { |
288 | - WarpUtils.log("POST_EVENT_ERROR " + String.valueOf(errorCode)); | 296 | +// WarpUtils.log("POST_EVENT_ERROR " + String.valueOf(errorCode)); |
289 | - Thread.currentThread().interrupt(); | 297 | +// Thread.currentThread().interrupt(); |
290 | - } | 298 | +// } |
291 | - }; | 299 | +// }; |
292 | } | 300 | } | ... | ... |
... | @@ -49,6 +49,7 @@ import androidx.work.WorkManager; | ... | @@ -49,6 +49,7 @@ import androidx.work.WorkManager; |
49 | 49 | ||
50 | import org.greenrobot.eventbus.EventBus; | 50 | import org.greenrobot.eventbus.EventBus; |
51 | import org.greenrobot.eventbus.Subscribe; | 51 | import org.greenrobot.eventbus.Subscribe; |
52 | +import org.json.JSONObject; | ||
52 | 53 | ||
53 | import java.security.SecureRandom; | 54 | import java.security.SecureRandom; |
54 | import java.util.concurrent.ThreadLocalRandom; | 55 | import java.util.concurrent.ThreadLocalRandom; |
... | @@ -113,6 +114,12 @@ public class WarpViewActivity extends WarpBaseActivity { | ... | @@ -113,6 +114,12 @@ public class WarpViewActivity extends WarpBaseActivity { |
113 | } | 114 | } |
114 | 115 | ||
115 | @Override | 116 | @Override |
117 | + protected void onDestroy() { | ||
118 | + super.onDestroy(); | ||
119 | + WarpUtils.setWebviewParams(this, new JSONObject()); | ||
120 | + } | ||
121 | + | ||
122 | + @Override | ||
116 | public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) { | 123 | public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) { |
117 | if (keyCode == KeyEvent.KEYCODE_BACK) { | 124 | if (keyCode == KeyEvent.KEYCODE_BACK) { |
118 | if (mWarpView.canGoBack()) { | 125 | if (mWarpView.canGoBack()) { | ... | ... |
... | @@ -155,7 +155,7 @@ public class CosmotePostEventRequest { | ... | @@ -155,7 +155,7 @@ public class CosmotePostEventRequest { |
155 | * Call this to set how often the cached data will be updated. | 155 | * Call this to set how often the cached data will be updated. |
156 | * | 156 | * |
157 | * @param updateInterval The time that data will be cached | 157 | * @param updateInterval The time that data will be cached |
158 | - * @return WarplyConsumerRequest | 158 | + * @return CosmotePostEventRequest |
159 | */ | 159 | */ |
160 | public CosmotePostEventRequest setCacheUpdateInterval(long updateInterval) { | 160 | public CosmotePostEventRequest setCacheUpdateInterval(long updateInterval) { |
161 | 161 | ||
... | @@ -181,7 +181,7 @@ public class CosmotePostEventRequest { | ... | @@ -181,7 +181,7 @@ public class CosmotePostEventRequest { |
181 | * | 181 | * |
182 | * @param useCache <p>true - the Application is using Cache</p> | 182 | * @param useCache <p>true - the Application is using Cache</p> |
183 | * <p>false - the Application is not using Cache</p> | 183 | * <p>false - the Application is not using Cache</p> |
184 | - * @return WarplyConsumerRequest | 184 | + * @return CosmotePostEventRequest |
185 | */ | 185 | */ |
186 | public CosmotePostEventRequest setUseCache(boolean useCache) { | 186 | public CosmotePostEventRequest setUseCache(boolean useCache) { |
187 | 187 | ||
... | @@ -335,7 +335,7 @@ public class CosmotePostEventRequest { | ... | @@ -335,7 +335,7 @@ public class CosmotePostEventRequest { |
335 | } | 335 | } |
336 | 336 | ||
337 | public String getSignature() { | 337 | public String getSignature() { |
338 | - String signature = mFilters != null && mFilters.size() > 0 ? String.valueOf(mFilters.hashCode()) : "default_consumer_request"; | 338 | + String signature = mFilters != null && mFilters.size() > 0 ? String.valueOf(mFilters.hashCode()) : "default_cosmote_post_event_request"; |
339 | try { | 339 | try { |
340 | byte[] hash = MessageDigest.getInstance("SHA-256").digest(signature.getBytes("UTF-8")); | 340 | byte[] hash = MessageDigest.getInstance("SHA-256").digest(signature.getBytes("UTF-8")); |
341 | signature = Base64.encodeToString(hash, Base64.NO_WRAP); | 341 | signature = Base64.encodeToString(hash, Base64.NO_WRAP); | ... | ... |
... | @@ -2,6 +2,7 @@ package ly.warp.sdk.io.request; | ... | @@ -2,6 +2,7 @@ package ly.warp.sdk.io.request; |
2 | 2 | ||
3 | import android.util.Base64; | 3 | import android.util.Base64; |
4 | 4 | ||
5 | +import org.json.JSONArray; | ||
5 | import org.json.JSONException; | 6 | import org.json.JSONException; |
6 | import org.json.JSONObject; | 7 | import org.json.JSONObject; |
7 | 8 | ||
... | @@ -42,6 +43,7 @@ public class CosmoteSubmitOrderRequest { | ... | @@ -42,6 +43,7 @@ public class CosmoteSubmitOrderRequest { |
42 | private final String KEY_MINS_VALUE = "minsValue"; | 43 | private final String KEY_MINS_VALUE = "minsValue"; |
43 | private final String KEY_DATA_VALUE = "dataValue"; | 44 | private final String KEY_DATA_VALUE = "dataValue"; |
44 | private final String KEY_PROV_STEP_VALUE_MINS = "provStepValueMins"; | 45 | private final String KEY_PROV_STEP_VALUE_MINS = "provStepValueMins"; |
46 | + private final String KEY_PARAMETERS = "parameters"; | ||
45 | 47 | ||
46 | // =========================================================== | 48 | // =========================================================== |
47 | // Fields | 49 | // Fields |
... | @@ -63,6 +65,14 @@ public class CosmoteSubmitOrderRequest { | ... | @@ -63,6 +65,14 @@ public class CosmoteSubmitOrderRequest { |
63 | private String mMinsValue = ""; | 65 | private String mMinsValue = ""; |
64 | private String mDataValue = ""; | 66 | private String mDataValue = ""; |
65 | private String mProvStepValueMins = ""; | 67 | private String mProvStepValueMins = ""; |
68 | + private String mOfferAudienceLevel = ""; | ||
69 | + private String mUACIOfferTrackingCode = ""; | ||
70 | + private String mOfferCode1 = ""; | ||
71 | + private String mScore = ""; | ||
72 | + private String mZone = ""; | ||
73 | + private String mWave = ""; | ||
74 | + private String mValidity = ""; | ||
75 | + private String mTreatmentCode = ""; | ||
66 | 76 | ||
67 | // =========================================================== | 77 | // =========================================================== |
68 | // Constructor | 78 | // Constructor |
... | @@ -178,6 +188,46 @@ public class CosmoteSubmitOrderRequest { | ... | @@ -178,6 +188,46 @@ public class CosmoteSubmitOrderRequest { |
178 | return this; | 188 | return this; |
179 | } | 189 | } |
180 | 190 | ||
191 | + public CosmoteSubmitOrderRequest setOfferAudienceLevel(String offerAudienceLevel) { | ||
192 | + this.mOfferAudienceLevel = offerAudienceLevel; | ||
193 | + return this; | ||
194 | + } | ||
195 | + | ||
196 | + public CosmoteSubmitOrderRequest setUACIOfferTrackingCode(String uaciOfferTrackingCode) { | ||
197 | + this.mUACIOfferTrackingCode = uaciOfferTrackingCode; | ||
198 | + return this; | ||
199 | + } | ||
200 | + | ||
201 | + public CosmoteSubmitOrderRequest setOfferCode1(String offerCode1) { | ||
202 | + this.mOfferCode1 = offerCode1; | ||
203 | + return this; | ||
204 | + } | ||
205 | + | ||
206 | + public CosmoteSubmitOrderRequest setScore(String score) { | ||
207 | + this.mScore = score; | ||
208 | + return this; | ||
209 | + } | ||
210 | + | ||
211 | + public CosmoteSubmitOrderRequest setZone(String zone) { | ||
212 | + this.mZone = zone; | ||
213 | + return this; | ||
214 | + } | ||
215 | + | ||
216 | + public CosmoteSubmitOrderRequest setWave(String wave) { | ||
217 | + this.mWave = wave; | ||
218 | + return this; | ||
219 | + } | ||
220 | + | ||
221 | + public CosmoteSubmitOrderRequest setValidity(String validity) { | ||
222 | + this.mValidity = validity; | ||
223 | + return this; | ||
224 | + } | ||
225 | + | ||
226 | + public CosmoteSubmitOrderRequest setTreatmentCode(String treatmentCode) { | ||
227 | + this.mTreatmentCode = treatmentCode; | ||
228 | + return this; | ||
229 | + } | ||
230 | + | ||
181 | /** | 231 | /** |
182 | * Call this to get how often the cached data will be updated. | 232 | * Call this to get how often the cached data will be updated. |
183 | * | 233 | * |
... | @@ -191,7 +241,7 @@ public class CosmoteSubmitOrderRequest { | ... | @@ -191,7 +241,7 @@ public class CosmoteSubmitOrderRequest { |
191 | * Call this to set how often the cached data will be updated. | 241 | * Call this to set how often the cached data will be updated. |
192 | * | 242 | * |
193 | * @param updateInterval The time that data will be cached | 243 | * @param updateInterval The time that data will be cached |
194 | - * @return CosmoteSharingRequest | 244 | + * @return CosmoteSubmitOrderRequest |
195 | */ | 245 | */ |
196 | public CosmoteSubmitOrderRequest setCacheUpdateInterval(long updateInterval) { | 246 | public CosmoteSubmitOrderRequest setCacheUpdateInterval(long updateInterval) { |
197 | 247 | ||
... | @@ -217,7 +267,7 @@ public class CosmoteSubmitOrderRequest { | ... | @@ -217,7 +267,7 @@ public class CosmoteSubmitOrderRequest { |
217 | * | 267 | * |
218 | * @param useCache <p>true - the Application is using Cache</p> | 268 | * @param useCache <p>true - the Application is using Cache</p> |
219 | * <p>false - the Application is not using Cache</p> | 269 | * <p>false - the Application is not using Cache</p> |
220 | - * @return CosmoteSharingRequest | 270 | + * @return CosmoteSubmitOrderRequest |
221 | */ | 271 | */ |
222 | public CosmoteSubmitOrderRequest setUseCache(boolean useCache) { | 272 | public CosmoteSubmitOrderRequest setUseCache(boolean useCache) { |
223 | 273 | ||
... | @@ -257,6 +307,123 @@ public class CosmoteSubmitOrderRequest { | ... | @@ -257,6 +307,123 @@ public class CosmoteSubmitOrderRequest { |
257 | extraData.putOpt(KEY_MINS_VALUE, mMinsValue); | 307 | extraData.putOpt(KEY_MINS_VALUE, mMinsValue); |
258 | extraData.putOpt(KEY_DATA_VALUE, mDataValue); | 308 | extraData.putOpt(KEY_DATA_VALUE, mDataValue); |
259 | extraData.putOpt(KEY_PROV_STEP_VALUE_MINS, mProvStepValueMins); | 309 | extraData.putOpt(KEY_PROV_STEP_VALUE_MINS, mProvStepValueMins); |
310 | + extraData.putOpt("InteractiveChannel", "COSMOTE_OMNI"); | ||
311 | + extraData.putOpt("InteractionPoint", mZone); | ||
312 | + extraData.putOpt("Session_ID", mCommunicationUuid); | ||
313 | + extraData.putOpt("OfferAudienceLevel", mOfferAudienceLevel); | ||
314 | + extraData.putOpt("MSISDN", mOfferAudienceLevel.equals("msisdn") ? mUserMsisdn : ""); | ||
315 | + extraData.putOpt("GUID", ""); | ||
316 | + | ||
317 | + JSONArray parameters = new JSONArray(); | ||
318 | + JSONObject param1 = new JSONObject(); | ||
319 | + param1.putOpt("Name", "UACIOfferTrackingCode"); | ||
320 | + param1.putOpt("Value", mUACIOfferTrackingCode); | ||
321 | + param1.putOpt("Type", "string"); | ||
322 | + parameters.put(param1); | ||
323 | + | ||
324 | + JSONObject param2 = new JSONObject(); | ||
325 | + param2.putOpt("Name", "UACICustomLoggerTableName"); | ||
326 | + param2.putOpt("Value", "VW_WHITELIST"); | ||
327 | + param2.putOpt("Type", "string"); | ||
328 | + parameters.put(param2); | ||
329 | + | ||
330 | + JSONObject param3 = new JSONObject(); | ||
331 | + param3.putOpt("Name", "MSISDN"); | ||
332 | + param3.putOpt("Value", mUserMsisdn); | ||
333 | + param3.putOpt("Type", "string"); | ||
334 | + parameters.put(param3); | ||
335 | + | ||
336 | + JSONObject param4 = new JSONObject(); | ||
337 | + param4.putOpt("Name", "OFFERCODE1"); | ||
338 | + param4.putOpt("Value", mOfferCode1); | ||
339 | + param4.putOpt("Type", "string"); | ||
340 | + parameters.put(param4); | ||
341 | + | ||
342 | + JSONObject param5 = new JSONObject(); | ||
343 | + param5.putOpt("Name", "SCORE"); | ||
344 | + param5.putOpt("Value", mScore); | ||
345 | + param5.putOpt("Type", "INT"); | ||
346 | + parameters.put(param5); | ||
347 | + | ||
348 | + JSONObject param6 = new JSONObject(); | ||
349 | + param6.putOpt("Name", "PREDICATE"); | ||
350 | + param6.putOpt("Value", "0"); | ||
351 | + param6.putOpt("Type", "string"); | ||
352 | + parameters.put(param6); | ||
353 | + | ||
354 | + JSONObject param7 = new JSONObject(); | ||
355 | + param7.putOpt("Name", "ZONE"); | ||
356 | + param7.putOpt("Value", mZone); | ||
357 | + param7.putOpt("Type", "string"); | ||
358 | + parameters.put(param7); | ||
359 | + | ||
360 | + JSONObject param8 = new JSONObject(); | ||
361 | + param8.putOpt("Name", "APPLICATIONNAME"); | ||
362 | + param8.putOpt("Value", mZone); | ||
363 | + param8.putOpt("Type", "string"); | ||
364 | + parameters.put(param8); | ||
365 | + | ||
366 | + JSONObject param9 = new JSONObject(); | ||
367 | + param9.putOpt("Name", "Session_ID"); | ||
368 | + param9.putOpt("Value", mCommunicationUuid); | ||
369 | + param9.putOpt("Type", "string"); | ||
370 | + parameters.put(param9); | ||
371 | + | ||
372 | + JSONObject param10 = new JSONObject(); | ||
373 | + param10.putOpt("Name", "CAMPAIGN_CODE"); | ||
374 | + param10.putOpt("Value", "MCC_00006"); | ||
375 | + param10.putOpt("Type", "string"); | ||
376 | + parameters.put(param10); | ||
377 | + | ||
378 | + JSONObject param11 = new JSONObject(); | ||
379 | + param11.putOpt("Name", "CAMPAIGN_TYPE"); | ||
380 | + param11.putOpt("Value", "Inbound"); | ||
381 | + param11.putOpt("Type", "string"); | ||
382 | + parameters.put(param11); | ||
383 | + | ||
384 | + JSONObject param12 = new JSONObject(); | ||
385 | + param12.putOpt("Name", "UACIResponseTypeCode"); | ||
386 | + param12.putOpt("Value", "CON"); | ||
387 | + param12.putOpt("Type", "string"); | ||
388 | + parameters.put(param12); | ||
389 | + | ||
390 | + JSONObject param13 = new JSONObject(); | ||
391 | + param13.putOpt("Name", "CHANNEL"); | ||
392 | + param13.putOpt("Value", "ONE_APP"); | ||
393 | + param13.putOpt("Type", "string"); | ||
394 | + parameters.put(param13); | ||
395 | + | ||
396 | + JSONObject param14 = new JSONObject(); | ||
397 | + param14.putOpt("Name", "WAVE"); | ||
398 | + param14.putOpt("Value", mWave); | ||
399 | + param14.putOpt("Type", "string"); | ||
400 | + parameters.put(param14); | ||
401 | + | ||
402 | + JSONObject param15 = new JSONObject(); | ||
403 | + param15.putOpt("Name", "RESPONSECHANNEL"); | ||
404 | + param15.putOpt("Value", "ONE_APP"); | ||
405 | + param15.putOpt("Type", "string"); | ||
406 | + parameters.put(param15); | ||
407 | + | ||
408 | + JSONObject param16 = new JSONObject(); | ||
409 | + param16.putOpt("Name", "VALIDITY"); | ||
410 | + param16.putOpt("Value", mValidity); | ||
411 | + param16.putOpt("Type", "INT"); | ||
412 | + parameters.put(param16); | ||
413 | + | ||
414 | + JSONObject param17 = new JSONObject(); | ||
415 | + param17.putOpt("Name", "TREATMENT_CODE"); | ||
416 | + param17.putOpt("Value", mTreatmentCode); | ||
417 | + param17.putOpt("Type", "string"); | ||
418 | + parameters.put(param17); | ||
419 | + | ||
420 | + JSONObject param18 = new JSONObject(); | ||
421 | + param18.putOpt("Name", "EventName"); | ||
422 | + param18.putOpt("Value", "INTEREST_P"); | ||
423 | + param18.putOpt("Type", "string"); | ||
424 | + parameters.put(param18); | ||
425 | + | ||
426 | + extraData.putOpt(KEY_PARAMETERS, parameters); | ||
260 | 427 | ||
261 | extraJson.putOpt(KEY_EXTRA_DATA, extraData); | 428 | extraJson.putOpt(KEY_EXTRA_DATA, extraData); |
262 | bodyJsonObject.putOpt(KEY_MAPP, extraJson); | 429 | bodyJsonObject.putOpt(KEY_MAPP, extraJson); |
... | @@ -268,7 +435,7 @@ public class CosmoteSubmitOrderRequest { | ... | @@ -268,7 +435,7 @@ public class CosmoteSubmitOrderRequest { |
268 | } | 435 | } |
269 | 436 | ||
270 | public String getSignature() { | 437 | public String getSignature() { |
271 | - String signature = mFilters != null && mFilters.size() > 0 ? String.valueOf(mFilters.hashCode()) : "default_cosmote_sharing_request"; | 438 | + String signature = mFilters != null && mFilters.size() > 0 ? String.valueOf(mFilters.hashCode()) : "default_cosmote_submit_order_request"; |
272 | try { | 439 | try { |
273 | byte[] hash = MessageDigest.getInstance("SHA-256").digest(signature.getBytes("UTF-8")); | 440 | byte[] hash = MessageDigest.getInstance("SHA-256").digest(signature.getBytes("UTF-8")); |
274 | signature = Base64.encodeToString(hash, Base64.NO_WRAP); | 441 | signature = Base64.encodeToString(hash, Base64.NO_WRAP); | ... | ... |
1 | +package ly.warp.sdk.io.request; | ||
2 | + | ||
3 | +import android.util.Base64; | ||
4 | + | ||
5 | +import org.json.JSONException; | ||
6 | +import org.json.JSONObject; | ||
7 | + | ||
8 | +import java.io.UnsupportedEncodingException; | ||
9 | +import java.security.MessageDigest; | ||
10 | +import java.security.NoSuchAlgorithmException; | ||
11 | +import java.util.HashMap; | ||
12 | + | ||
13 | +import ly.warp.sdk.utils.constants.WarpConstants; | ||
14 | + | ||
15 | +/** | ||
16 | + * Created by Panagiotis Triantafyllou on 02-Aug-22. | ||
17 | + */ | ||
18 | + | ||
19 | +public class PacingCalculateRequest { | ||
20 | + | ||
21 | + // =========================================================== | ||
22 | + // Constants | ||
23 | + // =========================================================== | ||
24 | + | ||
25 | + private final String KEY_MAPP = "consumer_data"; | ||
26 | + private final String KEY_ACTION = "action"; | ||
27 | + private final String KEY_ACTION_VALUE = "integration"; | ||
28 | + private final String KEY_METHOD = "method"; | ||
29 | + private final String KEY_METHOD_VALUE = "steps"; | ||
30 | + private final String KEY_OPERATION = "operation"; | ||
31 | + private final String KEY_OPERATION_VALUE = "add"; | ||
32 | + private final String KEY_DATA = "data"; | ||
33 | + | ||
34 | + // =========================================================== | ||
35 | + // Fields | ||
36 | + // =========================================================== | ||
37 | + | ||
38 | + private HashMap<String, String> mFilters; | ||
39 | + private long mCacheUpdateInterval = 0; | ||
40 | + private String mDate = ""; | ||
41 | + private int mCounter = 0; | ||
42 | + | ||
43 | + // =========================================================== | ||
44 | + // Constructor | ||
45 | + // =========================================================== | ||
46 | + | ||
47 | + /** | ||
48 | + * Default constructor of WarplyConsumerRequest, initializes an empty filters HashMap | ||
49 | + */ | ||
50 | + public PacingCalculateRequest() { | ||
51 | + mFilters = new HashMap<>(); | ||
52 | + } | ||
53 | + | ||
54 | + public PacingCalculateRequest(PacingCalculateRequest copy) { | ||
55 | + if (copy != null) { | ||
56 | + this.mFilters = copy.mFilters; | ||
57 | + this.mCacheUpdateInterval = copy.mCacheUpdateInterval; | ||
58 | + } | ||
59 | + } | ||
60 | + | ||
61 | + // =========================================================== | ||
62 | + // Methods for/from SuperClass/Interfaces | ||
63 | + // =========================================================== | ||
64 | + | ||
65 | + @Override | ||
66 | + public boolean equals(Object object) { | ||
67 | + if (object instanceof PacingCalculateRequest) { | ||
68 | + PacingCalculateRequest other = (PacingCalculateRequest) object; | ||
69 | + return other == this || (this.mFilters == other.mFilters || (this.mFilters != null && this.mFilters.equals(other.mFilters))); | ||
70 | + } | ||
71 | + return false; | ||
72 | + } | ||
73 | + | ||
74 | + @Override | ||
75 | + public int hashCode() { | ||
76 | + return mFilters.hashCode(); | ||
77 | + } | ||
78 | + | ||
79 | + // =========================================================== | ||
80 | + // Methods | ||
81 | + // =========================================================== | ||
82 | + | ||
83 | + // =========================================================== | ||
84 | + // Getter & Setter | ||
85 | + // =========================================================== | ||
86 | + | ||
87 | + public PacingCalculateRequest setDate(String date) { | ||
88 | + this.mDate = date; | ||
89 | + return this; | ||
90 | + } | ||
91 | + | ||
92 | + public PacingCalculateRequest setCounter(int counter) { | ||
93 | + this.mCounter = counter; | ||
94 | + return this; | ||
95 | + } | ||
96 | + | ||
97 | + /** | ||
98 | + * Call this to get how often the cached data will be updated. | ||
99 | + * | ||
100 | + * @return mCacheUpdateInterval | ||
101 | + */ | ||
102 | + public long getCacheUpdateInterval() { | ||
103 | + return mCacheUpdateInterval; | ||
104 | + } | ||
105 | + | ||
106 | + /** | ||
107 | + * Call this to set how often the cached data will be updated. | ||
108 | + * | ||
109 | + * @param updateInterval The time that data will be cached | ||
110 | + * @return PacingCalculateRequest | ||
111 | + */ | ||
112 | + public PacingCalculateRequest setCacheUpdateInterval(long updateInterval) { | ||
113 | + | ||
114 | + this.mCacheUpdateInterval = updateInterval; | ||
115 | + if (mCacheUpdateInterval < 0) { | ||
116 | + mCacheUpdateInterval = 0; | ||
117 | + } | ||
118 | + return this; | ||
119 | + } | ||
120 | + | ||
121 | + /** | ||
122 | + * Call this to check if the Application uses Cache | ||
123 | + * | ||
124 | + * @return <p>true - the Application is using Cache</p> | ||
125 | + * <p>false - the Application is not using Cache</p> | ||
126 | + */ | ||
127 | + public boolean isUseCache() { | ||
128 | + return mCacheUpdateInterval > 0; | ||
129 | + } | ||
130 | + | ||
131 | + /** | ||
132 | + * Call this to check whether the cached data need to be updated | ||
133 | + * | ||
134 | + * @param useCache <p>true - the Application is using Cache</p> | ||
135 | + * <p>false - the Application is not using Cache</p> | ||
136 | + * @return PacingCalculateRequest | ||
137 | + */ | ||
138 | + public PacingCalculateRequest setUseCache(boolean useCache) { | ||
139 | + | ||
140 | + if (useCache) { | ||
141 | + mCacheUpdateInterval = mCacheUpdateInterval > 0 ? mCacheUpdateInterval | ||
142 | + : WarpConstants.INBOX_UPDATE_INTERVAL; | ||
143 | + } else { | ||
144 | + mCacheUpdateInterval = 0; | ||
145 | + } | ||
146 | + return this; | ||
147 | + } | ||
148 | + | ||
149 | + /** | ||
150 | + * Call this to build the offers Json object | ||
151 | + * | ||
152 | + * @return bodyJsonObject | ||
153 | + */ | ||
154 | + public JSONObject toJson() { | ||
155 | + JSONObject bodyJsonObject = new JSONObject(); | ||
156 | + try { | ||
157 | + JSONObject extraJson = new JSONObject(); | ||
158 | + extraJson.putOpt(KEY_ACTION, KEY_ACTION_VALUE); | ||
159 | + extraJson.putOpt(KEY_METHOD, KEY_METHOD_VALUE); | ||
160 | + extraJson.putOpt(KEY_OPERATION, KEY_OPERATION_VALUE); | ||
161 | + | ||
162 | + JSONObject data = new JSONObject(); | ||
163 | + data.putOpt("event", "steps"); | ||
164 | + data.putOpt("type", "counter"); | ||
165 | + data.putOpt("counter", mCounter); | ||
166 | + data.putOpt("date", mDate); | ||
167 | + | ||
168 | + extraJson.putOpt(KEY_DATA, data); | ||
169 | + bodyJsonObject.putOpt(KEY_MAPP, extraJson); | ||
170 | + } catch (JSONException e) { | ||
171 | + if (WarpConstants.DEBUG) | ||
172 | + e.printStackTrace(); | ||
173 | + } | ||
174 | + return bodyJsonObject; | ||
175 | + } | ||
176 | + | ||
177 | + public String getSignature() { | ||
178 | + String signature = mFilters != null && mFilters.size() > 0 ? String.valueOf(mFilters.hashCode()) : "default_pacing_calculate_request"; | ||
179 | + try { | ||
180 | + byte[] hash = MessageDigest.getInstance("SHA-256").digest(signature.getBytes("UTF-8")); | ||
181 | + signature = Base64.encodeToString(hash, Base64.NO_WRAP); | ||
182 | + } catch (NullPointerException | NoSuchAlgorithmException | ||
183 | + | UnsupportedEncodingException e) { | ||
184 | + e.printStackTrace(); | ||
185 | + } | ||
186 | + return signature; | ||
187 | + } | ||
188 | +} |
1 | +package ly.warp.sdk.services; | ||
2 | + | ||
3 | +import android.app.Service; | ||
4 | +import android.content.Context; | ||
5 | +import android.content.Intent; | ||
6 | +import android.hardware.Sensor; | ||
7 | +import android.hardware.SensorEvent; | ||
8 | +import android.hardware.SensorEventListener; | ||
9 | +import android.hardware.SensorManager; | ||
10 | +import android.os.IBinder; | ||
11 | + | ||
12 | +import androidx.annotation.NonNull; | ||
13 | +import androidx.annotation.Nullable; | ||
14 | +import androidx.work.Worker; | ||
15 | +import androidx.work.WorkerParameters; | ||
16 | + | ||
17 | +import org.greenrobot.eventbus.EventBus; | ||
18 | +import org.json.JSONObject; | ||
19 | + | ||
20 | +import java.text.ParseException; | ||
21 | +import java.text.SimpleDateFormat; | ||
22 | +import java.util.Date; | ||
23 | +import java.util.Locale; | ||
24 | + | ||
25 | +import ly.warp.sdk.io.callbacks.CallbackReceiver; | ||
26 | +import ly.warp.sdk.io.callbacks.WarplyHealthCallback; | ||
27 | +import ly.warp.sdk.io.models.ContexualEventModel; | ||
28 | +import ly.warp.sdk.io.request.PacingCalculateRequest; | ||
29 | +import ly.warp.sdk.utils.WarpUtils; | ||
30 | +import ly.warp.sdk.utils.managers.WarplyEventBusManager; | ||
31 | +import ly.warp.sdk.utils.managers.WarplyHealthManager; | ||
32 | +import ly.warp.sdk.utils.managers.WarplyManager; | ||
33 | + | ||
34 | +/** | ||
35 | + * Created by Panagiotis Triantafyllou on 03/Aug/2022. | ||
36 | + */ | ||
37 | +public class WarplyHealthService extends /*Worker*/ Service implements SensorEventListener { | ||
38 | + | ||
39 | + // =========================================================== | ||
40 | + // Constants | ||
41 | + // =========================================================== | ||
42 | + | ||
43 | + // =========================================================== | ||
44 | + // Fields | ||
45 | + // =========================================================== | ||
46 | + | ||
47 | + private Context mContext; | ||
48 | + private SensorManager mSensorManager; | ||
49 | + private Sensor mSensor; | ||
50 | + private int mSteps = 0; | ||
51 | + private final int ACCEL_RING_SIZE = 50; | ||
52 | + private final int VEL_RING_SIZE = 10; | ||
53 | + // change this threshold according to your sensitivity preferences | ||
54 | + private final float STEP_THRESHOLD = 20f; | ||
55 | + private final int STEP_DELAY_NS = 250000000; | ||
56 | + private int accelRingCounter = 0; | ||
57 | + private float[] accelRingX = new float[ACCEL_RING_SIZE]; | ||
58 | + private float[] accelRingY = new float[ACCEL_RING_SIZE]; | ||
59 | + private float[] accelRingZ = new float[ACCEL_RING_SIZE]; | ||
60 | + private int velRingCounter = 0; | ||
61 | + private float[] velRing = new float[VEL_RING_SIZE]; | ||
62 | + private long lastStepTimeNs = 0; | ||
63 | + private float oldVelocityEstimate = 0; | ||
64 | + // if we want to send the steps back to an activity/fragment/service etc | ||
65 | +// private static WarplyHealthCallback mHealthCallback; | ||
66 | + | ||
67 | + // =========================================================== | ||
68 | + // Contructors | ||
69 | + // =========================================================== | ||
70 | + | ||
71 | +// public WarplyHealthService(@NonNull Context context, @NonNull WorkerParameters workerParams) { | ||
72 | +// super(context, workerParams); | ||
73 | +// | ||
74 | +// mContext = context; | ||
75 | +// mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); | ||
76 | +// mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); | ||
77 | +// registerStepSensor(); | ||
78 | +// } | ||
79 | + | ||
80 | + // =========================================================== | ||
81 | + // Methods for/from SuperClass/Interfaces | ||
82 | + // =========================================================== | ||
83 | + | ||
84 | + | ||
85 | + @Override | ||
86 | + public void onCreate() { | ||
87 | + super.onCreate(); | ||
88 | + | ||
89 | + mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); | ||
90 | + mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); | ||
91 | + registerStepSensor(); | ||
92 | + } | ||
93 | + | ||
94 | + @Override | ||
95 | + public int onStartCommand(Intent intent, int flags, int startId) { | ||
96 | + new Thread( | ||
97 | + () -> { | ||
98 | + while (true) { | ||
99 | + sendSteps(); | ||
100 | + try { | ||
101 | + Thread.sleep(10000); | ||
102 | + } catch (InterruptedException e) { | ||
103 | + e.printStackTrace(); | ||
104 | + } | ||
105 | + } | ||
106 | + } | ||
107 | + ).start(); | ||
108 | + | ||
109 | + return super.onStartCommand(intent, flags, startId); | ||
110 | + } | ||
111 | + | ||
112 | + @Override | ||
113 | + public void onDestroy() { | ||
114 | + super.onDestroy(); | ||
115 | + | ||
116 | + unregisterStepSensor(); | ||
117 | + } | ||
118 | + | ||
119 | + @Nullable | ||
120 | + @Override | ||
121 | + public IBinder onBind(Intent intent) { | ||
122 | + return null; | ||
123 | + } | ||
124 | + | ||
125 | +// @NonNull | ||
126 | +// @Override | ||
127 | +// public Result doWork() { | ||
128 | +// sendSteps(); | ||
129 | +// return Result.success(); | ||
130 | +// } | ||
131 | + | ||
132 | +// @Override | ||
133 | +// public void onStopped() { | ||
134 | +// super.onStopped(); | ||
135 | +// | ||
136 | +// unregisterStepSensor(); | ||
137 | +// | ||
138 | +// if (WarpUtils.getStepsCounter(mContext) > 0) { | ||
139 | +// sendSteps(); | ||
140 | +// } | ||
141 | +// } | ||
142 | + | ||
143 | + @Override | ||
144 | + public void onSensorChanged(SensorEvent sensorEvent) { | ||
145 | + if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { | ||
146 | + updateSteps( | ||
147 | + sensorEvent.timestamp, | ||
148 | + sensorEvent.values[0], | ||
149 | + sensorEvent.values[1], | ||
150 | + sensorEvent.values[2]); | ||
151 | + } | ||
152 | + } | ||
153 | + | ||
154 | + @Override | ||
155 | + public void onAccuracyChanged(Sensor sensor, int i) { | ||
156 | + | ||
157 | + } | ||
158 | + | ||
159 | + // =========================================================== | ||
160 | + // Methods | ||
161 | + // =========================================================== | ||
162 | + | ||
163 | + public void registerStepSensor() { | ||
164 | + mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME); | ||
165 | + } | ||
166 | + | ||
167 | + public void unregisterStepSensor() { | ||
168 | + mSensorManager.unregisterListener(this); | ||
169 | + } | ||
170 | + | ||
171 | + private void updateSteps(long timeNs, float x, float y, float z) { | ||
172 | + float[] currentAccel = new float[3]; | ||
173 | + currentAccel[0] = x; | ||
174 | + currentAccel[1] = y; | ||
175 | + currentAccel[2] = z; | ||
176 | + | ||
177 | + // First step is to update our guess of where the global z vector is. | ||
178 | + accelRingCounter++; | ||
179 | + accelRingX[accelRingCounter % ACCEL_RING_SIZE] = currentAccel[0]; | ||
180 | + accelRingY[accelRingCounter % ACCEL_RING_SIZE] = currentAccel[1]; | ||
181 | + accelRingZ[accelRingCounter % ACCEL_RING_SIZE] = currentAccel[2]; | ||
182 | + | ||
183 | + float[] worldZ = new float[3]; | ||
184 | + worldZ[0] = sum(accelRingX) / Math.min(accelRingCounter, ACCEL_RING_SIZE); | ||
185 | + worldZ[1] = sum(accelRingY) / Math.min(accelRingCounter, ACCEL_RING_SIZE); | ||
186 | + worldZ[2] = sum(accelRingZ) / Math.min(accelRingCounter, ACCEL_RING_SIZE); | ||
187 | + | ||
188 | + float normalization_factor = norm(worldZ); | ||
189 | + | ||
190 | + worldZ[0] = worldZ[0] / normalization_factor; | ||
191 | + worldZ[1] = worldZ[1] / normalization_factor; | ||
192 | + worldZ[2] = worldZ[2] / normalization_factor; | ||
193 | + | ||
194 | + float currentZ = dot(worldZ, currentAccel) - normalization_factor; | ||
195 | + velRingCounter++; | ||
196 | + velRing[velRingCounter % VEL_RING_SIZE] = currentZ; | ||
197 | + | ||
198 | + float velocityEstimate = sum(velRing); | ||
199 | + | ||
200 | + if (velocityEstimate > STEP_THRESHOLD | ||
201 | + && oldVelocityEstimate <= STEP_THRESHOLD | ||
202 | + && (timeNs - lastStepTimeNs > STEP_DELAY_NS)) { | ||
203 | + mSteps++; | ||
204 | + WarpUtils.setStepsCounter(mContext, mSteps); | ||
205 | + | ||
206 | + // if we want to send the steps back to an activity/fragment/service etc | ||
207 | +// mHealthCallback.onStepCount(mSteps); | ||
208 | + lastStepTimeNs = timeNs; | ||
209 | + } | ||
210 | + oldVelocityEstimate = velocityEstimate; | ||
211 | + } | ||
212 | + | ||
213 | + private float sum(float[] array) { | ||
214 | + float retval = 0; | ||
215 | + for (float v : array) { | ||
216 | + retval += v; | ||
217 | + } | ||
218 | + return retval; | ||
219 | + } | ||
220 | + | ||
221 | + private float[] cross(float[] arrayA, float[] arrayB) { | ||
222 | + float[] retArray = new float[3]; | ||
223 | + retArray[0] = arrayA[1] * arrayB[2] - arrayA[2] * arrayB[1]; | ||
224 | + retArray[1] = arrayA[2] * arrayB[0] - arrayA[0] * arrayB[2]; | ||
225 | + retArray[2] = arrayA[0] * arrayB[1] - arrayA[1] * arrayB[0]; | ||
226 | + return retArray; | ||
227 | + } | ||
228 | + | ||
229 | + private float norm(float[] array) { | ||
230 | + float retval = 0; | ||
231 | + for (float v : array) { | ||
232 | + retval += v * v; | ||
233 | + } | ||
234 | + return (float) Math.sqrt(retval); | ||
235 | + } | ||
236 | + | ||
237 | + private float dot(float[] a, float[] b) { | ||
238 | + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; | ||
239 | + } | ||
240 | + | ||
241 | + private float[] normalize(float[] a) { | ||
242 | + float[] retval = new float[a.length]; | ||
243 | + float norm = norm(a); | ||
244 | + for (int i = 0; i < a.length; i++) { | ||
245 | + retval[i] = a[i] / norm; | ||
246 | + } | ||
247 | + return retval; | ||
248 | + } | ||
249 | + | ||
250 | + private void sendSteps() { | ||
251 | + String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefault()).format(new Date()); | ||
252 | + | ||
253 | + WarplyManager.setPacingDetails(new PacingCalculateRequest() | ||
254 | + .setCounter(WarpUtils.getStepsCounter(mContext)) | ||
255 | + .setDate(date), | ||
256 | + new CallbackReceiver<JSONObject>() { | ||
257 | + @Override | ||
258 | + public void onSuccess(JSONObject result) { | ||
259 | + WarpUtils.log("Warply Health Service success"); | ||
260 | + int status = result.optInt("status", 2); | ||
261 | + if (status == 1) { | ||
262 | + mSteps = 0; | ||
263 | + WarpUtils.setStepsCounter(mContext, 0); | ||
264 | + } | ||
265 | + } | ||
266 | + | ||
267 | + @Override | ||
268 | + public void onFailure(int errorCode) { | ||
269 | + WarpUtils.log("Warply Health Service error: " + String.valueOf(errorCode)); | ||
270 | + } | ||
271 | + }); | ||
272 | + } | ||
273 | +} |
... | @@ -133,6 +133,10 @@ public class WarpUtils { | ... | @@ -133,6 +133,10 @@ public class WarpUtils { |
133 | + "more_popup"; | 133 | + "more_popup"; |
134 | private static final String PREFERENCES_KEY_USER_TAG = PREFERENCES_PREFIX | 134 | private static final String PREFERENCES_KEY_USER_TAG = PREFERENCES_PREFIX |
135 | + "user_badge"; | 135 | + "user_badge"; |
136 | + private static final String PREFERENCES_KEY_WEBVIEW_PARAMS = PREFERENCES_PREFIX | ||
137 | + + "webview_params"; | ||
138 | + private static final String PREFERENCES_STEPS_COUNTER = PREFERENCES_PREFIX | ||
139 | + + "steps_counter"; | ||
136 | 140 | ||
137 | private static SharedPreferences _prefs; | 141 | private static SharedPreferences _prefs; |
138 | 142 | ||
... | @@ -586,6 +590,28 @@ public class WarpUtils { | ... | @@ -586,6 +590,28 @@ public class WarpUtils { |
586 | editor.apply(); | 590 | editor.apply(); |
587 | } | 591 | } |
588 | 592 | ||
593 | + public static void setWebviewParams(Context context, JSONObject params) { | ||
594 | + SharedPreferences.Editor editor = getPreferences(context).edit(); | ||
595 | + editor.putString(PREFERENCES_KEY_WEBVIEW_PARAMS, params.toString()); | ||
596 | + editor.apply(); | ||
597 | + } | ||
598 | + | ||
599 | + public static String getWebviewParams(Context context) { | ||
600 | + SharedPreferences prefs = getPreferences(context); | ||
601 | + return prefs.getString(PREFERENCES_KEY_WEBVIEW_PARAMS, ""); | ||
602 | + } | ||
603 | + | ||
604 | + public static void setStepsCounter(Context context, int counter) { | ||
605 | + SharedPreferences.Editor editor = getPreferences(context).edit(); | ||
606 | + editor.putInt(PREFERENCES_STEPS_COUNTER, counter); | ||
607 | + editor.apply(); | ||
608 | + } | ||
609 | + | ||
610 | + public static int getStepsCounter(Context context) { | ||
611 | + SharedPreferences prefs = getPreferences(context); | ||
612 | + return prefs.getInt(PREFERENCES_STEPS_COUNTER, 0); | ||
613 | + } | ||
614 | + | ||
589 | public static JSONObject getDeviceInfoObject(Context context) { | 615 | public static JSONObject getDeviceInfoObject(Context context) { |
590 | SharedPreferences prefs = getPreferences(context); | 616 | SharedPreferences prefs = getPreferences(context); |
591 | try { | 617 | try { | ... | ... |
This diff is collapsed. Click to expand it.
... | @@ -127,8 +127,8 @@ public class WarplyHealthManager implements SensorEventListener { | ... | @@ -127,8 +127,8 @@ public class WarplyHealthManager implements SensorEventListener { |
127 | if (velocityEstimate > STEP_THRESHOLD | 127 | if (velocityEstimate > STEP_THRESHOLD |
128 | && oldVelocityEstimate <= STEP_THRESHOLD | 128 | && oldVelocityEstimate <= STEP_THRESHOLD |
129 | && (timeNs - lastStepTimeNs > STEP_DELAY_NS)) { | 129 | && (timeNs - lastStepTimeNs > STEP_DELAY_NS)) { |
130 | - //TODO: if we want to send the steps back to an activity/fragment/service etc | ||
131 | mSteps++; | 130 | mSteps++; |
131 | + // if we want to send the steps back to an activity/fragment/service etc | ||
132 | mHealthCallback.onStepCount(mSteps); | 132 | mHealthCallback.onStepCount(mSteps); |
133 | lastStepTimeNs = timeNs; | 133 | lastStepTimeNs = timeNs; |
134 | } | 134 | } | ... | ... |
... | @@ -30,6 +30,8 @@ import org.json.JSONException; | ... | @@ -30,6 +30,8 @@ import org.json.JSONException; |
30 | import org.json.JSONObject; | 30 | import org.json.JSONObject; |
31 | 31 | ||
32 | import java.util.ArrayList; | 32 | import java.util.ArrayList; |
33 | +import java.util.Collections; | ||
34 | +import java.util.Comparator; | ||
33 | 35 | ||
34 | import ly.warp.sdk.Warply; | 36 | import ly.warp.sdk.Warply; |
35 | import ly.warp.sdk.db.WarplyDBHelper; | 37 | import ly.warp.sdk.db.WarplyDBHelper; |
... | @@ -78,6 +80,7 @@ import ly.warp.sdk.io.request.CosmotePostEventRequest; | ... | @@ -78,6 +80,7 @@ import ly.warp.sdk.io.request.CosmotePostEventRequest; |
78 | import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest; | 80 | import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest; |
79 | import ly.warp.sdk.io.request.CosmoteSharingRequest; | 81 | import ly.warp.sdk.io.request.CosmoteSharingRequest; |
80 | import ly.warp.sdk.io.request.CosmoteSubmitOrderRequest; | 82 | import ly.warp.sdk.io.request.CosmoteSubmitOrderRequest; |
83 | +import ly.warp.sdk.io.request.PacingCalculateRequest; | ||
81 | import ly.warp.sdk.io.request.PacingDetailsRequest; | 84 | import ly.warp.sdk.io.request.PacingDetailsRequest; |
82 | import ly.warp.sdk.io.request.WarplyAddAddressRequest; | 85 | import ly.warp.sdk.io.request.WarplyAddAddressRequest; |
83 | import ly.warp.sdk.io.request.WarplyAddCardRequest; | 86 | import ly.warp.sdk.io.request.WarplyAddCardRequest; |
... | @@ -1371,6 +1374,7 @@ public class WarplyManager { | ... | @@ -1371,6 +1374,7 @@ public class WarplyManager { |
1371 | @Override | 1374 | @Override |
1372 | public void onSuccess(CampaignList result) { | 1375 | public void onSuccess(CampaignList result) { |
1373 | mNewCampaignList.addAll(result); | 1376 | mNewCampaignList.addAll(result); |
1377 | + Collections.sort(mNewCampaignList, (obj1, obj2) -> Integer.compare(obj1.getSorting(), obj2.getSorting())); | ||
1374 | CampaignList campaignLoyaltyList = new CampaignList(); | 1378 | CampaignList campaignLoyaltyList = new CampaignList(); |
1375 | campaignLoyaltyList.clear(); | 1379 | campaignLoyaltyList.clear(); |
1376 | for (Campaign camp : mNewCampaignList) { | 1380 | for (Campaign camp : mNewCampaignList) { |
... | @@ -2301,7 +2305,24 @@ public class WarplyManager { | ... | @@ -2301,7 +2305,24 @@ public class WarplyManager { |
2301 | 2305 | ||
2302 | @Override | 2306 | @Override |
2303 | public void onFailure(int errorCode) { | 2307 | public void onFailure(int errorCode) { |
2304 | - receiver.onFailure(errorCode); | 2308 | + if (errorCode == 401) { |
2309 | + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() { | ||
2310 | + @Override | ||
2311 | + public void onSuccess(JSONObject result) { | ||
2312 | + int status = result.optInt("status", 2); | ||
2313 | + if (status == 1) | ||
2314 | + submitOrder(request, receiver); | ||
2315 | + else | ||
2316 | + receiver.onFailure(status); | ||
2317 | + } | ||
2318 | + | ||
2319 | + @Override | ||
2320 | + public void onFailure(int errorCode) { | ||
2321 | + receiver.onFailure(errorCode); | ||
2322 | + } | ||
2323 | + }); | ||
2324 | + } else | ||
2325 | + receiver.onFailure(errorCode); | ||
2305 | } | 2326 | } |
2306 | }); | 2327 | }); |
2307 | } | 2328 | } |
... | @@ -2359,7 +2380,63 @@ public class WarplyManager { | ... | @@ -2359,7 +2380,63 @@ public class WarplyManager { |
2359 | 2380 | ||
2360 | @Override | 2381 | @Override |
2361 | public void onFailure(int errorCode) { | 2382 | public void onFailure(int errorCode) { |
2362 | - receiver.onFailure(errorCode); | 2383 | + if (errorCode == 401) { |
2384 | + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() { | ||
2385 | + @Override | ||
2386 | + public void onSuccess(JSONObject result) { | ||
2387 | + int status = result.optInt("status", 2); | ||
2388 | + if (status == 1) | ||
2389 | + postEvent(request, receiver); | ||
2390 | + else | ||
2391 | + receiver.onFailure(status); | ||
2392 | + } | ||
2393 | + | ||
2394 | + @Override | ||
2395 | + public void onFailure(int errorCode) { | ||
2396 | + receiver.onFailure(errorCode); | ||
2397 | + } | ||
2398 | + }); | ||
2399 | + } else | ||
2400 | + receiver.onFailure(errorCode); | ||
2401 | + } | ||
2402 | + }); | ||
2403 | + } | ||
2404 | + | ||
2405 | + public static void setPacingDetails(PacingCalculateRequest request, final CallbackReceiver<JSONObject> receiver) { | ||
2406 | + WarpUtils.log("************* WARPLY Post Event Request ********************"); | ||
2407 | + WarpUtils.log("[WARP Trace] WARPLY Post Event Request is active"); | ||
2408 | + WarpUtils.log("**************************************************"); | ||
2409 | + | ||
2410 | + Warply.postReceiveMicroappData(true, "context", request.toJson(), new CallbackReceiver<JSONObject>() { | ||
2411 | + @Override | ||
2412 | + public void onSuccess(JSONObject result) { | ||
2413 | + int status = result.optInt("status", 2); | ||
2414 | + if (status == 1) { | ||
2415 | + receiver.onSuccess(result); | ||
2416 | + } else | ||
2417 | + receiver.onFailure(status); | ||
2418 | + } | ||
2419 | + | ||
2420 | + @Override | ||
2421 | + public void onFailure(int errorCode) { | ||
2422 | + if (errorCode == 401) { | ||
2423 | + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() { | ||
2424 | + @Override | ||
2425 | + public void onSuccess(JSONObject result) { | ||
2426 | + int status = result.optInt("status", 2); | ||
2427 | + if (status == 1) | ||
2428 | + setPacingDetails(request, receiver); | ||
2429 | + else | ||
2430 | + receiver.onFailure(status); | ||
2431 | + } | ||
2432 | + | ||
2433 | + @Override | ||
2434 | + public void onFailure(int errorCode) { | ||
2435 | + receiver.onFailure(errorCode); | ||
2436 | + } | ||
2437 | + }); | ||
2438 | + } else | ||
2439 | + receiver.onFailure(errorCode); | ||
2363 | } | 2440 | } |
2364 | }); | 2441 | }); |
2365 | } | 2442 | } | ... | ... |
... | @@ -35,13 +35,8 @@ import android.content.pm.ApplicationInfo; | ... | @@ -35,13 +35,8 @@ import android.content.pm.ApplicationInfo; |
35 | import android.net.Uri; | 35 | import android.net.Uri; |
36 | import android.net.http.SslError; | 36 | import android.net.http.SslError; |
37 | import android.os.Build; | 37 | import android.os.Build; |
38 | - | ||
39 | -import androidx.core.content.ContextCompat; | ||
40 | -import androidx.work.WorkManager; | ||
41 | - | ||
42 | import android.text.TextUtils; | 38 | import android.text.TextUtils; |
43 | import android.util.AttributeSet; | 39 | import android.util.AttributeSet; |
44 | -import android.util.Log; | ||
45 | import android.webkit.GeolocationPermissions.Callback; | 40 | import android.webkit.GeolocationPermissions.Callback; |
46 | import android.webkit.JavascriptInterface; | 41 | import android.webkit.JavascriptInterface; |
47 | import android.webkit.SslErrorHandler; | 42 | import android.webkit.SslErrorHandler; |
... | @@ -51,6 +46,10 @@ import android.webkit.WebView; | ... | @@ -51,6 +46,10 @@ import android.webkit.WebView; |
51 | import android.webkit.WebViewClient; | 46 | import android.webkit.WebViewClient; |
52 | import android.widget.Toast; | 47 | import android.widget.Toast; |
53 | 48 | ||
49 | +import androidx.core.content.ContextCompat; | ||
50 | +import androidx.work.PeriodicWorkRequest; | ||
51 | +import androidx.work.WorkManager; | ||
52 | + | ||
54 | import org.greenrobot.eventbus.EventBus; | 53 | import org.greenrobot.eventbus.EventBus; |
55 | import org.json.JSONArray; | 54 | import org.json.JSONArray; |
56 | import org.json.JSONException; | 55 | import org.json.JSONException; |
... | @@ -61,14 +60,13 @@ import java.net.URLDecoder; | ... | @@ -61,14 +60,13 @@ import java.net.URLDecoder; |
61 | import java.util.HashMap; | 60 | import java.util.HashMap; |
62 | import java.util.LinkedHashMap; | 61 | import java.util.LinkedHashMap; |
63 | import java.util.Map; | 62 | import java.util.Map; |
63 | +import java.util.concurrent.TimeUnit; | ||
64 | 64 | ||
65 | import ly.warp.sdk.Warply; | 65 | import ly.warp.sdk.Warply; |
66 | import ly.warp.sdk.io.models.CouponEventModel; | 66 | import ly.warp.sdk.io.models.CouponEventModel; |
67 | import ly.warp.sdk.io.models.QuestionnaireEventModel; | 67 | import ly.warp.sdk.io.models.QuestionnaireEventModel; |
68 | -import ly.warp.sdk.io.models.WarplyPacingCardEventModel; | ||
69 | -import ly.warp.sdk.io.models.WarplyPacingCardServiceEnabledModel; | ||
70 | import ly.warp.sdk.io.models.WarplyPacingEventModel; | 68 | import ly.warp.sdk.io.models.WarplyPacingEventModel; |
71 | -import ly.warp.sdk.services.UpdateUserLocationService; | 69 | +import ly.warp.sdk.services.WarplyHealthService; |
72 | import ly.warp.sdk.utils.WarpUtils; | 70 | import ly.warp.sdk.utils.WarpUtils; |
73 | import ly.warp.sdk.utils.WarplyProperty; | 71 | import ly.warp.sdk.utils.WarplyProperty; |
74 | import ly.warp.sdk.utils.WarplyUrlHandler; | 72 | import ly.warp.sdk.utils.WarplyUrlHandler; |
... | @@ -84,6 +82,7 @@ public class WarpView extends WebView { | ... | @@ -84,6 +82,7 @@ public class WarpView extends WebView { |
84 | private static final String URL_ACTION_MAIL = "mailto"; | 82 | private static final String URL_ACTION_MAIL = "mailto"; |
85 | private static final String URL_ACTION_MARKET = "market"; | 83 | private static final String URL_ACTION_MARKET = "market"; |
86 | private static final String URL_ACTION_MARKET_AUTHORITY = "play.google.com"; | 84 | private static final String URL_ACTION_MARKET_AUTHORITY = "play.google.com"; |
85 | + private static final String TAG_STEPS_WORKER = "ly.warp.sdk.services.WarplyHealthService"; | ||
87 | 86 | ||
88 | // =========================================================== | 87 | // =========================================================== |
89 | // Fields | 88 | // Fields |
... | @@ -371,11 +370,6 @@ public class WarpView extends WebView { | ... | @@ -371,11 +370,6 @@ public class WarpView extends WebView { |
371 | public class JSInterface { | 370 | public class JSInterface { |
372 | @JavascriptInterface | 371 | @JavascriptInterface |
373 | public void sendMessage(String message) { | 372 | public void sendMessage(String message) { |
374 | -// Intent intent = new Intent(android.content.Intent.ACTION_SEND); | ||
375 | -// intent.setType("text/plain"); | ||
376 | -// intent.putExtra(android.content.Intent.EXTRA_TEXT, message); | ||
377 | -// getContext().startActivity(Intent.createChooser(intent, "Άνοιγμα με")); | ||
378 | - | ||
379 | if (message.contains("event")) { | 373 | if (message.contains("event")) { |
380 | String[] parts = message.split(":"); | 374 | String[] parts = message.split(":"); |
381 | if (parts[1].equals("closeArtwork")) { | 375 | if (parts[1].equals("closeArtwork")) { |
... | @@ -423,10 +417,20 @@ public class WarpView extends WebView { | ... | @@ -423,10 +417,20 @@ public class WarpView extends WebView { |
423 | pacingService.setEnabled(true); | 417 | pacingService.setEnabled(true); |
424 | EventBus.getDefault().post(new WarplyEventBusManager(pacingService)); | 418 | EventBus.getDefault().post(new WarplyEventBusManager(pacingService)); |
425 | }*/ else if (parts[1].equals("steps") && parts[2].equals("shortcutEnabled")) { | 419 | }*/ else if (parts[1].equals("steps") && parts[2].equals("shortcutEnabled")) { |
420 | +// PeriodicWorkRequest stepsWorker = new PeriodicWorkRequest.Builder(WarplyHealthService.class, 15, TimeUnit.MINUTES) | ||
421 | +// .build(); | ||
422 | +// WorkManager.getInstance(Warply.getWarplyContext()).enqueue(stepsWorker); | ||
423 | + Intent stepsServiceIntent = new Intent(Warply.getWarplyContext(), WarplyHealthService.class); | ||
424 | + Warply.getWarplyContext().startService(stepsServiceIntent); | ||
425 | + | ||
426 | WarplyPacingEventModel pacingVisible = new WarplyPacingEventModel(); | 426 | WarplyPacingEventModel pacingVisible = new WarplyPacingEventModel(); |
427 | pacingVisible.setVisible(true); | 427 | pacingVisible.setVisible(true); |
428 | EventBus.getDefault().post(new WarplyEventBusManager(pacingVisible)); | 428 | EventBus.getDefault().post(new WarplyEventBusManager(pacingVisible)); |
429 | } else if (parts[1].equals("steps") && parts[2].equals("shortcutDisabled")) { | 429 | } else if (parts[1].equals("steps") && parts[2].equals("shortcutDisabled")) { |
430 | +// WorkManager.getInstance(Warply.getWarplyContext()).cancelAllWork(); | ||
431 | + Intent stepsServiceIntent = new Intent(Warply.getWarplyContext(), WarplyHealthService.class); | ||
432 | + Warply.getWarplyContext().stopService(stepsServiceIntent); | ||
433 | + | ||
430 | WarplyPacingEventModel pacingVisible = new WarplyPacingEventModel(); | 434 | WarplyPacingEventModel pacingVisible = new WarplyPacingEventModel(); |
431 | pacingVisible.setVisible(false); | 435 | pacingVisible.setVisible(false); |
432 | EventBus.getDefault().post(new WarplyEventBusManager(pacingVisible)); | 436 | EventBus.getDefault().post(new WarplyEventBusManager(pacingVisible)); |
... | @@ -500,7 +504,10 @@ public class WarpView extends WebView { | ... | @@ -500,7 +504,10 @@ public class WarpView extends WebView { |
500 | 504 | ||
501 | @Override | 505 | @Override |
502 | public void onPageFinished(WebView view, String url) { | 506 | public void onPageFinished(WebView view, String url) { |
507 | + String scriptSource = "passParams(" + WarpUtils.getWebviewParams(getContext()) + ");"; | ||
508 | + view.evaluateJavascript(scriptSource, s -> { | ||
503 | 509 | ||
510 | + }); | ||
504 | if (url.contains("about:blank")) { | 511 | if (url.contains("about:blank")) { |
505 | WarpView.this.clearHistory(); | 512 | WarpView.this.clearHistory(); |
506 | } | 513 | } | ... | ... |
... | @@ -386,6 +386,7 @@ | ... | @@ -386,6 +386,7 @@ |
386 | </androidx.constraintlayout.widget.ConstraintLayout> | 386 | </androidx.constraintlayout.widget.ConstraintLayout> |
387 | 387 | ||
388 | <TextView | 388 | <TextView |
389 | + android:id="@+id/tv_active_coupons_header" | ||
389 | android:layout_width="wrap_content" | 390 | android:layout_width="wrap_content" |
390 | android:layout_height="wrap_content" | 391 | android:layout_height="wrap_content" |
391 | android:layout_gravity="start" | 392 | android:layout_gravity="start" | ... | ... |
-
Please register or login to post a comment