Skip to content

Commit 46c6333

Browse files
[in_app_purchase] Enable -Werror for Android (#3403)
[in_app_purchase] Enable -Werror for Android
1 parent 95a8a76 commit 46c6333

File tree

6 files changed

+109
-61
lines changed

6 files changed

+109
-61
lines changed

packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,12 @@
2424
import com.android.billingclient.api.BillingResult;
2525
import com.android.billingclient.api.ConsumeParams;
2626
import com.android.billingclient.api.ConsumeResponseListener;
27-
import com.android.billingclient.api.PriceChangeFlowParams;
2827
import com.android.billingclient.api.Purchase;
2928
import com.android.billingclient.api.PurchaseHistoryRecord;
3029
import com.android.billingclient.api.PurchaseHistoryResponseListener;
3130
import com.android.billingclient.api.PurchasesResponseListener;
3231
import com.android.billingclient.api.QueryPurchaseHistoryParams;
3332
import com.android.billingclient.api.QueryPurchasesParams;
34-
import com.android.billingclient.api.SkuDetails;
35-
import com.android.billingclient.api.SkuDetailsParams;
36-
import com.android.billingclient.api.SkuDetailsResponseListener;
3733
import io.flutter.plugin.common.MethodCall;
3834
import io.flutter.plugin.common.MethodChannel;
3935
import java.util.HashMap;
@@ -55,7 +51,9 @@ class MethodCallHandlerImpl
5551
private final Context applicationContext;
5652
private final MethodChannel methodChannel;
5753

58-
private HashMap<String, SkuDetails> cachedSkus = new HashMap<>();
54+
// TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync.
55+
@SuppressWarnings("deprecation")
56+
private HashMap<String, com.android.billingclient.api.SkuDetails> cachedSkus = new HashMap<>();
5957

6058
/** Constructs the MethodCallHandlerImpl */
6159
MethodCallHandlerImpl(
@@ -185,21 +183,29 @@ private void isReady(MethodChannel.Result result) {
185183
result.success(billingClient.isReady());
186184
}
187185

188-
// TODO(garyq): Migrate to new subscriptions API: https://developer.android.com/google/play/billing/migrate-gpblv5
186+
// TODO(stuartmorgan): Migrate to new subscriptions API. See:
187+
// - https://developer.android.com/google/play/billing/migrate-gpblv5
188+
// - https://github.com/flutter/flutter/issues/114265
189+
// - https://github.com/flutter/flutter/issues/107370
190+
@SuppressWarnings("deprecation")
189191
private void querySkuDetailsAsync(
190192
final String skuType, final List<String> skusList, final MethodChannel.Result result) {
191193
if (billingClientError(result)) {
192194
return;
193195
}
194196

195-
SkuDetailsParams params =
196-
SkuDetailsParams.newBuilder().setType(skuType).setSkusList(skusList).build();
197+
com.android.billingclient.api.SkuDetailsParams params =
198+
com.android.billingclient.api.SkuDetailsParams.newBuilder()
199+
.setType(skuType)
200+
.setSkusList(skusList)
201+
.build();
197202
billingClient.querySkuDetailsAsync(
198203
params,
199-
new SkuDetailsResponseListener() {
204+
new com.android.billingclient.api.SkuDetailsResponseListener() {
200205
@Override
201206
public void onSkuDetailsResponse(
202-
BillingResult billingResult, List<SkuDetails> skuDetailsList) {
207+
BillingResult billingResult,
208+
List<com.android.billingclient.api.SkuDetails> skuDetailsList) {
203209
updateCachedSkus(skuDetailsList);
204210
final Map<String, Object> skuDetailsResponse = new HashMap<>();
205211
skuDetailsResponse.put("billingResult", Translator.fromBillingResult(billingResult));
@@ -220,7 +226,9 @@ private void launchBillingFlow(
220226
if (billingClientError(result)) {
221227
return;
222228
}
223-
SkuDetails skuDetails = cachedSkus.get(sku);
229+
// TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync.
230+
@SuppressWarnings("deprecation")
231+
com.android.billingclient.api.SkuDetails skuDetails = cachedSkus.get(sku);
224232
if (skuDetails == null) {
225233
result.error(
226234
"NOT_FOUND",
@@ -258,6 +266,8 @@ private void launchBillingFlow(
258266
return;
259267
}
260268

269+
// TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync.
270+
@SuppressWarnings("deprecation")
261271
BillingFlowParams.Builder paramsBuilder =
262272
BillingFlowParams.newBuilder().setSkuDetails(skuDetails);
263273
if (accountId != null && !accountId.isEmpty()) {
@@ -401,16 +411,21 @@ public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
401411
});
402412
}
403413

404-
private void updateCachedSkus(@Nullable List<SkuDetails> skuDetailsList) {
414+
// TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync.
415+
@SuppressWarnings("deprecation")
416+
private void updateCachedSkus(
417+
@Nullable List<com.android.billingclient.api.SkuDetails> skuDetailsList) {
405418
if (skuDetailsList == null) {
406419
return;
407420
}
408421

409-
for (SkuDetails skuDetails : skuDetailsList) {
422+
for (com.android.billingclient.api.SkuDetails skuDetails : skuDetailsList) {
410423
cachedSkus.put(skuDetails.getSku(), skuDetails);
411424
}
412425
}
413426

427+
// TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync.
428+
@SuppressWarnings("deprecation")
414429
private void launchPriceChangeConfirmationFlow(String sku, MethodChannel.Result result) {
415430
if (activity == null) {
416431
result.error(
@@ -428,7 +443,7 @@ private void launchPriceChangeConfirmationFlow(String sku, MethodChannel.Result
428443
// is handled by the `billingClientError()` call.
429444
assert billingClient != null;
430445

431-
SkuDetails skuDetails = cachedSkus.get(sku);
446+
com.android.billingclient.api.SkuDetails skuDetails = cachedSkus.get(sku);
432447
if (skuDetails == null) {
433448
result.error(
434449
"NOT_FOUND",
@@ -439,8 +454,10 @@ private void launchPriceChangeConfirmationFlow(String sku, MethodChannel.Result
439454
return;
440455
}
441456

442-
PriceChangeFlowParams params =
443-
new PriceChangeFlowParams.Builder().setSkuDetails(skuDetails).build();
457+
com.android.billingclient.api.PriceChangeFlowParams params =
458+
new com.android.billingclient.api.PriceChangeFlowParams.Builder()
459+
.setSkuDetails(skuDetails)
460+
.build();
444461
billingClient.launchPriceChangeConfirmationFlow(
445462
activity,
446463
params,

packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/Translator.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.android.billingclient.api.BillingResult;
1010
import com.android.billingclient.api.Purchase;
1111
import com.android.billingclient.api.PurchaseHistoryRecord;
12-
import com.android.billingclient.api.SkuDetails;
1312
import java.util.ArrayList;
1413
import java.util.Collections;
1514
import java.util.Currency;
@@ -19,7 +18,9 @@
1918

2019
/** Handles serialization of {@link com.android.billingclient.api.BillingClient} related objects. */
2120
/*package*/ class Translator {
22-
static HashMap<String, Object> fromSkuDetail(SkuDetails detail) {
21+
// TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync.
22+
@SuppressWarnings("deprecation")
23+
static HashMap<String, Object> fromSkuDetail(com.android.billingclient.api.SkuDetails detail) {
2324
HashMap<String, Object> info = new HashMap<>();
2425
info.put("title", detail.getTitle());
2526
info.put("description", detail.getDescription());
@@ -40,21 +41,25 @@ static HashMap<String, Object> fromSkuDetail(SkuDetails detail) {
4041
return info;
4142
}
4243

44+
// TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync.
45+
@SuppressWarnings("deprecation")
4346
static List<HashMap<String, Object>> fromSkuDetailsList(
44-
@Nullable List<SkuDetails> skuDetailsList) {
47+
@Nullable List<com.android.billingclient.api.SkuDetails> skuDetailsList) {
4548
if (skuDetailsList == null) {
4649
return Collections.emptyList();
4750
}
4851

4952
ArrayList<HashMap<String, Object>> output = new ArrayList<>();
50-
for (SkuDetails detail : skuDetailsList) {
53+
for (com.android.billingclient.api.SkuDetails detail : skuDetailsList) {
5154
output.add(fromSkuDetail(detail));
5255
}
5356
return output;
5457
}
5558

5659
static HashMap<String, Object> fromPurchase(Purchase purchase) {
5760
HashMap<String, Object> info = new HashMap<>();
61+
// TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync.
62+
@SuppressWarnings("deprecation")
5863
List<String> skus = purchase.getSkus();
5964
info.put("orderId", purchase.getOrderId());
6065
info.put("packageName", purchase.getPackageName());
@@ -79,6 +84,8 @@ static HashMap<String, Object> fromPurchase(Purchase purchase) {
7984
static HashMap<String, Object> fromPurchaseHistoryRecord(
8085
PurchaseHistoryRecord purchaseHistoryRecord) {
8186
HashMap<String, Object> info = new HashMap<>();
87+
// TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync.
88+
@SuppressWarnings("deprecation")
8289
List<String> skus = purchaseHistoryRecord.getSkus();
8390
info.put("purchaseTime", purchaseHistoryRecord.getPurchaseTime());
8491
info.put("purchaseToken", purchaseHistoryRecord.getPurchaseToken());

packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/InAppPurchasePluginTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
1616
import io.flutter.plugin.common.BinaryMessenger;
1717
import io.flutter.plugin.common.PluginRegistry;
18+
import org.junit.After;
1819
import org.junit.Before;
1920
import org.junit.Test;
2021
import org.mockito.Mock;
@@ -25,18 +26,23 @@ public class InAppPurchasePluginTest {
2526

2627
static final String PROXY_PACKAGE_KEY = "PROXY_PACKAGE";
2728

29+
@SuppressWarnings("deprecation")
30+
@Mock
31+
PluginRegistry.Registrar mockRegistrar; // For v1 embedding
32+
2833
@Mock Activity activity;
2934
@Mock Context context;
30-
@Mock PluginRegistry.Registrar mockRegistrar; // For v1 embedding
3135
@Mock BinaryMessenger mockMessenger;
3236
@Mock Application mockApplication;
3337
@Mock Intent mockIntent;
3438
@Mock ActivityPluginBinding activityPluginBinding;
3539
@Mock FlutterPlugin.FlutterPluginBinding flutterPluginBinding;
3640

41+
AutoCloseable mockCloseable;
42+
3743
@Before
3844
public void setUp() {
39-
MockitoAnnotations.initMocks(this);
45+
mockCloseable = MockitoAnnotations.openMocks(this);
4046
when(mockRegistrar.activity()).thenReturn(activity);
4147
when(mockRegistrar.messenger()).thenReturn(mockMessenger);
4248
when(mockRegistrar.context()).thenReturn(context);
@@ -46,6 +52,11 @@ public void setUp() {
4652
when(flutterPluginBinding.getApplicationContext()).thenReturn(context);
4753
}
4854

55+
@After
56+
public void tearDown() throws Exception {
57+
mockCloseable.close();
58+
}
59+
4960
@Test
5061
public void registerWith_doNotCrashWhenRegisterContextIsActivity_V1Embedding() {
5162
when(mockRegistrar.context()).thenReturn(activity);

0 commit comments

Comments
 (0)