From ceccab44a00f402395f81f30e7eff8d093d07284 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Tue, 7 Mar 2023 12:58:01 -0500 Subject: [PATCH 1/2] Enable warnings --- .../in_app_purchase_android/example/android/build.gradle | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle index 5bb3499d4ff..24394ae135e 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle @@ -35,9 +35,7 @@ task clean(type: Delete) { gradle.projectsEvaluated { project(":in_app_purchase_android") { tasks.withType(JavaCompile) { - // TODO(stuartmorgan): Enable this. See - // https://github.com/flutter/flutter/issues/91868 - //options.compilerArgs << "-Xlint:all" << "-Werror" + options.compilerArgs << "-Xlint:all" << "-Werror" } } } From b2fac1825b07c382160e73c45def6e2d42b6b158 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Tue, 7 Mar 2023 13:36:34 -0500 Subject: [PATCH 2/2] Suppress and fix warnings --- .../inapppurchase/MethodCallHandlerImpl.java | 49 ++++++++----- .../plugins/inapppurchase/Translator.java | 15 ++-- .../InAppPurchasePluginTest.java | 15 +++- .../inapppurchase/MethodCallHandlerTest.java | 71 +++++++++++-------- .../plugins/inapppurchase/TranslatorTest.java | 16 +++-- 5 files changed, 108 insertions(+), 58 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java b/packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java index 00cf52addf9..a84e228b7d8 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java +++ b/packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java @@ -24,16 +24,12 @@ import com.android.billingclient.api.BillingResult; import com.android.billingclient.api.ConsumeParams; import com.android.billingclient.api.ConsumeResponseListener; -import com.android.billingclient.api.PriceChangeFlowParams; import com.android.billingclient.api.Purchase; import com.android.billingclient.api.PurchaseHistoryRecord; import com.android.billingclient.api.PurchaseHistoryResponseListener; import com.android.billingclient.api.PurchasesResponseListener; import com.android.billingclient.api.QueryPurchaseHistoryParams; import com.android.billingclient.api.QueryPurchasesParams; -import com.android.billingclient.api.SkuDetails; -import com.android.billingclient.api.SkuDetailsParams; -import com.android.billingclient.api.SkuDetailsResponseListener; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import java.util.HashMap; @@ -55,7 +51,9 @@ class MethodCallHandlerImpl private final Context applicationContext; private final MethodChannel methodChannel; - private HashMap cachedSkus = new HashMap<>(); + // TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync. + @SuppressWarnings("deprecation") + private HashMap cachedSkus = new HashMap<>(); /** Constructs the MethodCallHandlerImpl */ MethodCallHandlerImpl( @@ -185,21 +183,29 @@ private void isReady(MethodChannel.Result result) { result.success(billingClient.isReady()); } - // TODO(garyq): Migrate to new subscriptions API: https://developer.android.com/google/play/billing/migrate-gpblv5 + // TODO(stuartmorgan): Migrate to new subscriptions API. See: + // - https://developer.android.com/google/play/billing/migrate-gpblv5 + // - https://github.com/flutter/flutter/issues/114265 + // - https://github.com/flutter/flutter/issues/107370 + @SuppressWarnings("deprecation") private void querySkuDetailsAsync( final String skuType, final List skusList, final MethodChannel.Result result) { if (billingClientError(result)) { return; } - SkuDetailsParams params = - SkuDetailsParams.newBuilder().setType(skuType).setSkusList(skusList).build(); + com.android.billingclient.api.SkuDetailsParams params = + com.android.billingclient.api.SkuDetailsParams.newBuilder() + .setType(skuType) + .setSkusList(skusList) + .build(); billingClient.querySkuDetailsAsync( params, - new SkuDetailsResponseListener() { + new com.android.billingclient.api.SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse( - BillingResult billingResult, List skuDetailsList) { + BillingResult billingResult, + List skuDetailsList) { updateCachedSkus(skuDetailsList); final Map skuDetailsResponse = new HashMap<>(); skuDetailsResponse.put("billingResult", Translator.fromBillingResult(billingResult)); @@ -220,7 +226,9 @@ private void launchBillingFlow( if (billingClientError(result)) { return; } - SkuDetails skuDetails = cachedSkus.get(sku); + // TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync. + @SuppressWarnings("deprecation") + com.android.billingclient.api.SkuDetails skuDetails = cachedSkus.get(sku); if (skuDetails == null) { result.error( "NOT_FOUND", @@ -258,6 +266,8 @@ private void launchBillingFlow( return; } + // TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync. + @SuppressWarnings("deprecation") BillingFlowParams.Builder paramsBuilder = BillingFlowParams.newBuilder().setSkuDetails(skuDetails); if (accountId != null && !accountId.isEmpty()) { @@ -401,16 +411,21 @@ public void onAcknowledgePurchaseResponse(BillingResult billingResult) { }); } - private void updateCachedSkus(@Nullable List skuDetailsList) { + // TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync. + @SuppressWarnings("deprecation") + private void updateCachedSkus( + @Nullable List skuDetailsList) { if (skuDetailsList == null) { return; } - for (SkuDetails skuDetails : skuDetailsList) { + for (com.android.billingclient.api.SkuDetails skuDetails : skuDetailsList) { cachedSkus.put(skuDetails.getSku(), skuDetails); } } + // TODO(stuartmorgan): Migrate this code. See TODO on querySkuDetailsAsync. + @SuppressWarnings("deprecation") private void launchPriceChangeConfirmationFlow(String sku, MethodChannel.Result result) { if (activity == null) { result.error( @@ -428,7 +443,7 @@ private void launchPriceChangeConfirmationFlow(String sku, MethodChannel.Result // is handled by the `billingClientError()` call. assert billingClient != null; - SkuDetails skuDetails = cachedSkus.get(sku); + com.android.billingclient.api.SkuDetails skuDetails = cachedSkus.get(sku); if (skuDetails == null) { result.error( "NOT_FOUND", @@ -439,8 +454,10 @@ private void launchPriceChangeConfirmationFlow(String sku, MethodChannel.Result return; } - PriceChangeFlowParams params = - new PriceChangeFlowParams.Builder().setSkuDetails(skuDetails).build(); + com.android.billingclient.api.PriceChangeFlowParams params = + new com.android.billingclient.api.PriceChangeFlowParams.Builder() + .setSkuDetails(skuDetails) + .build(); billingClient.launchPriceChangeConfirmationFlow( activity, params, diff --git a/packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/Translator.java b/packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/Translator.java index 5a0cf6ea372..273a28474e9 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/Translator.java +++ b/packages/in_app_purchase/in_app_purchase_android/android/src/main/java/io/flutter/plugins/inapppurchase/Translator.java @@ -9,7 +9,6 @@ import com.android.billingclient.api.BillingResult; import com.android.billingclient.api.Purchase; import com.android.billingclient.api.PurchaseHistoryRecord; -import com.android.billingclient.api.SkuDetails; import java.util.ArrayList; import java.util.Collections; import java.util.Currency; @@ -19,7 +18,9 @@ /** Handles serialization of {@link com.android.billingclient.api.BillingClient} related objects. */ /*package*/ class Translator { - static HashMap fromSkuDetail(SkuDetails detail) { + // TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync. + @SuppressWarnings("deprecation") + static HashMap fromSkuDetail(com.android.billingclient.api.SkuDetails detail) { HashMap info = new HashMap<>(); info.put("title", detail.getTitle()); info.put("description", detail.getDescription()); @@ -40,14 +41,16 @@ static HashMap fromSkuDetail(SkuDetails detail) { return info; } + // TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync. + @SuppressWarnings("deprecation") static List> fromSkuDetailsList( - @Nullable List skuDetailsList) { + @Nullable List skuDetailsList) { if (skuDetailsList == null) { return Collections.emptyList(); } ArrayList> output = new ArrayList<>(); - for (SkuDetails detail : skuDetailsList) { + for (com.android.billingclient.api.SkuDetails detail : skuDetailsList) { output.add(fromSkuDetail(detail)); } return output; @@ -55,6 +58,8 @@ static List> fromSkuDetailsList( static HashMap fromPurchase(Purchase purchase) { HashMap info = new HashMap<>(); + // TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync. + @SuppressWarnings("deprecation") List skus = purchase.getSkus(); info.put("orderId", purchase.getOrderId()); info.put("packageName", purchase.getPackageName()); @@ -79,6 +84,8 @@ static HashMap fromPurchase(Purchase purchase) { static HashMap fromPurchaseHistoryRecord( PurchaseHistoryRecord purchaseHistoryRecord) { HashMap info = new HashMap<>(); + // TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync. + @SuppressWarnings("deprecation") List skus = purchaseHistoryRecord.getSkus(); info.put("purchaseTime", purchaseHistoryRecord.getPurchaseTime()); info.put("purchaseToken", purchaseHistoryRecord.getPurchaseToken()); diff --git a/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/InAppPurchasePluginTest.java b/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/InAppPurchasePluginTest.java index ad763390327..f7908c09b01 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/InAppPurchasePluginTest.java +++ b/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/InAppPurchasePluginTest.java @@ -15,6 +15,7 @@ import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.PluginRegistry; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -25,18 +26,23 @@ public class InAppPurchasePluginTest { static final String PROXY_PACKAGE_KEY = "PROXY_PACKAGE"; + @SuppressWarnings("deprecation") + @Mock + PluginRegistry.Registrar mockRegistrar; // For v1 embedding + @Mock Activity activity; @Mock Context context; - @Mock PluginRegistry.Registrar mockRegistrar; // For v1 embedding @Mock BinaryMessenger mockMessenger; @Mock Application mockApplication; @Mock Intent mockIntent; @Mock ActivityPluginBinding activityPluginBinding; @Mock FlutterPlugin.FlutterPluginBinding flutterPluginBinding; + AutoCloseable mockCloseable; + @Before public void setUp() { - MockitoAnnotations.initMocks(this); + mockCloseable = MockitoAnnotations.openMocks(this); when(mockRegistrar.activity()).thenReturn(activity); when(mockRegistrar.messenger()).thenReturn(mockMessenger); when(mockRegistrar.context()).thenReturn(context); @@ -46,6 +52,11 @@ public void setUp() { when(flutterPluginBinding.getApplicationContext()).thenReturn(context); } + @After + public void tearDown() throws Exception { + mockCloseable.close(); + } + @Test public void registerWith_doNotCrashWhenRegisterContextIsActivity_V1Embedding() { when(mockRegistrar.context()).thenReturn(activity); diff --git a/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/MethodCallHandlerTest.java b/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/MethodCallHandlerTest.java index ffebb2544a1..7c4498a30ee 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/MethodCallHandlerTest.java +++ b/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/MethodCallHandlerTest.java @@ -46,23 +46,17 @@ import com.android.billingclient.api.AcknowledgePurchaseParams; import com.android.billingclient.api.AcknowledgePurchaseResponseListener; import com.android.billingclient.api.BillingClient; -import com.android.billingclient.api.BillingClient.SkuType; import com.android.billingclient.api.BillingClientStateListener; import com.android.billingclient.api.BillingFlowParams; import com.android.billingclient.api.BillingResult; import com.android.billingclient.api.ConsumeParams; import com.android.billingclient.api.ConsumeResponseListener; -import com.android.billingclient.api.PriceChangeConfirmationListener; -import com.android.billingclient.api.PriceChangeFlowParams; import com.android.billingclient.api.Purchase; import com.android.billingclient.api.PurchaseHistoryRecord; import com.android.billingclient.api.PurchaseHistoryResponseListener; import com.android.billingclient.api.PurchasesResponseListener; import com.android.billingclient.api.QueryPurchaseHistoryParams; import com.android.billingclient.api.QueryPurchasesParams; -import com.android.billingclient.api.SkuDetails; -import com.android.billingclient.api.SkuDetailsParams; -import com.android.billingclient.api.SkuDetailsResponseListener; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -83,6 +77,10 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; +// TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync. +// This is supressed at the class level since until the code is migrated, the tests will be +// full of deprecation warnings. +@SuppressWarnings("deprecation") public class MethodCallHandlerTest { private MethodCallHandlerImpl methodChannelHandler; private BillingClientFactory factory; @@ -229,22 +227,25 @@ public void querySkuDetailsAsync() { methodChannelHandler.onMethodCall(queryCall, result); // Assert the arguments were forwarded correctly to BillingClient - ArgumentCaptor paramCaptor = ArgumentCaptor.forClass(SkuDetailsParams.class); - ArgumentCaptor listenerCaptor = - ArgumentCaptor.forClass(SkuDetailsResponseListener.class); + ArgumentCaptor paramCaptor = + ArgumentCaptor.forClass(com.android.billingclient.api.SkuDetailsParams.class); + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(com.android.billingclient.api.SkuDetailsResponseListener.class); verify(mockBillingClient).querySkuDetailsAsync(paramCaptor.capture(), listenerCaptor.capture()); assertEquals(paramCaptor.getValue().getSkuType(), skuType); assertEquals(paramCaptor.getValue().getSkusList(), skusList); // Assert that we handed result BillingClient's response int responseCode = 200; - List skuDetailsResponse = asList(buildSkuDetails("foo")); + List skuDetailsResponse = + asList(buildSkuDetails("foo")); BillingResult billingResult = BillingResult.newBuilder() .setResponseCode(100) .setDebugMessage("dummy debug message") .build(); listenerCaptor.getValue().onSkuDetailsResponse(billingResult, skuDetailsResponse); + @SuppressWarnings("unchecked") ArgumentCaptor> resultCaptor = ArgumentCaptor.forClass(HashMap.class); verify(result).success(resultCaptor.capture()); HashMap resultData = resultCaptor.getValue(); @@ -592,7 +593,7 @@ public void queryPurchases_clientDisconnected() { methodChannelHandler.onMethodCall(new MethodCall(END_CONNECTION, null), mock(Result.class)); HashMap arguments = new HashMap<>(); - arguments.put("skuType", SkuType.INAPP); + arguments.put("skuType", BillingClient.SkuType.INAPP); methodChannelHandler.onMethodCall(new MethodCall(QUERY_PURCHASES_ASYNC, arguments), result); // Assert that we sent an error back. @@ -606,7 +607,7 @@ public void queryPurchases_returns_success() throws Exception { CountDownLatch lock = new CountDownLatch(1); doAnswer( - new Answer() { + new Answer() { public Object answer(InvocationOnMock invocation) { lock.countDown(); return null; @@ -618,7 +619,7 @@ public Object answer(InvocationOnMock invocation) { ArgumentCaptor purchasesResponseListenerArgumentCaptor = ArgumentCaptor.forClass(PurchasesResponseListener.class); doAnswer( - new Answer() { + new Answer() { public Object answer(InvocationOnMock invocation) { BillingResult.Builder resultBuilder = BillingResult.newBuilder() @@ -635,14 +636,15 @@ public Object answer(InvocationOnMock invocation) { any(QueryPurchasesParams.class), purchasesResponseListenerArgumentCaptor.capture()); HashMap arguments = new HashMap<>(); - arguments.put("skuType", SkuType.INAPP); + arguments.put("skuType", BillingClient.SkuType.INAPP); methodChannelHandler.onMethodCall(new MethodCall(QUERY_PURCHASES_ASYNC, arguments), result); lock.await(5000, TimeUnit.MILLISECONDS); verify(result, never()).error(any(), any(), any()); - ArgumentCaptor hashMapCaptor = ArgumentCaptor.forClass(HashMap.class); + @SuppressWarnings("unchecked") + ArgumentCaptor> hashMapCaptor = ArgumentCaptor.forClass(HashMap.class); verify(result, times(1)).success(hashMapCaptor.capture()); HashMap map = hashMapCaptor.getValue(); @@ -656,6 +658,7 @@ public Object answer(InvocationOnMock invocation) { public void queryPurchaseHistoryAsync() { // Set up an established billing client and all our mocked responses establishConnectedBillingClient(null, null); + @SuppressWarnings("unchecked") ArgumentCaptor> resultCaptor = ArgumentCaptor.forClass(HashMap.class); BillingResult billingResult = BillingResult.newBuilder() @@ -664,7 +667,7 @@ public void queryPurchaseHistoryAsync() { .build(); List purchasesList = asList(buildPurchaseHistoryRecord("foo")); HashMap arguments = new HashMap<>(); - arguments.put("skuType", SkuType.INAPP); + arguments.put("skuType", BillingClient.SkuType.INAPP); ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(PurchaseHistoryResponseListener.class); @@ -688,7 +691,7 @@ public void queryPurchaseHistoryAsync_clientDisconnected() { methodChannelHandler.onMethodCall(new MethodCall(END_CONNECTION, null), mock(Result.class)); HashMap arguments = new HashMap<>(); - arguments.put("skuType", SkuType.INAPP); + arguments.put("skuType", BillingClient.SkuType.INAPP); methodChannelHandler.onMethodCall( new MethodCall(QUERY_PURCHASE_HISTORY_ASYNC, arguments), result); @@ -707,6 +710,7 @@ public void onPurchasesUpdatedListener() { .setDebugMessage("dummy debug message") .build(); List purchasesList = asList(buildPurchase("foo")); + @SuppressWarnings("unchecked") ArgumentCaptor> resultCaptor = ArgumentCaptor.forClass(HashMap.class); doNothing() .when(mockMethodChannel) @@ -840,10 +844,13 @@ public void launchPriceChangeConfirmationFlow() { .build(); // Set up the mock billing client - ArgumentCaptor priceChangeConfirmationListenerArgumentCaptor = - ArgumentCaptor.forClass(PriceChangeConfirmationListener.class); - ArgumentCaptor priceChangeFlowParamsArgumentCaptor = - ArgumentCaptor.forClass(PriceChangeFlowParams.class); + ArgumentCaptor + priceChangeConfirmationListenerArgumentCaptor = + ArgumentCaptor.forClass( + com.android.billingclient.api.PriceChangeConfirmationListener.class); + ArgumentCaptor + priceChangeFlowParamsArgumentCaptor = + ArgumentCaptor.forClass(com.android.billingclient.api.PriceChangeFlowParams.class); doNothing() .when(mockBillingClient) .launchPriceChangeConfirmationFlow( @@ -858,17 +865,19 @@ public void launchPriceChangeConfirmationFlow() { new MethodCall(LAUNCH_PRICE_CHANGE_CONFIRMATION_FLOW, arguments), result); // Verify the price change params. - PriceChangeFlowParams priceChangeFlowParams = priceChangeFlowParamsArgumentCaptor.getValue(); + com.android.billingclient.api.PriceChangeFlowParams priceChangeFlowParams = + priceChangeFlowParamsArgumentCaptor.getValue(); assertEquals(skuId, priceChangeFlowParams.getSkuDetails().getSku()); // Set the response in the callback - PriceChangeConfirmationListener priceChangeConfirmationListener = + com.android.billingclient.api.PriceChangeConfirmationListener priceChangeConfirmationListener = priceChangeConfirmationListenerArgumentCaptor.getValue(); priceChangeConfirmationListener.onPriceChangeConfirmationResult(billingResult); // Verify we pass the response to result verify(result, never()).error(any(), any(), any()); - ArgumentCaptor resultCaptor = ArgumentCaptor.forClass(HashMap.class); + @SuppressWarnings("unchecked") + ArgumentCaptor> resultCaptor = ArgumentCaptor.forClass(HashMap.class); verify(result, times(1)).success(resultCaptor.capture()); assertEquals(fromBillingResult(billingResult), resultCaptor.getValue()); } @@ -947,7 +956,7 @@ private void queryForSkus(List skusList) { // Set up the query method call establishConnectedBillingClient(/* arguments= */ null, /* result= */ null); HashMap arguments = new HashMap<>(); - String skuType = SkuType.INAPP; + String skuType = BillingClient.SkuType.INAPP; arguments.put("skuType", skuType); arguments.put("skusList", skusList); MethodCall queryCall = new MethodCall(QUERY_SKU_DETAILS, arguments); @@ -956,10 +965,10 @@ private void queryForSkus(List skusList) { methodChannelHandler.onMethodCall(queryCall, mock(Result.class)); // Respond to the call with a matching set of Sku details. - ArgumentCaptor listenerCaptor = - ArgumentCaptor.forClass(SkuDetailsResponseListener.class); + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(com.android.billingclient.api.SkuDetailsResponseListener.class); verify(mockBillingClient).querySkuDetailsAsync(any(), listenerCaptor.capture()); - List skuDetailsResponse = + List skuDetailsResponse = skusList.stream().map(this::buildSkuDetails).collect(toList()); BillingResult billingResult = @@ -970,14 +979,14 @@ private void queryForSkus(List skusList) { listenerCaptor.getValue().onSkuDetailsResponse(billingResult, skuDetailsResponse); } - private SkuDetails buildSkuDetails(String id) { + private com.android.billingclient.api.SkuDetails buildSkuDetails(String id) { String json = String.format( "{\"packageName\": \"dummyPackageName\",\"productId\":\"%s\",\"type\":\"inapp\",\"price\":\"$0.99\",\"price_amount_micros\":990000,\"price_currency_code\":\"USD\",\"title\":\"Example title\",\"description\":\"Example description.\",\"original_price\":\"$0.99\",\"original_price_micros\":990000}", id); - SkuDetails details = null; + com.android.billingclient.api.SkuDetails details = null; try { - details = new SkuDetails(json); + details = new com.android.billingclient.api.SkuDetails(json); } catch (JSONException e) { fail("buildSkuDetails failed with JSONException " + e.toString()); } diff --git a/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/TranslatorTest.java b/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/TranslatorTest.java index 79852e7e8ca..914ef0b57ef 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/TranslatorTest.java +++ b/packages/in_app_purchase/in_app_purchase_android/android/src/test/java/io/flutter/plugins/inapppurchase/TranslatorTest.java @@ -16,7 +16,6 @@ import com.android.billingclient.api.BillingResult; import com.android.billingclient.api.Purchase; import com.android.billingclient.api.PurchaseHistoryRecord; -import com.android.billingclient.api.SkuDetails; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -27,6 +26,10 @@ import org.junit.Before; import org.junit.Test; +// TODO(stuartmorgan): Migrate this code. See TODO on MethodCallHandlerImpl.querySkuDetailsAsync. +// This is supressed at the class level since until the code is migrated, the tests will be +// full of deprecation warnings. +@SuppressWarnings("deprecation") public class TranslatorTest { private static final String SKU_DETAIL_EXAMPLE_JSON = "{\"productId\":\"example\",\"type\":\"inapp\",\"price\":\"$0.99\",\"price_amount_micros\":990000,\"price_currency_code\":\"USD\",\"title\":\"Example title\",\"description\":\"Example description.\",\"original_price\":\"$0.99\",\"original_price_micros\":990000}"; @@ -41,7 +44,8 @@ public void setup() { @Test public void fromSkuDetail() throws JSONException { - final SkuDetails expected = new SkuDetails(SKU_DETAIL_EXAMPLE_JSON); + final com.android.billingclient.api.SkuDetails expected = + new com.android.billingclient.api.SkuDetails(SKU_DETAIL_EXAMPLE_JSON); Map serialized = Translator.fromSkuDetail(expected); @@ -52,9 +56,10 @@ public void fromSkuDetail() throws JSONException { public void fromSkuDetailsList() throws JSONException { final String SKU_DETAIL_EXAMPLE_2_JSON = "{\"productId\":\"example2\",\"type\":\"inapp\",\"price\":\"$0.99\",\"price_amount_micros\":990000,\"price_currency_code\":\"USD\",\"title\":\"Example title\",\"description\":\"Example description.\",\"original_price\":\"$0.99\",\"original_price_micros\":990000}"; - final List expected = + final List expected = Arrays.asList( - new SkuDetails(SKU_DETAIL_EXAMPLE_JSON), new SkuDetails(SKU_DETAIL_EXAMPLE_2_JSON)); + new com.android.billingclient.api.SkuDetails(SKU_DETAIL_EXAMPLE_JSON), + new com.android.billingclient.api.SkuDetails(SKU_DETAIL_EXAMPLE_2_JSON)); final List> serialized = Translator.fromSkuDetailsList(expected); @@ -169,7 +174,8 @@ public void currencyCodeFromSymbol() { } } - private void assertSerialized(SkuDetails expected, Map serialized) { + private void assertSerialized( + com.android.billingclient.api.SkuDetails expected, Map serialized) { assertEquals(expected.getDescription(), serialized.get("description")); assertEquals(expected.getFreeTrialPeriod(), serialized.get("freeTrialPeriod")); assertEquals(expected.getIntroductoryPrice(), serialized.get("introductoryPrice"));