소스 검색

Merge pull request #61 from ente-io/flutter-2.5.1

Upgrade Flutter to v2.5.1
Neeraj Gupta 3 년 전
부모
커밋
b7e3accb12
100개의 변경된 파일56개의 추가작업 그리고 4188개의 파일을 삭제
  1. 41 36
      lib/ui/image_editor_page.dart
  2. 12 12
      pubspec.lock
  3. 2 3
      pubspec.yaml
  4. 1 1
      thirdparty/extended_image
  5. 0 379
      thirdparty/in_app_purchase/CHANGELOG.md
  6. 0 25
      thirdparty/in_app_purchase/LICENSE
  7. 0 213
      thirdparty/in_app_purchase/README.md
  8. BIN
      thirdparty/in_app_purchase/android/.gradle/6.5.1/fileChanges/last-build.bin
  9. BIN
      thirdparty/in_app_purchase/android/.gradle/6.5.1/fileHashes/fileHashes.lock
  10. 0 0
      thirdparty/in_app_purchase/android/.gradle/6.5.1/gc.properties
  11. BIN
      thirdparty/in_app_purchase/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock
  12. 0 2
      thirdparty/in_app_purchase/android/.gradle/buildOutputCleanup/cache.properties
  13. BIN
      thirdparty/in_app_purchase/android/.gradle/checksums/checksums.lock
  14. 0 0
      thirdparty/in_app_purchase/android/.gradle/vcs-1/gc.properties
  15. 0 43
      thirdparty/in_app_purchase/android/build.gradle
  16. 0 1
      thirdparty/in_app_purchase/android/gradle.properties
  17. 0 7
      thirdparty/in_app_purchase/android/gradle/wrapper/gradle-wrapper.properties
  18. 0 1
      thirdparty/in_app_purchase/android/settings.gradle
  19. 0 3
      thirdparty/in_app_purchase/android/src/main/AndroidManifest.xml
  20. 0 26
      thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/BillingClientFactory.java
  21. 0 23
      thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/BillingClientFactoryImpl.java
  22. 0 106
      thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/InAppPurchasePlugin.java
  23. 0 403
      thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java
  24. 0 34
      thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/PluginPurchaseListener.java
  25. 0 121
      thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/Translator.java
  26. 0 8
      thirdparty/in_app_purchase/build.yaml
  27. 0 8
      thirdparty/in_app_purchase/example/.metadata
  28. 0 88
      thirdparty/in_app_purchase/example/README.md
  29. BIN
      thirdparty/in_app_purchase/example/android/.gradle/6.5.1/fileChanges/last-build.bin
  30. BIN
      thirdparty/in_app_purchase/example/android/.gradle/6.5.1/fileHashes/fileHashes.lock
  31. 0 0
      thirdparty/in_app_purchase/example/android/.gradle/6.5.1/gc.properties
  32. BIN
      thirdparty/in_app_purchase/example/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock
  33. 0 2
      thirdparty/in_app_purchase/example/android/.gradle/buildOutputCleanup/cache.properties
  34. BIN
      thirdparty/in_app_purchase/example/android/.gradle/checksums/checksums.lock
  35. 0 0
      thirdparty/in_app_purchase/example/android/.gradle/vcs-1/gc.properties
  36. 0 115
      thirdparty/in_app_purchase/example/android/app/build.gradle
  37. 0 5
      thirdparty/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties
  38. 0 48
      thirdparty/in_app_purchase/example/android/app/src/main/AndroidManifest.xml
  39. 0 20
      thirdparty/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
  40. 0 24
      thirdparty/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/inapppurchaseexample/EmbeddingV1Activity.java
  41. 0 18
      thirdparty/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/inapppurchaseexample/EmbeddingV1ActivityTest.java
  42. 0 17
      thirdparty/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/inapppurchaseexample/FlutterActivityTest.java
  43. 0 12
      thirdparty/in_app_purchase/example/android/app/src/main/res/drawable/launch_background.xml
  44. BIN
      thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  45. BIN
      thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  46. BIN
      thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  47. BIN
      thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  48. BIN
      thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  49. 0 8
      thirdparty/in_app_purchase/example/android/app/src/main/res/values/styles.xml
  50. 0 40
      thirdparty/in_app_purchase/example/android/app/src/test/java/io/flutter/plugins/inapppurchase/InAppPurchasePluginTest.java
  51. 0 802
      thirdparty/in_app_purchase/example/android/app/src/test/java/io/flutter/plugins/inapppurchase/MethodCallHandlerTest.java
  52. 0 213
      thirdparty/in_app_purchase/example/android/app/src/test/java/io/flutter/plugins/inapppurchase/TranslatorTest.java
  53. 0 1
      thirdparty/in_app_purchase/example/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
  54. 0 29
      thirdparty/in_app_purchase/example/android/build.gradle
  55. 0 4
      thirdparty/in_app_purchase/example/android/gradle.properties
  56. 0 6
      thirdparty/in_app_purchase/example/android/gradle/wrapper/gradle-wrapper.properties
  57. 0 7
      thirdparty/in_app_purchase/example/android/keystore.example.properties
  58. 0 2
      thirdparty/in_app_purchase/example/android/local.properties
  59. 0 15
      thirdparty/in_app_purchase/example/android/settings.gradle
  60. 0 26
      thirdparty/in_app_purchase/example/ios/Flutter/AppFrameworkInfo.plist
  61. 0 2
      thirdparty/in_app_purchase/example/ios/Flutter/Debug.xcconfig
  62. 0 14
      thirdparty/in_app_purchase/example/ios/Flutter/Generated.xcconfig
  63. 0 2
      thirdparty/in_app_purchase/example/ios/Flutter/Release.xcconfig
  64. 0 15
      thirdparty/in_app_purchase/example/ios/Flutter/flutter_export_environment.sh
  65. 0 45
      thirdparty/in_app_purchase/example/ios/Podfile
  66. 0 673
      thirdparty/in_app_purchase/example/ios/Runner.xcodeproj/project.pbxproj
  67. 0 7
      thirdparty/in_app_purchase/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  68. 0 97
      thirdparty/in_app_purchase/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  69. 0 10
      thirdparty/in_app_purchase/example/ios/Runner.xcworkspace/contents.xcworkspacedata
  70. 0 8
      thirdparty/in_app_purchase/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  71. 0 6
      thirdparty/in_app_purchase/example/ios/Runner/AppDelegate.h
  72. 0 13
      thirdparty/in_app_purchase/example/ios/Runner/AppDelegate.m
  73. 0 122
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  74. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
  75. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
  76. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
  77. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
  78. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
  79. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
  80. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
  81. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
  82. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
  83. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
  84. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
  85. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
  86. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
  87. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
  88. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
  89. 0 23
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
  90. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
  91. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
  92. BIN
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
  93. 0 5
      thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
  94. 0 37
      thirdparty/in_app_purchase/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
  95. 0 26
      thirdparty/in_app_purchase/example/ios/Runner/Base.lproj/Main.storyboard
  96. 0 17
      thirdparty/in_app_purchase/example/ios/Runner/GeneratedPluginRegistrant.h
  97. 0 33
      thirdparty/in_app_purchase/example/ios/Runner/GeneratedPluginRegistrant.m
  98. 0 45
      thirdparty/in_app_purchase/example/ios/Runner/Info.plist
  99. 0 9
      thirdparty/in_app_purchase/example/ios/Runner/main.m
  100. 0 22
      thirdparty/in_app_purchase/example/ios/in_app_purchase_pluginTests/Info.plist

+ 41 - 36
lib/ui/image_editor_page.dart

@@ -1,6 +1,6 @@
-import 'dart:convert';
 import 'dart:io';
 import 'dart:io';
 import 'dart:typed_data';
 import 'dart:typed_data';
+
 import 'package:extended_image/extended_image.dart';
 import 'package:extended_image/extended_image.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:image_editor/image_editor.dart';
 import 'package:image_editor/image_editor.dart';
@@ -38,12 +38,19 @@ class ImageEditorPage extends StatefulWidget {
 }
 }
 
 
 class _ImageEditorPageState extends State<ImageEditorPage> {
 class _ImageEditorPageState extends State<ImageEditorPage> {
+  static const double kBrightnessDefault = 1;
+  static const double kBrightnessMin = 0;
+  static const double kBrightnessMax = 2;
+  static const double kSaturationDefault = 1;
+  static const double kSaturationMin = 0;
+  static const double kSaturationMax = 2;
+
   final _logger = Logger("ImageEditor");
   final _logger = Logger("ImageEditor");
   final GlobalKey<ExtendedImageEditorState> editorKey =
   final GlobalKey<ExtendedImageEditorState> editorKey =
       GlobalKey<ExtendedImageEditorState>();
       GlobalKey<ExtendedImageEditorState>();
 
 
-  double _brightness = 0;
-  double _saturation = 0;
+  double _brightness = kBrightnessDefault;
+  double _saturation = kSaturationDefault;
   bool _hasEdited = false;
   bool _hasEdited = false;
 
 
   @override
   @override
@@ -68,8 +75,8 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
                     onPressed: () {
                     onPressed: () {
                       editorKey.currentState.reset();
                       editorKey.currentState.reset();
                       setState(() {
                       setState(() {
-                        _brightness = 0;
-                        _saturation = 0;
+                        _brightness = kBrightnessDefault;
+                        _saturation = kSaturationDefault;
                       });
                       });
                     },
                     },
                     icon: Icon(Icons.history),
                     icon: Icon(Icons.history),
@@ -77,29 +84,29 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
                 ]
                 ]
               : [],
               : [],
         ),
         ),
