@stripe/stripe-react-native 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/android/build.gradle +1 -0
  3. package/android/proguard-rules.txt +7 -0
  4. package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +4 -0
  5. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +5 -0
  6. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +46 -8
  7. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherFragment.kt +132 -0
  8. package/android/src/main/java/com/reactnativestripesdk/GooglePayRequestHelper.kt +144 -0
  9. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +123 -8
  10. package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -0
  11. package/android/src/main/res/drawable/book_with_googlepay_button_content.xml +14 -0
  12. package/android/src/main/res/drawable/buy_with_googlepay_button_content.xml +14 -0
  13. package/android/src/main/res/drawable/checkout_with_googlepay_button_content.xml +14 -0
  14. package/android/src/main/res/drawable/donate_with_googlepay_button_content.xml +14 -0
  15. package/android/src/main/res/drawable/googlepay_button_background_shape.xml +11 -0
  16. package/android/src/main/res/drawable/googlepay_mark_background.xml +12 -0
  17. package/android/src/main/res/drawable/googlepay_mark_content.xml +27 -0
  18. package/android/src/main/res/drawable/order_with_googlepay_button_content.xml +14 -0
  19. package/android/src/main/res/drawable/pay_with_googlepay_button_content.xml +6 -6
  20. package/android/src/main/res/drawable/subscribe_with_googlepay_button_content.xml +14 -0
  21. package/android/src/main/res/drawable-ar/book_with_googlepay_button_content.xml +14 -0
  22. package/android/src/main/res/drawable-ar/buy_with_googlepay_button_content.xml +14 -0
  23. package/android/src/main/res/drawable-ar/checkout_with_googlepay_button_content.xml +14 -0
  24. package/android/src/main/res/drawable-ar/donate_with_googlepay_button_content.xml +14 -0
  25. package/android/src/main/res/drawable-ar/order_with_googlepay_button_content.xml +14 -0
  26. package/android/src/main/res/drawable-ar/pay_with_googlepay_button_content.xml +6 -6
  27. package/android/src/main/res/drawable-ar/subscribe_with_googlepay_button_content.xml +14 -0
  28. package/android/src/main/res/drawable-bg/book_with_googlepay_button_content.xml +14 -0
  29. package/android/src/main/res/drawable-bg/buy_with_googlepay_button_content.xml +14 -0
  30. package/android/src/main/res/drawable-bg/checkout_with_googlepay_button_content.xml +14 -0
  31. package/android/src/main/res/drawable-bg/donate_with_googlepay_button_content.xml +14 -0
  32. package/android/src/main/res/drawable-bg/order_with_googlepay_button_content.xml +14 -0
  33. package/android/src/main/res/drawable-bg/pay_with_googlepay_button_content.xml +4 -4
  34. package/android/src/main/res/drawable-bg/subscribe_with_googlepay_button_content.xml +14 -0
  35. package/android/src/main/res/drawable-ca/book_with_googlepay_button_content.xml +14 -0
  36. package/android/src/main/res/drawable-ca/buy_with_googlepay_button_content.xml +14 -0
  37. package/android/src/main/res/drawable-ca/checkout_with_googlepay_button_content.xml +14 -0
  38. package/android/src/main/res/drawable-ca/donate_with_googlepay_button_content.xml +14 -0
  39. package/android/src/main/res/drawable-ca/order_with_googlepay_button_content.xml +14 -0
  40. package/android/src/main/res/drawable-ca/pay_with_googlepay_button_content.xml +6 -6
  41. package/android/src/main/res/drawable-ca/subscribe_with_googlepay_button_content.xml +14 -0
  42. package/android/src/main/res/drawable-cs/book_with_googlepay_button_content.xml +14 -0
  43. package/android/src/main/res/drawable-cs/buy_with_googlepay_button_content.xml +14 -0
  44. package/android/src/main/res/drawable-cs/checkout_with_googlepay_button_content.xml +14 -0
  45. package/android/src/main/res/drawable-cs/donate_with_googlepay_button_content.xml +14 -0
  46. package/android/src/main/res/drawable-cs/order_with_googlepay_button_content.xml +14 -0
  47. package/android/src/main/res/drawable-cs/pay_with_googlepay_button_content.xml +6 -6
  48. package/android/src/main/res/drawable-cs/subscribe_with_googlepay_button_content.xml +14 -0
  49. package/android/src/main/res/drawable-da/book_with_googlepay_button_content.xml +14 -0
  50. package/android/src/main/res/drawable-da/buy_with_googlepay_button_content.xml +14 -0
  51. package/android/src/main/res/drawable-da/checkout_with_googlepay_button_content.xml +14 -0
  52. package/android/src/main/res/drawable-da/donate_with_googlepay_button_content.xml +14 -0
  53. package/android/src/main/res/drawable-da/order_with_googlepay_button_content.xml +14 -0
  54. package/android/src/main/res/drawable-da/pay_with_googlepay_button_content.xml +6 -6
  55. package/android/src/main/res/drawable-da/subscribe_with_googlepay_button_content.xml +14 -0
  56. package/android/src/main/res/drawable-de/book_with_googlepay_button_content.xml +15 -0
  57. package/android/src/main/res/drawable-de/buy_with_googlepay_button_content.xml +15 -0
  58. package/android/src/main/res/drawable-de/checkout_with_googlepay_button_content.xml +15 -0
  59. package/android/src/main/res/drawable-de/donate_with_googlepay_button_content.xml +15 -0
  60. package/android/src/main/res/drawable-de/order_with_googlepay_button_content.xml +15 -0
  61. package/android/src/main/res/drawable-de/pay_with_googlepay_button_content.xml +7 -7
  62. package/android/src/main/res/drawable-de/subscribe_with_googlepay_button_content.xml +15 -0
  63. package/android/src/main/res/drawable-el/book_with_googlepay_button_content.xml +14 -0
  64. package/android/src/main/res/drawable-el/buy_with_googlepay_button_content.xml +14 -0
  65. package/android/src/main/res/drawable-el/checkout_with_googlepay_button_content.xml +14 -0
  66. package/android/src/main/res/drawable-el/donate_with_googlepay_button_content.xml +14 -0
  67. package/android/src/main/res/drawable-el/order_with_googlepay_button_content.xml +14 -0
  68. package/android/src/main/res/drawable-el/pay_with_googlepay_button_content.xml +4 -4
  69. package/android/src/main/res/drawable-el/subscribe_with_googlepay_button_content.xml +14 -0
  70. package/android/src/main/res/drawable-et/book_with_googlepay_button_content.xml +15 -0
  71. package/android/src/main/res/drawable-et/buy_with_googlepay_button_content.xml +15 -0
  72. package/android/src/main/res/drawable-et/checkout_with_googlepay_button_content.xml +15 -0
  73. package/android/src/main/res/drawable-et/donate_with_googlepay_button_content.xml +15 -0
  74. package/android/src/main/res/drawable-et/order_with_googlepay_button_content.xml +15 -0
  75. package/android/src/main/res/drawable-et/pay_with_googlepay_button_content.xml +8 -8
  76. package/android/src/main/res/drawable-et/subscribe_with_googlepay_button_content.xml +15 -0
  77. package/android/src/main/res/drawable-fi/book_with_googlepay_button_content.xml +15 -0
  78. package/android/src/main/res/drawable-fi/buy_with_googlepay_button_content.xml +15 -0
  79. package/android/src/main/res/drawable-fi/checkout_with_googlepay_button_content.xml +15 -0
  80. package/android/src/main/res/drawable-fi/donate_with_googlepay_button_content.xml +15 -0
  81. package/android/src/main/res/drawable-fi/order_with_googlepay_button_content.xml +15 -0
  82. package/android/src/main/res/drawable-fi/pay_with_googlepay_button_content.xml +8 -8
  83. package/android/src/main/res/drawable-fi/subscribe_with_googlepay_button_content.xml +15 -0
  84. package/android/src/main/res/drawable-fr/book_with_googlepay_button_content.xml +14 -0
  85. package/android/src/main/res/drawable-fr/buy_with_googlepay_button_content.xml +14 -0
  86. package/android/src/main/res/drawable-fr/checkout_with_googlepay_button_content.xml +14 -0
  87. package/android/src/main/res/drawable-fr/donate_with_googlepay_button_content.xml +14 -0
  88. package/android/src/main/res/drawable-fr/order_with_googlepay_button_content.xml +14 -0
  89. package/android/src/main/res/drawable-fr/pay_with_googlepay_button_content.xml +5 -5
  90. package/android/src/main/res/drawable-fr/subscribe_with_googlepay_button_content.xml +14 -0
  91. package/android/src/main/res/drawable-hr/book_with_googlepay_button_content.xml +14 -0
  92. package/android/src/main/res/drawable-hr/buy_with_googlepay_button_content.xml +14 -0
  93. package/android/src/main/res/drawable-hr/checkout_with_googlepay_button_content.xml +14 -0
  94. package/android/src/main/res/drawable-hr/donate_with_googlepay_button_content.xml +14 -0
  95. package/android/src/main/res/drawable-hr/order_with_googlepay_button_content.xml +14 -0
  96. package/android/src/main/res/drawable-hr/pay_with_googlepay_button_content.xml +4 -4
  97. package/android/src/main/res/drawable-hr/subscribe_with_googlepay_button_content.xml +14 -0
  98. package/android/src/main/res/drawable-id/book_with_googlepay_button_content.xml +14 -0
  99. package/android/src/main/res/drawable-id/buy_with_googlepay_button_content.xml +14 -0
  100. package/android/src/main/res/drawable-id/checkout_with_googlepay_button_content.xml +14 -0
  101. package/android/src/main/res/drawable-id/donate_with_googlepay_button_content.xml +14 -0
  102. package/android/src/main/res/drawable-id/order_with_googlepay_button_content.xml +14 -0
  103. package/android/src/main/res/drawable-id/pay_with_googlepay_button_content.xml +4 -4
  104. package/android/src/main/res/drawable-id/subscribe_with_googlepay_button_content.xml +14 -0
  105. package/android/src/main/res/drawable-it/book_with_googlepay_button_content.xml +14 -0
  106. package/android/src/main/res/drawable-it/buy_with_googlepay_button_content.xml +14 -0
  107. package/android/src/main/res/drawable-it/checkout_with_googlepay_button_content.xml +14 -0
  108. package/android/src/main/res/drawable-it/donate_with_googlepay_button_content.xml +14 -0
  109. package/android/src/main/res/drawable-it/order_with_googlepay_button_content.xml +14 -0
  110. package/android/src/main/res/drawable-it/pay_with_googlepay_button_content.xml +6 -6
  111. package/android/src/main/res/drawable-it/subscribe_with_googlepay_button_content.xml +14 -0
  112. package/android/src/main/res/drawable-ja/book_with_googlepay_button_content.xml +14 -0
  113. package/android/src/main/res/drawable-ja/buy_with_googlepay_button_content.xml +14 -0
  114. package/android/src/main/res/drawable-ja/checkout_with_googlepay_button_content.xml +14 -0
  115. package/android/src/main/res/drawable-ja/donate_with_googlepay_button_content.xml +14 -0
  116. package/android/src/main/res/drawable-ja/order_with_googlepay_button_content.xml +14 -0
  117. package/android/src/main/res/drawable-ja/pay_with_googlepay_button_content.xml +5 -5
  118. package/android/src/main/res/drawable-ja/subscribe_with_googlepay_button_content.xml +14 -0
  119. package/android/src/main/res/drawable-ko/book_with_googlepay_button_content.xml +14 -0
  120. package/android/src/main/res/drawable-ko/buy_with_googlepay_button_content.xml +14 -0
  121. package/android/src/main/res/drawable-ko/checkout_with_googlepay_button_content.xml +14 -0
  122. package/android/src/main/res/drawable-ko/donate_with_googlepay_button_content.xml +14 -0
  123. package/android/src/main/res/drawable-ko/order_with_googlepay_button_content.xml +14 -0
  124. package/android/src/main/res/drawable-ko/pay_with_googlepay_button_content.xml +7 -7
  125. package/android/src/main/res/drawable-ko/subscribe_with_googlepay_button_content.xml +14 -0
  126. package/android/src/main/res/drawable-ms/book_with_googlepay_button_content.xml +14 -0
  127. package/android/src/main/res/drawable-ms/buy_with_googlepay_button_content.xml +14 -0
  128. package/android/src/main/res/drawable-ms/checkout_with_googlepay_button_content.xml +14 -0
  129. package/android/src/main/res/drawable-ms/donate_with_googlepay_button_content.xml +14 -0
  130. package/android/src/main/res/drawable-ms/order_with_googlepay_button_content.xml +14 -0
  131. package/android/src/main/res/drawable-ms/pay_with_googlepay_button_content.xml +4 -4
  132. package/android/src/main/res/drawable-ms/subscribe_with_googlepay_button_content.xml +14 -0
  133. package/android/src/main/res/drawable-nl/book_with_googlepay_button_content.xml +14 -0
  134. package/android/src/main/res/drawable-nl/buy_with_googlepay_button_content.xml +14 -0
  135. package/android/src/main/res/drawable-nl/checkout_with_googlepay_button_content.xml +14 -0
  136. package/android/src/main/res/drawable-nl/donate_with_googlepay_button_content.xml +14 -0
  137. package/android/src/main/res/drawable-nl/order_with_googlepay_button_content.xml +14 -0
  138. package/android/src/main/res/drawable-nl/pay_with_googlepay_button_content.xml +4 -4
  139. package/android/src/main/res/drawable-nl/subscribe_with_googlepay_button_content.xml +14 -0
  140. package/android/src/main/res/drawable-no/book_with_googlepay_button_content.xml +14 -0
  141. package/android/src/main/res/drawable-no/buy_with_googlepay_button_content.xml +14 -0
  142. package/android/src/main/res/drawable-no/checkout_with_googlepay_button_content.xml +14 -0
  143. package/android/src/main/res/drawable-no/donate_with_googlepay_button_content.xml +14 -0
  144. package/android/src/main/res/drawable-no/order_with_googlepay_button_content.xml +14 -0
  145. package/android/src/main/res/drawable-no/pay_with_googlepay_button_content.xml +6 -6
  146. package/android/src/main/res/drawable-no/subscribe_with_googlepay_button_content.xml +14 -0
  147. package/android/src/main/res/drawable-pl/book_with_googlepay_button_content.xml +14 -0
  148. package/android/src/main/res/drawable-pl/buy_with_googlepay_button_content.xml +14 -0
  149. package/android/src/main/res/drawable-pl/checkout_with_googlepay_button_content.xml +14 -0
  150. package/android/src/main/res/drawable-pl/donate_with_googlepay_button_content.xml +14 -0
  151. package/android/src/main/res/drawable-pl/order_with_googlepay_button_content.xml +14 -0
  152. package/android/src/main/res/drawable-pl/pay_with_googlepay_button_content.xml +7 -7
  153. package/android/src/main/res/drawable-pl/subscribe_with_googlepay_button_content.xml +14 -0
  154. package/android/src/main/res/drawable-ru/book_with_googlepay_button_content.xml +14 -0
  155. package/android/src/main/res/drawable-ru/buy_with_googlepay_button_content.xml +14 -0
  156. package/android/src/main/res/drawable-ru/checkout_with_googlepay_button_content.xml +14 -0
  157. package/android/src/main/res/drawable-ru/donate_with_googlepay_button_content.xml +14 -0
  158. package/android/src/main/res/drawable-ru/order_with_googlepay_button_content.xml +14 -0
  159. package/android/src/main/res/drawable-ru/pay_with_googlepay_button_content.xml +7 -7
  160. package/android/src/main/res/drawable-ru/subscribe_with_googlepay_button_content.xml +14 -0
  161. package/android/src/main/res/drawable-sk/book_with_googlepay_button_content.xml +14 -0
  162. package/android/src/main/res/drawable-sk/buy_with_googlepay_button_content.xml +14 -0
  163. package/android/src/main/res/drawable-sk/checkout_with_googlepay_button_content.xml +14 -0
  164. package/android/src/main/res/drawable-sk/donate_with_googlepay_button_content.xml +14 -0
  165. package/android/src/main/res/drawable-sk/order_with_googlepay_button_content.xml +14 -0
  166. package/android/src/main/res/drawable-sk/pay_with_googlepay_button_content.xml +4 -4
  167. package/android/src/main/res/drawable-sk/subscribe_with_googlepay_button_content.xml +14 -0
  168. package/android/src/main/res/drawable-sl/book_with_googlepay_button_content.xml +14 -0
  169. package/android/src/main/res/drawable-sl/buy_with_googlepay_button_content.xml +14 -0
  170. package/android/src/main/res/drawable-sl/checkout_with_googlepay_button_content.xml +14 -0
  171. package/android/src/main/res/drawable-sl/donate_with_googlepay_button_content.xml +14 -0
  172. package/android/src/main/res/drawable-sl/order_with_googlepay_button_content.xml +14 -0
  173. package/android/src/main/res/drawable-sl/pay_with_googlepay_button_content.xml +4 -4
  174. package/android/src/main/res/drawable-sl/subscribe_with_googlepay_button_content.xml +14 -0
  175. package/android/src/main/res/drawable-sr/book_with_googlepay_button_content.xml +14 -0
  176. package/android/src/main/res/drawable-sr/buy_with_googlepay_button_content.xml +14 -0
  177. package/android/src/main/res/drawable-sr/checkout_with_googlepay_button_content.xml +14 -0
  178. package/android/src/main/res/drawable-sr/donate_with_googlepay_button_content.xml +14 -0
  179. package/android/src/main/res/drawable-sr/order_with_googlepay_button_content.xml +14 -0
  180. package/android/src/main/res/drawable-sr/pay_with_googlepay_button_content.xml +7 -7
  181. package/android/src/main/res/drawable-sr/subscribe_with_googlepay_button_content.xml +14 -0
  182. package/android/src/main/res/drawable-sv/book_with_googlepay_button_content.xml +14 -0
  183. package/android/src/main/res/drawable-sv/buy_with_googlepay_button_content.xml +14 -0
  184. package/android/src/main/res/drawable-sv/checkout_with_googlepay_button_content.xml +14 -0
  185. package/android/src/main/res/drawable-sv/donate_with_googlepay_button_content.xml +14 -0
  186. package/android/src/main/res/drawable-sv/order_with_googlepay_button_content.xml +14 -0
  187. package/android/src/main/res/drawable-sv/pay_with_googlepay_button_content.xml +4 -4
  188. package/android/src/main/res/drawable-sv/subscribe_with_googlepay_button_content.xml +14 -0
  189. package/android/src/main/res/drawable-th/book_with_googlepay_button_content.xml +14 -0
  190. package/android/src/main/res/drawable-th/buy_with_googlepay_button_content.xml +14 -0
  191. package/android/src/main/res/drawable-th/checkout_with_googlepay_button_content.xml +14 -0
  192. package/android/src/main/res/drawable-th/donate_with_googlepay_button_content.xml +14 -0
  193. package/android/src/main/res/drawable-th/order_with_googlepay_button_content.xml +14 -0
  194. package/android/src/main/res/drawable-th/pay_with_googlepay_button_content.xml +6 -6
  195. package/android/src/main/res/drawable-th/subscribe_with_googlepay_button_content.xml +14 -0
  196. package/android/src/main/res/drawable-tr/book_with_googlepay_button_content.xml +14 -0
  197. package/android/src/main/res/drawable-tr/buy_with_googlepay_button_content.xml +14 -0
  198. package/android/src/main/res/drawable-tr/checkout_with_googlepay_button_content.xml +14 -0
  199. package/android/src/main/res/drawable-tr/donate_with_googlepay_button_content.xml +14 -0
  200. package/android/src/main/res/drawable-tr/order_with_googlepay_button_content.xml +14 -0
  201. package/android/src/main/res/drawable-tr/pay_with_googlepay_button_content.xml +7 -7
  202. package/android/src/main/res/drawable-tr/subscribe_with_googlepay_button_content.xml +14 -0
  203. package/android/src/main/res/drawable-uk/book_with_googlepay_button_content.xml +14 -0
  204. package/android/src/main/res/drawable-uk/buy_with_googlepay_button_content.xml +14 -0
  205. package/android/src/main/res/drawable-uk/checkout_with_googlepay_button_content.xml +14 -0
  206. package/android/src/main/res/drawable-uk/donate_with_googlepay_button_content.xml +14 -0
  207. package/android/src/main/res/drawable-uk/order_with_googlepay_button_content.xml +14 -0
  208. package/android/src/main/res/drawable-uk/pay_with_googlepay_button_content.xml +5 -5
  209. package/android/src/main/res/drawable-uk/subscribe_with_googlepay_button_content.xml +14 -0
  210. package/android/src/main/res/layout/book_with_googlepay_button.xml +20 -0
  211. package/android/src/main/res/layout/buy_with_googlepay_button.xml +20 -0
  212. package/android/src/main/res/layout/checkout_with_googlepay_button.xml +20 -0
  213. package/android/src/main/res/layout/donate_with_googlepay_button.xml +20 -0
  214. package/android/src/main/res/layout/googlepay_mark_button.xml +18 -0
  215. package/android/src/main/res/layout/order_with_googlepay_button.xml +20 -0
  216. package/android/src/main/res/layout/pay_with_googlepay_button.xml +10 -24
  217. package/android/src/main/res/layout/plain_googlepay_button.xml +17 -0
  218. package/android/src/main/res/layout/subscribe_with_googlepay_button.xml +20 -0
  219. package/android/src/main/res/values/googlepay_strings.xml +3 -2
  220. package/ios/ApplePayButtonManager.m +5 -0
  221. package/ios/ApplePayButtonManager.swift +3 -1
  222. package/ios/ApplePayButtonView.swift +21 -0
  223. package/ios/ApplePayUtils.swift +187 -0
  224. package/ios/ApplePayViewController.swift +279 -0
  225. package/ios/PaymentPassFinder.swift +61 -0
  226. package/ios/PushProvisioning/AddToWalletButtonView.swift +10 -10
  227. package/ios/PushProvisioning/PushProvisioningUtils.swift +39 -16
  228. package/ios/StripeSdk.m +29 -0
  229. package/ios/StripeSdk.swift +193 -129
  230. package/ios/Tests/AddressSheetUtilsTests.swift +1 -7
  231. package/ios/Tests/PushProvisioningTests.swift +14 -11
  232. package/jest/mock.js +44 -0
  233. package/lib/commonjs/NativeStripeSdk.js.map +1 -1
  234. package/lib/commonjs/components/PlatformPayButton.js +2 -0
  235. package/lib/commonjs/components/PlatformPayButton.js.map +1 -0
  236. package/lib/commonjs/functions.js +1 -1
  237. package/lib/commonjs/functions.js.map +1 -1
  238. package/lib/commonjs/hooks/usePlatformPay.js +2 -0
  239. package/lib/commonjs/hooks/usePlatformPay.js.map +1 -0
  240. package/lib/commonjs/hooks/useStripe.js +1 -1
  241. package/lib/commonjs/hooks/useStripe.js.map +1 -1
  242. package/lib/commonjs/index.js +1 -1
  243. package/lib/commonjs/index.js.map +1 -1
  244. package/lib/commonjs/types/Errors.js +1 -1
  245. package/lib/commonjs/types/Errors.js.map +1 -1
  246. package/lib/commonjs/types/PlatformPay.js +2 -0
  247. package/lib/commonjs/types/PlatformPay.js.map +1 -0
  248. package/lib/commonjs/types/PushProvisioning.js +2 -0
  249. package/lib/commonjs/types/PushProvisioning.js.map +1 -0
  250. package/lib/commonjs/types/index.js +1 -1
  251. package/lib/commonjs/types/index.js.map +1 -1
  252. package/lib/module/NativeStripeSdk.js.map +1 -1
  253. package/lib/module/components/PlatformPayButton.js +2 -0
  254. package/lib/module/components/PlatformPayButton.js.map +1 -0
  255. package/lib/module/functions.js +1 -1
  256. package/lib/module/functions.js.map +1 -1
  257. package/lib/module/hooks/usePlatformPay.js +2 -0
  258. package/lib/module/hooks/usePlatformPay.js.map +1 -0
  259. package/lib/module/hooks/useStripe.js +1 -1
  260. package/lib/module/hooks/useStripe.js.map +1 -1
  261. package/lib/module/index.js +1 -1
  262. package/lib/module/index.js.map +1 -1
  263. package/lib/module/types/Errors.js +1 -1
  264. package/lib/module/types/Errors.js.map +1 -1
  265. package/lib/module/types/PlatformPay.js +2 -0
  266. package/lib/module/types/PlatformPay.js.map +1 -0
  267. package/lib/module/types/PushProvisioning.js +2 -0
  268. package/lib/module/types/PushProvisioning.js.map +1 -0
  269. package/lib/module/types/index.js +1 -1
  270. package/lib/module/types/index.js.map +1 -1
  271. package/lib/typescript/src/NativeStripeSdk.d.ts +8 -1
  272. package/lib/typescript/src/components/PlatformPayButton.d.ts +65 -0
  273. package/lib/typescript/src/functions.d.ts +73 -1
  274. package/lib/typescript/src/hooks/usePlatformPay.d.ts +70 -0
  275. package/lib/typescript/src/hooks/useStripe.d.ts +18 -1
  276. package/lib/typescript/src/index.d.ts +2 -0
  277. package/lib/typescript/src/types/ApplePay.d.ts +9 -0
  278. package/lib/typescript/src/types/Errors.d.ts +6 -1
  279. package/lib/typescript/src/types/GooglePay.d.ts +2 -1
  280. package/lib/typescript/src/types/PlatformPay.d.ts +285 -0
  281. package/lib/typescript/src/types/PushProvisioning.d.ts +66 -0
  282. package/lib/typescript/src/types/components/ApplePayButtonComponent.d.ts +2 -2
  283. package/lib/typescript/src/types/index.d.ts +3 -38
  284. package/package.json +8 -1
  285. package/src/NativeStripeSdk.tsx +20 -0
  286. package/src/components/PlatformPayButton.tsx +157 -0
  287. package/src/functions.ts +181 -0
  288. package/src/hooks/usePlatformPay.tsx +174 -0
  289. package/src/hooks/useStripe.tsx +77 -0
  290. package/src/index.tsx +6 -0
  291. package/src/types/ApplePay.ts +9 -0
  292. package/src/types/Errors.ts +7 -1
  293. package/src/types/GooglePay.ts +2 -1
  294. package/src/types/PlatformPay.ts +326 -0
  295. package/src/types/PushProvisioning.ts +76 -0
  296. package/src/types/components/ApplePayButtonComponent.ts +3 -2
  297. package/src/types/index.ts +3 -54
  298. package/android/src/main/res/drawable/googlepay_button_background.xml +0 -6
  299. package/android/src/main/res/drawable/googlepay_button_content.xml +0 -48
  300. package/android/src/main/res/drawable/googlepay_button_overlay.xml +0 -12
  301. package/android/src/main/res/drawable-af/pay_with_googlepay_button_content.xml +0 -14
  302. package/android/src/main/res/drawable-am/pay_with_googlepay_button_content.xml +0 -15
  303. package/android/src/main/res/drawable-as/pay_with_googlepay_button_content.xml +0 -14
  304. package/android/src/main/res/drawable-az/pay_with_googlepay_button_content.xml +0 -14
  305. package/android/src/main/res/drawable-be/pay_with_googlepay_button_content.xml +0 -14
  306. package/android/src/main/res/drawable-bn/pay_with_googlepay_button_content.xml +0 -14
  307. package/android/src/main/res/drawable-bs/pay_with_googlepay_button_content.xml +0 -14
  308. package/android/src/main/res/drawable-cy/pay_with_googlepay_button_content.xml +0 -14
  309. package/android/src/main/res/drawable-en-rau/pay_with_googlepay_button_content.xml +0 -14
  310. package/android/src/main/res/drawable-en-rca/pay_with_googlepay_button_content.xml +0 -14
  311. package/android/src/main/res/drawable-en-rgb/pay_with_googlepay_button_content.xml +0 -14
  312. package/android/src/main/res/drawable-en-rin/pay_with_googlepay_button_content.xml +0 -14
  313. package/android/src/main/res/drawable-es/pay_with_googlepay_button_content.xml +0 -14
  314. package/android/src/main/res/drawable-es-res/pay_with_googlepay_button_content.xml +0 -14
  315. package/android/src/main/res/drawable-eu/pay_with_googlepay_button_content.xml +0 -15
  316. package/android/src/main/res/drawable-fa/pay_with_googlepay_button_content.xml +0 -14
  317. package/android/src/main/res/drawable-fil/pay_with_googlepay_button_content.xml +0 -14
  318. package/android/src/main/res/drawable-fr-rca/pay_with_googlepay_button_content.xml +0 -14
  319. package/android/src/main/res/drawable-ga/pay_with_googlepay_button_content.xml +0 -14
  320. package/android/src/main/res/drawable-gl/pay_with_googlepay_button_content.xml +0 -14
  321. package/android/src/main/res/drawable-gu/pay_with_googlepay_button_content.xml +0 -14
  322. package/android/src/main/res/drawable-hdpi/googlepay_button_background_image.9.png +0 -0
  323. package/android/src/main/res/drawable-hu/pay_with_googlepay_button_content.xml +0 -15
  324. package/android/src/main/res/drawable-hy/pay_with_googlepay_button_content.xml +0 -15
  325. package/android/src/main/res/drawable-is/pay_with_googlepay_button_content.xml +0 -14
  326. package/android/src/main/res/drawable-iw/pay_with_googlepay_button_content.xml +0 -14
  327. package/android/src/main/res/drawable-ka/pay_with_googlepay_button_content.xml +0 -15
  328. package/android/src/main/res/drawable-kk/pay_with_googlepay_button_content.xml +0 -14
  329. package/android/src/main/res/drawable-km/pay_with_googlepay_button_content.xml +0 -14
  330. package/android/src/main/res/drawable-kn/pay_with_googlepay_button_content.xml +0 -14
  331. package/android/src/main/res/drawable-ky/pay_with_googlepay_button_content.xml +0 -14
  332. package/android/src/main/res/drawable-lo/pay_with_googlepay_button_content.xml +0 -14
  333. package/android/src/main/res/drawable-lt/pay_with_googlepay_button_content.xml +0 -14
  334. package/android/src/main/res/drawable-lv/pay_with_googlepay_button_content.xml +0 -14
  335. package/android/src/main/res/drawable-mdpi/googlepay_button_background_image.9.png +0 -0
  336. package/android/src/main/res/drawable-mk/pay_with_googlepay_button_content.xml +0 -14
  337. package/android/src/main/res/drawable-ml/pay_with_googlepay_button_content.xml +0 -14
  338. package/android/src/main/res/drawable-mn/pay_with_googlepay_button_content.xml +0 -14
  339. package/android/src/main/res/drawable-mr/pay_with_googlepay_button_content.xml +0 -14
  340. package/android/src/main/res/drawable-ne/pay_with_googlepay_button_content.xml +0 -14
  341. package/android/src/main/res/drawable-pt-rbr/pay_with_googlepay_button_content.xml +0 -14
  342. package/android/src/main/res/drawable-pt-rpt/pay_with_googlepay_button_content.xml +0 -14
  343. package/android/src/main/res/drawable-ro/pay_with_googlepay_button_content.xml +0 -14
  344. package/android/src/main/res/drawable-sq/pay_with_googlepay_button_content.xml +0 -14
  345. package/android/src/main/res/drawable-sw/pay_with_googlepay_button_content.xml +0 -14
  346. package/android/src/main/res/drawable-ta/pay_with_googlepay_button_content.xml +0 -14
  347. package/android/src/main/res/drawable-te/pay_with_googlepay_button_content.xml +0 -14
  348. package/android/src/main/res/drawable-ur/pay_with_googlepay_button_content.xml +0 -14
  349. package/android/src/main/res/drawable-uz/pay_with_googlepay_button_content.xml +0 -14
  350. package/android/src/main/res/drawable-v21/googlepay_button_background.xml +0 -7
  351. package/android/src/main/res/drawable-vi/pay_with_googlepay_button_content.xml +0 -14
  352. package/android/src/main/res/drawable-xhdpi/googlepay_button_background_image.9.png +0 -0
  353. package/android/src/main/res/drawable-xxhdpi/googlepay_button_background_image.9.png +0 -0
  354. package/android/src/main/res/drawable-xxxhdpi/googlepay_button_background_image.9.png +0 -0
  355. package/android/src/main/res/drawable-zh-rcn/pay_with_googlepay_button_content.xml +0 -15
  356. package/android/src/main/res/drawable-zh-rhk/pay_with_googlepay_button_content.xml +0 -15
  357. package/android/src/main/res/drawable-zh-rtw/pay_with_googlepay_button_content.xml +0 -15
  358. package/android/src/main/res/drawable-zu/pay_with_googlepay_button_content.xml +0 -14
  359. package/android/src/main/res/layout/googlepay_button.xml +0 -39
