Skip to content

Commit 49f6341

Browse files
committed
add finalizedAt and processedOffline flags
1 parent 41fd4d7 commit 49f6341

File tree

5 files changed

+67
-23
lines changed

5 files changed

+67
-23
lines changed

core/src/main/java/io/snabble/sdk/Checkout.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ private void pay(final PaymentMethod paymentMethod, final PaymentCredentials pay
301301
notifyStateChanged(State.VERIFYING_PAYMENT_METHOD);
302302

303303
checkoutApi.createPaymentProcess(signedCheckoutInfo, paymentMethod, paymentCredentials,
304-
new CheckoutApi.PaymentProcessResult() {
304+
false, null, new CheckoutApi.PaymentProcessResult() {
305305
@Override
306306
public void success(CheckoutApi.CheckoutProcessResponse checkoutProcessResponse) {
307307
checkoutProcess = checkoutProcessResponse;

core/src/main/java/io/snabble/sdk/CheckoutApi.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88

99
import java.io.IOException;
1010
import java.util.ArrayList;
11+
import java.util.Date;
1112
import java.util.List;
1213
import java.util.Map;
1314

1415
import io.snabble.sdk.payment.PaymentCredentials;
16+
import io.snabble.sdk.utils.DateUtils;
1517
import io.snabble.sdk.utils.GsonHolder;
1618
import io.snabble.sdk.utils.JsonCallback;
1719
import io.snabble.sdk.utils.Logger;
@@ -113,6 +115,8 @@ public static class CheckoutProcessRequest {
113115
public SignedCheckoutInfo signedCheckoutInfo;
114116
public PaymentMethod paymentMethod;
115117
public PaymentInformation paymentInformation;
118+
public String finalizedAt;
119+
public Boolean processedOffline;
116120
}
117121

118122
public enum PaymentState {
@@ -242,11 +246,6 @@ public void success(SignedCheckoutInfo signedCheckoutInfo) {
242246
price = project.getShoppingCart().getTotalPrice();
243247
}
244248

245-
if (price != project.getShoppingCart().getTotalPrice()) {
246-
Logger.w("Warning local price is different from remotely calculated price! (Local: "
247-
+ project.getShoppingCart().getTotalPrice() + ", Remote: " + price + ")");
248-
}
249-
250249
PaymentMethod[] availablePaymentMethods = signedCheckoutInfo.getAvailablePaymentMethods(clientAcceptedPaymentMethods);
251250
if (availablePaymentMethods != null && availablePaymentMethods.length > 0) {
252251
checkoutInfoResult.success(signedCheckoutInfo, price, availablePaymentMethods);
@@ -341,11 +340,21 @@ public void error(Throwable t) {
341340
public void createPaymentProcess(final SignedCheckoutInfo signedCheckoutInfo,
342341
final PaymentMethod paymentMethod,
343342
final PaymentCredentials paymentCredentials,
343+
final boolean processedOffline,
344+
final Date finalizedAt,
344345
final PaymentProcessResult paymentProcessResult) {
345346
CheckoutProcessRequest checkoutProcessRequest = new CheckoutProcessRequest();
346347
checkoutProcessRequest.paymentMethod = paymentMethod;
347348
checkoutProcessRequest.signedCheckoutInfo = signedCheckoutInfo;
348349

350+
if (processedOffline) {
351+
checkoutProcessRequest.processedOffline = true;
352+
353+
if (finalizedAt != null) {
354+
checkoutProcessRequest.finalizedAt = DateUtils.toRFC3339(finalizedAt);
355+
}
356+
}
357+
349358
if (paymentCredentials != null) {
350359
checkoutProcessRequest.paymentInformation = new PaymentInformation();
351360

core/src/main/java/io/snabble/sdk/CheckoutRetryer.java

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,33 @@
77

88
import com.google.gson.reflect.TypeToken;
99

10+
import java.util.Date;
1011
import java.util.List;
1112
import java.util.concurrent.CopyOnWriteArrayList;
1213
import java.util.concurrent.CountDownLatch;
1314

1415
import io.snabble.sdk.utils.GsonHolder;
16+
import io.snabble.sdk.utils.Logger;
17+
18+
class CheckoutRetryer {
19+
private class SavedCart {
20+
final ShoppingCart.BackendCart backendCart;
21+
final Date finalizedAt;
22+
23+
public SavedCart(ShoppingCart.BackendCart backendCart, Date finalizedAt) {
24+
this.backendCart = backendCart;
25+
this.finalizedAt = finalizedAt;
26+
}
27+
}
1528

16-
public class CheckoutRetryer {
1729
private Handler handler;
1830
private PaymentMethod fallbackPaymentMethod;
1931
private SharedPreferences sharedPreferences;
2032
private CheckoutApi checkoutApi;
21-
private CopyOnWriteArrayList<ShoppingCart.BackendCart> savedCarts;
33+
private CopyOnWriteArrayList<SavedCart> savedCarts;
2234
private CountDownLatch countDownLatch;
2335

24-
public CheckoutRetryer(Project project, PaymentMethod fallbackPaymentMethod) {
36+
CheckoutRetryer(Project project, PaymentMethod fallbackPaymentMethod) {
2537
Context context = Snabble.getInstance().getApplication();
2638
this.sharedPreferences = context.getSharedPreferences("snabble_saved_checkouts_" + project.getId(), Context.MODE_PRIVATE);
2739
this.checkoutApi = new CheckoutApi(project);
@@ -30,7 +42,7 @@ public CheckoutRetryer(Project project, PaymentMethod fallbackPaymentMethod) {
3042

3143
String json = sharedPreferences.getString("saved_carts", null);
3244
if (json != null) {
33-
TypeToken typeToken = new TypeToken<CopyOnWriteArrayList<ShoppingCart.BackendCart>>() {};
45+
TypeToken typeToken = new TypeToken<CopyOnWriteArrayList<SavedCart>>() {};
3446
savedCarts = GsonHolder.get().fromJson(json, typeToken.getType());
3547
} else {
3648
savedCarts = new CopyOnWriteArrayList<>();
@@ -40,7 +52,7 @@ public CheckoutRetryer(Project project, PaymentMethod fallbackPaymentMethod) {
4052
}
4153

4254
public void add(ShoppingCart.BackendCart backendCart) {
43-
savedCarts.add(backendCart);
55+
savedCarts.add(new SavedCart(backendCart, new Date()));
4456
save();
4557
}
4658

@@ -62,14 +74,16 @@ public void run() {
6274

6375
countDownLatch = new CountDownLatch(savedCarts.size());
6476

65-
for (final ShoppingCart.BackendCart backendCart : savedCarts) {
66-
checkoutApi.createCheckoutInfo(backendCart, null, new CheckoutApi.CheckoutInfoResult() {
77+
for (final SavedCart savedCart : savedCarts) {
78+
checkoutApi.createCheckoutInfo(savedCart.backendCart, null, new CheckoutApi.CheckoutInfoResult() {
6779
@Override
6880
public void success(CheckoutApi.SignedCheckoutInfo signedCheckoutInfo, int onlinePrice, PaymentMethod[] availablePaymentMethods) {
69-
checkoutApi.createPaymentProcess(signedCheckoutInfo, fallbackPaymentMethod, null, new CheckoutApi.PaymentProcessResult() {
81+
checkoutApi.createPaymentProcess(signedCheckoutInfo, fallbackPaymentMethod, null,
82+
true, savedCart.finalizedAt, new CheckoutApi.PaymentProcessResult() {
7083
@Override
7184
public void success(CheckoutApi.CheckoutProcessResponse checkoutProcessResponse) {
72-
removeSavedCart(backendCart);
85+
Logger.d("Successfully resend checkout " + savedCart.backendCart.session);
86+
removeSavedCart(savedCart);
7387
countDownLatch.countDown();
7488
}
7589

@@ -101,7 +115,12 @@ public void noAvailablePaymentMethod() {
101115
}
102116

103117
@Override
104-
public void error() {
118+
public void unknownError() {
119+
countDownLatch.countDown();
120+
}
121+
122+
@Override
123+
public void connectionError() {
105124
countDownLatch.countDown();
106125
}
107126
});
@@ -110,11 +129,11 @@ public void error() {
110129
});
111130
}
112131

113-
private void removeSavedCart(final ShoppingCart.BackendCart backendCart) {
132+
private void removeSavedCart(final SavedCart savedCart) {
114133
handler.post(new Runnable() {
115134
@Override
116135
public void run() {
117-
savedCarts.remove(backendCart);
136+
savedCarts.remove(savedCart);
118137
save();
119138
}
120139
});

core/src/main/java/io/snabble/sdk/Events.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.TimeZone;
2020

2121
import io.snabble.sdk.codes.ScannedCode;
22+
import io.snabble.sdk.utils.DateUtils;
2223
import io.snabble.sdk.utils.GsonHolder;
2324
import io.snabble.sdk.utils.Logger;
2425
import io.snabble.sdk.utils.Utils;
@@ -36,16 +37,12 @@ public class Events {
3637
private Shop shop;
3738

3839
private Handler handler = new Handler(Looper.getMainLooper());
39-
private SimpleDateFormat simpleDateFormat;
4040
private boolean hasSentSessionStart = false;
4141

4242
@SuppressLint("SimpleDateFormat")
4343
public Events(Project project) {
4444
this.project = project;
4545

46-
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
47-
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
48-
4946
project.getShoppingCart().addListener(new ShoppingCart.SimpleShoppingCartListener() {
5047
@Override
5148
public void onChanged(ShoppingCart cart) {
@@ -158,7 +155,7 @@ private <T extends Payload> void post(final T payload, boolean debounce) {
158155
event.appId = Snabble.getInstance().getClientId();
159156
event.project = project.getId();
160157
event.shopId = shop.getId();
161-
event.timestamp = simpleDateFormat.format(new Date());
158+
event.timestamp = DateUtils.toRFC3339(new Date());
162159
event.payload = GsonHolder.get().toJsonTree(payload);
163160

164161
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.snabble.sdk.utils;
2+
3+
import java.text.SimpleDateFormat;
4+
import java.util.Date;
5+
import java.util.Locale;
6+
import java.util.TimeZone;
7+
8+
public class DateUtils {
9+
private static final SimpleDateFormat simpleDateFormat;
10+
11+
static {
12+
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
13+
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
14+
}
15+
16+
public static String toRFC3339(Date date) {
17+
return simpleDateFormat.format(date);
18+
}
19+
}

0 commit comments

Comments
 (0)