stripe-android
stripe-android copied to clipboard
Update external payment methods API
Summary
Update external payment methods API based on API review
More specifically:
- update ExternalPaymentMethodConfirmHandler interface
- remove existing code/infrastructure for launching a merchant's external payment method activity for them (ExternalPaymentMethodContract, externalPaymentMethodLaunchers)
- Add ExternalPaymentMethodResultHandler:
- re-launches PaymentSheet via context.startActivity
- gets a saved instance of FlowController (saved when FlowController is created) and calls
onExternalPaymentMethodResulton it
- ExternalPaymentMethodResult now is created via functions instead of exposing the type directly
Motivation
Match API review updates
Testing
- [ ] Added tests
- [ ] Modified tests
- [X] Manually verified
Going to add integration tests as a follow up
Screen recordings
Flow controller:
https://github.com/stripe/stripe-android/assets/160939932/33c7ffff-34f5-458e-9d7c-15dd1a23b6b5
PaymentSheet:
https://github.com/stripe/stripe-android/assets/160939932/997afbb0-70ea-46c8-a307-8b7b45ad9456
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 │ +1.3 KiB │ 8.6 MiB │ 8.6 MiB │ +2.3 KiB
arsc │ 2.2 MiB │ 2.2 MiB │ 0 B │ 2.2 MiB │ 2.2 MiB │ 0 B
manifest │ 5 KiB │ 5 KiB │ +19 B │ 25.2 KiB │ 25.4 KiB │ +260 B
res │ 907.5 KiB │ 907.5 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 │ -43 B │ 2.9 MiB │ 2.9 MiB │ -43 B
other │ 194 KiB │ 194 KiB │ +7 B │ 423.6 KiB │ 423.6 KiB │ 0 B
──────────┼───────────┼───────────┼──────────┼───────────┼───────────┼──────────
total │ 12.7 MiB │ 12.7 MiB │ +1.3 KiB │ 21.6 MiB │ 21.6 MiB │ +2.5 KiB
DEX │ old │ new │ diff
─────────┼───────┼───────┼─────────────────────
files │ 1 │ 1 │ 0
strings │ 42999 │ 43014 │ +15 (+1165 -1150)
types │ 14762 │ 14765 │ +3 (+1148 -1145)
classes │ 12465 │ 12465 │ 0 (+1019 -1019)
methods │ 61053 │ 61063 │ +10 (+13170 -13160)
fields │ 40286 │ 40295 │ +9 (+6570 -6561)
ARSC │ old │ new │ diff
─────────┼──────┼──────┼──────
configs │ 242 │ 242 │ 0
entries │ 6028 │ 6028 │ 0
APK
compressed │ uncompressed │
──────────┬──────────┼───────────┬──────────┤
size │ diff │ size │ diff │ path
──────────┼──────────┼───────────┼──────────┼────────────────────────────────
3.9 MiB │ +1.3 KiB │ 8.6 MiB │ +2.3 KiB │ ∆ classes.dex
127 B │ +127 B │ 5 B │ +5 B │ + META-INF/services/O8.z
127 B │ +127 B │ 5 B │ +5 B │ + META-INF/services/T8.n
│ -127 B │ │ -5 B │ - META-INF/services/N8.z
│ -127 B │ │ -5 B │ - META-INF/services/S8.m
877 B │ -22 B │ 745 B │ -22 B │ ∆ assets/dexopt/baseline.profm
7.3 KiB │ -21 B │ 7.2 KiB │ -21 B │ ∆ assets/dexopt/baseline.prof
5 KiB │ +19 B │ 25.4 KiB │ +260 B │ ∆ AndroidManifest.xml
52.7 KiB │ +4 B │ 116.7 KiB │ 0 B │ ∆ META-INF/CERT.SF
49.4 KiB │ +2 B │ 116.6 KiB │ 0 B │ ∆ META-INF/MANIFEST.MF
1.2 KiB │ +1 B │ 1.2 KiB │ 0 B │ ∆ META-INF/CERT.RSA
──────────┼──────────┼───────────┼──────────┼────────────────────────────────
4 MiB │ +1.3 KiB │ 8.9 MiB │ +2.5 KiB │ (total)
MANIFEST
@@ -206,2 +206,7 @@
<activity
+ android:exported=false
+ android:name=com.stripe.android.paymentsheet.ExternalPaymentMethodProxyActivity
+ android:theme=@style/StripePayLauncherDefaultTheme
+ />
+ <activity
android:autoRemoveFromRecents=true
DEX
STRINGS:
old │ new │ diff
───────┼───────┼───────────────────
42999 │ 43014 │ +15 (+1165 -1150)
+ EXTERNAL_PAYMENT_METHODS_LAUNCH_SUCCESS
+ EXTERNAL_PAYMENT_METHOD_CONFIRM_HANDLER_NULL
+ EXTERNAL_PAYMENT_METHOD_LAUNCHER_NULL
+ EXTERNAL_PAYMENT_METHOD_UNEXPECTED_RESULT_CODE
+ ExternalPaymentMethodInput(type=
+ Failed(displayMessage=
+ LB9/b;
+ LD8/f;
+ LD8/g;
+ LD8/h;
+ LD8/i;
+ LD8/j;
+ LD8/k;
+ LD8/l;
+ LD8/m;
+ LD8/n;
+ LD8/o;
+ LD8/p;
+ LD8/q;
+ LD8/r;
+ LD8/s;
+ LD8/t;
+ LD8/u;
+ LD8/v;
+ LD8/w;
+ LD8/x;
+ LE8/c;
+ LE8/d;
+ LE8/e;
+ LF8/b;
+ LF9/b;
+ LF9/c;
+ LF9/d;
+ LF9/e;
+ LF9/f;
+ LF9/g;
+ LF9/h;
+ LF9/i;
+ LF9/j;
+ LF9/k;
+ LF9/l;
+ LF9/m;
+ LF9/n;
+ LF9/o;
+ LF9/p;
+ LF9/q;
+ LF9/r;
+ LF9/s;
+ LF9/t;
+ LF9/u;
+ LF9/v;
+ LF9/w;
+ LF9/x;
+ LF9/y;
+ LG7/w;
+ LH8/b;
+ LH8/c;
+ LH8/d;
+ LI9/c;
+ LI9/d;
+ LJ8/h;
+ LJ8/i;
+ LJ8/j;
+ LM8/i;
+ LM8/j;
+ LM8/k;
+ LM8/l;
+ LM8/m;
+ LM8/n;
+ LM8/o;
+ LM8/p;
+ LM8/q;
+ LN9/c;
+ LN9/d;
+ LO8/A0;
+ LO8/A;
+ LO8/B0;
+ LO8/B;
+ LO8/C0;
+ LO8/C;
+ LO8/D0;
+ LO8/D;
+ LO8/E0;
+ LO8/E;
+ LO8/F;
+ LO8/G;
+ LO8/H;
+ LO8/I;
+ LO8/J;
+ LO8/K;
+ LO8/L;
+ LO8/M;
+ LO8/N;
+ LO8/O;
+ LO8/P;
+ LO8/Q;
+ LO8/S;
+ LO8/T;
+ LO8/U;
+ LO8/V;
+ LO8/W;
+ LO8/X;
+ LO8/Y;
+ LO8/Z;
+ LO8/a0;
+ LO8/b0;
+ LO8/c0;
+ LO8/d0;
+ LO8/e0;
+ LO8/f0;
+ LO8/g0;
+ LO8/g;
+ LO8/h0;
+ LO8/h;
+ LO8/i0;
+ LO8/i;
+ LO8/j0;
+ LO8/j;
+ LO8/k0;
+ LO8/k;
+ LO8/l0;
+ LO8/l;
+ LO8/m0;
+ LO8/m;
+ LO8/n0;
+ LO8/n;
+ LO8/o0;
+ LO8/o;
+ LO8/p0;
+ LO8/p;
+ LO8/q0;
+ LO8/q;
+ LO8/r0;
+ LO8/r;
+ LO8/s0;
+ LO8/s;
+ LO8/t0;
+ LO8/t;
+ LO8/u0;
+ LO8/u;
+ LO8/v0;
+ LO8/v;
+ LO8/w0;
+ LO8/w;
+ LO8/x0;
+ LO8/x;
+ LO8/y0;
+ LO8/y;
+ LO8/z0;
+ LO8/z;
+ LQ9/c;
+ LQ9/d;
+ LQ9/e;
+ LQ9/f;
+ LR8/F;
+ LR8/G;
+ LR8/H;
+ LR8/I;
+ LR8/J;
+ LR8/K;
+ LR8/L;
+ LR8/M;
+ LR8/N;
+ LR8/O;
+ LR8/P;
+ LR8/Q;
+ LR8/S;
+ LR8/T;
+ LR8/U;
+ LR8/V;
+ LR8/W;
+ LR8/X;
+ LR8/Y;
+ LR8/Z;
+ LR8/a0;
+ LR8/b0;
+ LR8/c0;
+ LR8/d0;
+ LR8/e0;
+ LR8/f0;
+ LR8/g0;
+ LR8/h0;
+ LR8/i0;
+ LR8/j0;
+ LR8/k0;
+ LR8/l0;
+ LR8/m0;
+ LR8/n0;
+ LR8/o0;
+ LR8/p0;
+ LR9/a;
+ LR9/b;
+ LS8/A;
+ LS8/B;
+ LS8/C;
+ LS8/D;
+ LS8/E;
+ LS8/y;
+ LS8/z;
+ LT8/m;
+ LT8/n;
+ LT8/o;
+ LT8/p;
+ LT8/q;
+ LT8/r;
+ LT8/s;
+ LT8/t;
+ LT8/u;
+ LT8/v;
+ LT8/w;
+ LT8/x;
+ LT8/y;
+ LT9/a;
+ LT9/b;
+ LU8/j;
+ LU8/k;
+ LU8/l;
+ LW7/b;
+ LW7/c;
+ LW8/b;
+ LW8/c;
+ LW8/d;
+ LW8/e;
+ LW8/f;
+ LW8/g;
+ LW8/h;
+ LW8/i;
+ LW8/j;
+ LY7/A0;
+ LY7/A1;
+ LY7/A;
+ LY7/B0;
+ LY7/B1;
+ LY7/B;
+ LY7/C0;
+ LY7/C1;
+ LY7/C;
+ LY7/D0;
+ LY7/D1;
+ LY7/D;
+ LY7/E0;
+ LY7/E1;
+ LY7/E;
+ LY7/F0;
+ LY7/F1;
+ LY7/F;
+ LY7/G0;
+ LY7/G1;
+ LY7/G;
+ LY7/H0;
+ LY7/H1;
+ LY7/H;
+ LY7/I0;
+ LY7/I1;
+ LY7/I;
+ LY7/J0;
+ LY7/J1;
+ LY7/J;
+ LY7/K0;
+ LY7/K1;
+ LY7/K;
+ LY7/L0;
+ LY7/L1;
+ LY7/L;
+ LY7/M0;
+ LY7/M1;
+ LY7/M;
+ LY7/N0;
+ LY7/N1;
+ LY7/N;
+ LY7/O0;
+ LY7/O1;
+ LY7/O;
+ LY7/P0;
+ LY7/P1;
+ LY7/P;
+ LY7/Q0;
+ LY7/Q1;
+ LY7/Q;
+ LY7/R0;
+ LY7/R1;
+ LY7/S0;
+ LY7/S1;
+ LY7/S;
+ LY7/T0;
+ LY7/T1;
+ LY7/T;
+ LY7/U0;
+ LY7/U1;
+ LY7/U;
+ LY7/V0;
+ LY7/V1;
+ LY7/V;
+ LY7/W0;
+ LY7/W1;
+ LY7/W;
+ LY7/X0;
+ LY7/X1;
+ LY7/X;
+ LY7/Y0;
+ LY7/Y1;
+ LY7/Y;
+ LY7/Z0;
+ LY7/Z1;
+ LY7/Z;
+ LY7/a0;
+ LY7/a1;
+ LY7/a2;
+ LY7/b0;
+ LY7/b1;
+ LY7/b2;
+ LY7/c0;
+ LY7/c1;
+ LY7/c2;
+ LY7/d0;
+ LY7/d1;
+ LY7/d2;
+ LY7/e0;
+ LY7/e1;
+ LY7/e2;
+ LY7/f0;
+ LY7/f1;
+ LY7/f2;
+ LY7/f;
+ LY7/g0;
+ LY7/g1;
+ LY7/g2;
+ LY7/g;
+ LY7/h0;
+ LY7/h1;
+ LY7/h;
+ LY7/i0;
+ LY7/i1;
+ LY7/i;
+ LY7/j0;
+ LY7/j1;
+ LY7/j;
+ LY7/k0;
+ LY7/k1;
+ LY7/k;
+ LY7/l0;
+ LY7/l1;
+ LY7/l;
+ LY7/m0;
+ LY7/m1;
+ LY7/m;
+ LY7/n0;
+ LY7/n1;
+ LY7/n;
+ LY7/o0;
+ LY7/o1;
+ LY7/o;
+ LY7/p0;
+ LY7/p1;
+ LY7/p;
+ LY7/q0;
+ LY7/q1;
+ LY7/q;
+ LY7/r0;
+ LY7/r1;
+ LY7/r;
+ LY7/s0;
+ LY7/s1;
+ LY7/s;
+ LY7/t0;
+ LY7/t1;
+ LY7/t;
+ LY
...✂