1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
package com.mapswithme.maps.purchase;
import android.app.Activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.SkuDetails;
import com.mapswithme.maps.PrivateVariables;
import com.mapswithme.util.ConnectionState;
import com.mapswithme.util.log.Logger;
import com.mapswithme.util.log.LoggerFactory;
import com.mapswithme.util.statistics.Statistics;
import java.util.List;
class BookmarkPurchaseController extends AbstractPurchaseController<ValidationCallback,
PlayStoreBillingCallback, PurchaseCallback>
{
private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.BILLING);
private static final String TAG = AbstractPurchaseController.class.getSimpleName();
@NonNull
private final PlayStoreBillingCallback mBillingCallback = new PlayStoreBillingCallbackImpl();
@NonNull
private final ValidationCallback mValidationCallback;
@Nullable
private final String mServerId;
BookmarkPurchaseController(@NonNull PurchaseValidator<ValidationCallback> validator,
@NonNull BillingManager<PlayStoreBillingCallback> billingManager,
@Nullable String productId, @Nullable String serverId)
{
super(validator, billingManager, productId);
mServerId = serverId;
mValidationCallback = new ValidationCallbackImpl(mServerId);
}
@Override
void onInitialize(@NonNull Activity activity)
{
getValidator().addCallback(mValidationCallback);
getBillingManager().addCallback(mBillingCallback);
}
@Override
void onDestroy()
{
getValidator().removeCallback();
getBillingManager().removeCallback(mBillingCallback);
}
private class ValidationCallbackImpl extends AbstractBookmarkValidationCallback
{
ValidationCallbackImpl(@Nullable String serverId)
{
super(serverId);
}
@Override
void onValidationError(@NonNull ValidationStatus status)
{
if (getUiCallback() != null)
getUiCallback().onValidationFinish(false);
}
@Override
void consumePurchase(@NonNull String purchaseData)
{
LOGGER.i(TAG, "Bookmark purchase consuming...");
getBillingManager().consumePurchase(PurchaseUtils.parseToken(purchaseData));
}
}
private class PlayStoreBillingCallbackImpl extends AbstractPlayStoreBillingCallback
{
@Override
public void onPurchaseFailure(int error)
{
super.onPurchaseFailure(error);
//noinspection ConstantConditions
Statistics.INSTANCE.trackPurchaseStoreError(mServerId, error);
}
@Override
public void onProductDetailsLoaded(@NonNull List<SkuDetails> details)
{
if (getUiCallback() != null)
getUiCallback().onProductDetailsLoaded(details);
}
@Override
void validate(@NonNull String purchaseData)
{
getValidator().validate(mServerId, PrivateVariables.bookmarksVendor(), purchaseData);
}
@Override
public void onPurchasesLoaded(@NonNull List<Purchase> purchases)
{
if (!ConnectionState.isWifiConnected())
{
LOGGER.i(TAG, "Validation postponed, connection not WI-FI.");
return;
}
if (purchases.isEmpty())
{
LOGGER.i(TAG, "Non-consumed bookmark purchases not found");
return;
}
for (Purchase target: purchases)
{
LOGGER.i(TAG, "Validating existing purchase data for '" + target.getSku()
+ " " + target.getOrderId() + "'...");
getValidator().validate(mServerId, PrivateVariables.bookmarksVendor(), target.getOriginalJson());
}
}
@Override
public void onConsumptionSuccess()
{
LOGGER.i(TAG, "Bookmark purchase consumed");
if (getUiCallback() != null)
getUiCallback().onValidationFinish(true);
}
@Override
public void onConsumptionFailure()
{
LOGGER.w(TAG, "Bookmark purchase not consumed");
if (getUiCallback() != null)
getUiCallback().onValidationFinish(false);
}
}
}
|