stripe-android
stripe-android copied to clipboard
Pass `hosted_surface` correctly across surfaces.
Summary
We're not properly handling hosted surfaces across Connections integrations:
- L1 (direct integrations): hosted surface should be null
- PaymentSheet: hosted surface should be
payment_element - CustomerSheet: hosted surface will be
customer_sheet.
This PR allows CollectBankAccountLauncher internal implementations to receive a hosted surface. That surface will be sent when calling the create LAS endpoint. Public L1 integrations will not expose this parameter, that will instead be null.
Motivation
:notebook_with_decorative_cover: ย [๐งต] Update ACH payment flow to pass hosted_surface during deferred intent session creation
:globe_with_meridians: ย BANKCON-11012
Make sure that on ACH / ID flows:
- On L1 surfaces (collectBankAccountFor... publicly exposed entry points):
- We don't send hosted_surface when creating the FCsession
- On L3 surfaces (currently just MPE)
- We send hosted_surface = payment_element
Testing
- [ ] Added tests
- [ ] Modified tests
- [X] Manually verified
Screenshots
From customer sheet:
From payment sheet:
Changelog
Diffuse output:
OLD: paymentsheet-example-release-master.apk (signature: V1, V2)
NEW: paymentsheet-example-release-pr.apk (signature: V1, V2)
โ compressed โ uncompressed
โโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโผโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโ
APK โ old โ new โ diff โ old โ new โ diff
โโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโ
dex โ 4 MiB โ 4 MiB โ +475 B โ 8.7 MiB โ 8.7 MiB โ +1.7 KiB
arsc โ 2.3 MiB โ 2.3 MiB โ 0 B โ 2.3 MiB โ 2.3 MiB โ 0 B
manifest โ 5.1 KiB โ 5.1 KiB โ 0 B โ 25.6 KiB โ 25.6 KiB โ 0 B
res โ 918.5 KiB โ 918.5 KiB โ 0 B โ 1.5 MiB โ 1.5 MiB โ 0 B
native โ 2.6 MiB โ 2.6 MiB โ 0 B โ 6 MiB โ 6 MiB โ 0 B
asset โ 2.9 MiB โ 2.9 MiB โ +1.4 KiB โ 2.9 MiB โ 2.9 MiB โ +1.4 KiB
other โ 195 KiB โ 195 KiB โ -2 B โ 428.4 KiB โ 428.4 KiB โ 0 B
โโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโ
total โ 12.8 MiB โ 12.8 MiB โ +1.9 KiB โ 21.8 MiB โ 21.8 MiB โ +3 KiB
DEX โ old โ new โ diff
โโโโโโโโโโผโโโโโโโโผโโโโโโโโผโโโโโโโโโโโโโโโ
files โ 1 โ 1 โ 0
strings โ 43585 โ 43589 โ +4 (+7 -3)
types โ 14988 โ 14990 โ +2 (+2 -0)
classes โ 12670 โ 12672 โ +2 (+2 -0)
methods โ 62032 โ 62038 โ +6 (+40 -34)
fields โ 40957 โ 40970 โ +13 (+24 -11)
ARSC โ old โ new โ diff
โโโโโโโโโโผโโโโโโโผโโโโโโโผโโโโโโ
configs โ 242 โ 242 โ 0
entries โ 6043 โ 6043 โ 0
APK
compressed โ uncompressed โ
โโโโโโโโโโโฌโโโโโโโโโโโผโโโโโโโโโโโโฌโโโโโโโโโโโค
size โ diff โ size โ diff โ path
โโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
7.4 KiB โ +1.4 KiB โ 7.2 KiB โ +1.4 KiB โ โ assets/dexopt/baseline.prof
4 MiB โ +475 B โ 8.7 MiB โ +1.7 KiB โ โ classes.dex
52.9 KiB โ -7 B โ 117.2 KiB โ 0 B โ โ META-INF/CERT.SF
1.2 KiB โ +5 B โ 1.2 KiB โ 0 B โ โ META-INF/CERT.RSA
โโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4 MiB โ +1.9 KiB โ 8.9 MiB โ +3 KiB โ (total)
DEX
STRINGS:
old โ new โ diff
โโโโโโโโผโโโโโโโโผโโโโโโโโโโโโ
43585 โ 43589 โ +4 (+7 -3)
+ , hostedSurface=
+ Lv6/f;
+ Lv6/g;
+ VZLZZZLLLLLL
+ VZLZZZLLLLLLLLLLL
+ hostedSurface
+ ~~R8{backend:dex,compilation-mode:release,has-checksums:false,min-api:21,pg-map-id:82244ec,r8-mode:full,version:8.3.37}
- VZLZZZLLLLL
- VZLZZZLLLLLLLLLL
- ~~R8{backend:dex,compilation-mode:release,has-checksums:false,min-api:21,pg-map-id:1932dbd,r8-mode:full,version:8.3.37}
TYPES:
old โ new โ diff
โโโโโโโโผโโโโโโโโผโโโโโโโโโโโโ
14988 โ 14990 โ +2 (+2 -0)
+ Lv6/f;
+ Lv6/g;
METHODS:
old โ new โ diff
โโโโโโโโผโโโโโโโโผโโโโโโโโโโโโโโ
62032 โ 62038 โ +6 (+40 -34)
+ H5.j a(a)
+ H5.l a(a)
+ H5.q a(a)
+ i7.D <init>(boolean, a, boolean, boolean, boolean, String, String, String, v, a, String)
+ i7.n <init>(boolean, String, boolean, boolean, boolean, String, String, String, a, A, e, c, q0, c, c, c)
+ q6.K <init>(String, String, String, String, Integer, String)
+ q6.L <init>(String, String, String)
+ q6.M <init>(String, String, String, String)
+ v6.d <init>(g, String)
+ v6.d a(String, String, b, String, String)
+ v6.d b(String, String, String, c)
+ v6.d c(String, String, b, String, String, Integer, String)
+ v6.d d()
+ v6.d e(String, String, String, c)
+ v6.e <init>(int, c)
+ v6.e a(Object)
+ v6.f <init>(g, String)
+ v6.f a(String, String, b, String, String)
+ v6.f b(String, String, String, c)
+ v6.f c(String, String, b, String, String, Integer, String)
+ v6.f d()
+ v6.f e(String, String, String, c)
+ v6.g a(String, String, b, String, String)
+ v6.g b(String, String, String, c)
+ v6.g c(String, String, b, String, String, Integer, String)
+ v6.g d()
+ v6.g e(String, String, String, c)
+ x6.g a(String, String, String, String, String, String, Integer, String, e) โ Object
+ x6.g b(String, String, String, String, c, e) โ Object
+ x6.g c(String, String, String, String, c, e) โ Object
+ x6.g e(c, String, String) โ N
+ y6.a <init>(String, String, c, String, String, String, String, Integer, String)
+ y6.a A() โ String
+ y6.b <init>(String, String, c, String, String, String, String)
+ y6.b A() โ String
+ y6.c <init>(String, String, String, c, boolean, String)
+ y6.c A() โ String
+ y6.d <init>(String, String, String, c, boolean, String)
+ y6.d A() โ String
+ y6.e A() โ String
- H5.j a(String, String, b, String, String)
- H5.j b(String, String, String, c)
- H5.j c(String, String, b, String, String, Integer, String)
- H5.j d()
- H5.j e(a)
- H5.j f(String, String, String, c)
- H5.l <init>(g)
- H5.l a(String, String, b, String, String)
- H5.l b(String, String, String, c)
- H5.l c(String, String, b, String, String, Integer, String)
- H5.l d()
- H5.l e(a)
- H5.l f(String, String, String, c)
- H5.q e(a)
- i7.D <init>(boolean, a, boolean, boolean, boolean, String, String, String, v, a)
- i7.n <init>(boolean, String, boolean, boolean, boolean, String, String, a, A, e, c, q0, c, c, c)
- q6.K <init>(String, String, String, Integer, String)
- q6.L <init>(String, String)
- q6.M <init>(String, String, String)
- v6.d <init>(int, c)
- v6.d a(Object)
- v6.e a(String, String, b, String, String)
- v6.e b(String, String, String, c)
- v6.e c(String, String, b, String, String, Integer, String)
- v6.e d()
- v6.e f(String, String, String, c)
- x6.g a(String, String, String, String, String, Integer, String, e) โ Object
- x6.g b(String, String, String, c, e) โ Object
- x6.g c(String, String, String, c, e) โ Object
- x6.g e(c, String) โ N
- y6.a <init>(String, String, c, String, String, String, Integer, String)
- y6.b <init>(String, String, c, String, String, String)
- y6.c <init>(String, String, String, c, boolean)
- y6.d <init>(String, String, String, c, boolean)
FIELDS:
old โ new โ diff
โโโโโโโโผโโโโโโโโผโโโโโโโโโโโโโโโ
40957 โ 40970 โ +13 (+24 -11)
+ i7.D k: String
+ i7.F y: g
+ i7.n h: String
+ i7.n i: a
+ i7.n j: A
+ i7.n k: e
+ i7.n p: c
+ q6.K h: String
+ q6.K i: Integer
+ q6.K j: String
+ q6.L c: String
+ q6.M d: String
+ v6.d a: e
+ v6.d b: String
+ v6.e S: int
+ v6.e T: c
+ v6.f a: e
+ v6.f b: String
+ y6.a a0: String
+ y6.a b0: Integer
+ y6.a c0: String
+ y6.b a0: String
+ y6.c Z: String
+ y6.d Z: String
-
...โ
@tillh-stripe needs another โ
after the AddPaymentMethod refactor : )