77
88import com .google .gson .reflect .TypeToken ;
99
10+ import java .util .Date ;
1011import java .util .List ;
1112import java .util .concurrent .CopyOnWriteArrayList ;
1213import java .util .concurrent .CountDownLatch ;
1314
1415import 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 });
0 commit comments