package/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.22.0 - 2022-12-02
6
+
7
+ ### Breaking changes
8
+
9
+ ### New features
10
+
11
+ - Added the `hasPairedAppleWatch` option to `canAddCardToWallet`. [#1219](https://github.com/stripe/stripe-react-native/pull/1219)
12
+ - Added new functions and a new component to streamline integrating with Apple and Google Pay and add more feature support. See the [Migrating to Platform Pay guide](https://github.com/stripe/stripe-react-native/blob/master/docs/Platform-Pay-Migration.md) for more details. The old Apple and Google Pay APIs are marked as `deprecated` and will be removed in a future release, but are still supported in this version.
13
+
14
+ ## Fixes
15
+
16
+ - Fixed an issue where builds would error with the message `'const' enums are not supported.` [see commit](https://github.com/stripe/stripe-react-native/commit/f882bfa588aa6d23a980b4b43d2cca660ca1dd2a)
17
+ - Fixed an issue where the `canAddCardToWallet` method would sometimes wrongly return `false` with a `details.status` of `MISSING_CONFIGURATION` in production builds. [#1215](https://github.com/stripe/stripe-react-native/pull/1215)
18
+ - Fixed an issue on Android where, for certain countries, the postal code would not be enabled but would still be required. [#1213](https://github.com/stripe/stripe-react-native/pull/1213)
19
+ - Fixed an issue on iOS where `canAddCardToWallet` would return `false` if the card had already been provisioned on a paired device like an Apple Watch, but had not yet been provisioned on the current device, and would also return `false` if the card had been provisioned on the current device, but not on a paired Apple Watch. [#1219](https://github.com/stripe/stripe-react-native/pull/1219)
20
+
5
21
  ## 0.21.0 - 2022-11-15
6
22
 
7
23
  ### Breaking changes
@@ -9,6 +25,7 @@
9
25
  ### New features
10
26
 
11
27
  - Added the `<AddressSheet />` component, which enables you to collect local and international shipping or billing addresses from your customers _with_ address autocomplete. [#1169](https://github.com/stripe/stripe-react-native/pull/1169)
28
+ - [Find the docs here](https://stripe.com/docs/elements/address-element?platform=react-native)
12
29
  - Added the `defaultShippingDetails` field to the `params` argument in `initPaymentSheet(params)`. This will allow you to collect shipping details (either in your own UI or using the new `<AddressSheet />` component) for payments in the Payment Sheet. [#1169](https://github.com/stripe/stripe-react-native/pull/1169)
13
30
 
14
31
  ## Fixes
@@ -38,7 +55,7 @@
38
55
  - Fixed an issue with Financial Connections on iOS where the app wouldn't properly redirect back after authentication. [#1178](https://github.com/stripe/stripe-react-native/pull/1178)
39
56
  - Fixed `borderWidth` and `borderRadius` for `<CardField />` and `CardForm />` was inconsistent across iOS and Android. [#1182](https://github.com/stripe/stripe-react-native/pull/1182)
40
57
 
41
- ## 0.19.0 - 2022-09-16
58
+ ## 0.19.0 - 2022-09-16 (📌 Expo SDK 47)
42
59
 
43
60
  ### Breaking changes
44
61
 
@@ -35,6 +35,7 @@ android {
35
35
  versionName "1.0"
36
36
  vectorDrawables.useSupportLibrary = true
37
37
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
38
+ consumerProguardFiles 'proguard-rules.txt'
38
39
  }
39
40
 
40
41
  buildTypes {
@@ -0,0 +1,7 @@
1
+ -keepclassmembers class com.google.android.gms.tapandpay.** {
2
+ public *;
3
+ }
4
+
5
+ -keepclassmembers class com.stripe.android.pushProvisioning.** {
6
+ public *;
7
+ }
@@ -204,6 +204,10 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
204
204
 
205
205
  fun setPostalCodeEnabled(isEnabled: Boolean) {
206
206
  mCardWidget.postalCodeEnabled = isEnabled
207
+
208
+ if (isEnabled === false) {
209
+ mCardWidget.postalCodeRequired = false
210
+ }
207
211
  }
208
212
 
209
213
  /**
@@ -17,6 +17,11 @@ class GooglePayButtonManager : SimpleViewManager<GooglePayButtonView?>() {
17
17
 
18
18
  @ReactProp(name = "buttonType")
19
19
  fun buttonType(view: GooglePayButtonView, buttonType: String) {
20
+ view.setButtonType(buttonType)
21
+ }
22
+
23
+ @ReactProp(name = "type")
24
+ fun type(view: GooglePayButtonView, buttonType: Int) {
20
25
  view.setType(buttonType)
21
26
  }
22
27
 
@@ -1,28 +1,66 @@
1
1
  package com.reactnativestripesdk
2
2
 
3
3
  import android.view.LayoutInflater
4
+ import android.view.View
4
5
  import android.widget.FrameLayout
5
6
  import com.facebook.react.uimanager.ThemedReactContext
6
7
 
7
8
  class GooglePayButtonView(private val context: ThemedReactContext) : FrameLayout(context) {
9
+ private var button: View? = null
10
+ // Used in legacy GooglePayButton implementations
8
11
  private var buttonType: String? = null
9
12
 
13
+ // Used in the new PlatformPayButton implementations
14
+ private var type: Int? = null
15
+
10
16
  fun initialize() {
11
- val type =
12
- when (buttonType) {
13
- "pay" -> R.layout.pay_with_googlepay_button
14
- "standard" -> R.layout.googlepay_button
15
- else -> R.layout.googlepay_button
17
+ val resAsset: Int =
18
+ if (type != null) {
19
+ when (type) {
20
+ 0 -> R.layout.plain_googlepay_button
21
+ 1 -> R.layout.buy_with_googlepay_button
22
+ 6 -> R.layout.book_with_googlepay_button
23
+ 5 -> R.layout.checkout_with_googlepay_button
24
+ 4 -> R.layout.donate_with_googlepay_button
25
+ 11 -> R.layout.order_with_googlepay_button
26
+ 1000 -> R.layout.pay_with_googlepay_button
27
+ 7 -> R.layout.subscribe_with_googlepay_button
28
+ 1001 -> R.layout.googlepay_mark_button
29
+ else -> R.layout.plain_googlepay_button
30
+ }
31
+ } else {
32
+ when (buttonType) {
33
+ "pay" -> R.layout.pay_with_googlepay_button
34
+ "standard" -> R.layout.plain_googlepay_button
35
+ else -> R.layout.plain_googlepay_button
36
+ }
16
37
  }
17
38
 
18
- val button = LayoutInflater.from(context).inflate(
19
- type, null
39
+ button = LayoutInflater.from(context).inflate(
40
+ resAsset, null
20
41
  )
21
42
 
22
43
  addView(button)
44
+ viewTreeObserver.addOnGlobalLayoutListener { requestLayout() }
45
+ }
46
+
47
+ override fun requestLayout() {
48
+ super.requestLayout()
49
+ post(mLayoutRunnable)
23
50
  }
24
51
 
25
- fun setType(type: String) {
52
+ private val mLayoutRunnable = Runnable {
53
+ measure(
54
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
55
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY))
56
+ button?.layout(left, top, right, bottom)
57
+ }
58
+
59
+ fun setButtonType(type: String) {
26
60
  buttonType = type
27
61
  }
62
+
63
+ fun setType(type: Int) {
64
+ this.type = type
65
+ }
28
66
  }
@@ -0,0 +1,132 @@
1
+ package com.reactnativestripesdk
2
+
3
+ import android.os.Bundle
4
+ import android.view.LayoutInflater
5
+ import android.view.View
6
+ import android.view.ViewGroup
7
+ import android.widget.FrameLayout
8
+ import androidx.appcompat.app.AppCompatActivity
9
+ import androidx.fragment.app.Fragment
10
+ import com.facebook.react.bridge.*
11
+ import com.reactnativestripesdk.utils.*
12
+ import com.reactnativestripesdk.utils.createError
13
+ import com.reactnativestripesdk.utils.createMissingActivityError
14
+ import com.stripe.android.googlepaylauncher.GooglePayEnvironment
15
+ import com.stripe.android.googlepaylauncher.GooglePayLauncher
16
+
17
+ class GooglePayLauncherFragment : Fragment() {
18
+ enum class Mode {
19
+ ForSetup, ForPayment
20
+ }
21
+
22
+ private lateinit var launcher: GooglePayLauncher
23
+ private lateinit var clientSecret: String
24
+ private lateinit var mode: Mode
25
+ private lateinit var configuration: GooglePayLauncher.Config
26
+ private lateinit var currencyCode: String
27
+ private lateinit var callback: (result: GooglePayLauncher.Result?, error: WritableMap?) -> Unit
28
+
29
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
30
+ savedInstanceState: Bundle?): View {
31
+ return FrameLayout(requireActivity()).also {
32
+ it.visibility = View.GONE
33
+ }
34
+ }
35
+
36
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
37
+ launcher = GooglePayLauncher(
38
+ fragment = this,
39
+ config = configuration,
40
+ readyCallback = ::onGooglePayReady,
41
+ resultCallback = ::onGooglePayResult
42
+ )
43
+ }
44
+
45
+ fun presentGooglePaySheet(clientSecret: String, mode: Mode, googlePayParams: ReadableMap, context: ReactApplicationContext, callback: (GooglePayLauncher.Result?, error: WritableMap?) -> Unit) {
46
+ this.clientSecret = clientSecret
47
+ this.mode = mode
48
+ this.callback = callback
49
+ this.currencyCode = googlePayParams.getString("currencyCode") ?: "USD"
50
+ this.configuration = GooglePayLauncher.Config(
51
+ environment = if (googlePayParams.getBoolean("testEnv")) GooglePayEnvironment.Test else GooglePayEnvironment.Production,
52
+ merchantCountryCode = googlePayParams.getString("merchantCountryCode").orEmpty(),
53
+ merchantName = googlePayParams.getString("merchantName").orEmpty(),
54
+ isEmailRequired = googlePayParams.getBooleanOr("isEmailRequired", false),
55
+ billingAddressConfig = buildBillingAddressParameters(googlePayParams.getMap("billingAddressConfig")),
56
+ existingPaymentMethodRequired = googlePayParams.getBooleanOr("existingPaymentMethodRequired", false),
57
+ allowCreditCards = googlePayParams.getBooleanOr("allowCreditCards", true),
58
+ )
59
+
60
+ (context.currentActivity as? AppCompatActivity)?.let {
61
+ attemptToCleanupPreviousFragment(it)
62
+ commitFragmentAndStartFlow(it)
63
+ } ?: run {
64
+ callback(null, createMissingActivityError())
65
+ return
66
+ }
67
+ }
68
+
69
+ private fun attemptToCleanupPreviousFragment(currentActivity: AppCompatActivity) {
70
+ currentActivity.supportFragmentManager.beginTransaction()
71
+ .remove(this)
72
+ .commitAllowingStateLoss()
73
+ }
74
+
75
+ private fun commitFragmentAndStartFlow(currentActivity: AppCompatActivity) {
76
+ try {
77
+ currentActivity.supportFragmentManager.beginTransaction()
78
+ .add(this, TAG)
79
+ .commit()
80
+ } catch (error: IllegalStateException) {
81
+ callback(
82
+ null,
83
+ createError(ErrorType.Failed.toString(), error.message)
84
+ )
85
+ }
86
+ }
87
+
88
+ private fun onGooglePayReady(isReady: Boolean) {
89
+ if (isReady) {
90
+ when (mode) {
91
+ Mode.ForSetup -> {
92
+ launcher.presentForSetupIntent(clientSecret, currencyCode)
93
+ }
94
+ Mode.ForPayment -> {
95
+ launcher.presentForPaymentIntent(clientSecret)
96
+ }
97
+ }
98
+ } else {
99
+ callback(
100
+ null,
101
+ createError(
102
+ GooglePayErrorType.Failed.toString(),
103
+ "Google Pay is not available on this device. You can use isPlatformPaySupported to preemptively check for Google Pay support."
104
+ )
105
+ )
106
+ }
107
+ }
108
+
109
+ private fun onGooglePayResult(result: GooglePayLauncher.Result) {
110
+ callback(result, null)
111
+ }
112
+
113
+ companion object {
114
+ const val TAG = "google_pay_launcher_fragment"
115
+
116
+ private fun buildBillingAddressParameters(params: ReadableMap?): GooglePayLauncher.BillingAddressConfig {
117
+ val isRequired = params?.getBooleanOr("isRequired", false)
118
+ val isPhoneNumberRequired = params?.getBooleanOr("isPhoneNumberRequired", false)
119
+ val format = when (params?.getString("format").orEmpty()) {
120
+ "FULL" -> GooglePayLauncher.BillingAddressConfig.Format.Full
121
+ "MIN" -> GooglePayLauncher.BillingAddressConfig.Format.Min
122
+ else -> GooglePayLauncher.BillingAddressConfig.Format.Min
123
+ }
124
+
125
+ return GooglePayLauncher.BillingAddressConfig(
126
+ isRequired = isRequired ?: false,
127
+ format = format,
128
+ isPhoneNumberRequired = isPhoneNumberRequired ?: false
129
+ )
130
+ }
131
+ }
132
+ }
@@ -0,0 +1,144 @@
1
+ package com.reactnativestripesdk
2
+
3
+ import android.app.Activity
4
+ import android.content.Intent
5
+ import androidx.appcompat.app.AppCompatActivity
6
+ import com.facebook.react.bridge.Promise
7
+ import com.facebook.react.bridge.ReadableMap
8
+ import com.facebook.react.bridge.WritableNativeMap
9
+ import com.google.android.gms.tasks.Task
10
+ import com.google.android.gms.wallet.*
11
+ import com.reactnativestripesdk.utils.*
12
+ import com.reactnativestripesdk.utils.createError
13
+ import com.reactnativestripesdk.utils.mapFromPaymentMethod
14
+ import com.reactnativestripesdk.utils.mapFromToken
15
+ import com.stripe.android.ApiResultCallback
16
+ import com.stripe.android.GooglePayJsonFactory
17
+ import com.stripe.android.Stripe
18
+ import com.stripe.android.model.GooglePayResult
19
+ import com.stripe.android.model.PaymentMethod
20
+ import com.stripe.android.model.PaymentMethodCreateParams
21
+ import org.json.JSONObject
22
+ import java.util.*
23
+
24
+ class GooglePayRequestHelper {
25
+ companion object {
26
+ internal const val LOAD_PAYMENT_DATA_REQUEST_CODE = 414243
27
+
28
+ internal fun createPaymentRequest(activity: AppCompatActivity, factory: GooglePayJsonFactory, googlePayParams: ReadableMap): Task<PaymentData> {
29
+ val transactionInfo = buildTransactionInfo(googlePayParams)
30
+ val merchantInfo = GooglePayJsonFactory.MerchantInfo(googlePayParams.getString("merchantName").orEmpty())
31
+ val billingAddressParameters = buildBillingAddressParameters(googlePayParams.getMap("billingAddressConfig"))
32
+ val shippingAddressParameters = buildShippingAddressParameters(googlePayParams.getMap("shippingAddressConfig"))
33
+
34
+ val request = factory.createPaymentDataRequest(
35
+ transactionInfo = transactionInfo,
36
+ merchantInfo = merchantInfo,
37
+ billingAddressParameters = billingAddressParameters,
38
+ shippingAddressParameters = shippingAddressParameters,
39
+ isEmailRequired = googlePayParams.getBooleanOr("isEmailRequired", false),
40
+ allowCreditCards = googlePayParams.getBooleanOr("allowCreditCards", true)
41
+ )
42
+
43
+ val walletOptions = Wallet.WalletOptions.Builder()
44
+ .setEnvironment(if (googlePayParams.getBoolean("testEnv")) WalletConstants.ENVIRONMENT_TEST else WalletConstants.ENVIRONMENT_PRODUCTION)
45
+ .build()
46
+ return Wallet.getPaymentsClient(activity, walletOptions).loadPaymentData(PaymentDataRequest.fromJson(request.toString()))
47
+ }
48
+
49
+ @Suppress("UNCHECKED_CAST")
50
+ private fun buildShippingAddressParameters(params: ReadableMap?): GooglePayJsonFactory.ShippingAddressParameters {
51
+ val isPhoneNumberRequired = params?.getBooleanOr("isPhoneNumberRequired", false)
52
+ val isRequired = params?.getBooleanOr("isRequired", false)
53
+ val allowedCountryCodes = if (params?.hasKey("allowedCountryCodes") == true)
54
+ params.getArray("allowedCountryCodes") as Array<String> else Locale.getISOCountries()
55
+
56
+ return GooglePayJsonFactory.ShippingAddressParameters(
57
+ isRequired = isRequired ?: false,
58
+ allowedCountryCodes = allowedCountryCodes.toSet(),
59
+ phoneNumberRequired = isPhoneNumberRequired ?: false
60
+ )
61
+ }
62
+
63
+ private fun buildBillingAddressParameters(params: ReadableMap?): GooglePayJsonFactory.BillingAddressParameters {
64
+ val isRequired = params?.getBooleanOr("isRequired", false)
65
+ val isPhoneNumberRequired = params?.getBooleanOr("isPhoneNumberRequired", false)
66
+ val format = when (params?.getString("format").orEmpty()) {
67
+ "FULL" -> GooglePayJsonFactory.BillingAddressParameters.Format.Full
68
+ "MIN" -> GooglePayJsonFactory.BillingAddressParameters.Format.Min
69
+ else -> GooglePayJsonFactory.BillingAddressParameters.Format.Min
70
+ }
71
+
72
+ return GooglePayJsonFactory.BillingAddressParameters(
73
+ isRequired = isRequired ?: false,
74
+ format = format,
75
+ isPhoneNumberRequired = isPhoneNumberRequired ?: false
76
+ )
77
+ }
78
+
79
+ private fun buildTransactionInfo(params: ReadableMap): GooglePayJsonFactory.TransactionInfo {
80
+ val countryCode = params.getString("merchantCountryCode").orEmpty()
81
+ val currencyCode = params.getString("currencyCode") ?: "USD"
82
+ val amount = params.getInt("amount")
83
+
84
+ return GooglePayJsonFactory.TransactionInfo(
85
+ currencyCode = currencyCode,
86
+ totalPriceStatus = GooglePayJsonFactory.TransactionInfo.TotalPriceStatus.Estimated,
87
+ countryCode = countryCode,
88
+ totalPrice = amount,
89
+ checkoutOption = GooglePayJsonFactory.TransactionInfo.CheckoutOption.Default
90
+ )
91
+ }
92
+
93
+ internal fun createPaymentMethod(request: Task<PaymentData>, activity: AppCompatActivity) {
94
+ AutoResolveHelper.resolveTask(
95
+ request,
96
+ activity,
97
+ LOAD_PAYMENT_DATA_REQUEST_CODE
98
+ )
99
+ }
100
+
101
+ internal fun handleGooglePaymentMethodResult(resultCode: Int, data: Intent?, stripe: Stripe, promise: Promise) {
102
+ when (resultCode) {
103
+ Activity.RESULT_OK -> {
104
+ data?.let { intent ->
105
+ PaymentData.getFromIntent(intent)?.let {
106
+ resolveWithPaymentMethodAndToken(it, stripe, promise)
107
+ }
108
+ }
109
+ }
110
+ Activity.RESULT_CANCELED -> {
111
+ promise.resolve(createError(ErrorType.Canceled.toString(), "The payment has been canceled"))
112
+ }
113
+ AutoResolveHelper.RESULT_ERROR -> {
114
+ AutoResolveHelper.getStatusFromIntent(data)?.let {
115
+ promise.resolve(createError(ErrorType.Failed.toString(), it.statusMessage))
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ private fun resolveWithPaymentMethodAndToken(paymentData: PaymentData, stripe: Stripe, promise: Promise) {
122
+ val paymentInformation = JSONObject(paymentData.toJson())
123
+ val googlePayResult = GooglePayResult.fromJson(paymentInformation)
124
+ val promiseResult = WritableNativeMap()
125
+ googlePayResult.token?.let {
126
+ promiseResult.putMap("token", mapFromToken(it))
127
+ }
128
+ stripe.createPaymentMethod(
129
+ PaymentMethodCreateParams.createFromGooglePay(paymentInformation),
130
+ callback = object : ApiResultCallback<PaymentMethod> {
131
+ override fun onError(e: Exception) {
132
+ promise.resolve(createError("Failed", e))
133
+ }
134
+
135
+ override fun onSuccess(result: PaymentMethod) {
136
+ promiseResult.putMap("paymentMethod", mapFromPaymentMethod(result))
137
+ promise.resolve(promiseResult)
138
+ }
139
+ }
140
+ )
141
+ }
142
+ }
143
+ }
144
+
@@ -13,6 +13,7 @@ import com.reactnativestripesdk.utils.*
13
13
  import com.stripe.android.*
14
14
  import com.stripe.android.core.ApiVersion
15
15
  import com.stripe.android.core.AppInfo
16
+ import com.stripe.android.googlepaylauncher.GooglePayLauncher
16
17
  import com.stripe.android.model.*
17
18
  import com.stripe.android.payments.bankaccount.CollectBankAccountConfiguration
18
19
  import com.stripe.android.paymentsheet.PaymentSheet
@@ -38,6 +39,7 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
38
39
 
39
40
  private var confirmPromise: Promise? = null
40
41
  private var confirmPaymentClientSecret: String? = null
42
+ private var createPlatformPayPaymentMethodPromise: Promise? = null
41
43
 
42
44
  private var paymentSheetFragment: PaymentSheetFragment? = null
43
45
  private var googlePayFragment: GooglePayFragment? = null
@@ -53,20 +55,31 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
53
55
  PaymentLauncherFragment.TAG,
54
56
  CollectBankAccountLauncherFragment.TAG,
55
57
  FinancialConnectionsSheetFragment.TAG,
56
- AddressLauncherFragment.TAG
58
+ AddressLauncherFragment.TAG,
59
+ GooglePayLauncherFragment.TAG
57
60
  )
58
61
 
59
62
  private val mActivityEventListener = object : BaseActivityEventListener() {
60
63
  override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) {
61
64
  if (::stripe.isInitialized) {
62
- dispatchActivityResultsToFragments(requestCode, resultCode, data)
63
- try {
64
- val result = AddPaymentMethodActivityStarter.Result.fromIntent(data)
65
- if (data?.getParcelableExtra<Parcelable>("extra_activity_result") != null) {
66
- onFpxPaymentMethodResult(result)
65
+ when (requestCode) {
66
+ GooglePayRequestHelper.LOAD_PAYMENT_DATA_REQUEST_CODE -> {
67
+ createPlatformPayPaymentMethodPromise?.let {
68
+ GooglePayRequestHelper.handleGooglePaymentMethodResult(resultCode, data, stripe, it)
69
+ createPlatformPayPaymentMethodPromise = null
70
+ } ?: run { Log.d("StripeReactNative", "No promise was found, Google Pay result went unhandled,") }
71
+ }
72
+ else -> {
73
+ dispatchActivityResultsToFragments(requestCode, resultCode, data)
74
+ try {
75
+ val result = AddPaymentMethodActivityStarter.Result.fromIntent(data)
76
+ if (data?.getParcelableExtra<Parcelable>("extra_activity_result") != null) {
77
+ onFpxPaymentMethodResult(result)
78
+ }
79
+ } catch (e: java.lang.Exception) {
80
+ Log.d("StripeReactNative", e.localizedMessage ?: e.toString())
81
+ }
67
82
  }
68
- } catch (e: java.lang.Exception) {
69
- Log.d("Error", e.localizedMessage ?: e.toString())
70
83
  }
71
84
  }
72
85
  }
@@ -495,6 +508,26 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
495
508
  }
496
509
  }
497
510
 
511
+ @ReactMethod
512
+ fun isPlatformPaySupported(params: ReadableMap?, promise: Promise) {
513
+ val fragment = GooglePayPaymentMethodLauncherFragment(
514
+ reactApplicationContext,
515
+ getBooleanOrFalse(params, "testEnv"),
516
+ getBooleanOrFalse(params, "existingPaymentMethodRequired"),
517
+ promise
518
+ )
519
+
520
+ getCurrentActivityOrResolveWithError(promise)?.let {
521
+ try {
522
+ it.supportFragmentManager.beginTransaction()
523
+ .add(fragment, GooglePayPaymentMethodLauncherFragment.TAG)
524
+ .commit()
525
+ } catch (error: IllegalStateException) {
526
+ promise.resolve(createError(ErrorType.Failed.toString(), error.message))
527
+ }
528
+ }
529
+ }
530
+
498
531
  @ReactMethod
499
532
  fun isGooglePaySupported(params: ReadableMap?, promise: Promise) {
500
533
  val fragment = GooglePayPaymentMethodLauncherFragment(
@@ -551,6 +584,62 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
551
584
  }
552
585
  }
553
586
 
587
+ @ReactMethod
588
+ fun confirmPlatformPay(clientSecret: String, params: ReadableMap, isPaymentIntent: Boolean, promise: Promise) {
589
+ if (!::stripe.isInitialized) {
590
+ promise.resolve(createMissingInitError())
591
+ return
592
+ }
593
+
594
+ val googlePayParams: ReadableMap = params.getMap("googlePay") ?: run {
595
+ promise.resolve(createError(GooglePayErrorType.Failed.toString(), "You must provide the `googlePay` parameter."))
596
+ return
597
+ }
598
+
599
+ GooglePayLauncherFragment().also {
600
+ it.presentGooglePaySheet(
601
+ clientSecret,
602
+ if (isPaymentIntent) GooglePayLauncherFragment.Mode.ForPayment else GooglePayLauncherFragment.Mode.ForSetup,
603
+ googlePayParams,
604
+ reactApplicationContext
605
+ ) { launcherResult, errorMap ->
606
+ if (errorMap != null) {
607
+ promise.resolve(errorMap)
608
+ } else if (launcherResult != null) {
609
+ when (launcherResult) {
610
+ GooglePayLauncher.Result.Completed -> {
611
+ if (isPaymentIntent) {
612
+ stripe.retrievePaymentIntent(clientSecret, stripeAccountId, object : ApiResultCallback<PaymentIntent> {
613
+ override fun onError(e: Exception) {
614
+ promise.resolve(createResult("paymentIntent", WritableNativeMap()))
615
+ }
616
+ override fun onSuccess(result: PaymentIntent) {
617
+ promise.resolve(createResult("paymentIntent", mapFromPaymentIntentResult(result)))
618
+ }
619
+ })
620
+ } else {
621
+ stripe.retrieveSetupIntent(clientSecret, stripeAccountId, object : ApiResultCallback<SetupIntent> {
622
+ override fun onError(e: Exception) {
623
+ promise.resolve(createResult("setupIntent", WritableNativeMap()))
624
+ }
625
+ override fun onSuccess(result: SetupIntent) {
626
+ promise.resolve(createResult("setupIntent", mapFromSetupIntentResult(result)))
627
+ }
628
+ })
629
+ }
630
+ }
631
+ GooglePayLauncher.Result.Canceled -> {
632
+ promise.resolve(createError(GooglePayErrorType.Canceled.toString(), "Google Pay has been canceled"))
633
+ }
634
+ is GooglePayLauncher.Result.Failed -> {
635
+ promise.resolve(createError(GooglePayErrorType.Failed.toString(), launcherResult.error))
636
+ }
637
+ }
638
+ }
639
+ }
640
+ }
641
+ }
642
+
554
643
  @ReactMethod
555
644
  fun createGooglePayPaymentMethod(params: ReadableMap, promise: Promise) {
556
645
  val currencyCode = getValOr(params, "currencyCode", null) ?: run {
@@ -564,6 +653,23 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
564
653
  googlePayFragment?.createPaymentMethod(currencyCode, amount, promise)
565
654
  }
566
655
 
656
+ @ReactMethod
657
+ fun createPlatformPayPaymentMethod(params: ReadableMap, promise: Promise) {
658
+ val googlePayParams: ReadableMap = params.getMap("googlePay") ?: run {
659
+ promise.resolve(createError(GooglePayErrorType.Failed.toString(), "You must provide the `googlePay` parameter."))
660
+ return
661
+ }
662
+ createPlatformPayPaymentMethodPromise = promise
663
+ getCurrentActivityOrResolveWithError(promise)?.let {
664
+ val request = GooglePayRequestHelper.createPaymentRequest(
665
+ it,
666
+ GooglePayJsonFactory(reactApplicationContext),
667
+ googlePayParams
668
+ )
669
+ GooglePayRequestHelper.createPaymentMethod(request, it)
670
+ }
671
+ }
672
+
567
673
  @ReactMethod
568
674
  fun canAddCardToWallet(params: ReadableMap, promise: Promise) {
569
675
  val last4 = getValOr(params, "cardLastFour", null) ?: run {
@@ -740,6 +846,15 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
740
846
  }
741
847
  }
742
848
 
849
+ /**
850
+ * We need the following in order to avoid some annoying console.warns() from our Apple Pay event listeners. Otherwise,
851
+ * we'd have to put our users through some annoying (if Platform.OS...) logic & null-handling logic.
852
+ */
853
+ @ReactMethod
854
+ fun addListener(eventName: String) {}
855
+ @ReactMethod
856
+ fun removeListeners(count: Int) {}
857
+
743
858
  /**
744
859
  * Safely get and cast the current activity as an AppCompatActivity. If that fails, the promise
745
860
  * provided will be resolved with an error message instructing the user to retry the method.
@@ -6,6 +6,7 @@ import android.view.inputmethod.InputMethodManager
6
6
  import androidx.appcompat.app.AppCompatActivity
7
7
  import androidx.fragment.app.Fragment
8
8
  import com.facebook.react.bridge.ReactApplicationContext
9
+ import com.facebook.react.bridge.ReadableMap
9
10
 
10
11
  fun View.showSoftKeyboard() {
11
12
  post {
@@ -30,3 +31,7 @@ fun Fragment.removeFragment(context: ReactApplicationContext) {
30
31
  }
31
32
  }
32
33
  }
34
+
35
+ fun ReadableMap.getBooleanOr(key: String, default: Boolean): Boolean {
36
+ return if (this.hasKey(key)) this.getBoolean(key) else default
37
+ }
@@ -0,0 +1,14 @@
1
+ <vector android:width="130dp" android:height="21dp" android:viewportWidth="130" android:viewportHeight="21" xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <path android:pathData="M2.08038 15.0006V3.54461h4.288c0.62933 0 1.2 0.13333 1.712 0.4s0.91733 0.62933 1.216 1.088c0.30933 0.45867 0.464 0.976 0.464 1.552 0 0.58667-0.144 1.088-0.432 1.504-0.288 0.416-0.66133 0.73067-1.12 0.944v0.08c0.576 0.192 1.04533 0.52267 1.408 0.99199 0.36267 0.4693 0.54402 1.0293 0.54402 1.68 0 0.64-0.16535 1.2-0.49602 1.68-0.32 0.48-0.75733 0.8587-1.312 1.136-0.544 0.2667-1.14133 0.4-1.792 0.4h-4.48zm1.76-5.07199v3.43999h2.72c0.384 0 0.71466-0.08 0.992-0.24 0.27733-0.16 0.48533-0.3733 0.624-0.64 0.14933-0.2667 0.224-0.544 0.224-0.832 0-0.3093-0.07467-0.592-0.224-0.848-0.14934-0.2667-0.368-0.48-0.656-0.64-0.27733-0.16-0.61867-0.23999-1.024-0.23999h-2.656zm0-1.568h2.448c0.37333 0 0.688-0.07467 0.944-0.224 0.26667-0.16 0.46933-0.36267 0.608-0.608 0.13867-0.256 0.208-0.51733 0.208-0.784 0-0.26667-0.06933-0.51733-0.208-0.752-0.128-0.24533-0.32-0.44267-0.576-0.592-0.256-0.16-0.56-0.24-0.912-0.24h-2.512v3.2zM15.798 15.2566c-0.8427 0-1.584-0.192-2.224-0.576-0.64-0.384-1.1413-0.9013-1.504-1.552-0.3627-0.6613-0.544-1.3973-0.544-2.208 0-0.8107 0.1813-1.54132 0.544-2.19199 0.3627-0.66133 0.864-1.184 1.504-1.568 0.64-0.384 1.3813-0.576 2.224-0.576 0.832 0 1.568 0.19733 2.208 0.592 0.64 0.384 1.1413 0.90133 1.504 1.552 0.3627 0.65067 0.544 1.38129 0.544 2.19199 0 0.8107-0.1813 1.5467-0.544 2.208-0.3627 0.6507-0.864 1.168-1.504 1.552-0.64 0.384-1.376 0.576-2.208 0.576zm0-1.584c0.448 0 0.864-0.1067 1.248-0.32 0.384-0.224 0.6933-0.5387 0.928-0.944 0.2453-0.416 0.368-0.912 0.368-1.488s-0.1227-1.06666-0.368-1.47199c-0.2347-0.416-0.544-0.73067-0.928-0.944-0.384-0.224-0.8-0.336-1.248-0.336-0.448 0-0.8693 0.112-1.264 0.336-0.384 0.21333-0.6987 0.528-0.944 0.944-0.2347 0.40533-0.352 0.89599-0.352 1.47199s0.1173 1.072 0.352 1.488c0.2453 0.4053 0.5653 0.72 0.96 0.944 0.3947 0.2133 0.8107 0.32 1.248 0.32zm9.8375 1.584c-0.8427 0-1.584-0.192-2.224-0.576-0.64-0.384-1.1413-0.9013-1.504-1.552-0.3627-0.6613-0.544-1.3973-0.544-2.208 0-0.8107 0.1813-1.54132 0.544-2.19199 0.3627-0.66133 0.864-1.184 1.504-1.568 0.64-0.384 1.3813-0.576 2.224-0.576 0.832 0 1.568 0.19733 2.208 0.592 0.64 0.384 1.1413 0.90133 1.504 1.552 0.3627 0.65067 0.544 1.38129 0.544 2.19199 0 0.8107-0.1813 1.5467-0.544 2.208-0.3627 0.6507-0.864 1.168-1.504 1.552-0.64 0.384-1.376 0.576-2.208 0.576zm0-1.584c0.448 0 0.864-0.1067 1.248-0.32 0.384-0.224 0.6933-0.5387 0.928-0.944 0.2453-0.416 0.368-0.912 0.368-1.488s-0.1227-1.06666-0.368-1.47199c-0.2347-0.416-0.544-0.73067-0.928-0.944-0.384-0.224-0.8-0.336-1.248-0.336-0.448 0-0.8693 0.112-1.264 0.336-0.384 0.21333-0.6987 0.528-0.944 0.944-0.2347 0.40533-0.352 0.89599-0.352 1.47199s0.1173 1.072 0.352 1.488c0.2453 0.4053 0.5653 0.72 0.96 0.944 0.3947 0.2133 0.8107 0.32 1.248 0.32zm5.9194 1.328V3.54461h1.728v6.75199l3.456-3.45599h2.144v0.096l-3.152 3.11999 3.264 4.848v0.096h-2.048l-2.432-3.744-1.232 1.216v2.528h-1.728zm14.262 0l-2.608-8.15999h1.872l1.68 5.87199h0.064l1.84-5.87199h1.776l1.84 5.87199h0.064l1.68-5.87199h1.84l-2.624 8.15999h-1.808l-1.888-5.90399h-0.064l-1.872 5.90399h-1.792zm11.441 0V6.84061h1.728v8.15999h-1.728zm0.864-9.35999c-0.32 0-0.5974-0.112-0.832-0.336-0.224-0.23467-0.336-0.512-0.336-0.832 0-0.33067 0.112-0.60267 0.336-0.816 0.2346-0.224 0.512-0.336 0.832-0.336 0.3306 0 0.608 0.112 0.832 0.336 0.224 0.21333 0.336 0.48533 0.336 0.816 0 0.32-0.112 0.59733-0.336 0.832-0.224 0.224-0.5014 0.336-0.832 0.336zm2.5199 1.2h1.424v-2.304h1.728v2.304h2v1.504h-2v3.91999c0 0.4053 0.08 0.7147 0.24 0.928 0.1706 0.2133 0.4533 0.32 0.848 0.32 0.192 0 0.3626-0.0267 0.512-0.08 0.1493-0.064 0.2986-0.1387 0.448-0.224v1.68c-0.1814 0.0747-0.3734 0.1333-0.576 0.176-0.2027 0.0427-0.4427 0.064-0.72 0.064-0.7574 0-1.36-0.2187-1.808-0.656-0.448-0.448-0.672-1.0613-0.672-1.84V8.34461h-1.424v-1.504zm7.0381 8.15999V3.54461h1.728v3.136l-0.096 1.28h0.096c0.224-0.39467 0.5653-0.72 1.024-0.976 0.4693-0.26667 0.9866-0.4 1.552-0.4 0.6826 0 1.248 0.13867 1.696 0.416 0.4586 0.27733 0.8 0.66133 1.024 1.152 0.224 0.48 0.336 1.04533 0.336 1.696v5.15199h-1.712v-4.928c0-0.43732-0.0854-0.79466-0.256-1.07199-0.16-0.27733-0.3734-0.48533-0.64-0.624-0.2667-0.13867-0.5654-0.208-0.896-0.208-0.416 0-0.784 0.11733-1.104 0.352-0.32 0.23467-0.5707 0.544-0.752 0.928-0.1814 0.37333-0.272 0.77329-0.272 1.19999v4.352h-1.728z" android:fillColor="#ffffff"/>
3
+ <group>
4
+ <group>
5
+ <path android:pathData="M104.356 3.42339v4.73836h2.922c0.696 0 1.272-0.23394 1.727-0.70182 0.468-0.4668 0.702-1.02349 0.702-1.6679 0-0.63142-0.234-1.18162-0.702-1.64949-0.455-0.4798-1.031-0.72024-1.727-0.72024h-2.922v0.00109zm0 6.40627v5.49654h-1.745V1.75549h4.629c1.177 0 2.175 0.39207 2.998 1.17512 0.835 0.78304 1.253 1.73721 1.253 2.86142 0 1.15021-0.418 2.11088-1.253 2.88093-0.81 0.77113-1.809 1.15562-2.998 1.15562h-2.884v0.00108zM113.255 12.4831c0 0.4548 0.193 0.8339 0.579 1.1372 0.386 0.3032 0.838 0.4549 1.356 0.4549 0.734 0 1.388-0.272 1.963-0.8145 0.576-0.5437 0.864-1.1816 0.864-1.9138-0.545-0.4299-1.304-0.6444-2.277-0.6444-0.709 0-1.3 0.1711-1.774 0.5123-0.474 0.3411-0.711 0.7625-0.711 1.2683m2.258-6.74744c1.29 0 2.308 0.34441 3.056 1.03323 0.745 0.68882 1.118 1.63324 1.118 2.83327v5.72394h-1.669v-1.2888h-0.076c-0.721 1.0612-1.683 1.5921-2.884 1.5921-1.025 0-1.882-0.3033-2.571-0.9098-0.69-0.6065-1.034-1.3647-1.034-2.2744 0-0.9607 0.363-1.7244 1.09-2.2929 0.728-0.56855 1.698-0.8534 2.913-0.8534 1.036 0 1.89 0.18954 2.561 0.56861V9.46894c0-0.60651-0.241-1.12096-0.721-1.54443-0.482-0.42348-1.044-0.63467-1.689-0.63467-0.974 0-1.745 0.41048-2.314 1.23251l-1.538-0.96716c0.848-1.21302 2.1-1.81953 3.758-1.81953M129.269 6.03894l-5.826 13.38116h-1.802l2.163-4.6821-3.833-8.69906h1.898l2.77 6.67166h0.038l2.694-6.67166h1.898z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
6
+ </group>
7
+ <group>
8
+ <path android:pathData="M97.3029 8.64473c0-0.5491-0.0467-1.07872-0.1345-1.58559h-7.3619v3.00336h4.2166c-0.1811 0.9789-0.7287 1.8119-1.5592 2.3697v1.9506h2.5165c1.4735-1.3582 2.3225-3.3651 2.3225-5.73807" android:fillColor="#4285f4" android:fillType="evenOdd"/>
9
+ <path android:pathData="M89.8065 16.2651c2.1066 0 3.8804-0.691 5.1739-1.8823l-2.5165-1.9506c-0.7004 0.4711-1.6025 0.7462-2.6574 0.7462-2.0362 0-3.7645-1.3711-4.3825-3.21881h-2.5924v2.00911c1.2848 2.5473 3.9249 4.2964 6.9749 4.2964" android:fillColor="#34a853" android:fillType="evenOdd"/>
10
+ <path android:pathData="M85.424 9.9596c-0.1583-0.47113-0.245-0.97367-0.245-1.49245s0.0867-1.02132 0.245-1.49245V4.96564h-2.5924C82.3003 6.01837 82 7.20756 82 8.46715c0 1.25959 0.3003 2.44885 0.8316 3.50155l2.5924-2.0091z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
11
+ <path android:pathData="M89.8065 3.75583c1.1503 0 2.1814 0.39532 2.9946 1.1697v0.00108l2.2281-2.22567c-1.3531-1.25851-3.1172-2.031812-5.2227-2.031812-3.05 0-5.6901 1.749132-6.9749 4.296472l2.5924 2.00907c0.618-1.84769 2.3463-3.21884 4.3825-3.21884" android:fillColor="#e94235" android:fillType="evenOdd"/>
12
+ </group>
13
+ </group>
14
+ </vector>