-        body: Container(
-          child: Column(
-            children: [
-              Expanded(child: _buildImage()),
-              Padding(padding: EdgeInsets.all(4)),
-              Column(
-                children: [
-                  _buildBrightness(),
-                  _buildSat(),
-                ],
-              ),
-              Padding(padding: EdgeInsets.all(8)),
-              _buildBottomBar(),
-              Padding(padding: EdgeInsets.all(Platform.isIOS ? 16 : 6)),
-            ],
-          ),
+        body: Column(
+          children: [
+            Expanded(child: _buildImage()),
+            Padding(padding: EdgeInsets.all(4)),
+            Column(
+              children: [
+                _buildBrightness(),
+                _buildSat(),
+              ],
+            ),
+            Padding(padding: EdgeInsets.all(8)),
+            _buildBottomBar(),
+            Padding(padding: EdgeInsets.all(Platform.isIOS ? 16 : 6)),
+          ],
         ),
         ),
       ),
       ),
     );
     );
   }
   }
 
 
   bool _hasBeenEdited() {
   bool _hasBeenEdited() {
-    return _hasEdited || _saturation != 0 || _brightness != 0;
+    return _hasEdited ||
+        _saturation != kSaturationDefault ||
+        _brightness != kBrightnessDefault;
   }
   }
 
 
   Widget _buildImage() {
   Widget _buildImage() {
@@ -145,7 +152,7 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
       onTap: () {
       onTap: () {
         flip();
         flip();
       },
       },
-      child: Container(
+      child: SizedBox(
         width: 80,
         width: 80,
         child: Column(
         child: Column(
           children: [
           children: [
@@ -178,7 +185,7 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
       onTap: () {
       onTap: () {
         rotate(false);
         rotate(false);
       },
       },
-      child: Container(
+      child: SizedBox(
         width: 80,
         width: 80,
         child: Column(
         child: Column(
           children: [
           children: [
@@ -204,7 +211,7 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
       onTap: () {
       onTap: () {
         rotate(true);
         rotate(true);
       },
       },
-      child: Container(
+      child: SizedBox(
         width: 80,
         width: 80,
         child: Column(
         child: Column(
           children: [
           children: [
@@ -230,7 +237,7 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
       onTap: () {
       onTap: () {
         _saveEdits();
         _saveEdits();
       },
       },
-      child: Container(
+      child: SizedBox(
         width: 80,
         width: 80,
         child: Column(
         child: Column(
           children: [
           children: [
@@ -283,13 +290,11 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
       option.addOption(RotateOption(radian.toInt()));
       option.addOption(RotateOption(radian.toInt()));
     }
     }
 
 
-    option.addOption(ColorOption.saturation(_saturation + 1));
-    option.addOption(ColorOption.brightness(_brightness + 1));
+    option.addOption(ColorOption.saturation(_saturation));
+    option.addOption(ColorOption.brightness(_brightness));
 
 
     option.outputFormat = const OutputFormat.png(88);
     option.outputFormat = const OutputFormat.png(88);
 
 
-    print(const JsonEncoder.withIndent('  ').convert(option.toJson()));
-
     final DateTime start = DateTime.now();
     final DateTime start = DateTime.now();
     final Uint8List result = await ImageEditor.editImage(
     final Uint8List result = await ImageEditor.editImage(
       image: img,
       image: img,
@@ -368,7 +373,7 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
       padding: EdgeInsets.fromLTRB(20, 0, 20, 0),
       padding: EdgeInsets.fromLTRB(20, 0, 20, 0),
       child: Row(
       child: Row(
         children: [
         children: [
-          Container(
+          SizedBox(
             width: 40,
             width: 40,
             child: Text(
             child: Text(
               "color",
               "color",
@@ -398,8 +403,8 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
                 value: _saturation,
                 value: _saturation,
                 enableTooltip: true,
                 enableTooltip: true,
                 stepSize: 0.01,
                 stepSize: 0.01,
-                min: -1.0,
-                max: 1.0,
+                min: kSaturationMin,
+                max: kSaturationMax,
               ),
               ),
             ),
             ),
           ),
           ),
@@ -413,7 +418,7 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
       padding: EdgeInsets.fromLTRB(20, 0, 20, 0),
       padding: EdgeInsets.fromLTRB(20, 0, 20, 0),
       child: Row(
       child: Row(
         children: [
         children: [
-          Container(
+          SizedBox(
             width: 40,
             width: 40,
             child: Text(
             child: Text(
               "light",
               "light",
@@ -443,8 +448,8 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
                 value: _brightness,
                 value: _brightness,
                 enableTooltip: true,
                 enableTooltip: true,
                 stepSize: 0.01,
                 stepSize: 0.01,
-                min: -1.0,
-                max: 1.0,
+                min: kBrightnessMin,
+                max: kBrightnessMax,
               ),
               ),
             ),
             ),
           ),
           ),

+ 12 - 12
pubspec.lock

@@ -28,7 +28,7 @@ packages:
       name: async
       name: async
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.6.1"
+    version: "2.8.1"
   background_fetch:
   background_fetch:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -63,7 +63,7 @@ packages:
       name: charcode
       name: charcode
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.2.0"
+    version: "1.3.1"
   chewie:
   chewie:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -233,7 +233,7 @@ packages:
       path: "thirdparty/extended_image"
       path: "thirdparty/extended_image"
       relative: true
       relative: true
     source: path
     source: path
-    version: "4.1.0"
+    version: "5.0.0"
   extended_image_library:
   extended_image_library:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -484,7 +484,7 @@ packages:
       name: image_editor
       name: image_editor
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.0"
+    version: "1.0.1"
   implicitly_animated_reorderable_list:
   implicitly_animated_reorderable_list:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -495,10 +495,10 @@ packages:
   in_app_purchase:
   in_app_purchase:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
-      path: "thirdparty/in_app_purchase"
-      relative: true
-    source: path
-    version: "0.3.6"
+      name: in_app_purchase
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.5.2"
   intl:
   intl:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -519,7 +519,7 @@ packages:
       name: json_annotation
       name: json_annotation
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.1.1"
+    version: "4.1.0"
   like_button:
   like_button:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -568,7 +568,7 @@ packages:
       name: meta
       name: meta
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.3.0"
+    version: "1.7.0"
   mime:
   mime:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -733,7 +733,7 @@ packages:
       name: photo_view
       name: photo_view
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.11.1"
+    version: "0.12.0"
   pie_chart:
   pie_chart:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -971,7 +971,7 @@ packages:
       name: test_api
       name: test_api
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.3.0"
+    version: "0.4.2"
   timezone:
   timezone:
     dependency: transitive
     dependency: transitive
     description:
     description:

+ 2 - 3
pubspec.yaml

@@ -60,8 +60,7 @@ dependencies:
   image: ^3.0.2
   image: ^3.0.2
   image_editor: ^1.0.0
   image_editor: ^1.0.0
   implicitly_animated_reorderable_list: ^0.4.0
   implicitly_animated_reorderable_list: ^0.4.0
-  in_app_purchase:
-    path: thirdparty/in_app_purchase
+  in_app_purchase: ^0.5.2
   intl: ^0.17.0
   intl: ^0.17.0
   like_button: ^2.0.2
   like_button: ^2.0.2
   loading_animations: ^2.1.0
   loading_animations: ^2.1.0
@@ -77,7 +76,7 @@ dependencies:
   pedantic: ^1.9.2
   pedantic: ^1.9.2
   photo_manager:
   photo_manager:
     git: "https://github.com/ente-io/flutter_photo_manager.git"
     git: "https://github.com/ente-io/flutter_photo_manager.git"
-  photo_view: ^0.11.1
+  photo_view: ^0.12.0
   pie_chart:
   pie_chart:
     git: "https://github.com/apgapg/pie_chart.git"
     git: "https://github.com/apgapg/pie_chart.git"
   pinput: ^1.2.0
   pinput: ^1.2.0

+ 1 - 1
thirdparty/extended_image

@@ -1 +1 @@
-Subproject commit aa16e0b23a70775110ff176ed28e0b7bb9071101
+Subproject commit 112cc8be0c2f07129edd7575003a3f9ddb62ae3f

+ 0 - 379
thirdparty/in_app_purchase/CHANGELOG.md

@@ -1,379 +0,0 @@
-## 0.3.6
-
-* Support InApp subscription upgrade/downgrade.
-
-## 0.3.5+1
-
-* Update the example app: remove the deprecated `RaisedButton` and `FlatButton` widgets.
-
-## 0.3.5
-
-* [Android] Fixed: added support for the SERVICE_TIMEOUT (-3) response code.
-
-## 0.3.4+18
-
-* Fix outdated links across a number of markdown files ([#3276](https://github.com/flutter/plugins/pull/3276))
-
-## 0.3.4+17
-
-* Update Flutter SDK constraint.
-
-## 0.3.4+16
-
-* Add Dartdocs to all public APIs.
-
-## 0.3.4+15
-
-* Update android compileSdkVersion to 29.
-
-## 0.3.4+14
-
-* Add test target to iOS example app Podfile
-
-## 0.3.4+13
-
-* Android Code Inspection and Clean up.
-
-## 0.3.4+12
-
-* [iOS] Fixed: finishing purchases upon payment dialog cancellation.
-
-## 0.3.4+11
-
-* [iOS] Fixed: crash when sending null for simulatesAskToBuyInSandbox parameter.
-
-## 0.3.4+10
-
-* Fixed typo 'verity' for 'verify'.
-
-## 0.3.4+9
-
-* [iOS] Fixed: purchase dialog not showing always.
-* [iOS] Fixed: completing purchases could fail.
-* [iOS] Fixed: restorePurchases caused hang (call never returned).
-
-## 0.3.4+8
-
-* [iOS] Fixed: purchase dialog not showing always.
-* [iOS] Fixed: completing purchases could fail.
-* [iOS] Fixed: restorePurchases caused hang (call never returned).
-
-## 0.3.4+7
-
-* iOS: Fix typo of the `simulatesAskToBuyInSandbox` key.
-
-## 0.3.4+6
-
-* iOS: Fix the bug that prevent restored subscription transactions from being completed
-
-## 0.3.4+5
-
-* Added necessary README docs for getting started with Android.
-
-## 0.3.4+4
-
-* Update package:e2e -> package:integration_test
-
-## 0.3.4+3
-
-* Fixed typo 'manuelly' for 'manually'.
-
-## 0.3.4+2
-
-* Update package:e2e reference to use the local version in the flutter/plugins
-  repository.
-
-## 0.3.4+1
-
-* iOS: Fix the bug that `SKPaymentQueueWrapper.transactions` doesn't return all transactions.
-* iOS: Fix the app crashes  if `InAppPurchaseConnection.instance` is called in the `main()`.
-
-## 0.3.4
-
-* Expose SKError code to client apps.
-
-## 0.3.3+2
-
-* Post-v2 Android embedding cleanups.
-
-## 0.3.3+1
-
-* Update documentations for `InAppPurchase.completePurchase` and update README.
-
-## 0.3.3
-
-* Introduce `SKPaymentQueueWrapper.transactions`.
-
-## 0.3.2+2
-
-* Fix CocoaPods podspec lint warnings.
-
-## 0.3.2+1
-
-* iOS: Fix only transactions with SKPaymentTransactionStatePurchased and SKPaymentTransactionStateFailed can be finished.
-* iOS: Only one pending transaction of a given product is allowed.
-
-## 0.3.2
-
-* Remove Android dependencies fallback.
-* Require Flutter SDK 1.12.13+hotfix.5 or greater.
-
-## 0.3.1+2
-
-* Fix potential casting crash on Android v1 embedding when registering life cycle callbacks.
-* Remove hard-coded legacy xcode build setting.
-
-## 0.3.1+1
-
-* Add `pedantic` to dev_dependency.
-
-## 0.3.1
-
-* Android: Fix a bug where the `BillingClient` is disconnected when app goes to the background.
-* Android: Make sure the `BillingClient` object is disconnected before the activity is destroyed.
-* Android: Fix minor compiler warning.
-* Fix typo in CHANGELOG.
-
-## 0.3.0+3
-
-* Fix pendingCompletePurchase flag status to allow to complete purchases.
-
-## 0.3.0+2
-
-* Update te example app to avoid using deprecated api.
-
-## 0.3.0+1
-
-* Fixing usage example. No functional changes.
-
-## 0.3.0
-
-* Migrate the `Google Play Library` to 2.0.3.
-     * Introduce a new class `BillingResultWrapper` which contains a detailed result of a BillingClient operation.
-          * **[Breaking Change]:**  All the BillingClient methods that previously return a `BillingResponse` now return a `BillingResultWrapper`, including: `launchBillingFlow`, `startConnection` and `consumeAsync`.
-          * **[Breaking Change]:**  The `SkuDetailsResponseWrapper` now contains a `billingResult` field in place of `billingResponse` field.
-          * A `billingResult` field is added to the `PurchasesResultWrapper`.
-     * Other Updates to the "billing_client_wrappers":
-          * Updates to the `PurchaseWrapper`: Add `developerPayload`, `purchaseState` and `isAcknowledged` fields.
-          * Updates to the `SkuDetailsWrapper`: Add `originalPrice` and `originalPriceAmountMicros` fields.
-          * **[Breaking Change]:** The `BillingClient.queryPurchaseHistory` is updated to return a `PurchasesHistoryResult`, which contains a list of `PurchaseHistoryRecordWrapper` instead of `PurchaseWrapper`. A `PurchaseHistoryRecordWrapper` object has the same fields and values as A `PurchaseWrapper` object, except that a `PurchaseHistoryRecordWrapper` object does not contain `isAutoRenewing`, `orderId` and `packageName`.
-          * Add a new `BillingClient.acknowledgePurchase` API. Starting from this version, the developer has to acknowledge any purchase on Android using this API within 3 days of purchase, or the user will be refunded. Note that if a product is "consumed" via `BillingClient.consumeAsync`, it is implicitly acknowledged.
-          * **[Breaking Change]:**  Added `enablePendingPurchases` in `BillingClientWrapper`. The application has to call this method before calling `BillingClientWrapper.startConnection`. See [enablePendingPurchases](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder.html#enablependingpurchases) for more information.
-     * Updates to the "InAppPurchaseConnection":
-          * **[Breaking Change]:** `InAppPurchaseConnection.completePurchase` now returns a `Future<BillingResultWrapper>` instead of `Future<void>`. A new optional parameter `{String developerPayload}` has also been added to the API. On Android, this API does not throw an exception anymore, it instead acknowledge the purchase. If a purchase is not completed within 3 days on Android, the user will be refunded.
-          * **[Breaking Change]:** `InAppPurchaseConnection.consumePurchase` now returns a `Future<BillingResultWrapper>` instead of `Future<BillingResponse>`. A new optional parameter `{String developerPayload}` has also been added to the API.
-          * A new boolean field `pendingCompletePurchase` has been added to the `PurchaseDetails` class. Which can be used as an indicator of whether to call `InAppPurchaseConnection.completePurchase` on the purchase.
-          * **[Breaking Change]:**  Added `enablePendingPurchases` in `InAppPurchaseConnection`. The application has to call this method when initializing the `InAppPurchaseConnection` on Android. See [enablePendingPurchases](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder.html#enablependingpurchases) for more information.
-     * Misc: Some documentation updates reflecting the `BillingClient` migration and some documentation fixes.
-     * Refer to [Google Play Billing Library Release Note](https://developer.android.com/google/play/billing/billing_library_releases_notes#release-2_0) for a detailed information on the update.
-
-## 0.2.2+6
-
-* Correct a comment.
-
-## 0.2.2+5
-
-* Update version of json_annotation to ^3.0.0 and json_serializable to ^3.2.0. Resolve conflicts with other packages e.g. flutter_tools from sdk.
-
-## 0.2.2+4
-
-* Remove the deprecated `author:` field from pubspec.yaml
-* Migrate the plugin to the pubspec platforms manifest.
-* Require Flutter SDK 1.10.0 or greater.
-
-## 0.2.2+3
-
-* Fix failing pedantic lints. None of these fixes should have any change in
-  functionality.
-
-## 0.2.2+2
-
-* Include lifecycle dependency as a compileOnly one on Android to resolve
-  potential version conflicts with other transitive libraries.
-
-## 0.2.2+1
-
-* Android: Use android.arch.lifecycle instead of androidx.lifecycle:lifecycle in `build.gradle` to support apps that has not been migrated to AndroidX.
-
-## 0.2.2
-
-* Support the v2 Android embedder.
-* Update to AndroidX.
-* Migrate to using the new e2e test binding.
-* Add a e2e test.
-
-## 0.2.1+5
-
-* Define clang module for iOS.
-* Fix iOS build warning.
-
-## 0.2.1+4
-
-* Update and migrate iOS example project.
-
-## 0.2.1+3
-
-* Android : Improved testability.
-
-## 0.2.1+2
-
-* Android: Require a non-null Activity to use the `launchBillingFlow` method.
-
-## 0.2.1+1
-
-* Remove skipped driver test.
-
-## 0.2.1
-
-* iOS: Add currencyCode to priceLocale on productDetails.
-
-## 0.2.0+8
-
-* Add dependency on `androidx.annotation:annotation:1.0.0`.
-
-## 0.2.0+7
-
-* Make Gradle version compatible with the Android Gradle plugin version.
-
-## 0.2.0+6
-
-* Add missing `hashCode` implementations.
-
-## 0.2.0+5
-
-* iOS: Support unsupported UserInfo value types on NSError.
-
-## 0.2.0+4
-
-* Fixed code error in `README.md` and adjusted links to work on Pub.
-
-## 0.2.0+3
-
-* Update the `README.md` so that the code samples compile with the latest Flutter/Dart version.
-
-## 0.2.0+2
-
-* Fix a google_play_connection purchase update listener regression introduced in 0.2.0+1.
-
-## 0.2.0+1
-
-* Fix an issue the type is not casted before passing to `PurchasesResultWrapper.fromJson`.
-
-## 0.2.0
-
-* [Breaking Change] Rename 'PurchaseError' to 'IAPError'.
-* [Breaking Change] Rename 'PurchaseSource' to 'IAPSource'.
-
-## 0.1.1+3
-
-* Expanded description in `pubspec.yaml` and fixed typo in `README.md`.
-
-## 0.1.1+2
-
-* Add missing template type parameter to `invokeMethod` calls.
-* Bump minimum Flutter version to 1.5.0.
-* Replace invokeMethod with invokeMapMethod wherever necessary.
-
-## 0.1.1+1
-
-* Make `AdditionalSteps`(Used in the unit test) a void function.
-
-## 0.1.1
-
-* Some error messages from iOS are slightly changed.
-* `ProductDetailsResponse` returned by `queryProductDetails()` now contains an `PurchaseError` object that represents any error that might occurred during the request.
-* If the device is not connected to the internet, `queryPastPurchases()` on iOS now have the error stored in the response instead of throwing.
-* Clean up minor iOS warning.
-* Example app shows how to handle error when calling `queryProductDetails()` and `queryProductDetails()`.
-
-## 0.1.0+4
-
-* Change the `buy` methods to return `Future<bool>` instead of `void` in order
-  to propagate `launchBillingFlow` failures up through `google_play_connection`.
-
-## 0.1.0+3
-
-* Guard against multiple onSetupFinished() calls.
-
-## 0.1.0+2
-
-* Fix bug where error only purchases updates weren't propagated correctly in
-  `google_play_connection.dart`.
-
-## 0.1.0+1
-
-* Add more consumable handling to the example app.
-
-## 0.1.0
-
-Beta release.
-
-* Ability to list products, load previous purchases, and make purchases.
-* Simplified Dart API that's been unified for ease of use.
-* Platform specific APIs more directly exposing `StoreKit` and `BillingClient`.
-
-Includes:
-
-* 5ba657dc [in_app_purchase] Remove extraneous download logic (#1560)
-* 01bb8796 [in_app_purchase] Minor doc updates (#1555)
-* 1a4d493f [in_app_purchase] Only fetch owned purchases (#1540)
-* d63c51cf [in_app_purchase] Add auto-consume errors to PurchaseDetails (#1537)
-* 959da97f [in_app_purchase] Minor doc updates (#1536)
-* b82ae1a6 [in_app_purchase] Rename the unified API (#1517)
-* d1ad723a [in_app_purchase]remove SKDownloadWrapper and related code. (#1474)
-* 7c1e8b8a [in_app_purchase]make payment unified APIs (#1421)
-* 80233db6 [in_app_purchase] Add references to the original object for PurchaseDetails and ProductDetails (#1448)
-* 8c180f0d [in_app_purchase]load purchase (#1380)
-* e9f141bc [in_app_purchase] Iap refactor (#1381)
-* d3b3d60c add driver test command to cirrus (#1342)
-* aee12523 [in_app_purchase] refactoring and tests (#1322)
-* 6d7b4592 [in_app_purchase] Adds Dart BillingClient APIs for loading purchases (#1286)
-* 5567a9c8 [in_app_purchase]retrieve receipt (#1303)
-* 3475f1b7 [in_app_purchase]restore purchases (#1299)
-* a533148d [in_app_purchase] payment queue dart ios (#1249)
-* 10030840 [in_app_purchase] Minor bugfixes and code cleanup (#1284)
-* 347f508d [in_app_purchase] Fix CI formatting errors. (#1281)
-* fad02d87 [in_app_purchase] Java API for querying purchases (#1259)
-* bc501915 [In_app_purchase]SKProduct related fixes (#1252)
-* f92ba3a1 IAP make payment objc (#1231)
-* 62b82522 [IAP] Add the Dart API for launchBillingFlow (#1232)
-* b40a4acf [IAP] Add Java call for launchBillingFlow (#1230)
-* 4ff06cd1 [In_app_purchase]remove categories (#1222)
-* 0e72ca56 [In_app_purchase]fix requesthandler crash (#1199)
-* 81dff2be Iap getproductlist basic draft (#1169)
-* db139b28 Iap iOS add payment dart wrappers (#1178)
-* 2e5fbb9b Fix the param map passed down to the platform channel when calling querySkuDetails (#1194)
-* 4a84bac1 Mark some packages as unpublishable (#1193)
-* 51696552 Add a gradle warning to the AndroidX plugins (#1138)
-* 832ab832 Iap add payment objc translators (#1172)
-* d0e615cf Revert "IAP add payment translators in objc (#1126)" (#1171)
-* 09a5a36e IAP add payment translators in objc (#1126)
-* a100fbf9 Expose nslocale and expose currencySymbol instead of currencyCode to match android (#1162)
-* 1c982efd Using json serializer for skproduct wrapper and related classes (#1147)
-* 3039a261 Iap productlist ios (#1068)
-* 2a1593da [IAP] Update dev deps to match flutter_driver (#1118)
-* 9f87cbe5 [IAP] Update README (#1112)
-* 59e84d85 Migrate independent plugins to AndroidX (#1103)
-* a027ccd6 [IAP] Generate boilerplate serializers (#1090)
-* 909cf1c2 [IAP] Fetch SkuDetails from Google Play (#1084)
-* 6bbaa7e5 [IAP] Add missing license headers (#1083)
-* 5347e877 [IAP] Clean up Dart unit tests (#1082)
-* fe03e407 [IAP] Check if the payment processor is available (#1057)
-* 43ee28cf Fix `Manifest versionCode not found` (#1076)
-* 4d702ad7 Supress `strong_mode_implicit_dynamic_method` for `invokeMethod` calls. (#1065)
-* 809ccde7 Doc and build script updates to the IAP plugin (#1024)
-* 052b71a9 Update the IAP README (#933)
-* 54f9c4e2 Upgrade Android Gradle Plugin to 3.2.1 (#916)
-* ced3e99d Set all gradle-wrapper versions to 4.10.2 (#915)
-* eaa1388b Reconfigure Cirrus to use clang 7 (#905)
-* 9b153920 Update gradle dependencies. (#881)
-* 1aef7d92 Enable lint unnecessary_new (#701)
-
-## 0.0.2
-
-* Added missing flutter_test package dependency.
-* Added missing flutter version requirements.
-
-## 0.0.1
-
-* Initial release.

+ 0 - 25
thirdparty/in_app_purchase/LICENSE

@@ -1,25 +0,0 @@
-Copyright 2018 The Chromium Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of Google Inc. nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 0 - 213
thirdparty/in_app_purchase/README.md

@@ -1,213 +0,0 @@
-# In App Purchase
-
-A Flutter plugin for in-app purchases. Exposes APIs for making in-app purchases
-through the App Store (on iOS) and Google Play (on Android).
-
-## Features
-
-Add this to your Flutter app to:
-
-1. Show in app products that are available for sale from the underlying shop.
-   Includes consumables, permanent upgrades, and subscriptions.
-2. Load in app products currently owned by the user according to the underlying
-   shop.
-3. Send your user to the underlying store to purchase your products.
-
-## Getting Started
-
-This plugin is in beta. Please use with caution and file any potential issues
-you see on our [issue tracker](https://github.com/flutter/flutter/issues/new/choose).
-
-This plugin relies on the App Store and Google Play for making in app purchases.
-It exposes a unified surface, but you'll still need to understand and configure
-your app with each store to handle purchases using them. Both have extensive
-guides:
-
-* [In-App Purchase (App Store)](https://developer.apple.com/in-app-purchase/)
-* [Google Play Biling Overview](https://developer.android.com/google/play/billing/billing_overview)
-
-You can check out the [example app README](https://github.com/flutter/plugins/blob/master/packages/in_app_purchase/example/README.md) for steps on how
-to configure in app purchases in both stores.
-
-Once you've configured your in app purchases in their respective stores, you're
-able to start using the plugin. There's two basic options available to you to
-use.
-
-1. [in_app_purchase.dart](https://github.com/flutter/plugins/tree/master/packages/in_app_purchase/lib/src/in_app_purchase),
-   the generic idiommatic Flutter API. This exposes the most basic IAP-related
-   functionality. The goal is that Flutter apps should be able to use this API
-   surface on its own for the vast majority of cases. If you use this you should
-   be able to handle most use cases for loading and making purchases. If you would
-   like a more platform dependent approach, we also provide the second option as
-   below.
-
-2. Dart APIs exposing the underlying platform APIs as directly as possible:
-   [store_kit_wrappers.dart](https://github.com/flutter/plugins/blob/master/packages/in_app_purchase/lib/src/store_kit_wrappers) and
-   [billing_client_wrappers.dart](https://github.com/flutter/plugins/blob/master/packages/in_app_purchase/lib/src/billing_client_wrappers). These
-   API surfaces should expose all the platform-specific behavior and allow for
-   more fine-tuned control when needed. However if you use this you'll need to
-   code your purchase handling logic significantly differently depending on
-   which platform you're on.
-
-### Initializing the plugin
-
-```dart
-void main() {
-  // Inform the plugin that this app supports pending purchases on Android.
-  // An error will occur on Android if you access the plugin `instance`
-  // without this call.
-  //
-  // On iOS this is a no-op.
-  InAppPurchaseConnection.enablePendingPurchases();
-  
-  runApp(MyApp());
-}
-```
-
-```dart
-// Subscribe to any incoming purchases at app initialization. These can
-// propagate from either storefront so it's important to listen as soon as
-// possible to avoid losing events.
-class _MyAppState extends State<MyApp> {
-  StreamSubscription<List<PurchaseDetails>> _subscription;
-
-  @override
-  void initState() {
-    final Stream purchaseUpdates =
-        InAppPurchaseConnection.instance.purchaseUpdatedStream;
-    _subscription = purchaseUpdates.listen((purchases) {
-      _handlePurchaseUpdates(purchases);
-    });
-    super.initState();
-  }
-
-  @override
-  void dispose() {
-    _subscription.cancel();
-    super.dispose();
-  }
-```
-
-### Connecting to the Storefront
-
-```dart
-final bool available = await InAppPurchaseConnection.instance.isAvailable();
-if (!available) {
-  // The store cannot be reached or accessed. Update the UI accordingly.
-}
-```
-
-### Loading products for sale
-
-```dart
-// Set literals require Dart 2.2. Alternatively, use `Set<String> _kIds = <String>['product1', 'product2'].toSet()`.
-const Set<String> _kIds = {'product1', 'product2'};
-final ProductDetailsResponse response = await InAppPurchaseConnection.instance.queryProductDetails(_kIds);
-if (response.notFoundIDs.isNotEmpty) {
-    // Handle the error.
-}
-List<ProductDetails> products = response.productDetails;
-```
-
-### Loading previous purchases
-
-```dart
-final QueryPurchaseDetailsResponse response = await InAppPurchaseConnection.instance.queryPastPurchases();
-if (response.error != null) {
-    // Handle the error.
-}
-for (PurchaseDetails purchase in response.pastPurchases) {
-    _verifyPurchase(purchase);  // Verify the purchase following the best practices for each storefront.
-    _deliverPurchase(purchase); // Deliver the purchase to the user in your app.
-    if (Platform.isIOS) {
-        // Mark that you've delivered the purchase. Only the App Store requires
-        // this final confirmation.
-        InAppPurchaseConnection.instance.completePurchase(purchase);
-    }
-}
-```
-
-Note that the App Store does not have any APIs for querying consumable
-products, and Google Play considers consumable products to no longer be owned
-once they're marked as consumed and fails to return them here. For restoring
-these across devices you'll need to persist them on your own server and query
-that as well.
-
-### Listening to purchase updates
-
-You should always start listening to purchase update as early as possible to be able
-to catch all purchase updates, including the ones from the previous app session.
-To listen to the update:
-
-```dart
-  Stream purchaseUpdated =
-      InAppPurchaseConnection.instance.purchaseUpdatedStream;
-  _subscription = purchaseUpdated.listen((purchaseDetailsList) {
-    _listenToPurchaseUpdated(purchaseDetailsList);
-  }, onDone: () {
-    _subscription.cancel();
-  }, onError: (error) {
-    // handle error here.
-  });
-```
-
-### Making a purchase
-
-Both storefronts handle consumable and non-consumable products differently. If
-you're using `InAppPurchaseConnection`, you need to make a distinction here and
-call the right purchase method for each type.
-
-```dart
-final ProductDetails productDetails = ... // Saved earlier from queryPastPurchases().
-final PurchaseParam purchaseParam = PurchaseParam(productDetails: productDetails);
-if (_isConsumable(productDetails)) {
-    InAppPurchaseConnection.instance.buyConsumable(purchaseParam: purchaseParam);
-} else {
-    InAppPurchaseConnection.instance.buyNonConsumable(purchaseParam: purchaseParam);
-}
-// From here the purchase flow will be handled by the underlying storefront.
-// Updates will be delivered to the `InAppPurchaseConnection.instance.purchaseUpdatedStream`.
-```
-
-### Complete a purchase
-
-The `InAppPurchaseConnection.purchaseUpdatedStream` will send purchase updates after
-you initiate the purchase flow using `InAppPurchaseConnection.buyConsumable` or `InAppPurchaseConnection.buyNonConsumable`.
-After delivering the content to the user, you need to call `InAppPurchaseConnection.completePurchase` to tell the `GooglePlay`
-and `AppStore` that the purchase has been finished.
-
-WARNING! Failure to call `InAppPurchaseConnection.completePurchase` and get a successful response within 3 days of the purchase will result a refund.
-
-### Upgrading or Downgrading an existing InApp Subscription
-
-In order to upgrade/downgrade an existing InApp subscription on `PlayStore`, 
-you need to provide an instance of `ChangeSubscriptionParam` with the old 
-`PurchaseDetails` that the user needs to migrate from, and an optional `ProrationMode`
-with the `PurchaseParam` object while calling `InAppPurchaseConnection.buyNonConsumable`.
-`AppStore` does not require this since they provides a subscription grouping mechanism. 
-Each subscription you offer must be assigned to a subscription group. 
-So the developers can group related subscriptions together to prevents users from 
-accidentally purchasing multiple subscriptions.
-Please refer to the 'Creating a Subscription Group' sections of [Apple's subscription guide](https://developer.apple.com/app-store/subscriptions/)
-
-
-```dart
-final PurchaseDetails oldPurchaseDetails = ...;
-PurchaseParam purchaseParam = PurchaseParam(
-    productDetails: productDetails,
-    changeSubscriptionParam: ChangeSubscriptionParam(
-        oldPurchaseDetails: oldPurchaseDetails,
-        prorationMode: ProrationMode.immediateAndChargeProratedPrice));
-InAppPurchaseConnection.instance
-    .buyNonConsumable(purchaseParam: purchaseParam);
-```
-
-## Development
-
-This plugin uses
-[json_serializable](https://pub.dev/packages/json_serializable) for the
-many data structs passed between the underlying platform layers and Dart. After
-editing any of the serialized data structs, rebuild the serializers by running
-`flutter packages pub run build_runner build --delete-conflicting-outputs`.
-`flutter packages pub run build_runner watch --delete-conflicting-outputs` will
-watch the filesystem for changes.

BIN
thirdparty/in_app_purchase/android/.gradle/6.5.1/fileChanges/last-build.bin


BIN
thirdparty/in_app_purchase/android/.gradle/6.5.1/fileHashes/fileHashes.lock


+ 0 - 0
thirdparty/in_app_purchase/android/.gradle/6.5.1/gc.properties


BIN
thirdparty/in_app_purchase/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock


+ 0 - 2
thirdparty/in_app_purchase/android/.gradle/buildOutputCleanup/cache.properties

@@ -1,2 +0,0 @@
-#Fri Mar 19 17:11:48 IST 2021
-gradle.version=6.5.1

BIN
thirdparty/in_app_purchase/android/.gradle/checksums/checksums.lock


+ 0 - 0
thirdparty/in_app_purchase/android/.gradle/vcs-1/gc.properties


+ 0 - 43
thirdparty/in_app_purchase/android/build.gradle

@@ -1,43 +0,0 @@
-group 'io.flutter.plugins.inapppurchase'
-version '1.0-SNAPSHOT'
-
-buildscript {
-    repositories {
-        google()
-        jcenter()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:3.3.0'
-    }
-}
-
-rootProject.allprojects {
-    repositories {
-        google()
-        jcenter()
-    }
-}
-
-apply plugin: 'com.android.library'
-
-android {
-    compileSdkVersion 29
-
-    defaultConfig {
-        minSdkVersion 16
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-    }
-    lintOptions {
-        disable 'InvalidPackage'
-    }
-}
-
-dependencies {
-    implementation 'androidx.annotation:annotation:1.0.0'
-    implementation 'com.android.billingclient:billing:2.0.3'
-    testImplementation 'junit:junit:4.12'
-    testImplementation 'org.mockito:mockito-core:2.17.0'
-    androidTestImplementation 'androidx.test:runner:1.1.1'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
-}

+ 0 - 1
thirdparty/in_app_purchase/android/gradle.properties

@@ -1 +0,0 @@
-org.gradle.jvmargs=-Xmx1536M

+ 0 - 7
thirdparty/in_app_purchase/android/gradle/wrapper/gradle-wrapper.properties

@@ -1,7 +0,0 @@
-#Mon Oct 29 10:30:44 PDT 2018
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
-distributionSha256Sum=10065868c78f1207afb3a92176f99a37d753a513dff453abb6b5cceda4058cda

+ 0 - 1
thirdparty/in_app_purchase/android/settings.gradle

@@ -1 +0,0 @@
-rootProject.name = 'in_app_purchase'

+ 0 - 3
thirdparty/in_app_purchase/android/src/main/AndroidManifest.xml

@@ -1,3 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-  package="io.flutter.plugins.inapppurchase">
-</manifest>

+ 0 - 26
thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/BillingClientFactory.java

@@ -1,26 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchase;
-
-import android.content.Context;
-import androidx.annotation.NonNull;
-import com.android.billingclient.api.BillingClient;
-import io.flutter.plugin.common.MethodChannel;
-
-/** Responsible for creating a {@link BillingClient} object. */
-interface BillingClientFactory {
-
-  /**
-   * Creates and returns a {@link BillingClient}.
-   *
-   * @param context The context used to create the {@link BillingClient}.
-   * @param channel The method channel used to create the {@link BillingClient}.
-   * @param enablePendingPurchases Whether to enable pending purchases. Throws an exception if it is
-   *     false.
-   * @return The {@link BillingClient} object that is created.
-   */
-  BillingClient createBillingClient(
-      @NonNull Context context, @NonNull MethodChannel channel, boolean enablePendingPurchases);
-}

+ 0 - 23
thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/BillingClientFactoryImpl.java

@@ -1,23 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchase;
-
-import android.content.Context;
-import com.android.billingclient.api.BillingClient;
-import io.flutter.plugin.common.MethodChannel;
-
-/** The implementation for {@link BillingClientFactory} for the plugin. */
-final class BillingClientFactoryImpl implements BillingClientFactory {
-
-  @Override
-  public BillingClient createBillingClient(
-      Context context, MethodChannel channel, boolean enablePendingPurchases) {
-    BillingClient.Builder builder = BillingClient.newBuilder(context);
-    if (enablePendingPurchases) {
-      builder.enablePendingPurchases();
-    }
-    return builder.setListener(new PluginPurchaseListener(channel)).build();
-  }
-}

+ 0 - 106
thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/InAppPurchasePlugin.java

@@ -1,106 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchase;
-
-import android.app.Activity;
-import android.app.Application;
-import android.content.Context;
-import androidx.annotation.VisibleForTesting;
-import com.android.billingclient.api.BillingClient;
-import io.flutter.embedding.engine.plugins.FlutterPlugin;
-import io.flutter.embedding.engine.plugins.activity.ActivityAware;
-import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
-import io.flutter.plugin.common.BinaryMessenger;
-import io.flutter.plugin.common.MethodChannel;
-
-/** Wraps a {@link BillingClient} instance and responds to Dart calls for it. */
-public class InAppPurchasePlugin implements FlutterPlugin, ActivityAware {
-
-  @VisibleForTesting
-  static final class MethodNames {
-    static final String IS_READY = "BillingClient#isReady()";
-    static final String START_CONNECTION =
-        "BillingClient#startConnection(BillingClientStateListener)";
-    static final String END_CONNECTION = "BillingClient#endConnection()";
-    static final String ON_DISCONNECT = "BillingClientStateListener#onBillingServiceDisconnected()";
-    static final String QUERY_SKU_DETAILS =
-        "BillingClient#querySkuDetailsAsync(SkuDetailsParams, SkuDetailsResponseListener)";
-    static final String LAUNCH_BILLING_FLOW =
-        "BillingClient#launchBillingFlow(Activity, BillingFlowParams)";
-    static final String ON_PURCHASES_UPDATED =
-        "PurchasesUpdatedListener#onPurchasesUpdated(int, List<Purchase>)";
-    static final String QUERY_PURCHASES = "BillingClient#queryPurchases(String)";
-    static final String QUERY_PURCHASE_HISTORY_ASYNC =
-        "BillingClient#queryPurchaseHistoryAsync(String, PurchaseHistoryResponseListener)";
-    static final String CONSUME_PURCHASE_ASYNC =
-        "BillingClient#consumeAsync(String, ConsumeResponseListener)";
-    static final String ACKNOWLEDGE_PURCHASE =
-        "BillingClient#(AcknowledgePurchaseParams params, (AcknowledgePurchaseParams, AcknowledgePurchaseResponseListener)";
-
-    private MethodNames() {};
-  }
-
-  private MethodChannel methodChannel;
-  private MethodCallHandlerImpl methodCallHandler;
-
-  /** Plugin registration. */
-  @SuppressWarnings("deprecation")
-  public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
-    InAppPurchasePlugin plugin = new InAppPurchasePlugin();
-    plugin.setupMethodChannel(registrar.activity(), registrar.messenger(), registrar.context());
-    ((Application) registrar.context().getApplicationContext())
-        .registerActivityLifecycleCallbacks(plugin.methodCallHandler);
-  }
-
-  @Override
-  public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) {
-    setupMethodChannel(
-        /*activity=*/ null, binding.getBinaryMessenger(), binding.getApplicationContext());
-  }
-
-  @Override
-  public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) {
-    teardownMethodChannel();
-  }
-
-  @Override
-  public void onAttachedToActivity(ActivityPluginBinding binding) {
-    methodCallHandler.setActivity(binding.getActivity());
-  }
-
-  @Override
-  public void onDetachedFromActivity() {
-    methodCallHandler.setActivity(null);
-    methodCallHandler.onDetachedFromActivity();
-  }
-
-  @Override
-  public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {
-    onAttachedToActivity(binding);
-  }
-
-  @Override
-  public void onDetachedFromActivityForConfigChanges() {
-    methodCallHandler.setActivity(null);
-  }
-
-  private void setupMethodChannel(Activity activity, BinaryMessenger messenger, Context context) {
-    methodChannel = new MethodChannel(messenger, "plugins.flutter.io/in_app_purchase");
-    methodCallHandler =
-        new MethodCallHandlerImpl(activity, context, methodChannel, new BillingClientFactoryImpl());
-    methodChannel.setMethodCallHandler(methodCallHandler);
-  }
-
-  private void teardownMethodChannel() {
-    methodChannel.setMethodCallHandler(null);
-    methodChannel = null;
-    methodCallHandler = null;
-  }
-
-  @VisibleForTesting
-  void setMethodCallHandler(MethodCallHandlerImpl methodCallHandler) {
-    this.methodCallHandler = methodCallHandler;
-  }
-}

+ 0 - 403
thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/MethodCallHandlerImpl.java

@@ -1,403 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchase;
-
-import static io.flutter.plugins.inapppurchase.Translator.fromPurchaseHistoryRecordList;
-import static io.flutter.plugins.inapppurchase.Translator.fromPurchasesResult;
-import static io.flutter.plugins.inapppurchase.Translator.fromSkuDetailsList;
-
-import android.app.Activity;
-import android.app.Application;
-import android.content.Context;
-import android.os.Bundle;
-import android.util.Log;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.android.billingclient.api.AcknowledgePurchaseParams;
-import com.android.billingclient.api.AcknowledgePurchaseResponseListener;
-import com.android.billingclient.api.BillingClient;
-import com.android.billingclient.api.BillingClientStateListener;
-import com.android.billingclient.api.BillingFlowParams;
-import com.android.billingclient.api.BillingFlowParams.ProrationMode;
-import com.android.billingclient.api.BillingResult;
-import com.android.billingclient.api.ConsumeParams;
-import com.android.billingclient.api.ConsumeResponseListener;
-import com.android.billingclient.api.PurchaseHistoryRecord;
-import com.android.billingclient.api.PurchaseHistoryResponseListener;
-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;
-import java.util.List;
-import java.util.Map;
-
-/** Handles method channel for the plugin. */
-class MethodCallHandlerImpl
-    implements MethodChannel.MethodCallHandler, Application.ActivityLifecycleCallbacks {
-
-  private static final String TAG = "InAppPurchasePlugin";
-  private static final String LOAD_SKU_DOC_URL =
-      "https://github.com/flutter/plugins/blob/master/packages/in_app_purchase/README.md#loading-products-for-sale";
-
-  @Nullable private BillingClient billingClient;
-  private final BillingClientFactory billingClientFactory;
-
-  @Nullable private Activity activity;
-  private final Context applicationContext;
-  private final MethodChannel methodChannel;
-
-  private HashMap<String, SkuDetails> cachedSkus = new HashMap<>();
-
-  /** Constructs the MethodCallHandlerImpl */
-  MethodCallHandlerImpl(
-      @Nullable Activity activity,
-      @NonNull Context applicationContext,
-      @NonNull MethodChannel methodChannel,
-      @NonNull BillingClientFactory billingClientFactory) {
-    this.billingClientFactory = billingClientFactory;
-    this.applicationContext = applicationContext;
-    this.activity = activity;
-    this.methodChannel = methodChannel;
-  }
-
-  /**
-   * Sets the activity. Should be called as soon as the the activity is available. When the activity
-   * becomes unavailable, call this method again with {@code null}.
-   */
-  void setActivity(@Nullable Activity activity) {
-    this.activity = activity;
-  }
-
-  @Override
-  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
-
-  @Override
-  public void onActivityStarted(Activity activity) {}
-
-  @Override
-  public void onActivityResumed(Activity activity) {}
-
-  @Override
-  public void onActivityPaused(Activity activity) {}
-
-  @Override
-  public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
-
-  @Override
-  public void onActivityDestroyed(Activity activity) {
-    if (this.activity == activity && this.applicationContext != null) {
-      ((Application) this.applicationContext).unregisterActivityLifecycleCallbacks(this);
-      endBillingClientConnection();
-    }
-  }
-
-  @Override
-  public void onActivityStopped(Activity activity) {}
-
-  void onDetachedFromActivity() {
-    endBillingClientConnection();
-  }
-
-  @Override
-  public void onMethodCall(MethodCall call, MethodChannel.Result result) {
-    switch (call.method) {
-      case InAppPurchasePlugin.MethodNames.IS_READY:
-        isReady(result);
-        break;
-      case InAppPurchasePlugin.MethodNames.START_CONNECTION:
-        startConnection(
-            (int) call.argument("handle"),
-            (boolean) call.argument("enablePendingPurchases"),
-            result);
-        break;
-      case InAppPurchasePlugin.MethodNames.END_CONNECTION:
-        endConnection(result);
-        break;
-      case InAppPurchasePlugin.MethodNames.QUERY_SKU_DETAILS:
-        List<String> skusList = call.argument("skusList");
-        querySkuDetailsAsync((String) call.argument("skuType"), skusList, result);
-        break;
-      case InAppPurchasePlugin.MethodNames.LAUNCH_BILLING_FLOW:
-        launchBillingFlow(
-            (String) call.argument("sku"),
-            (String) call.argument("accountId"),
-            (String) call.argument("oldSku"),
-            call.hasArgument("prorationMode")
-                ? (int) call.argument("prorationMode")
-                : ProrationMode.UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY,
-            result);
-        break;
-      case InAppPurchasePlugin.MethodNames.QUERY_PURCHASES:
-        queryPurchases((String) call.argument("skuType"), result);
-        break;
-      case InAppPurchasePlugin.MethodNames.QUERY_PURCHASE_HISTORY_ASYNC:
-        queryPurchaseHistoryAsync((String) call.argument("skuType"), result);
-        break;
-      case InAppPurchasePlugin.MethodNames.CONSUME_PURCHASE_ASYNC:
-        consumeAsync(
-            (String) call.argument("purchaseToken"),
-            (String) call.argument("developerPayload"),
-            result);
-        break;
-      case InAppPurchasePlugin.MethodNames.ACKNOWLEDGE_PURCHASE:
-        acknowledgePurchase(
-            (String) call.argument("purchaseToken"),
-            (String) call.argument("developerPayload"),
-            result);
-        break;
-      default:
-        result.notImplemented();
-    }
-  }
-
-  private void endConnection(final MethodChannel.Result result) {
-    endBillingClientConnection();
-    result.success(null);
-  }
-
-  private void endBillingClientConnection() {
-    if (billingClient != null) {
-      billingClient.endConnection();
-      billingClient = null;
-    }
-  }
-
-  private void isReady(MethodChannel.Result result) {
-    if (billingClientError(result)) {
-      return;
-    }
-
-    result.success(billingClient.isReady());
-  }
-
-  private void querySkuDetailsAsync(
-      final String skuType, final List<String> skusList, final MethodChannel.Result result) {
-    if (billingClientError(result)) {
-      return;
-    }
-
-    SkuDetailsParams params =
-        SkuDetailsParams.newBuilder().setType(skuType).setSkusList(skusList).build();
-    billingClient.querySkuDetailsAsync(
-        params,
-        new SkuDetailsResponseListener() {
-          @Override
-          public void onSkuDetailsResponse(
-              BillingResult billingResult, List<SkuDetails> skuDetailsList) {
-            updateCachedSkus(skuDetailsList);
-            final Map<String, Object> skuDetailsResponse = new HashMap<>();
-            skuDetailsResponse.put("billingResult", Translator.fromBillingResult(billingResult));
-            skuDetailsResponse.put("skuDetailsList", fromSkuDetailsList(skuDetailsList));
-            result.success(skuDetailsResponse);
-          }
-        });
-  }
-
-  private void launchBillingFlow(
-      String sku,
-      @Nullable String accountId,
-      @Nullable String oldSku,
-      int prorationModeValue,
-      MethodChannel.Result result) {
-    if (billingClientError(result)) {
-      return;
-    }
-
-    SkuDetails skuDetails = cachedSkus.get(sku);
-    if (skuDetails == null) {
-      result.error(
-          "NOT_FOUND",
-          String.format(
-              "Details for sku %s are not available. It might because skus were not fetched prior to the call. Please fetch the skus first. An example of how to fetch the skus could be found here: %s",
-              sku, LOAD_SKU_DOC_URL),
-          null);
-      return;
-    }
-
-    final int prorationMode = getProrationMode(prorationModeValue);
-    if (oldSku == null
-        && prorationMode != ProrationMode.UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY) {
-      result.error(
-          "IN_APP_PURCHASE_REQUIRE_OLD_SKU",
-          "launchBillingFlow failed because oldSku is null. You must provide a valid oldSku in order to use a proration mode.",
-          null);
-      return;
-    } else if (oldSku != null && !cachedSkus.containsKey(oldSku)) {
-      result.error(
-          "IN_APP_PURCHASE_INVALID_OLD_SKU",
-          String.format(
-              "Details for sku %s are not available. It might because skus were not fetched prior to the call. Please fetch the skus first. An example of how to fetch the skus could be found here: %s",
-              oldSku, LOAD_SKU_DOC_URL),
-          null);
-      return;
-    }
-
-    if (activity == null) {
-      result.error(
-          "ACTIVITY_UNAVAILABLE",
-          "Details for sku "
-              + sku
-              + " are not available. This method must be run with the app in foreground.",
-          null);
-      return;
-    }
-
-    BillingFlowParams.Builder paramsBuilder =
-        BillingFlowParams.newBuilder().setSkuDetails(skuDetails);
-    if (accountId != null && !accountId.isEmpty()) {
-      paramsBuilder.setAccountId(accountId);
-    }
-    if (oldSku != null && !oldSku.isEmpty()) {
-      paramsBuilder.setOldSku(oldSku);
-    }
-    paramsBuilder.setReplaceSkusProrationMode(prorationMode);
-    result.success(
-        Translator.fromBillingResult(
-            billingClient.launchBillingFlow(activity, paramsBuilder.build())));
-  }
-
-  private int getProrationMode(final int prorationModeValue) {
-    switch (prorationModeValue) {
-      case 1:
-        return ProrationMode.IMMEDIATE_WITH_TIME_PRORATION;
-      case 2:
-        return ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE;
-      case 3:
-        return ProrationMode.IMMEDIATE_WITHOUT_PRORATION;
-      case 4:
-        return ProrationMode.DEFERRED;
-      default:
-        return ProrationMode.UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY;
-    }
-  }
-
-  private void consumeAsync(
-      String purchaseToken, String developerPayload, final MethodChannel.Result result) {
-    if (billingClientError(result)) {
-      return;
-    }
-
-    ConsumeResponseListener listener =
-        new ConsumeResponseListener() {
-          @Override
-          public void onConsumeResponse(BillingResult billingResult, String outToken) {
-            result.success(Translator.fromBillingResult(billingResult));
-          }
-        };
-    ConsumeParams.Builder paramsBuilder =
-        ConsumeParams.newBuilder().setPurchaseToken(purchaseToken);
-
-    if (developerPayload != null) {
-      paramsBuilder.setDeveloperPayload(developerPayload);
-    }
-    ConsumeParams params = paramsBuilder.build();
-
-    billingClient.consumeAsync(params, listener);
-  }
-
-  private void queryPurchases(String skuType, MethodChannel.Result result) {
-    if (billingClientError(result)) {
-      return;
-    }
-
-    // Like in our connect call, consider the billing client responding a "success" here regardless
-    // of status code.
-    result.success(fromPurchasesResult(billingClient.queryPurchases(skuType)));
-  }
-
-  private void queryPurchaseHistoryAsync(String skuType, final MethodChannel.Result result) {
-    if (billingClientError(result)) {
-      return;
-    }
-
-    billingClient.queryPurchaseHistoryAsync(
-        skuType,
-        new PurchaseHistoryResponseListener() {
-          @Override
-          public void onPurchaseHistoryResponse(
-              BillingResult billingResult, List<PurchaseHistoryRecord> purchasesList) {
-            final Map<String, Object> serialized = new HashMap<>();
-            serialized.put("billingResult", Translator.fromBillingResult(billingResult));
-            serialized.put(
-                "purchaseHistoryRecordList", fromPurchaseHistoryRecordList(purchasesList));
-            result.success(serialized);
-          }
-        });
-  }
-
-  private void startConnection(
-      final int handle, final boolean enablePendingPurchases, final MethodChannel.Result result) {
-    if (billingClient == null) {
-      billingClient =
-          billingClientFactory.createBillingClient(
-              applicationContext, methodChannel, enablePendingPurchases);
-    }
-
-    billingClient.startConnection(
-        new BillingClientStateListener() {
-          private boolean alreadyFinished = false;
-
-          @Override
-          public void onBillingSetupFinished(BillingResult billingResult) {
-            if (alreadyFinished) {
-              Log.d(TAG, "Tried to call onBilllingSetupFinished multiple times.");
-              return;
-            }
-            alreadyFinished = true;
-            // Consider the fact that we've finished a success, leave it to the Dart side to
-            // validate the responseCode.
-            result.success(Translator.fromBillingResult(billingResult));
-          }
-
-          @Override
-          public void onBillingServiceDisconnected() {
-            final Map<String, Object> arguments = new HashMap<>();
-            arguments.put("handle", handle);
-            methodChannel.invokeMethod(InAppPurchasePlugin.MethodNames.ON_DISCONNECT, arguments);
-          }
-        });
-  }
-
-  private void acknowledgePurchase(
-      String purchaseToken, @Nullable String developerPayload, final MethodChannel.Result result) {
-    if (billingClientError(result)) {
-      return;
-    }
-    AcknowledgePurchaseParams params =
-        AcknowledgePurchaseParams.newBuilder()
-            .setDeveloperPayload(developerPayload)
-            .setPurchaseToken(purchaseToken)
-            .build();
-    billingClient.acknowledgePurchase(
-        params,
-        new AcknowledgePurchaseResponseListener() {
-          @Override
-          public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
-            result.success(Translator.fromBillingResult(billingResult));
-          }
-        });
-  }
-
-  private void updateCachedSkus(@Nullable List<SkuDetails> skuDetailsList) {
-    if (skuDetailsList == null) {
-      return;
-    }
-
-    for (SkuDetails skuDetails : skuDetailsList) {
-      cachedSkus.put(skuDetails.getSku(), skuDetails);
-    }
-  }
-
-  private boolean billingClientError(MethodChannel.Result result) {
-    if (billingClient != null) {
-      return false;
-    }
-
-    result.error("UNAVAILABLE", "BillingClient is unset. Try reconnecting.", null);
-    return true;
-  }
-}

+ 0 - 34
thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/PluginPurchaseListener.java

@@ -1,34 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchase;
-
-import static io.flutter.plugins.inapppurchase.Translator.fromBillingResult;
-import static io.flutter.plugins.inapppurchase.Translator.fromPurchasesList;
-
-import androidx.annotation.Nullable;
-import com.android.billingclient.api.BillingResult;
-import com.android.billingclient.api.Purchase;
-import com.android.billingclient.api.PurchasesUpdatedListener;
-import io.flutter.plugin.common.MethodChannel;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-class PluginPurchaseListener implements PurchasesUpdatedListener {
-  private final MethodChannel channel;
-
-  PluginPurchaseListener(MethodChannel channel) {
-    this.channel = channel;
-  }
-
-  @Override
-  public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
-    final Map<String, Object> callbackArgs = new HashMap<>();
-    callbackArgs.put("billingResult", fromBillingResult(billingResult));
-    callbackArgs.put("responseCode", billingResult.getResponseCode());
-    callbackArgs.put("purchasesList", fromPurchasesList(purchases));
-    channel.invokeMethod(InAppPurchasePlugin.MethodNames.ON_PURCHASES_UPDATED, callbackArgs);
-  }
-}

+ 0 - 121
thirdparty/in_app_purchase/android/src/main/java/io/flutter/plugins/inapppurchase/Translator.java

@@ -1,121 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchase;
-
-import androidx.annotation.Nullable;
-import com.android.billingclient.api.BillingResult;
-import com.android.billingclient.api.Purchase;
-import com.android.billingclient.api.Purchase.PurchasesResult;
-import com.android.billingclient.api.PurchaseHistoryRecord;
-import com.android.billingclient.api.SkuDetails;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-
-/** Handles serialization of {@link com.android.billingclient.api.BillingClient} related objects. */
-/*package*/ class Translator {
-  static HashMap<String, Object> fromSkuDetail(SkuDetails detail) {
-    HashMap<String, Object> info = new HashMap<>();
-    info.put("title", detail.getTitle());
-    info.put("description", detail.getDescription());
-    info.put("freeTrialPeriod", detail.getFreeTrialPeriod());
-    info.put("introductoryPrice", detail.getIntroductoryPrice());
-    info.put("introductoryPriceAmountMicros", detail.getIntroductoryPriceAmountMicros());
-    info.put("introductoryPriceCycles", detail.getIntroductoryPriceCycles());
-    info.put("introductoryPricePeriod", detail.getIntroductoryPricePeriod());
-    info.put("price", detail.getPrice());
-    info.put("priceAmountMicros", detail.getPriceAmountMicros());
-    info.put("priceCurrencyCode", detail.getPriceCurrencyCode());
-    info.put("sku", detail.getSku());
-    info.put("type", detail.getType());
-    info.put("isRewarded", detail.isRewarded());
-    info.put("subscriptionPeriod", detail.getSubscriptionPeriod());
-    info.put("originalPrice", detail.getOriginalPrice());
-    info.put("originalPriceAmountMicros", detail.getOriginalPriceAmountMicros());
-    return info;
-  }
-
-  static List<HashMap<String, Object>> fromSkuDetailsList(
-      @Nullable List<SkuDetails> skuDetailsList) {
-    if (skuDetailsList == null) {
-      return Collections.emptyList();
-    }
-
-    ArrayList<HashMap<String, Object>> output = new ArrayList<>();
-    for (SkuDetails detail : skuDetailsList) {
-      output.add(fromSkuDetail(detail));
-    }
-    return output;
-  }
-
-  static HashMap<String, Object> fromPurchase(Purchase purchase) {
-    HashMap<String, Object> info = new HashMap<>();
-    info.put("orderId", purchase.getOrderId());
-    info.put("packageName", purchase.getPackageName());
-    info.put("purchaseTime", purchase.getPurchaseTime());
-    info.put("purchaseToken", purchase.getPurchaseToken());
-    info.put("signature", purchase.getSignature());
-    info.put("sku", purchase.getSku());
-    info.put("isAutoRenewing", purchase.isAutoRenewing());
-    info.put("originalJson", purchase.getOriginalJson());
-    info.put("developerPayload", purchase.getDeveloperPayload());
-    info.put("isAcknowledged", purchase.isAcknowledged());
-    info.put("purchaseState", purchase.getPurchaseState());
-    return info;
-  }
-
-  static HashMap<String, Object> fromPurchaseHistoryRecord(
-      PurchaseHistoryRecord purchaseHistoryRecord) {
-    HashMap<String, Object> info = new HashMap<>();
-    info.put("purchaseTime", purchaseHistoryRecord.getPurchaseTime());
-    info.put("purchaseToken", purchaseHistoryRecord.getPurchaseToken());
-    info.put("signature", purchaseHistoryRecord.getSignature());
-    info.put("sku", purchaseHistoryRecord.getSku());
-    info.put("developerPayload", purchaseHistoryRecord.getDeveloperPayload());
-    info.put("originalJson", purchaseHistoryRecord.getOriginalJson());
-    return info;
-  }
-
-  static List<HashMap<String, Object>> fromPurchasesList(@Nullable List<Purchase> purchases) {
-    if (purchases == null) {
-      return Collections.emptyList();
-    }
-
-    List<HashMap<String, Object>> serialized = new ArrayList<>();
-    for (Purchase purchase : purchases) {
-      serialized.add(fromPurchase(purchase));
-    }
-    return serialized;
-  }
-
-  static List<HashMap<String, Object>> fromPurchaseHistoryRecordList(
-      @Nullable List<PurchaseHistoryRecord> purchaseHistoryRecords) {
-    if (purchaseHistoryRecords == null) {
-      return Collections.emptyList();
-    }
-
-    List<HashMap<String, Object>> serialized = new ArrayList<>();
-    for (PurchaseHistoryRecord purchaseHistoryRecord : purchaseHistoryRecords) {
-      serialized.add(fromPurchaseHistoryRecord(purchaseHistoryRecord));
-    }
-    return serialized;
-  }
-
-  static HashMap<String, Object> fromPurchasesResult(PurchasesResult purchasesResult) {
-    HashMap<String, Object> info = new HashMap<>();
-    info.put("responseCode", purchasesResult.getResponseCode());
-    info.put("billingResult", fromBillingResult(purchasesResult.getBillingResult()));
-    info.put("purchasesList", fromPurchasesList(purchasesResult.getPurchasesList()));
-    return info;
-  }
-
-  static HashMap<String, Object> fromBillingResult(BillingResult billingResult) {
-    HashMap<String, Object> info = new HashMap<>();
-    info.put("responseCode", billingResult.getResponseCode());
-    info.put("debugMessage", billingResult.getDebugMessage());
-    return info;
-  }
-}

+ 0 - 8
thirdparty/in_app_purchase/build.yaml

@@ -1,8 +0,0 @@
-targets:
-  $default:
-    builders:
-      json_serializable:
-        options:
-          any_map: true
-          create_to_json: true
-          nullable: false

+ 0 - 8
thirdparty/in_app_purchase/example/.metadata

@@ -1,8 +0,0 @@
-# This file tracks properties of this Flutter project.
-# Used by Flutter tool to assess capabilities and perform upgrades etc.
-#
-# This file should be version controlled and should not be manually edited.
-
-version:
-  revision: 4d5e5d1ee6ccfa32ff97e9a4097bb9ca845628b6
-  channel: master

+ 0 - 88
thirdparty/in_app_purchase/example/README.md

@@ -1,88 +0,0 @@
-# In App Purchase Example
-
-Demonstrates how to use the In App Purchase (IAP) Plugin.
-
-## Getting Started
-
-This plugin is in beta. Please use with caution and file any potential issues
-you see on our [issue tracker](https://github.com/flutter/flutter/issues/new/choose).
-
-There's a significant amount of setup required for testing in app purchases
-successfully, including registering new app IDs and store entries to use for
-testing in both the Play Developer Console and App Store Connect. Both Google
-Play and the App Store require developers to configure an app with in-app items
-for purchase to call their in-app-purchase APIs. Both stores have extensive
-documentation on how to do this, and we've also included a high level guide
-below.
-
-* [In-App Purchase (App Store)](https://developer.apple.com/in-app-purchase/)
-* [Google Play Biling Overview](https://developer.android.com/google/play/billing/billing_overview)
-
-### Android
-
-1. Create a new app in the [Play Developer
-   Console](https://play.google.com/apps/publish/) (PDC).
-
-2. Sign up for a merchant's account in the PDC.
-
-3. Create IAPs in the PDC available for purchase in the app. The example assumes
-   the following SKU IDs exist:
-
-   - `consumable`: A managed product.
-   - `upgrade`: A managed product.
-   - `subscription`: A subscription.
-
-   Make sure that all of the products are set to `ACTIVE`.
-
-4. Update `APP_ID` in `example/android/app/build.gradle` to match your package
-   ID in the PDC.
-
-5. Create an `example/android/keystore.properties` file with all your signing
-   information. `keystore.example.properties` exists as an example to follow.
-   It's impossible to use any of the `BillingClient` APIs from an unsigned APK.
-   See
-   [here](https://developer.android.com/studio/publish/app-signing#secure-shared-keystore)
-   and [here](https://developer.android.com/studio/publish/app-signing#sign-apk)
-   for more information.
-
-6. Build a signed apk. `flutter build apk` will work for this, the gradle files
-   in this project have been configured to sign even debug builds.
-
-7. Upload the signed APK from step 6 to the PDC, and publish that to the alpha
-   test channel. Add your test account as an approved tester. The
-   `BillingClient` APIs won't work unless the app has been fully published to
-   the alpha channel and is being used by an authorized test account. See
-   [here](https://support.google.com/googleplay/android-developer/answer/3131213)
-   for more info.
-
-8. Sign in to the test device with the test account from step #7. Then use
-   `flutter run` to install the app to the device and test like normal.
-
-### iOS
-
-1. Follow ["Workflow for configuring in-app
-   purchases"](https://help.apple.com/app-store-connect/#/devb57be10e7), a
-   detailed guide on all the steps needed to enable IAPs for an app. Complete
-   steps 1 ("Sign a Paid Applications Agreement") and 2 ("Configure in-app
-   purchases").
-
-   For step #2, "Configure in-app purchases in App Store Connect," you'll want
-   to create the following products:
-
-   - A consumable with product ID `consumable`
-   - An upgrade with product ID `upgrade`
-   - An auto-renewing subscription with product ID `subscription`
-
-2. In XCode, `File > Open File` `example/ios/Runner.xcworkspace`. Update the
-   Bundle ID to match the Bundle ID of the app created in step #1.
-
-3. [Create a Sandbox tester
-   account](https://help.apple.com/app-store-connect/#/dev8b997bee1) to test the
-   in-app purchases with.
-
-4. Use `flutter run` to install the app and test it. Note that you need to test
-   it on a real device instead of a simulator, and signing into any production
-   service (including iTunes!) with the test account will permanently invalidate
-   it. Sign in to the test account in the example app following the steps in the
-   [*In-App Purchase Programming
-   Guide*](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/ShowUI.html#//apple_ref/doc/uid/TP40008267-CH3-SW11).

BIN
thirdparty/in_app_purchase/example/android/.gradle/6.5.1/fileChanges/last-build.bin


BIN
thirdparty/in_app_purchase/example/android/.gradle/6.5.1/fileHashes/fileHashes.lock


+ 0 - 0
thirdparty/in_app_purchase/example/android/.gradle/6.5.1/gc.properties


BIN
thirdparty/in_app_purchase/example/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock


+ 0 - 2
thirdparty/in_app_purchase/example/android/.gradle/buildOutputCleanup/cache.properties

@@ -1,2 +0,0 @@
-#Fri Mar 19 17:11:40 IST 2021
-gradle.version=6.5.1

BIN
thirdparty/in_app_purchase/example/android/.gradle/checksums/checksums.lock


+ 0 - 0
thirdparty/in_app_purchase/example/android/.gradle/vcs-1/gc.properties


+ 0 - 115
thirdparty/in_app_purchase/example/android/app/build.gradle

@@ -1,115 +0,0 @@
-def localProperties = new Properties()
-def localPropertiesFile = rootProject.file('local.properties')
-if (localPropertiesFile.exists()) {
-    localPropertiesFile.withReader('UTF-8') { reader ->
-        localProperties.load(reader)
-    }
-}
-
-// Load the build signing secrets from a local `keystore.properties` file.
-// TODO(YOU): Create release keys and a `keystore.properties` file. See
-// `example/README.md` for more info and `keystore.example.properties` for an
-// example.
-def keystorePropertiesFile = rootProject.file("keystore.properties")
-def keystoreProperties = new Properties()
-def configured = true
-try {
-    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
-} catch (IOException e) {
-    configured = false
-    logger.error('Release signing information not found.')
-}
-
-project.ext {
-    // TODO(YOU): Create release keys and a `keystore.properties` file. See
-    // `example/README.md` for more info and `keystore.example.properties` for an
-    // example.
-    APP_ID = configured ? keystoreProperties['appId'] : "io.flutter.plugins.inapppurchaseexample.DEFAULT_DO_NOT_USE"
-    KEYSTORE_STORE_FILE = configured ? rootProject.file(keystoreProperties['storeFile']) : null
-    KEYSTORE_STORE_PASSWORD = keystoreProperties['storePassword']
-    KEYSTORE_KEY_ALIAS = keystoreProperties['keyAlias']
-    KEYSTORE_KEY_PASSWORD = keystoreProperties['keyPassword']
-    VERSION_CODE = configured ? keystoreProperties['versionCode'].toInteger() : 1
-    VERSION_NAME = configured ? keystoreProperties['versionName'] : "0.0.1"
-}
-
-if (project.APP_ID == "io.flutter.plugins.inapppurchaseexample.DEFAULT_DO_NOT_USE") {
-    configured = false
-    logger.error('Unique package name not set, defaulting to "io.flutter.plugins.inapppurchaseexample.DEFAULT_DO_NOT_USE".')
-}
-
-// Log a final error message if we're unable to create a release key signed
-// build for an app configured in the Play Developer Console. Apks built in this
-// condition won't be able to call any of the BillingClient APIs.
-if (!configured) {
-    logger.error('The app could not be configured for release signing. In app purchases will not be testable. See `example/README.md` for more info and instructions.')
-}
-
-def flutterRoot = localProperties.getProperty('flutter.sdk')
-if (flutterRoot == null) {
-    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
-}
-
-apply plugin: 'com.android.application'
-apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
-
-android {
-    signingConfigs {
-        release {
-            storeFile project.KEYSTORE_STORE_FILE
-            storePassword project.KEYSTORE_STORE_PASSWORD
-            keyAlias project.KEYSTORE_KEY_ALIAS
-            keyPassword project.KEYSTORE_KEY_PASSWORD
-        }
-    }
-
-    compileSdkVersion 29
-
-    lintOptions {
-        disable 'InvalidPackage'
-    }
-
-    defaultConfig {
-        applicationId project.APP_ID
-        minSdkVersion 16
-        targetSdkVersion 28
-        versionCode project.VERSION_CODE
-        versionName project.VERSION_NAME
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-    }
-
-    buildTypes {
-        // Google Play Billing APIs only work with apps signed for production.
-        debug {
-            if (configured) {
-                signingConfig signingConfigs.release
-            } else {
-                signingConfig signingConfigs.debug
-            }
-        }
-        release {
-            if (configured) {
-                signingConfig signingConfigs.release
-            } else {
-                signingConfig signingConfigs.debug
-            }
-        }
-    }
-
-    testOptions {
-        unitTests.returnDefaultValues = true
-    }
-}
-
-flutter {
-    source '../..'
-}
-
-dependencies {
-    implementation 'com.android.billingclient:billing:1.2'
-    testImplementation 'junit:junit:4.12'
-    testImplementation 'org.mockito:mockito-core:2.17.0'
-    testImplementation 'org.json:json:20180813'
-    androidTestImplementation 'androidx.test:runner:1.1.1'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
-}

+ 0 - 5
thirdparty/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties

@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists

+ 0 - 48
thirdparty/in_app_purchase/example/android/app/src/main/AndroidManifest.xml

@@ -1,48 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="io.flutter.plugins.inapppurchaseexample">
-
-    <!-- The INTERNET permission is required for development. Specifically,
-         flutter needs it to communicate with the running application
-         to allow setting breakpoints, to provide hot reload, etc.
-    -->
-    <uses-permission android:name="android.permission.INTERNET"/>
-
-    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
-         calls FlutterMain.startInitialization(this); in its onCreate method.
-         In most cases you can leave this as-is, but you if you want to provide
-         additional functionality it is fine to subclass or reimplement
-         FlutterApplication and put your custom class here. -->
-    <application
-        android:name="io.flutter.app.FlutterApplication"
-        android:label="in_app_purchase_example"
-        android:icon="@mipmap/ic_launcher">
-        <activity
-            android:name=".EmbeddingV1Activity"
-            android:launchMode="singleTop"
-            android:theme="@style/LaunchTheme"
-            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
-            android:hardwareAccelerated="true"
-            android:exported="true"
-            android:windowSoftInputMode="adjustResize">
-            <!-- This keeps the window background of the activity showing
-                 until Flutter renders its first frame. It can be removed if
-                 there is no splash screen (such as the default splash screen
-                 defined in @style/LaunchTheme). -->
-            <meta-data
-                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
-                android:value="true" />
-        </activity>
-        <activity
-            android:name="io.flutter.embedding.android.FlutterActivity"
-            android:theme="@style/LaunchTheme"
-            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
-            android:hardwareAccelerated="true"
-            android:windowSoftInputMode="adjustResize">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.LAUNCHER"/>
-            </intent-filter>
-        </activity>
-        <meta-data android:name="flutterEmbedding" android:value="2"/>
-    </application>
-</manifest>

+ 0 - 20
thirdparty/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java

@@ -1,20 +0,0 @@
-package io.flutter.plugins;
-
-import androidx.annotation.Keep;
-import androidx.annotation.NonNull;
-
-import io.flutter.embedding.engine.FlutterEngine;
-
-/**
- * Generated file. Do not edit.
- * This file is generated by the Flutter tool based on the
- * plugins that support the Android platform.
- */
-@Keep
-public final class GeneratedPluginRegistrant {
-  public static void registerWith(@NonNull FlutterEngine flutterEngine) {
-    flutterEngine.getPlugins().add(new io.flutter.plugins.inapppurchase.InAppPurchasePlugin());
-    flutterEngine.getPlugins().add(new dev.flutter.plugins.integration_test.IntegrationTestPlugin());
-    flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
-  }
-}

+ 0 - 24
thirdparty/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/inapppurchaseexample/EmbeddingV1Activity.java

@@ -1,24 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchaseexample;
-
-import android.os.Bundle;
-import dev.flutter.plugins.integration_test.IntegrationTestPlugin;
-import io.flutter.plugins.inapppurchase.InAppPurchasePlugin;
-import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin;
-
-@SuppressWarnings("deprecation")
-public class EmbeddingV1Activity extends io.flutter.app.FlutterActivity {
-  @Override
-  protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    IntegrationTestPlugin.registerWith(
-        registrarFor("dev.flutter.plugins.integration_test.IntegrationTestPlugin"));
-    SharedPreferencesPlugin.registerWith(
-        registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));
-    InAppPurchasePlugin.registerWith(
-        registrarFor("io.flutter.plugins.inapppurchase.InAppPurchasePlugin"));
-  }
-}

+ 0 - 18
thirdparty/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/inapppurchaseexample/EmbeddingV1ActivityTest.java

@@ -1,18 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchaseexample;
-
-import androidx.test.rule.ActivityTestRule;
-import dev.flutter.plugins.integration_test.FlutterTestRunner;
-import org.junit.Rule;
-import org.junit.runner.RunWith;
-
-@RunWith(FlutterTestRunner.class)
-@SuppressWarnings("deprecation")
-public class EmbeddingV1ActivityTest {
-  @Rule
-  public ActivityTestRule<EmbeddingV1Activity> rule =
-      new ActivityTestRule<>(EmbeddingV1Activity.class);
-}

+ 0 - 17
thirdparty/in_app_purchase/example/android/app/src/main/java/io/flutter/plugins/inapppurchaseexample/FlutterActivityTest.java

@@ -1,17 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchaseexample;
-
-import androidx.test.rule.ActivityTestRule;
-import dev.flutter.plugins.integration_test.FlutterTestRunner;
-import io.flutter.embedding.android.FlutterActivity;
-import org.junit.Rule;
-import org.junit.runner.RunWith;
-
-@RunWith(FlutterTestRunner.class)
-public class FlutterActivityTest {
-  @Rule
-  public ActivityTestRule<FlutterActivity> rule = new ActivityTestRule<>(FlutterActivity.class);
-}

+ 0 - 12
thirdparty/in_app_purchase/example/android/app/src/main/res/drawable/launch_background.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Modify this file to customize your launch splash screen -->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:drawable="@android:color/white" />
-
-    <!-- You can insert your own image assets here -->
-    <!-- <item>
-        <bitmap
-            android:gravity="center"
-            android:src="@mipmap/launch_image" />
-    </item> -->
-</layer-list>

BIN
thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
thirdparty/in_app_purchase/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


+ 0 - 8
thirdparty/in_app_purchase/example/android/app/src/main/res/values/styles.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
-        <!-- Show a splash screen on the activity. Automatically removed when
-             Flutter draws its first frame -->
-        <item name="android:windowBackground">@drawable/launch_background</item>
-    </style>
-</resources>

+ 0 - 40
thirdparty/in_app_purchase/example/android/app/src/test/java/io/flutter/plugins/inapppurchase/InAppPurchasePluginTest.java

@@ -1,40 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchase;
-
-import static org.mockito.Mockito.when;
-
-import android.app.Activity;
-import android.app.Application;
-import android.content.Context;
-import io.flutter.plugin.common.BinaryMessenger;
-import io.flutter.plugin.common.PluginRegistry;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-public class InAppPurchasePluginTest {
-  @Mock Activity activity;
-  @Mock Context context;
-  @Mock PluginRegistry.Registrar mockRegistrar; // For v1 embedding
-  @Mock BinaryMessenger mockMessenger;
-  @Mock Application mockApplication;
-
-  @Before
-  public void setUp() {
-    MockitoAnnotations.initMocks(this);
-    when(mockRegistrar.activity()).thenReturn(activity);
-    when(mockRegistrar.messenger()).thenReturn(mockMessenger);
-    when(mockRegistrar.context()).thenReturn(context);
-  }
-
-  @Test
-  public void registerWith_doNotCrashWhenRegisterContextIsActivity_V1Embedding() {
-    when(mockRegistrar.context()).thenReturn(activity);
-    when(activity.getApplicationContext()).thenReturn(mockApplication);
-    InAppPurchasePlugin.registerWith(mockRegistrar);
-  }
-}

+ 0 - 802
thirdparty/in_app_purchase/example/android/app/src/test/java/io/flutter/plugins/inapppurchase/MethodCallHandlerTest.java

@@ -1,802 +0,0 @@
-package io.flutter.plugins.inapppurchase;
-
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.ACKNOWLEDGE_PURCHASE;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.CONSUME_PURCHASE_ASYNC;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.END_CONNECTION;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.IS_READY;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.LAUNCH_BILLING_FLOW;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.ON_DISCONNECT;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.ON_PURCHASES_UPDATED;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.QUERY_PURCHASES;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.QUERY_PURCHASE_HISTORY_ASYNC;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.QUERY_SKU_DETAILS;
-import static io.flutter.plugins.inapppurchase.InAppPurchasePlugin.MethodNames.START_CONNECTION;
-import static io.flutter.plugins.inapppurchase.Translator.fromBillingResult;
-import static io.flutter.plugins.inapppurchase.Translator.fromPurchaseHistoryRecordList;
-import static io.flutter.plugins.inapppurchase.Translator.fromPurchasesList;
-import static io.flutter.plugins.inapppurchase.Translator.fromPurchasesResult;
-import static io.flutter.plugins.inapppurchase.Translator.fromSkuDetailsList;
-import static java.util.Arrays.asList;
-import static java.util.Collections.singletonList;
-import static java.util.Collections.unmodifiableList;
-import static java.util.stream.Collectors.toList;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.contains;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.refEq;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.Activity;
-import android.content.Context;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-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.Purchase;
-import com.android.billingclient.api.Purchase.PurchasesResult;
-import com.android.billingclient.api.PurchaseHistoryRecord;
-import com.android.billingclient.api.PurchaseHistoryResponseListener;
-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;
-import io.flutter.plugin.common.MethodChannel.Result;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
-
-public class MethodCallHandlerTest {
-  private MethodCallHandlerImpl methodChannelHandler;
-  private BillingClientFactory factory;
-  @Mock BillingClient mockBillingClient;
-  @Mock MethodChannel mockMethodChannel;
-  @Spy Result result;
-  @Mock Activity activity;
-  @Mock Context context;
-  @Mock ActivityPluginBinding mockActivityPluginBinding;
-
-  @Before
-  public void setUp() {
-    MockitoAnnotations.initMocks(this);
-    factory =
-        (@NonNull Context context,
-            @NonNull MethodChannel channel,
-            boolean enablePendingPurchases) -> mockBillingClient;
-    methodChannelHandler = new MethodCallHandlerImpl(activity, context, mockMethodChannel, factory);
-    when(mockActivityPluginBinding.getActivity()).thenReturn(activity);
-  }
-
-  @Test
-  public void invalidMethod() {
-    MethodCall call = new MethodCall("invalid", null);
-    methodChannelHandler.onMethodCall(call, result);
-    verify(result, times(1)).notImplemented();
-  }
-
-  @Test
-  public void isReady_true() {
-    mockStartConnection();
-    MethodCall call = new MethodCall(IS_READY, null);
-    when(mockBillingClient.isReady()).thenReturn(true);
-    methodChannelHandler.onMethodCall(call, result);
-    verify(result).success(true);
-  }
-
-  @Test
-  public void isReady_false() {
-    mockStartConnection();
-    MethodCall call = new MethodCall(IS_READY, null);
-    when(mockBillingClient.isReady()).thenReturn(false);
-    methodChannelHandler.onMethodCall(call, result);
-    verify(result).success(false);
-  }
-
-  @Test
-  public void isReady_clientDisconnected() {
-    MethodCall disconnectCall = new MethodCall(END_CONNECTION, null);
-    methodChannelHandler.onMethodCall(disconnectCall, mock(Result.class));
-    MethodCall isReadyCall = new MethodCall(IS_READY, null);
-
-    methodChannelHandler.onMethodCall(isReadyCall, result);
-
-    verify(result).error(contains("UNAVAILABLE"), contains("BillingClient"), any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void startConnection() {
-    ArgumentCaptor<BillingClientStateListener> captor = mockStartConnection();
-    verify(result, never()).success(any());
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    captor.getValue().onBillingSetupFinished(billingResult);
-
-    verify(result, times(1)).success(fromBillingResult(billingResult));
-  }
-
-  @Test
-  public void startConnection_multipleCalls() {
-    Map<String, Object> arguments = new HashMap<>();
-    arguments.put("handle", 1);
-    arguments.put("enablePendingPurchases", true);
-    MethodCall call = new MethodCall(START_CONNECTION, arguments);
-    ArgumentCaptor<BillingClientStateListener> captor =
-        ArgumentCaptor.forClass(BillingClientStateListener.class);
-    doNothing().when(mockBillingClient).startConnection(captor.capture());
-
-    methodChannelHandler.onMethodCall(call, result);
-    verify(result, never()).success(any());
-    BillingResult billingResult1 =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    BillingResult billingResult2 =
-        BillingResult.newBuilder()
-            .setResponseCode(200)
-            .setDebugMessage("dummy debug message")
-            .build();
-    BillingResult billingResult3 =
-        BillingResult.newBuilder()
-            .setResponseCode(300)
-            .setDebugMessage("dummy debug message")
-            .build();
-
-    captor.getValue().onBillingSetupFinished(billingResult1);
-    captor.getValue().onBillingSetupFinished(billingResult2);
-    captor.getValue().onBillingSetupFinished(billingResult3);
-
-    verify(result, times(1)).success(fromBillingResult(billingResult1));
-    verify(result, times(1)).success(any());
-  }
-
-  @Test
-  public void endConnection() {
-    // Set up a connected BillingClient instance
-    final int disconnectCallbackHandle = 22;
-    Map<String, Object> arguments = new HashMap<>();
-    arguments.put("handle", disconnectCallbackHandle);
-    arguments.put("enablePendingPurchases", true);
-    MethodCall connectCall = new MethodCall(START_CONNECTION, arguments);
-    ArgumentCaptor<BillingClientStateListener> captor =
-        ArgumentCaptor.forClass(BillingClientStateListener.class);
-    doNothing().when(mockBillingClient).startConnection(captor.capture());
-    methodChannelHandler.onMethodCall(connectCall, mock(Result.class));
-    final BillingClientStateListener stateListener = captor.getValue();
-
-    // Disconnect the connected client
-    MethodCall disconnectCall = new MethodCall(END_CONNECTION, null);
-    methodChannelHandler.onMethodCall(disconnectCall, result);
-
-    // Verify that the client is disconnected and that the OnDisconnect callback has
-    // been triggered
-    verify(result, times(1)).success(any());
-    verify(mockBillingClient, times(1)).endConnection();
-    stateListener.onBillingServiceDisconnected();
-    Map<String, Integer> expectedInvocation = new HashMap<>();
-    expectedInvocation.put("handle", disconnectCallbackHandle);
-    verify(mockMethodChannel, times(1)).invokeMethod(ON_DISCONNECT, expectedInvocation);
-  }
-
-  @Test
-  public void querySkuDetailsAsync() {
-    // Connect a billing client and set up the SKU query listeners
-    establishConnectedBillingClient(/* arguments= */ null, /* result= */ null);
-    String skuType = BillingClient.SkuType.INAPP;
-    List<String> skusList = asList("id1", "id2");
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("skuType", skuType);
-    arguments.put("skusList", skusList);
-    MethodCall queryCall = new MethodCall(QUERY_SKU_DETAILS, arguments);
-
-    // Query for SKU details
-    methodChannelHandler.onMethodCall(queryCall, result);
-
-    // Assert the arguments were forwarded correctly to BillingClient
-    ArgumentCaptor<SkuDetailsParams> paramCaptor = ArgumentCaptor.forClass(SkuDetailsParams.class);
-    ArgumentCaptor<SkuDetailsResponseListener> listenerCaptor =
-        ArgumentCaptor.forClass(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<SkuDetails> skuDetailsResponse = asList(buildSkuDetails("foo"));
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    listenerCaptor.getValue().onSkuDetailsResponse(billingResult, skuDetailsResponse);
-    ArgumentCaptor<HashMap<String, Object>> resultCaptor = ArgumentCaptor.forClass(HashMap.class);
-    verify(result).success(resultCaptor.capture());
-    HashMap<String, Object> resultData = resultCaptor.getValue();
-    assertEquals(resultData.get("billingResult"), fromBillingResult(billingResult));
-    assertEquals(resultData.get("skuDetailsList"), fromSkuDetailsList(skuDetailsResponse));
-  }
-
-  @Test
-  public void querySkuDetailsAsync_clientDisconnected() {
-    // Disconnect the Billing client and prepare a querySkuDetails call
-    MethodCall disconnectCall = new MethodCall(END_CONNECTION, null);
-    methodChannelHandler.onMethodCall(disconnectCall, mock(Result.class));
-    String skuType = BillingClient.SkuType.INAPP;
-    List<String> skusList = asList("id1", "id2");
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("skuType", skuType);
-    arguments.put("skusList", skusList);
-    MethodCall queryCall = new MethodCall(QUERY_SKU_DETAILS, arguments);
-
-    // Query for SKU details
-    methodChannelHandler.onMethodCall(queryCall, result);
-
-    // Assert that we sent an error back.
-    verify(result).error(contains("UNAVAILABLE"), contains("BillingClient"), any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void launchBillingFlow_ok_null_AccountId() {
-    // Fetch the sku details first and then prepare the launch billing flow call
-    String skuId = "foo";
-    queryForSkus(singletonList(skuId));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", null);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    // Launch the billing flow
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    when(mockBillingClient.launchBillingFlow(any(), any())).thenReturn(billingResult);
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Verify we pass the arguments to the billing flow
-    ArgumentCaptor<BillingFlowParams> billingFlowParamsCaptor =
-        ArgumentCaptor.forClass(BillingFlowParams.class);
-    verify(mockBillingClient).launchBillingFlow(any(), billingFlowParamsCaptor.capture());
-    BillingFlowParams params = billingFlowParamsCaptor.getValue();
-    assertEquals(params.getSku(), skuId);
-    assertNull(params.getAccountId());
-
-    // Verify we pass the response code to result
-    verify(result, never()).error(any(), any(), any());
-    verify(result, times(1)).success(fromBillingResult(billingResult));
-  }
-
-  @Test
-  public void launchBillingFlow_ok_null_OldSku() {
-    // Fetch the sku details first and then prepare the launch billing flow call
-    String skuId = "foo";
-    String accountId = "account";
-    queryForSkus(singletonList(skuId));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    arguments.put("oldSku", null);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    // Launch the billing flow
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    when(mockBillingClient.launchBillingFlow(any(), any())).thenReturn(billingResult);
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Verify we pass the arguments to the billing flow
-    ArgumentCaptor<BillingFlowParams> billingFlowParamsCaptor =
-        ArgumentCaptor.forClass(BillingFlowParams.class);
-    verify(mockBillingClient).launchBillingFlow(any(), billingFlowParamsCaptor.capture());
-    BillingFlowParams params = billingFlowParamsCaptor.getValue();
-    assertEquals(params.getSku(), skuId);
-    assertEquals(params.getAccountId(), accountId);
-    assertNull(params.getOldSku());
-    // Verify we pass the response code to result
-    verify(result, never()).error(any(), any(), any());
-    verify(result, times(1)).success(fromBillingResult(billingResult));
-  }
-
-  @Test
-  public void launchBillingFlow_ok_null_Activity() {
-    methodChannelHandler.setActivity(null);
-
-    // Fetch the sku details first and then prepare the launch billing flow call
-    String skuId = "foo";
-    String accountId = "account";
-    queryForSkus(singletonList(skuId));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Verify we pass the response code to result
-    verify(result).error(contains("ACTIVITY_UNAVAILABLE"), contains("foreground"), any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void launchBillingFlow_ok_oldSku() {
-    // Fetch the sku details first and query the method call
-    String skuId = "foo";
-    String accountId = "account";
-    String oldSkuId = "oldFoo";
-    queryForSkus(unmodifiableList(asList(skuId, oldSkuId)));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    arguments.put("oldSku", oldSkuId);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    // Launch the billing flow
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    when(mockBillingClient.launchBillingFlow(any(), any())).thenReturn(billingResult);
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Verify we pass the arguments to the billing flow
-    ArgumentCaptor<BillingFlowParams> billingFlowParamsCaptor =
-        ArgumentCaptor.forClass(BillingFlowParams.class);
-    verify(mockBillingClient).launchBillingFlow(any(), billingFlowParamsCaptor.capture());
-    BillingFlowParams params = billingFlowParamsCaptor.getValue();
-    assertEquals(params.getSku(), skuId);
-    assertEquals(params.getAccountId(), accountId);
-    assertEquals(params.getOldSku(), oldSkuId);
-
-    // Verify we pass the response code to result
-    verify(result, never()).error(any(), any(), any());
-    verify(result, times(1)).success(fromBillingResult(billingResult));
-  }
-
-  @Test
-  public void launchBillingFlow_ok_AccountId() {
-    // Fetch the sku details first and query the method call
-    String skuId = "foo";
-    String accountId = "account";
-    queryForSkus(singletonList(skuId));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    // Launch the billing flow
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    when(mockBillingClient.launchBillingFlow(any(), any())).thenReturn(billingResult);
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Verify we pass the arguments to the billing flow
-    ArgumentCaptor<BillingFlowParams> billingFlowParamsCaptor =
-        ArgumentCaptor.forClass(BillingFlowParams.class);
-    verify(mockBillingClient).launchBillingFlow(any(), billingFlowParamsCaptor.capture());
-    BillingFlowParams params = billingFlowParamsCaptor.getValue();
-    assertEquals(params.getSku(), skuId);
-    assertEquals(params.getAccountId(), accountId);
-
-    // Verify we pass the response code to result
-    verify(result, never()).error(any(), any(), any());
-    verify(result, times(1)).success(fromBillingResult(billingResult));
-  }
-
-  @Test
-  public void launchBillingFlow_ok_Proration() {
-    // Fetch the sku details first and query the method call
-    String skuId = "foo";
-    String oldSkuId = "oldFoo";
-    String accountId = "account";
-    int prorationMode = BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE;
-    queryForSkus(unmodifiableList(asList(skuId, oldSkuId)));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    arguments.put("oldSku", oldSkuId);
-    arguments.put("prorationMode", prorationMode);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    // Launch the billing flow
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    when(mockBillingClient.launchBillingFlow(any(), any())).thenReturn(billingResult);
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Verify we pass the arguments to the billing flow
-    ArgumentCaptor<BillingFlowParams> billingFlowParamsCaptor =
-        ArgumentCaptor.forClass(BillingFlowParams.class);
-    verify(mockBillingClient).launchBillingFlow(any(), billingFlowParamsCaptor.capture());
-    BillingFlowParams params = billingFlowParamsCaptor.getValue();
-    assertEquals(params.getSku(), skuId);
-    assertEquals(params.getAccountId(), accountId);
-    assertEquals(params.getOldSku(), oldSkuId);
-    assertEquals(params.getReplaceSkusProrationMode(), prorationMode);
-
-    // Verify we pass the response code to result
-    verify(result, never()).error(any(), any(), any());
-    verify(result, times(1)).success(fromBillingResult(billingResult));
-  }
-
-  @Test
-  public void launchBillingFlow_ok_Proration_with_null_OldSku() {
-    // Fetch the sku details first and query the method call
-    String skuId = "foo";
-    String accountId = "account";
-    String queryOldSkuId = "oldFoo";
-    String oldSkuId = null;
-    int prorationMode = BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_PRORATED_PRICE;
-    queryForSkus(unmodifiableList(asList(skuId, queryOldSkuId)));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    arguments.put("oldSku", oldSkuId);
-    arguments.put("prorationMode", prorationMode);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    // Launch the billing flow
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    when(mockBillingClient.launchBillingFlow(any(), any())).thenReturn(billingResult);
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Assert that we sent an error back.
-    verify(result)
-        .error(
-            contains("IN_APP_PURCHASE_REQUIRE_OLD_SKU"),
-            contains("launchBillingFlow failed because oldSku is null"),
-            any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void launchBillingFlow_clientDisconnected() {
-    // Prepare the launch call after disconnecting the client
-    MethodCall disconnectCall = new MethodCall(END_CONNECTION, null);
-    methodChannelHandler.onMethodCall(disconnectCall, mock(Result.class));
-    String skuId = "foo";
-    String accountId = "account";
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Assert that we sent an error back.
-    verify(result).error(contains("UNAVAILABLE"), contains("BillingClient"), any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void launchBillingFlow_skuNotFound() {
-    // Try to launch the billing flow for a random sku ID
-    establishConnectedBillingClient(null, null);
-    String skuId = "foo";
-    String accountId = "account";
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Assert that we sent an error back.
-    verify(result).error(contains("NOT_FOUND"), contains(skuId), any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void launchBillingFlow_oldSkuNotFound() {
-    // Try to launch the billing flow for a random sku ID
-    establishConnectedBillingClient(null, null);
-    String skuId = "foo";
-    String accountId = "account";
-    String oldSkuId = "oldSku";
-    queryForSkus(singletonList(skuId));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("sku", skuId);
-    arguments.put("accountId", accountId);
-    arguments.put("oldSku", oldSkuId);
-    MethodCall launchCall = new MethodCall(LAUNCH_BILLING_FLOW, arguments);
-
-    methodChannelHandler.onMethodCall(launchCall, result);
-
-    // Assert that we sent an error back.
-    verify(result).error(contains("IN_APP_PURCHASE_INVALID_OLD_SKU"), contains(oldSkuId), any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void queryPurchases() {
-    establishConnectedBillingClient(null, null);
-    PurchasesResult purchasesResult = mock(PurchasesResult.class);
-    Purchase purchase = buildPurchase("foo");
-    when(purchasesResult.getPurchasesList()).thenReturn(asList(purchase));
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    when(purchasesResult.getBillingResult()).thenReturn(billingResult);
-    when(mockBillingClient.queryPurchases(SkuType.INAPP)).thenReturn(purchasesResult);
-
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("skuType", SkuType.INAPP);
-    methodChannelHandler.onMethodCall(new MethodCall(QUERY_PURCHASES, arguments), result);
-
-    // Verify we pass the response to result
-    ArgumentCaptor<HashMap<String, Object>> resultCaptor = ArgumentCaptor.forClass(HashMap.class);
-    verify(result, never()).error(any(), any(), any());
-    verify(result, times(1)).success(resultCaptor.capture());
-    assertEquals(fromPurchasesResult(purchasesResult), resultCaptor.getValue());
-  }
-
-  @Test
-  public void queryPurchases_clientDisconnected() {
-    // Prepare the launch call after disconnecting the client
-    methodChannelHandler.onMethodCall(new MethodCall(END_CONNECTION, null), mock(Result.class));
-
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("skuType", SkuType.INAPP);
-    methodChannelHandler.onMethodCall(new MethodCall(QUERY_PURCHASES, arguments), result);
-
-    // Assert that we sent an error back.
-    verify(result).error(contains("UNAVAILABLE"), contains("BillingClient"), any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void queryPurchaseHistoryAsync() {
-    // Set up an established billing client and all our mocked responses
-    establishConnectedBillingClient(null, null);
-    ArgumentCaptor<HashMap<String, Object>> resultCaptor = ArgumentCaptor.forClass(HashMap.class);
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    List<PurchaseHistoryRecord> purchasesList = asList(buildPurchaseHistoryRecord("foo"));
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("skuType", SkuType.INAPP);
-    ArgumentCaptor<PurchaseHistoryResponseListener> listenerCaptor =
-        ArgumentCaptor.forClass(PurchaseHistoryResponseListener.class);
-
-    methodChannelHandler.onMethodCall(
-        new MethodCall(QUERY_PURCHASE_HISTORY_ASYNC, arguments), result);
-
-    // Verify we pass the data to result
-    verify(mockBillingClient)
-        .queryPurchaseHistoryAsync(eq(SkuType.INAPP), listenerCaptor.capture());
-    listenerCaptor.getValue().onPurchaseHistoryResponse(billingResult, purchasesList);
-    verify(result).success(resultCaptor.capture());
-    HashMap<String, Object> resultData = resultCaptor.getValue();
-    assertEquals(fromBillingResult(billingResult), resultData.get("billingResult"));
-    assertEquals(
-        fromPurchaseHistoryRecordList(purchasesList), resultData.get("purchaseHistoryRecordList"));
-  }
-
-  @Test
-  public void queryPurchaseHistoryAsync_clientDisconnected() {
-    // Prepare the launch call after disconnecting the client
-    methodChannelHandler.onMethodCall(new MethodCall(END_CONNECTION, null), mock(Result.class));
-
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("skuType", SkuType.INAPP);
-    methodChannelHandler.onMethodCall(
-        new MethodCall(QUERY_PURCHASE_HISTORY_ASYNC, arguments), result);
-
-    // Assert that we sent an error back.
-    verify(result).error(contains("UNAVAILABLE"), contains("BillingClient"), any());
-    verify(result, never()).success(any());
-  }
-
-  @Test
-  public void onPurchasesUpdatedListener() {
-    PluginPurchaseListener listener = new PluginPurchaseListener(mockMethodChannel);
-
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    List<Purchase> purchasesList = asList(buildPurchase("foo"));
-    ArgumentCaptor<HashMap<String, Object>> resultCaptor = ArgumentCaptor.forClass(HashMap.class);
-    doNothing()
-        .when(mockMethodChannel)
-        .invokeMethod(eq(ON_PURCHASES_UPDATED), resultCaptor.capture());
-    listener.onPurchasesUpdated(billingResult, purchasesList);
-
-    HashMap<String, Object> resultData = resultCaptor.getValue();
-    assertEquals(fromBillingResult(billingResult), resultData.get("billingResult"));
-    assertEquals(fromPurchasesList(purchasesList), resultData.get("purchasesList"));
-  }
-
-  @Test
-  public void consumeAsync() {
-    establishConnectedBillingClient(null, null);
-    ArgumentCaptor<BillingResult> resultCaptor = ArgumentCaptor.forClass(BillingResult.class);
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("purchaseToken", "mockToken");
-    arguments.put("developerPayload", "mockPayload");
-    ArgumentCaptor<ConsumeResponseListener> listenerCaptor =
-        ArgumentCaptor.forClass(ConsumeResponseListener.class);
-
-    methodChannelHandler.onMethodCall(new MethodCall(CONSUME_PURCHASE_ASYNC, arguments), result);
-
-    ConsumeParams params =
-        ConsumeParams.newBuilder()
-            .setDeveloperPayload("mockPayload")
-            .setPurchaseToken("mockToken")
-            .build();
-
-    // Verify we pass the data to result
-    verify(mockBillingClient).consumeAsync(refEq(params), listenerCaptor.capture());
-
-    listenerCaptor.getValue().onConsumeResponse(billingResult, "mockToken");
-    verify(result).success(resultCaptor.capture());
-
-    // Verify we pass the response code to result
-    verify(result, never()).error(any(), any(), any());
-    verify(result, times(1)).success(fromBillingResult(billingResult));
-  }
-
-  @Test
-  public void acknowledgePurchase() {
-    establishConnectedBillingClient(null, null);
-    ArgumentCaptor<BillingResult> resultCaptor = ArgumentCaptor.forClass(BillingResult.class);
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    HashMap<String, Object> arguments = new HashMap<>();
-    arguments.put("purchaseToken", "mockToken");
-    arguments.put("developerPayload", "mockPayload");
-    ArgumentCaptor<AcknowledgePurchaseResponseListener> listenerCaptor =
-        ArgumentCaptor.forClass(AcknowledgePurchaseResponseListener.class);
-
-    methodChannelHandler.onMethodCall(new MethodCall(ACKNOWLEDGE_PURCHASE, arguments), result);
-
-    AcknowledgePurchaseParams params =
-        AcknowledgePurchaseParams.newBuilder()
-            .setDeveloperPayload("mockPayload")
-            .setPurchaseToken("mockToken")
-            .build();
-
-    // Verify we pass the data to result
-    verify(mockBillingClient).acknowledgePurchase(refEq(params), listenerCaptor.capture());
-
-    listenerCaptor.getValue().onAcknowledgePurchaseResponse(billingResult);
-    verify(result).success(resultCaptor.capture());
-
-    // Verify we pass the response code to result
-    verify(result, never()).error(any(), any(), any());
-    verify(result, times(1)).success(fromBillingResult(billingResult));
-  }
-
-  @Test
-  public void endConnection_if_activity_dettached() {
-    InAppPurchasePlugin plugin = new InAppPurchasePlugin();
-    plugin.setMethodCallHandler(methodChannelHandler);
-    mockStartConnection();
-    plugin.onDetachedFromActivity();
-    verify(mockBillingClient).endConnection();
-  }
-
-  private ArgumentCaptor<BillingClientStateListener> mockStartConnection() {
-    Map<String, Object> arguments = new HashMap<>();
-    arguments.put("handle", 1);
-    arguments.put("enablePendingPurchases", true);
-    MethodCall call = new MethodCall(START_CONNECTION, arguments);
-    ArgumentCaptor<BillingClientStateListener> captor =
-        ArgumentCaptor.forClass(BillingClientStateListener.class);
-    doNothing().when(mockBillingClient).startConnection(captor.capture());
-
-    methodChannelHandler.onMethodCall(call, result);
-    return captor;
-  }
-
-  private void establishConnectedBillingClient(
-      @Nullable Map<String, Object> arguments, @Nullable Result result) {
-    if (arguments == null) {
-      arguments = new HashMap<>();
-      arguments.put("handle", 1);
-      arguments.put("enablePendingPurchases", true);
-    }
-    if (result == null) {
-      result = mock(Result.class);
-    }
-
-    MethodCall connectCall = new MethodCall(START_CONNECTION, arguments);
-    methodChannelHandler.onMethodCall(connectCall, result);
-  }
-
-  private void queryForSkus(List<String> skusList) {
-    // Set up the query method call
-    establishConnectedBillingClient(/* arguments= */ null, /* result= */ null);
-    HashMap<String, Object> arguments = new HashMap<>();
-    String skuType = SkuType.INAPP;
-    arguments.put("skuType", skuType);
-    arguments.put("skusList", skusList);
-    MethodCall queryCall = new MethodCall(QUERY_SKU_DETAILS, arguments);
-
-    // Call the method.
-    methodChannelHandler.onMethodCall(queryCall, mock(Result.class));
-
-    // Respond to the call with a matching set of Sku details.
-    ArgumentCaptor<SkuDetailsResponseListener> listenerCaptor =
-        ArgumentCaptor.forClass(SkuDetailsResponseListener.class);
-    verify(mockBillingClient).querySkuDetailsAsync(any(), listenerCaptor.capture());
-    List<SkuDetails> skuDetailsResponse =
-        skusList.stream().map(this::buildSkuDetails).collect(toList());
-    BillingResult billingResult =
-        BillingResult.newBuilder()
-            .setResponseCode(100)
-            .setDebugMessage("dummy debug message")
-            .build();
-    listenerCaptor.getValue().onSkuDetailsResponse(billingResult, skuDetailsResponse);
-  }
-
-  private SkuDetails buildSkuDetails(String id) {
-    SkuDetails details = mock(SkuDetails.class);
-    when(details.getSku()).thenReturn(id);
-    return details;
-  }
-
-  private Purchase buildPurchase(String orderId) {
-    Purchase purchase = mock(Purchase.class);
-    when(purchase.getOrderId()).thenReturn(orderId);
-    return purchase;
-  }
-
-  private PurchaseHistoryRecord buildPurchaseHistoryRecord(String purchaseToken) {
-    PurchaseHistoryRecord purchase = mock(PurchaseHistoryRecord.class);
-    when(purchase.getPurchaseToken()).thenReturn(purchaseToken);
-    return purchase;
-  }
-}

+ 0 - 213
thirdparty/in_app_purchase/example/android/app/src/test/java/io/flutter/plugins/inapppurchase/TranslatorTest.java

@@ -1,213 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package io.flutter.plugins.inapppurchase;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import com.android.billingclient.api.BillingClient;
-import com.android.billingclient.api.BillingResult;
-import com.android.billingclient.api.Purchase;
-import com.android.billingclient.api.Purchase.PurchasesResult;
-import com.android.billingclient.api.PurchaseHistoryRecord;
-import com.android.billingclient.api.SkuDetails;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.json.JSONException;
-import org.junit.Test;
-
-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}";
-  private static final String PURCHASE_EXAMPLE_JSON =
-      "{\"orderId\":\"foo\",\"packageName\":\"bar\",\"productId\":\"consumable\",\"purchaseTime\":11111111,\"purchaseState\":0,\"purchaseToken\":\"baz\",\"developerPayload\":\"dummy payload\",\"isAcknowledged\":\"true\"}";
-
-  @Test
-  public void fromSkuDetail() throws JSONException {
-    final SkuDetails expected = new SkuDetails(SKU_DETAIL_EXAMPLE_JSON);
-
-    Map<String, Object> serialized = Translator.fromSkuDetail(expected);
-
-    assertSerialized(expected, serialized);
-  }
-
-  @Test
-  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<SkuDetails> expected =
-        Arrays.asList(
-            new SkuDetails(SKU_DETAIL_EXAMPLE_JSON), new SkuDetails(SKU_DETAIL_EXAMPLE_2_JSON));
-
-    final List<HashMap<String, Object>> serialized = Translator.fromSkuDetailsList(expected);
-
-    assertEquals(expected.size(), serialized.size());
-    assertSerialized(expected.get(0), serialized.get(0));
-    assertSerialized(expected.get(1), serialized.get(1));
-  }
-
-  @Test
-  public void fromSkuDetailsList_null() {
-    assertEquals(Collections.emptyList(), Translator.fromSkuDetailsList(null));
-  }
-
-  @Test
-  public void fromPurchase() throws JSONException {
-    final Purchase expected = new Purchase(PURCHASE_EXAMPLE_JSON, "signature");
-    assertSerialized(expected, Translator.fromPurchase(expected));
-  }
-
-  @Test
-  public void fromPurchaseHistoryRecord() throws JSONException {
-    final PurchaseHistoryRecord expected =
-        new PurchaseHistoryRecord(PURCHASE_EXAMPLE_JSON, "signature");
-    assertSerialized(expected, Translator.fromPurchaseHistoryRecord(expected));
-  }
-
-  @Test
-  public void fromPurchasesHistoryRecordList() throws JSONException {
-    final String purchase2Json =
-        "{\"orderId\":\"foo2\",\"packageName\":\"bar\",\"productId\":\"consumable\",\"purchaseTime\":11111111,\"purchaseState\":0,\"purchaseToken\":\"baz\",\"developerPayload\":\"dummy payload\",\"isAcknowledged\":\"true\"}";
-    final String signature = "signature";
-    final List<PurchaseHistoryRecord> expected =
-        Arrays.asList(
-            new PurchaseHistoryRecord(PURCHASE_EXAMPLE_JSON, signature),
-            new PurchaseHistoryRecord(purchase2Json, signature));
-
-    final List<HashMap<String, Object>> serialized =
-        Translator.fromPurchaseHistoryRecordList(expected);
-
-    assertEquals(expected.size(), serialized.size());
-    assertSerialized(expected.get(0), serialized.get(0));
-    assertSerialized(expected.get(1), serialized.get(1));
-  }
-
-  @Test
-  public void fromPurchasesHistoryRecordList_null() {
-    assertEquals(Collections.emptyList(), Translator.fromPurchaseHistoryRecordList(null));
-  }
-
-  @Test
-  public void fromPurchasesList() throws JSONException {
-    final String purchase2Json =
-        "{\"orderId\":\"foo2\",\"packageName\":\"bar\",\"productId\":\"consumable\",\"purchaseTime\":11111111,\"purchaseState\":0,\"purchaseToken\":\"baz\",\"developerPayload\":\"dummy payload\",\"isAcknowledged\":\"true\"}";
-    final String signature = "signature";
-    final List<Purchase> expected =
-        Arrays.asList(
-            new Purchase(PURCHASE_EXAMPLE_JSON, signature), new Purchase(purchase2Json, signature));
-
-    final List<HashMap<String, Object>> serialized = Translator.fromPurchasesList(expected);
-
-    assertEquals(expected.size(), serialized.size());
-    assertSerialized(expected.get(0), serialized.get(0));
-    assertSerialized(expected.get(1), serialized.get(1));
-  }
-
-  @Test
-  public void fromPurchasesList_null() {
-    assertEquals(Collections.emptyList(), Translator.fromPurchasesList(null));
-  }
-
-  @Test
-  public void fromPurchasesResult() throws JSONException {
-    PurchasesResult result = mock(PurchasesResult.class);
-    final String purchase2Json =
-        "{\"orderId\":\"foo2\",\"packageName\":\"bar\",\"productId\":\"consumable\",\"purchaseTime\":11111111,\"purchaseState\":0,\"purchaseToken\":\"baz\",\"developerPayload\":\"dummy payload\",\"isAcknowledged\":\"true\"}";
-    final String signature = "signature";
-    final List<Purchase> expectedPurchases =
-        Arrays.asList(
-            new Purchase(PURCHASE_EXAMPLE_JSON, signature), new Purchase(purchase2Json, signature));
-    when(result.getPurchasesList()).thenReturn(expectedPurchases);
-    when(result.getResponseCode()).thenReturn(BillingClient.BillingResponseCode.OK);
-    BillingResult newBillingResult =
-        BillingResult.newBuilder()
-            .setDebugMessage("dummy debug message")
-            .setResponseCode(BillingClient.BillingResponseCode.OK)
-            .build();
-    when(result.getBillingResult()).thenReturn(newBillingResult);
-    final HashMap<String, Object> serialized = Translator.fromPurchasesResult(result);
-
-    assertEquals(BillingClient.BillingResponseCode.OK, serialized.get("responseCode"));
-    List<Map<String, Object>> serializedPurchases =
-        (List<Map<String, Object>>) serialized.get("purchasesList");
-    assertEquals(expectedPurchases.size(), serializedPurchases.size());
-    assertSerialized(expectedPurchases.get(0), serializedPurchases.get(0));
-    assertSerialized(expectedPurchases.get(1), serializedPurchases.get(1));
-
-    Map<String, Object> billingResultMap = (Map<String, Object>) serialized.get("billingResult");
-    assertEquals(billingResultMap.get("responseCode"), newBillingResult.getResponseCode());
-    assertEquals(billingResultMap.get("debugMessage"), newBillingResult.getDebugMessage());
-  }
-
-  @Test
-  public void fromBillingResult() throws JSONException {
-    BillingResult newBillingResult =
-        BillingResult.newBuilder()
-            .setDebugMessage("dummy debug message")
-            .setResponseCode(BillingClient.BillingResponseCode.OK)
-            .build();
-    Map<String, Object> billingResultMap = Translator.fromBillingResult(newBillingResult);
-
-    assertEquals(billingResultMap.get("responseCode"), newBillingResult.getResponseCode());
-    assertEquals(billingResultMap.get("debugMessage"), newBillingResult.getDebugMessage());
-  }
-
-  @Test
-  public void fromBillingResult_debugMessageNull() throws JSONException {
-    BillingResult newBillingResult =
-        BillingResult.newBuilder().setResponseCode(BillingClient.BillingResponseCode.OK).build();
-    Map<String, Object> billingResultMap = Translator.fromBillingResult(newBillingResult);
-
-    assertEquals(billingResultMap.get("responseCode"), newBillingResult.getResponseCode());
-    assertEquals(billingResultMap.get("debugMessage"), newBillingResult.getDebugMessage());
-  }
-
-  private void assertSerialized(SkuDetails expected, Map<String, Object> serialized) {
-    assertEquals(expected.getDescription(), serialized.get("description"));
-    assertEquals(expected.getFreeTrialPeriod(), serialized.get("freeTrialPeriod"));
-    assertEquals(expected.getIntroductoryPrice(), serialized.get("introductoryPrice"));
-    assertEquals(
-        expected.getIntroductoryPriceAmountMicros(),
-        serialized.get("introductoryPriceAmountMicros"));
-    assertEquals(expected.getIntroductoryPriceCycles(), serialized.get("introductoryPriceCycles"));
-    assertEquals(expected.getIntroductoryPricePeriod(), serialized.get("introductoryPricePeriod"));
-    assertEquals(expected.getPrice(), serialized.get("price"));
-    assertEquals(expected.getPriceAmountMicros(), serialized.get("priceAmountMicros"));
-    assertEquals(expected.getPriceCurrencyCode(), serialized.get("priceCurrencyCode"));
-    assertEquals(expected.getSku(), serialized.get("sku"));
-    assertEquals(expected.getSubscriptionPeriod(), serialized.get("subscriptionPeriod"));
-    assertEquals(expected.getTitle(), serialized.get("title"));
-    assertEquals(expected.getType(), serialized.get("type"));
-    assertEquals(expected.getOriginalPrice(), serialized.get("originalPrice"));
-    assertEquals(
-        expected.getOriginalPriceAmountMicros(), serialized.get("originalPriceAmountMicros"));
-  }
-
-  private void assertSerialized(Purchase expected, Map<String, Object> serialized) {
-    assertEquals(expected.getOrderId(), serialized.get("orderId"));
-    assertEquals(expected.getPackageName(), serialized.get("packageName"));
-    assertEquals(expected.getPurchaseTime(), serialized.get("purchaseTime"));
-    assertEquals(expected.getPurchaseToken(), serialized.get("purchaseToken"));
-    assertEquals(expected.getSignature(), serialized.get("signature"));
-    assertEquals(expected.getOriginalJson(), serialized.get("originalJson"));
-    assertEquals(expected.getSku(), serialized.get("sku"));
-    assertEquals(expected.getDeveloperPayload(), serialized.get("developerPayload"));
-    assertEquals(expected.isAcknowledged(), serialized.get("isAcknowledged"));
-    assertEquals(expected.getPurchaseState(), serialized.get("purchaseState"));
-  }
-
-  private void assertSerialized(PurchaseHistoryRecord expected, Map<String, Object> serialized) {
-    assertEquals(expected.getPurchaseTime(), serialized.get("purchaseTime"));
-    assertEquals(expected.getPurchaseToken(), serialized.get("purchaseToken"));
-    assertEquals(expected.getSignature(), serialized.get("signature"));
-    assertEquals(expected.getOriginalJson(), serialized.get("originalJson"));
-    assertEquals(expected.getSku(), serialized.get("sku"));
-    assertEquals(expected.getDeveloperPayload(), serialized.get("developerPayload"));
-  }
-}

+ 0 - 1
thirdparty/in_app_purchase/example/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker

@@ -1 +0,0 @@
-mock-maker-inline

+ 0 - 29
thirdparty/in_app_purchase/example/android/build.gradle

@@ -1,29 +0,0 @@
-buildscript {
-    repositories {
-        google()
-        jcenter()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:3.3.0'
-    }
-}
-
-allprojects {
-    repositories {
-        google()
-        jcenter()
-    }
-}
-
-rootProject.buildDir = '../build'
-subprojects {
-    project.buildDir = "${rootProject.buildDir}/${project.name}"
-}
-subprojects {
-    project.evaluationDependsOn(':app')
-}
-
-task clean(type: Delete) {
-    delete rootProject.buildDir
-}

+ 0 - 4
thirdparty/in_app_purchase/example/android/gradle.properties

@@ -1,4 +0,0 @@
-org.gradle.jvmargs=-Xmx1536M
-android.enableR8=true
-android.useAndroidX=true
-android.enableJetifier=true

+ 0 - 6
thirdparty/in_app_purchase/example/android/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +0,0 @@
-#Fri Jun 23 08:50:38 CEST 2017
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip

+ 0 - 7
thirdparty/in_app_purchase/example/android/keystore.example.properties

@@ -1,7 +0,0 @@
-storePassword=???
-keyPassword=???
-keyAlias=???
-storeFile=???
-appId=io.flutter.plugins.inapppurchaseexample.DEFAULT_DO_NOT_USE
-versionCode=1
-versionName=0.0.1

+ 0 - 2
thirdparty/in_app_purchase/example/android/local.properties

@@ -1,2 +0,0 @@
-sdk.dir=/Users/vishnu/Library/Android/sdk
-flutter.sdk=/Users/vishnu/work/tools/flutter

+ 0 - 15
thirdparty/in_app_purchase/example/android/settings.gradle

@@ -1,15 +0,0 @@
-include ':app'
-
-def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
-
-def plugins = new Properties()
-def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
-if (pluginsFile.exists()) {
-    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
-}
-
-plugins.each { name, path ->
-    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
-    include ":$name"
-    project(":$name").projectDir = pluginDirectory
-}

+ 0 - 26
thirdparty/in_app_purchase/example/ios/Flutter/AppFrameworkInfo.plist

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
-  <key>CFBundleExecutable</key>
-  <string>App</string>
-  <key>CFBundleIdentifier</key>
-  <string>io.flutter.flutter.app</string>
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>6.0</string>
-  <key>CFBundleName</key>
-  <string>App</string>
-  <key>CFBundlePackageType</key>
-  <string>FMWK</string>
-  <key>CFBundleShortVersionString</key>
-  <string>1.0</string>
-  <key>CFBundleSignature</key>
-  <string>????</string>
-  <key>CFBundleVersion</key>
-  <string>1.0</string>
-  <key>MinimumOSVersion</key>
-  <string>8.0</string>
-</dict>
-</plist>

+ 0 - 2
thirdparty/in_app_purchase/example/ios/Flutter/Debug.xcconfig

@@ -1,2 +0,0 @@
-#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
-#include "Generated.xcconfig"

+ 0 - 14
thirdparty/in_app_purchase/example/ios/Flutter/Generated.xcconfig

@@ -1,14 +0,0 @@
-// This is a generated file; do not edit or check into version control.
-FLUTTER_ROOT=/Users/vishnu/work/tools/flutter
-FLUTTER_APPLICATION_PATH=/Users/vishnu/work/android/frame/thirdparty/in_app_purchase/example
-FLUTTER_TARGET=lib/main.dart
-FLUTTER_BUILD_DIR=build
-SYMROOT=${SOURCE_ROOT}/../build/ios
-OTHER_LDFLAGS=$(inherited) -framework Flutter
-FLUTTER_FRAMEWORK_DIR=/Users/vishnu/work/tools/flutter/bin/cache/artifacts/engine/ios
-FLUTTER_BUILD_NAME=1.0.0
-FLUTTER_BUILD_NUMBER=1
-DART_OBFUSCATION=false
-TRACK_WIDGET_CREATION=false
-TREE_SHAKE_ICONS=false
-PACKAGE_CONFIG=.packages

+ 0 - 2
thirdparty/in_app_purchase/example/ios/Flutter/Release.xcconfig

@@ -1,2 +0,0 @@
-#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
-#include "Generated.xcconfig"

+ 0 - 15
thirdparty/in_app_purchase/example/ios/Flutter/flutter_export_environment.sh

@@ -1,15 +0,0 @@
-#!/bin/sh
-# This is a generated file; do not edit or check into version control.
-export "FLUTTER_ROOT=/Users/vishnu/work/tools/flutter"
-export "FLUTTER_APPLICATION_PATH=/Users/vishnu/work/android/frame/thirdparty/in_app_purchase/example"
-export "FLUTTER_TARGET=lib/main.dart"
-export "FLUTTER_BUILD_DIR=build"
-export "SYMROOT=${SOURCE_ROOT}/../build/ios"
-export "OTHER_LDFLAGS=$(inherited) -framework Flutter"
-export "FLUTTER_FRAMEWORK_DIR=/Users/vishnu/work/tools/flutter/bin/cache/artifacts/engine/ios"
-export "FLUTTER_BUILD_NAME=1.0.0"
-export "FLUTTER_BUILD_NUMBER=1"
-export "DART_OBFUSCATION=false"
-export "TRACK_WIDGET_CREATION=false"
-export "TREE_SHAKE_ICONS=false"
-export "PACKAGE_CONFIG=.packages"

+ 0 - 45
thirdparty/in_app_purchase/example/ios/Podfile

@@ -1,45 +0,0 @@
-# Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
-
-# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
-ENV['COCOAPODS_DISABLE_STATS'] = 'true'
-
-project 'Runner', {
-  'Debug' => :debug,
-  'Profile' => :release,
-  'Release' => :release,
-}
-
-def flutter_root
-  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
-  unless File.exist?(generated_xcode_build_settings_path)
-    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
-  end
-
-  File.foreach(generated_xcode_build_settings_path) do |line|
-    matches = line.match(/FLUTTER_ROOT\=(.*)/)
-    return matches[1].strip if matches
-  end
-  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
-end
-
-require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
-
-flutter_ios_podfile_setup
-
-target 'Runner' do
-  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
-
-  target 'in_app_purchase_pluginTests' do
-    inherit! :search_paths
-
-    # Matches in_app_purchase test_spec dependency.
-    pod 'OCMock','3.5'
-  end
-end
-
-post_install do |installer|
-  installer.pods_project.targets.each do |target|
-    flutter_additional_ios_build_settings(target)
-  end
-end

+ 0 - 673
thirdparty/in_app_purchase/example/ios/Runner.xcodeproj/project.pbxproj

@@ -1,673 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
-		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
-		523686A0BE5A2D2269D4F386 /* libPods-in_app_purchase_pluginTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E20838C66ABCD8667B0BB95D /* libPods-in_app_purchase_pluginTests.a */; };
-		688DE35121F2A5A100EA2684 /* TranslatorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 688DE35021F2A5A100EA2684 /* TranslatorTest.m */; };
-		6896B34621E9363700D37AEF /* ProductRequestHandlerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 6896B34521E9363700D37AEF /* ProductRequestHandlerTest.m */; };
-		6896B34C21EEB4B800D37AEF /* Stubs.m in Sources */ = {isa = PBXBuildFile; fileRef = 6896B34B21EEB4B800D37AEF /* Stubs.m */; };
-		861D0D93B0757D95C8A69620 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B2AB6BE1D4E2232AB5D4A002 /* libPods-Runner.a */; };
-		978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
-		97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
-		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
-		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
-		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
-		A5279298219369C600FF69E6 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5279297219369C600FF69E6 /* StoreKit.framework */; };
-		A59001A721E69658004A3E5E /* InAppPurchasePluginTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A59001A621E69658004A3E5E /* InAppPurchasePluginTest.m */; };
-		F78AF3142342BC89008449C7 /* PaymentQueueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F78AF3132342BC89008449C7 /* PaymentQueueTest.m */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		A59001A921E69658004A3E5E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 97C146ED1CF9000F007C117D;
-			remoteInfo = Runner;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		9705A1C41CF9048500538489 /* Embed Frameworks */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-			);
-			name = "Embed Frameworks";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
-		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
-		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
-		688DE35021F2A5A100EA2684 /* TranslatorTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TranslatorTest.m; path = ../../../ios/Tests/TranslatorTest.m; sourceTree = "<group>"; };
-		6896B34521E9363700D37AEF /* ProductRequestHandlerTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ProductRequestHandlerTest.m; path = ../../../ios/Tests/ProductRequestHandlerTest.m; sourceTree = "<group>"; };
-		6896B34A21EEB4B800D37AEF /* Stubs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Stubs.h; path = ../../../ios/Tests/Stubs.h; sourceTree = "<group>"; };
-		6896B34B21EEB4B800D37AEF /* Stubs.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Stubs.m; path = ../../../ios/Tests/Stubs.m; sourceTree = "<group>"; };
-		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
-		7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
-		7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
-		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
-		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
-		97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
-		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
-		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
-		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
-		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		A5279297219369C600FF69E6 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
-		A59001A421E69658004A3E5E /* in_app_purchase_pluginTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = in_app_purchase_pluginTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		A59001A621E69658004A3E5E /* InAppPurchasePluginTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = InAppPurchasePluginTest.m; path = ../../../ios/Tests/InAppPurchasePluginTest.m; sourceTree = "<group>"; };
-		A59001A821E69658004A3E5E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		ACAF3B1D3B61187149C0FF81 /* Pods-in_app_purchase_pluginTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-in_app_purchase_pluginTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-in_app_purchase_pluginTests/Pods-in_app_purchase_pluginTests.release.xcconfig"; sourceTree = "<group>"; };
-		B2AB6BE1D4E2232AB5D4A002 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		BE95F46E12942F78BF67E55B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
-		CC2B3FFB29B2574DEDD718A6 /* Pods-in_app_purchase_pluginTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-in_app_purchase_pluginTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-in_app_purchase_pluginTests/Pods-in_app_purchase_pluginTests.debug.xcconfig"; sourceTree = "<group>"; };
-		DE7EEEE26E27ACC04BA9951D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
-		E20838C66ABCD8667B0BB95D /* libPods-in_app_purchase_pluginTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-in_app_purchase_pluginTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		F78AF3132342BC89008449C7 /* PaymentQueueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PaymentQueueTest.m; path = ../../../ios/Tests/PaymentQueueTest.m; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		97C146EB1CF9000F007C117D /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				861D0D93B0757D95C8A69620 /* libPods-Runner.a in Frameworks */,
-				A5279298219369C600FF69E6 /* StoreKit.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A59001A121E69658004A3E5E /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				523686A0BE5A2D2269D4F386 /* libPods-in_app_purchase_pluginTests.a in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		2D4BBB2E0E7B18550E80D50C /* Pods */ = {
-			isa = PBXGroup;
-			children = (
-				DE7EEEE26E27ACC04BA9951D /* Pods-Runner.debug.xcconfig */,
-				BE95F46E12942F78BF67E55B /* Pods-Runner.release.xcconfig */,
-				CC2B3FFB29B2574DEDD718A6 /* Pods-in_app_purchase_pluginTests.debug.xcconfig */,
-				ACAF3B1D3B61187149C0FF81 /* Pods-in_app_purchase_pluginTests.release.xcconfig */,
-			);
-			name = Pods;
-			sourceTree = "<group>";
-		};
-		9740EEB11CF90186004384FC /* Flutter */ = {
-			isa = PBXGroup;
-			children = (
-				3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
-				9740EEB21CF90195004384FC /* Debug.xcconfig */,
-				7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
-				9740EEB31CF90195004384FC /* Generated.xcconfig */,
-			);
-			name = Flutter;
-			sourceTree = "<group>";
-		};
-		97C146E51CF9000F007C117D = {
-			isa = PBXGroup;
-			children = (
-				9740EEB11CF90186004384FC /* Flutter */,
-				97C146F01CF9000F007C117D /* Runner */,
-				A59001A521E69658004A3E5E /* in_app_purchase_pluginTests */,
-				97C146EF1CF9000F007C117D /* Products */,
-				2D4BBB2E0E7B18550E80D50C /* Pods */,
-				E4DB99639FAD8ADED6B572FC /* Frameworks */,
-			);
-			sourceTree = "<group>";
-		};
-		97C146EF1CF9000F007C117D /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				97C146EE1CF9000F007C117D /* Runner.app */,
-				A59001A421E69658004A3E5E /* in_app_purchase_pluginTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		97C146F01CF9000F007C117D /* Runner */ = {
-			isa = PBXGroup;
-			children = (
-				7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
-				7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
-				97C146FA1CF9000F007C117D /* Main.storyboard */,
-				97C146FD1CF9000F007C117D /* Assets.xcassets */,
-				97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
-				97C147021CF9000F007C117D /* Info.plist */,
-				97C146F11CF9000F007C117D /* Supporting Files */,
-				1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
-				1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
-			);
-			path = Runner;
-			sourceTree = "<group>";
-		};
-		97C146F11CF9000F007C117D /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				97C146F21CF9000F007C117D /* main.m */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		A59001A521E69658004A3E5E /* in_app_purchase_pluginTests */ = {
-			isa = PBXGroup;
-			children = (
-				A59001A621E69658004A3E5E /* InAppPurchasePluginTest.m */,
-				6896B34521E9363700D37AEF /* ProductRequestHandlerTest.m */,
-				F78AF3132342BC89008449C7 /* PaymentQueueTest.m */,
-				A59001A821E69658004A3E5E /* Info.plist */,
-				6896B34A21EEB4B800D37AEF /* Stubs.h */,
-				6896B34B21EEB4B800D37AEF /* Stubs.m */,
-				688DE35021F2A5A100EA2684 /* TranslatorTest.m */,
-			);
-			path = in_app_purchase_pluginTests;
-			sourceTree = "<group>";
-		};
-		E4DB99639FAD8ADED6B572FC /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				A5279297219369C600FF69E6 /* StoreKit.framework */,
-				B2AB6BE1D4E2232AB5D4A002 /* libPods-Runner.a */,
-				E20838C66ABCD8667B0BB95D /* libPods-in_app_purchase_pluginTests.a */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		97C146ED1CF9000F007C117D /* Runner */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
-			buildPhases = (
-				5DF63B80D489A62B306EA07A /* [CP] Check Pods Manifest.lock */,
-				9740EEB61CF901F6004384FC /* Run Script */,
-				97C146EA1CF9000F007C117D /* Sources */,
-				97C146EB1CF9000F007C117D /* Frameworks */,
-				97C146EC1CF9000F007C117D /* Resources */,
-				9705A1C41CF9048500538489 /* Embed Frameworks */,
-				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
-				AC81012709A36415AE0CF8C4 /* [CP] Embed Pods Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = Runner;
-			productName = Runner;
-			productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
-			productType = "com.apple.product-type.application";
-		};
-		A59001A321E69658004A3E5E /* in_app_purchase_pluginTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A59001AD21E69658004A3E5E /* Build configuration list for PBXNativeTarget "in_app_purchase_pluginTests" */;
-			buildPhases = (
-				4EA84B170943DF9C4A2CF33C /* [CP] Check Pods Manifest.lock */,
-				A59001A021E69658004A3E5E /* Sources */,
-				A59001A121E69658004A3E5E /* Frameworks */,
-				A59001A221E69658004A3E5E /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				A59001AA21E69658004A3E5E /* PBXTargetDependency */,
-			);
-			name = in_app_purchase_pluginTests;
-			productName = in_app_purchase_pluginTests;
-			productReference = A59001A421E69658004A3E5E /* in_app_purchase_pluginTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		97C146E61CF9000F007C117D /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				DefaultBuildSystemTypeForWorkspace = Original;
-				LastUpgradeCheck = 1100;
-				ORGANIZATIONNAME = "The Chromium Authors";
-				TargetAttributes = {
-					97C146ED1CF9000F007C117D = {
-						CreatedOnToolsVersion = 7.3.1;
-						SystemCapabilities = {
-							com.apple.InAppPurchase = {
-								enabled = 1;
-							};
-						};
-					};
-					A59001A321E69658004A3E5E = {
-						CreatedOnToolsVersion = 10.0;
-						ProvisioningStyle = Automatic;
-						TestTargetID = 97C146ED1CF9000F007C117D;
-					};
-				};
-			};
-			buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = en;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-				Base,
-			);
-			mainGroup = 97C146E51CF9000F007C117D;
-			productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				97C146ED1CF9000F007C117D /* Runner */,
-				A59001A321E69658004A3E5E /* in_app_purchase_pluginTests */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		97C146EC1CF9000F007C117D /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
-				3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
-				97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
-				97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A59001A221E69658004A3E5E /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			name = "Thin Binary";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
-		};
-		4EA84B170943DF9C4A2CF33C /* [CP] Check Pods Manifest.lock */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputFileListPaths = (
-			);
-			inputPaths = (
-				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
-				"${PODS_ROOT}/Manifest.lock",
-			);
-			name = "[CP] Check Pods Manifest.lock";
-			outputFileListPaths = (
-			);
-			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-in_app_purchase_pluginTests-checkManifestLockResult.txt",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
-			showEnvVarsInLog = 0;
-		};
-		5DF63B80D489A62B306EA07A /* [CP] Check Pods Manifest.lock */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
-				"${PODS_ROOT}/Manifest.lock",
-			);
-			name = "[CP] Check Pods Manifest.lock";
-			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
-			showEnvVarsInLog = 0;
-		};
-		9740EEB61CF901F6004384FC /* Run Script */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			name = "Run Script";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
-		};
-		AC81012709A36415AE0CF8C4 /* [CP] Embed Pods Frameworks */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
-				"${PODS_ROOT}/../Flutter/Flutter.framework",
-			);
-			name = "[CP] Embed Pods Frameworks";
-			outputPaths = (
-				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
-			showEnvVarsInLog = 0;
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		97C146EA1CF9000F007C117D /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
-				97C146F31CF9000F007C117D /* main.m in Sources */,
-				1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A59001A021E69658004A3E5E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				F78AF3142342BC89008449C7 /* PaymentQueueTest.m in Sources */,
-				6896B34621E9363700D37AEF /* ProductRequestHandlerTest.m in Sources */,
-				688DE35121F2A5A100EA2684 /* TranslatorTest.m in Sources */,
-				A59001A721E69658004A3E5E /* InAppPurchasePluginTest.m in Sources */,
-				6896B34C21EEB4B800D37AEF /* Stubs.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		A59001AA21E69658004A3E5E /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 97C146ED1CF9000F007C117D /* Runner */;
-			targetProxy = A59001A921E69658004A3E5E /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
-		97C146FA1CF9000F007C117D /* Main.storyboard */ = {
-			isa = PBXVariantGroup;
-			children = (
-				97C146FB1CF9000F007C117D /* Base */,
-			);
-			name = Main.storyboard;
-			sourceTree = "<group>";
-		};
-		97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
-			isa = PBXVariantGroup;
-			children = (
-				97C147001CF9000F007C117D /* Base */,
-			);
-			name = LaunchScreen.storyboard;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		97C147031CF9000F007C117D /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				MTL_ENABLE_DEBUG_INFO = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		97C147041CF9000F007C117D /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				MTL_ENABLE_DEBUG_INFO = NO;
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		97C147061CF9000F007C117D /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CURRENT_PROJECT_VERSION = 1;
-				ENABLE_BITCODE = NO;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Flutter",
-				);
-				INFOPLIST_FILE = Runner/Info.plist;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Flutter",
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.inAppPurchaseExample;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				VERSIONING_SYSTEM = "apple-generic";
-			};
-			name = Debug;
-		};
-		97C147071CF9000F007C117D /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CURRENT_PROJECT_VERSION = 1;
-				ENABLE_BITCODE = NO;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Flutter",
-				);
-				INFOPLIST_FILE = Runner/Info.plist;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Flutter",
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.inAppPurchaseExample;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				VERSIONING_SYSTEM = "apple-generic";
-			};
-			name = Release;
-		};
-		A59001AB21E69658004A3E5E /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = CC2B3FFB29B2574DEDD718A6 /* Pods-in_app_purchase_pluginTests.debug.xcconfig */;
-			buildSettings = {
-				BUNDLE_LOADER = "$(TEST_HOST)";
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CODE_SIGN_STYLE = Automatic;
-				INFOPLIST_FILE = in_app_purchase_pluginTests/Info.plist;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
-				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = "sample.changme.in-app-purchase-pluginTests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
-			};
-			name = Debug;
-		};
-		A59001AC21E69658004A3E5E /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = ACAF3B1D3B61187149C0FF81 /* Pods-in_app_purchase_pluginTests.release.xcconfig */;
-			buildSettings = {
-				BUNDLE_LOADER = "$(TEST_HOST)";
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CODE_SIGN_STYLE = Automatic;
-				INFOPLIST_FILE = in_app_purchase_pluginTests/Info.plist;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = "sample.changme.in-app-purchase-pluginTests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				97C147031CF9000F007C117D /* Debug */,
-				97C147041CF9000F007C117D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				97C147061CF9000F007C117D /* Debug */,
-				97C147071CF9000F007C117D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		A59001AD21E69658004A3E5E /* Build configuration list for PBXNativeTarget "in_app_purchase_pluginTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				A59001AB21E69658004A3E5E /* Debug */,
-				A59001AC21E69658004A3E5E /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 97C146E61CF9000F007C117D /* Project object */;
-}

+ 0 - 7
thirdparty/in_app_purchase/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "group:Runner.xcodeproj">
-   </FileRef>
-</Workspace>

+ 0 - 97
thirdparty/in_app_purchase/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "97C146ED1CF9000F007C117D"
-               BuildableName = "Runner.app"
-               BlueprintName = "Runner"
-               ReferencedContainer = "container:Runner.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
-            BuildableName = "Runner.app"
-            BlueprintName = "Runner"
-            ReferencedContainer = "container:Runner.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "A59001A321E69658004A3E5E"
-               BuildableName = "in_app_purchase_pluginTests.xctest"
-               BlueprintName = "in_app_purchase_pluginTests"
-               ReferencedContainer = "container:Runner.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
-            BuildableName = "Runner.app"
-            BlueprintName = "Runner"
-            ReferencedContainer = "container:Runner.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
-            BuildableName = "Runner.app"
-            BlueprintName = "Runner"
-            ReferencedContainer = "container:Runner.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 0 - 10
thirdparty/in_app_purchase/example/ios/Runner.xcworkspace/contents.xcworkspacedata

@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "group:Runner.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:Pods/Pods.xcodeproj">
-   </FileRef>
-</Workspace>

+ 0 - 8
thirdparty/in_app_purchase/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>

+ 0 - 6
thirdparty/in_app_purchase/example/ios/Runner/AppDelegate.h

@@ -1,6 +0,0 @@
-#import <Flutter/Flutter.h>
-#import <UIKit/UIKit.h>
-
-@interface AppDelegate : FlutterAppDelegate
-
-@end

+ 0 - 13
thirdparty/in_app_purchase/example/ios/Runner/AppDelegate.m

@@ -1,13 +0,0 @@
-#include "AppDelegate.h"
-#include "GeneratedPluginRegistrant.h"
-
-@implementation AppDelegate
-
-- (BOOL)application:(UIApplication *)application
-    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
-  [GeneratedPluginRegistrant registerWithRegistry:self];
-  // Override point for customization after application launch.
-  return [super application:application didFinishLaunchingWithOptions:launchOptions];
-}
-
-@end

+ 0 - 122
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -1,122 +0,0 @@
-{
-  "images" : [
-    {
-      "size" : "20x20",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-20x20@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "20x20",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-20x20@3x.png",
-      "scale" : "3x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-29x29@1x.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-29x29@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-29x29@3x.png",
-      "scale" : "3x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-40x40@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-40x40@3x.png",
-      "scale" : "3x"
-    },
-    {
-      "size" : "60x60",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-60x60@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "60x60",
-      "idiom" : "iphone",
-      "filename" : "Icon-App-60x60@3x.png",
-      "scale" : "3x"
-    },
-    {
-      "size" : "20x20",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-20x20@1x.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "20x20",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-20x20@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-29x29@1x.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-29x29@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-40x40@1x.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-40x40@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "76x76",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-76x76@1x.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "76x76",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-76x76@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "83.5x83.5",
-      "idiom" : "ipad",
-      "filename" : "Icon-App-83.5x83.5@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "1024x1024",
-      "idiom" : "ios-marketing",
-      "filename" : "Icon-App-1024x1024@1x.png",
-      "scale" : "1x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}

BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png


+ 0 - 23
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json

@@ -1,23 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "filename" : "LaunchImage.png",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "LaunchImage@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "LaunchImage@3x.png",
-      "scale" : "3x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}

BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png


BIN
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png


+ 0 - 5
thirdparty/in_app_purchase/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md

@@ -1,5 +0,0 @@
-# Launch Screen Assets
-
-You can customize the launch screen with your own desired assets by replacing the image files in this directory.
-
-You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.

+ 0 - 37
thirdparty/in_app_purchase/example/ios/Runner/Base.lproj/LaunchScreen.storyboard

@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
-    </dependencies>
-    <scenes>
-        <!--View Controller-->
-        <scene sceneID="EHf-IW-A2E">
-            <objects>
-                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
-                    <layoutGuides>
-                        <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
-                        <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
-                    </layoutGuides>
-                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <subviews>
-                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
-                            </imageView>
-                        </subviews>
-                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        <constraints>
-                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
-                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
-                        </constraints>
-                    </view>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="53" y="375"/>
-        </scene>
-    </scenes>
-    <resources>
-        <image name="LaunchImage" width="168" height="185"/>
-    </resources>
-</document>

+ 0 - 26
thirdparty/in_app_purchase/example/ios/Runner/Base.lproj/Main.storyboard

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
-    </dependencies>
-    <scenes>
-        <!--Flutter View Controller-->
-        <scene sceneID="tne-QT-ifu">
-            <objects>
-                <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
-                    <layoutGuides>
-                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
-                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
-                    </layoutGuides>
-                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
-                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
-                    </view>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
-            </objects>
-        </scene>
-    </scenes>
-</document>

+ 0 - 17
thirdparty/in_app_purchase/example/ios/Runner/GeneratedPluginRegistrant.h

@@ -1,17 +0,0 @@
-//
-//  Generated file. Do not edit.
-//
-
-#ifndef GeneratedPluginRegistrant_h
-#define GeneratedPluginRegistrant_h
-
-#import <Flutter/Flutter.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface GeneratedPluginRegistrant : NSObject
-+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry;
-@end
-
-NS_ASSUME_NONNULL_END
-#endif /* GeneratedPluginRegistrant_h */

+ 0 - 33
thirdparty/in_app_purchase/example/ios/Runner/GeneratedPluginRegistrant.m

@@ -1,33 +0,0 @@
-//
-//  Generated file. Do not edit.
-//
-
-#import "GeneratedPluginRegistrant.h"
-
-#if __has_include(<in_app_purchase/InAppPurchasePlugin.h>)
-#import <in_app_purchase/InAppPurchasePlugin.h>
-#else
-@import in_app_purchase;
-#endif
-
-#if __has_include(<integration_test/IntegrationTestPlugin.h>)
-#import <integration_test/IntegrationTestPlugin.h>
-#else
-@import integration_test;
-#endif
-
-#if __has_include(<shared_preferences/FLTSharedPreferencesPlugin.h>)
-#import <shared_preferences/FLTSharedPreferencesPlugin.h>
-#else
-@import shared_preferences;
-#endif
-
-@implementation GeneratedPluginRegistrant
-
-+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {
-  [InAppPurchasePlugin registerWithRegistrar:[registry registrarForPlugin:@"InAppPurchasePlugin"]];
-  [IntegrationTestPlugin registerWithRegistrar:[registry registrarForPlugin:@"IntegrationTestPlugin"]];
-  [FLTSharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTSharedPreferencesPlugin"]];
-}
-
-@end

+ 0 - 45
thirdparty/in_app_purchase/example/ios/Runner/Info.plist

@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>in_app_purchase_example</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>UILaunchStoryboardName</key>
-	<string>LaunchScreen</string>
-	<key>UIMainStoryboardFile</key>
-	<string>Main</string>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>UIViewControllerBasedStatusBarAppearance</key>
-	<false/>
-</dict>
-</plist>

+ 0 - 9
thirdparty/in_app_purchase/example/ios/Runner/main.m

@@ -1,9 +0,0 @@
-#import <Flutter/Flutter.h>
-#import <UIKit/UIKit.h>
-#import "AppDelegate.h"
-
-int main(int argc, char* argv[]) {
-  @autoreleasepool {
-    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
-  }
-}

+ 0 - 22
thirdparty/in_app_purchase/example/ios/in_app_purchase_pluginTests/Info.plist

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>$(DEVELOPMENT_LANGUAGE)</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>BNDL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-</dict>
-</plist>

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.