stripe-android
stripe-android copied to clipboard
Refactor voucher Authenticators into a single VoucherAuthenticator type
Summary
Deleted all LPM-specific Authenticators and replaced with a single VoucherAuthenticator type. Stacked on #8433
Motivation
Whenever we add a voucher LPM, we currently have to create a new Authenticator every time. However, we can instead make each piece of next action data conform to a common DisplayVoucherDetails interface and then delete all of the LPM-specific authenticators.
Testing
- [ ] Added tests
- [ ] Modified tests
- [x] Manually verified
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 │ 3.9 MiB │ 3.9 MiB │ +201 B │ 8.6 MiB │ 8.6 MiB │ -1.6 KiB
arsc │ 2.2 MiB │ 2.2 MiB │ 0 B │ 2.2 MiB │ 2.2 MiB │ 0 B
manifest │ 5 KiB │ 5 KiB │ 0 B │ 25.4 KiB │ 25.4 KiB │ 0 B
res │ 910.2 KiB │ 910.2 KiB │ 0 B │ 1.4 MiB │ 1.4 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 │ -8 B │ 2.9 MiB │ 2.9 MiB │ -8 B
other │ 194.3 KiB │ 194.3 KiB │ +3 B │ 424.7 KiB │ 424.7 KiB │ 0 B
──────────┼───────────┼───────────┼────────┼───────────┼───────────┼──────────
total │ 12.7 MiB │ 12.7 MiB │ +196 B │ 21.6 MiB │ 21.6 MiB │ -1.6 KiB
DEX │ old │ new │ diff
─────────┼───────┼───────┼────────────────
files │ 1 │ 1 │ 0
strings │ 43060 │ 43052 │ -8 (+9 -17)
types │ 14772 │ 14770 │ -2 (+5 -7)
classes │ 12471 │ 12469 │ -2 (+1 -3)
methods │ 61099 │ 61098 │ -1 (+159 -160)
fields │ 40314 │ 40305 │ -9 (+166 -175)
ARSC │ old │ new │ diff
─────────┼──────┼──────┼──────
configs │ 242 │ 242 │ 0
entries │ 6030 │ 6030 │ 0
APK
compressed │ uncompressed │
──────────┬────────┼───────────┬──────────┤
size │ diff │ size │ diff │ path
──────────┼────────┼───────────┼──────────┼───────────────────────────────────────────
3.9 MiB │ +201 B │ 8.6 MiB │ -1.6 KiB │ ∆ classes.dex
7.3 KiB │ -8 B │ 7.2 KiB │ -8 B │ ∆ assets/dexopt/baseline.prof
1.2 KiB │ +3 B │ 1.2 KiB │ 0 B │ ∆ META-INF/CERT.RSA
272 B │ +2 B │ 120 B │ 0 B │ ∆ META-INF/version-control-info.textproto
49.5 KiB │ -2 B │ 116.8 KiB │ 0 B │ ∆ META-INF/MANIFEST.MF
──────────┼────────┼───────────┼──────────┼───────────────────────────────────────────
4 MiB │ +196 B │ 8.7 MiB │ -1.6 KiB │ (total)
DEX
STRINGS:
old │ new │ diff
───────┼───────┼─────────────
43060 │ 43052 │ -8 (+9 -17)
+ Lp6/O2;
+ [Lp6/E2;
+ [Lp6/J2;
+ [Lp6/O2;
+ [Lp6/z2;
+ next_action_type
+ null cannot be cast to non-null type com.stripe.android.model.StripeIntent.NextActionData.DisplayVoucherDetails
+ null hostedVoucherUrl for
+ ~~R8{backend:dex,compilation-mode:release,has-checksums:false,min-api:21,pg-map-id:f8fbb36,r8-mode:full,version:8.3.37}
- LA6/t;
- LA6/u;
- LA6/v;
- [Lp6/A2;
- [Lp6/H2;
- [Lp6/K2;
- [Lp6/v2;
- lpm
- null cannot be cast to non-null type com.stripe.android.model.StripeIntent.NextActionData.DisplayBoletoDetails
- null cannot be cast to non-null type com.stripe.android.model.StripeIntent.NextActionData.DisplayKonbiniDetails
- null cannot be cast to non-null type com.stripe.android.model.StripeIntent.NextActionData.DisplayMultibancoDetails
- null cannot be cast to non-null type com.stripe.android.model.StripeIntent.NextActionData.DisplayOxxoDetails
- null hostedVoucherUrl for DisplayBoletoDetails
- null hostedVoucherUrl for DisplayKonbiniDetails
- null hostedVoucherUrl for DisplayMultibancoDetails
- null hostedVoucherUrl for DisplayOxxoDetails
- ~~R8{backend:dex,compilation-mode:release,has-checksums:false,min-api:21,pg-map-id:e152254,r8-mode:full,version:8.3.37}
TYPES:
old │ new │ diff
───────┼───────┼────────────
14772 │ 14770 │ -2 (+5 -7)
+ Lp6/O2;
+ [Lp6/E2;
+ [Lp6/J2;
+ [Lp6/O2;
+ [Lp6/z2;
- LA6/t;
- LA6/u;
- LA6/v;
- [Lp6/A2;
- [Lp6/H2;
- [Lp6/K2;
- [Lp6/v2;
METHODS:
old │ new │ diff
───────┼───────┼────────────────
61099 │ 61098 │ -1 (+159 -160)
+ A6.a <init>(b, l, Map, boolean, Context)
+ A6.a a() → f
+ A6.a b(G2) → d
+ A6.b <init>(c)
+ A6.b d(A, Object, m, c) → Object
+ A6.c <init>(d, e)
+ A6.c h(Object) → Object
+ A6.d a(A, Object, m, e) → Object
+ A6.d b()
+ A6.d c(d, c)
+ A6.d d(A, Object, m, c) → Object
+ A6.e h(Object) → Object
+ A6.h <clinit>()
+ A6.j <init>(l, A, P1, String, e)
+ A6.j F(Object, Object) → Object
+ A6.j f(Object, e) → e
+ A6.j h(Object) → Object
+ A6.k <init>(l, A, P1, m, e)
+ A6.k F(Object, Object) → Object
+ A6.k f(Object, e) → e
+ A6.k h(Object) → Object
+ A6.l <init>(c, c, c, f, boolean, j, a, boolean)
+ A6.l d(A, Object, m, c) → Object
+ A6.m <init>(g, g, g, g, g, g, g, e)
+ A6.m get() → Object
+ A6.n <clinit>()
+ A6.n <init>(c)
+ A6.n d(A, Object, m, c) → Object
+ A6.o <init>(r, b, Context)
+ A6.o d(A, Object, m, c) → Object
+ A6.p <init>(r, A, G2, int, String, String, String, String, boolean, boolean, String, boolean, e)
+ A6.p F(Object, Object) → Object
+ A6.p f(Object, e) → e
+ A6.p h(Object) → Object
+ A6.q <init>(r, e)
+ A6.q h(Object) → Object
+ A6.r <init>(c, c, f, boolean, j, Map, a, boolean, a, i)
+ A6.r d(A, Object, m, c) → Object
+ A6.r e(A, G2, m, e) → Object
+ A6.s <init>(g, g, g, g, g, e, g, g, g)
+ A6.s get() → Object
+ B6.j d(A, Object, m, c) → Object
+ B6.o <init>(d0, w, G2, z2, m, boolean, Integer, String, Set)
+ C.i A(String) → L2
+ C.i K(G2) → int
+ C.i p(Context, f, Map, Set, j, j, a, boolean, boolean, boolean) → a
+ C7.a d0(G2, n1, boolean)
+ D.f A(G2) → G2
+ E6.b <init>(G2)
+ E6.q <init>(y, G2, e)
+ E6.y <init>(boolean, W, f, a, g, Map, a, a, t, f, j, o0, boolean)
+ E6.y d(y, d, G2, Map, int)
+ F6.e2 N(G2, H, e) → Object
+ F6.e2 R(G2, C)
+ G6.B t0(G2) → H
+ H5.f <init>(s, b1, J2)
+ H5.f <init>(b1, J2, int)
+ J7.f p1(JSONObject) → F2
+ P5.m a(String, String, N2, e) → Object
+ P5.m e(String, String, N2, O, e) → Object
+ V0.O b(G2) → o
+ W5.B d(G2, String, Long, String) → u
+ Y5.i <init>(G2, O, String, String, h, Map, boolean, Map)
+ j5.K a(String, String, N2, c, e, c, e, e, e) → Object
+ j5.n c(Throwable, N2) → Throwable
+ k6.g a(G2, String) → f
+ k7.i d(A, Object, m, c) → Object
+ l6.j <init>(G2, R0, boolean, boolean, List, c, String, O0, a, List, List, boolean, boolean)
+ p6.B2 <init>(String)
+ p6.C0 <init>(String, List, Long, long, u0, v0, String, x0, String, long, String, String, boolean, a1, String, String, StripeIntent_Status, StripeIntent_Usage, z0, A0, List, List, F2, String)
+ p6.C0 e() → F2
+ p6.D2 <init>(long, String, r0)
+ p6.E2 <clinit>()
+ p6.E2 <init>(O2)
+ p6.E2 describeContents() → int
+ p6.E
...✂