@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.
- package/CHANGELOG.md +18 -1
- package/android/build.gradle +1 -0
- package/android/proguard-rules.txt +7 -0
- package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +4 -0
- package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +5 -0
- package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +46 -8
- package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherFragment.kt +132 -0
- package/android/src/main/java/com/reactnativestripesdk/GooglePayRequestHelper.kt +144 -0
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +123 -8
- package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -0
- package/android/src/main/res/drawable/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable/googlepay_button_background_shape.xml +11 -0
- package/android/src/main/res/drawable/googlepay_mark_background.xml +12 -0
- package/android/src/main/res/drawable/googlepay_mark_content.xml +27 -0
- package/android/src/main/res/drawable/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable/pay_with_googlepay_button_content.xml +6 -6
- package/android/src/main/res/drawable/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ar/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ar/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ar/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ar/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ar/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ar/pay_with_googlepay_button_content.xml +6 -6
- package/android/src/main/res/drawable-ar/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-bg/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-bg/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-bg/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-bg/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-bg/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-bg/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-bg/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ca/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ca/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ca/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ca/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ca/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ca/pay_with_googlepay_button_content.xml +6 -6
- package/android/src/main/res/drawable-ca/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-cs/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-cs/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-cs/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-cs/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-cs/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-cs/pay_with_googlepay_button_content.xml +6 -6
- package/android/src/main/res/drawable-cs/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-da/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-da/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-da/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-da/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-da/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-da/pay_with_googlepay_button_content.xml +6 -6
- package/android/src/main/res/drawable-da/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-de/book_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-de/buy_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-de/checkout_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-de/donate_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-de/order_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-de/pay_with_googlepay_button_content.xml +7 -7
- package/android/src/main/res/drawable-de/subscribe_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-el/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-el/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-el/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-el/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-el/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-el/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-el/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-et/book_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-et/buy_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-et/checkout_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-et/donate_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-et/order_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-et/pay_with_googlepay_button_content.xml +8 -8
- package/android/src/main/res/drawable-et/subscribe_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-fi/book_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-fi/buy_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-fi/checkout_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-fi/donate_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-fi/order_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-fi/pay_with_googlepay_button_content.xml +8 -8
- package/android/src/main/res/drawable-fi/subscribe_with_googlepay_button_content.xml +15 -0
- package/android/src/main/res/drawable-fr/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-fr/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-fr/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-fr/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-fr/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-fr/pay_with_googlepay_button_content.xml +5 -5
- package/android/src/main/res/drawable-fr/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-hr/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-hr/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-hr/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-hr/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-hr/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-hr/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-hr/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-id/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-id/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-id/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-id/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-id/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-id/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-id/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-it/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-it/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-it/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-it/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-it/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-it/pay_with_googlepay_button_content.xml +6 -6
- package/android/src/main/res/drawable-it/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ja/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ja/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ja/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ja/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ja/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ja/pay_with_googlepay_button_content.xml +5 -5
- package/android/src/main/res/drawable-ja/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ko/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ko/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ko/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ko/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ko/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ko/pay_with_googlepay_button_content.xml +7 -7
- package/android/src/main/res/drawable-ko/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ms/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ms/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ms/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ms/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ms/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ms/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-ms/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-nl/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-nl/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-nl/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-nl/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-nl/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-nl/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-nl/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-no/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-no/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-no/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-no/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-no/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-no/pay_with_googlepay_button_content.xml +6 -6
- package/android/src/main/res/drawable-no/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-pl/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-pl/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-pl/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-pl/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-pl/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-pl/pay_with_googlepay_button_content.xml +7 -7
- package/android/src/main/res/drawable-pl/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ru/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ru/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ru/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ru/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ru/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-ru/pay_with_googlepay_button_content.xml +7 -7
- package/android/src/main/res/drawable-ru/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sk/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sk/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sk/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sk/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sk/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sk/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-sk/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sl/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sl/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sl/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sl/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sl/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sl/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-sl/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sr/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sr/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sr/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sr/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sr/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sr/pay_with_googlepay_button_content.xml +7 -7
- package/android/src/main/res/drawable-sr/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sv/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sv/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sv/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sv/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sv/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-sv/pay_with_googlepay_button_content.xml +4 -4
- package/android/src/main/res/drawable-sv/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-th/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-th/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-th/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-th/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-th/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-th/pay_with_googlepay_button_content.xml +6 -6
- package/android/src/main/res/drawable-th/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-tr/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-tr/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-tr/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-tr/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-tr/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-tr/pay_with_googlepay_button_content.xml +7 -7
- package/android/src/main/res/drawable-tr/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-uk/book_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-uk/buy_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-uk/checkout_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-uk/donate_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-uk/order_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/drawable-uk/pay_with_googlepay_button_content.xml +5 -5
- package/android/src/main/res/drawable-uk/subscribe_with_googlepay_button_content.xml +14 -0
- package/android/src/main/res/layout/book_with_googlepay_button.xml +20 -0
- package/android/src/main/res/layout/buy_with_googlepay_button.xml +20 -0
- package/android/src/main/res/layout/checkout_with_googlepay_button.xml +20 -0
- package/android/src/main/res/layout/donate_with_googlepay_button.xml +20 -0
- package/android/src/main/res/layout/googlepay_mark_button.xml +18 -0
- package/android/src/main/res/layout/order_with_googlepay_button.xml +20 -0
- package/android/src/main/res/layout/pay_with_googlepay_button.xml +10 -24
- package/android/src/main/res/layout/plain_googlepay_button.xml +17 -0
- package/android/src/main/res/layout/subscribe_with_googlepay_button.xml +20 -0
- package/android/src/main/res/values/googlepay_strings.xml +3 -2
- package/ios/ApplePayButtonManager.m +5 -0
- package/ios/ApplePayButtonManager.swift +3 -1
- package/ios/ApplePayButtonView.swift +21 -0
- package/ios/ApplePayUtils.swift +187 -0
- package/ios/ApplePayViewController.swift +279 -0
- package/ios/PaymentPassFinder.swift +61 -0
- package/ios/PushProvisioning/AddToWalletButtonView.swift +10 -10
- package/ios/PushProvisioning/PushProvisioningUtils.swift +39 -16
- package/ios/StripeSdk.m +29 -0
- package/ios/StripeSdk.swift +193 -129
- package/ios/Tests/AddressSheetUtilsTests.swift +1 -7
- package/ios/Tests/PushProvisioningTests.swift +14 -11
- package/jest/mock.js +44 -0
- package/lib/commonjs/NativeStripeSdk.js.map +1 -1
- package/lib/commonjs/components/PlatformPayButton.js +2 -0
- package/lib/commonjs/components/PlatformPayButton.js.map +1 -0
- package/lib/commonjs/functions.js +1 -1
- package/lib/commonjs/functions.js.map +1 -1
- package/lib/commonjs/hooks/usePlatformPay.js +2 -0
- package/lib/commonjs/hooks/usePlatformPay.js.map +1 -0
- package/lib/commonjs/hooks/useStripe.js +1 -1
- package/lib/commonjs/hooks/useStripe.js.map +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types/Errors.js +1 -1
- package/lib/commonjs/types/Errors.js.map +1 -1
- package/lib/commonjs/types/PlatformPay.js +2 -0
- package/lib/commonjs/types/PlatformPay.js.map +1 -0
- package/lib/commonjs/types/PushProvisioning.js +2 -0
- package/lib/commonjs/types/PushProvisioning.js.map +1 -0
- package/lib/commonjs/types/index.js +1 -1
- package/lib/commonjs/types/index.js.map +1 -1
- package/lib/module/NativeStripeSdk.js.map +1 -1
- package/lib/module/components/PlatformPayButton.js +2 -0
- package/lib/module/components/PlatformPayButton.js.map +1 -0
- package/lib/module/functions.js +1 -1
- package/lib/module/functions.js.map +1 -1
- package/lib/module/hooks/usePlatformPay.js +2 -0
- package/lib/module/hooks/usePlatformPay.js.map +1 -0
- package/lib/module/hooks/useStripe.js +1 -1
- package/lib/module/hooks/useStripe.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types/Errors.js +1 -1
- package/lib/module/types/Errors.js.map +1 -1
- package/lib/module/types/PlatformPay.js +2 -0
- package/lib/module/types/PlatformPay.js.map +1 -0
- package/lib/module/types/PushProvisioning.js +2 -0
- package/lib/module/types/PushProvisioning.js.map +1 -0
- package/lib/module/types/index.js +1 -1
- package/lib/module/types/index.js.map +1 -1
- package/lib/typescript/src/NativeStripeSdk.d.ts +8 -1
- package/lib/typescript/src/components/PlatformPayButton.d.ts +65 -0
- package/lib/typescript/src/functions.d.ts +73 -1
- package/lib/typescript/src/hooks/usePlatformPay.d.ts +70 -0
- package/lib/typescript/src/hooks/useStripe.d.ts +18 -1
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/types/ApplePay.d.ts +9 -0
- package/lib/typescript/src/types/Errors.d.ts +6 -1
- package/lib/typescript/src/types/GooglePay.d.ts +2 -1
- package/lib/typescript/src/types/PlatformPay.d.ts +285 -0
- package/lib/typescript/src/types/PushProvisioning.d.ts +66 -0
- package/lib/typescript/src/types/components/ApplePayButtonComponent.d.ts +2 -2
- package/lib/typescript/src/types/index.d.ts +3 -38
- package/package.json +8 -1
- package/src/NativeStripeSdk.tsx +20 -0
- package/src/components/PlatformPayButton.tsx +157 -0
- package/src/functions.ts +181 -0
- package/src/hooks/usePlatformPay.tsx +174 -0
- package/src/hooks/useStripe.tsx +77 -0
- package/src/index.tsx +6 -0
- package/src/types/ApplePay.ts +9 -0
- package/src/types/Errors.ts +7 -1
- package/src/types/GooglePay.ts +2 -1
- package/src/types/PlatformPay.ts +326 -0
- package/src/types/PushProvisioning.ts +76 -0
- package/src/types/components/ApplePayButtonComponent.ts +3 -2
- package/src/types/index.ts +3 -54
- package/android/src/main/res/drawable/googlepay_button_background.xml +0 -6
- package/android/src/main/res/drawable/googlepay_button_content.xml +0 -48
- package/android/src/main/res/drawable/googlepay_button_overlay.xml +0 -12
- package/android/src/main/res/drawable-af/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-am/pay_with_googlepay_button_content.xml +0 -15
- package/android/src/main/res/drawable-as/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-az/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-be/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-bn/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-bs/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-cy/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-en-rau/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-en-rca/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-en-rgb/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-en-rin/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-es/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-es-res/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-eu/pay_with_googlepay_button_content.xml +0 -15
- package/android/src/main/res/drawable-fa/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-fil/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-fr-rca/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-ga/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-gl/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-gu/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-hdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-hu/pay_with_googlepay_button_content.xml +0 -15
- package/android/src/main/res/drawable-hy/pay_with_googlepay_button_content.xml +0 -15
- package/android/src/main/res/drawable-is/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-iw/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-ka/pay_with_googlepay_button_content.xml +0 -15
- package/android/src/main/res/drawable-kk/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-km/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-kn/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-ky/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-lo/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-lt/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-lv/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-mdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-mk/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-ml/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-mn/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-mr/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-ne/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-pt-rbr/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-pt-rpt/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-ro/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-sq/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-sw/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-ta/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-te/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-ur/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-uz/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-v21/googlepay_button_background.xml +0 -7
- package/android/src/main/res/drawable-vi/pay_with_googlepay_button_content.xml +0 -14
- package/android/src/main/res/drawable-xhdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-zh-rcn/pay_with_googlepay_button_content.xml +0 -15
- package/android/src/main/res/drawable-zh-rhk/pay_with_googlepay_button_content.xml +0 -15
- package/android/src/main/res/drawable-zh-rtw/pay_with_googlepay_button_content.xml +0 -15
- package/android/src/main/res/drawable-zu/pay_with_googlepay_button_content.xml +0 -14
- 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
|
|
package/android/build.gradle
CHANGED
|
@@ -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
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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>
|