stripe-android icon indicating copy to clipboard operation
stripe-android copied to clipboard

Update external payment methods API

Open amk-stripe opened this issue 1 year ago • 1 comments

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 onExternalPaymentMethodResult on 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

amk-stripe avatar May 09 '24 00:05 amk-stripe

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
...✂

github-actions[bot] avatar May 09 '24 00:05 github-actions[bot]