Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add PayNow LPM. #9374

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from
Draft

Add PayNow LPM. #9374

wants to merge 2 commits into from

Conversation

jaynewstrom-stripe
Copy link
Collaborator

@jaynewstrom-stripe jaynewstrom-stripe commented Oct 1, 2024

Summary

Add support for PayNow LPM.

Motivation

https://jira.corp.stripe.com/browse/MOBILESDK-1381
#6840

Testing

  • Added tests
  • Modified tests
  • Manually verified

Screenshots

Screen_recording_20241001_084352.mp4

@porter-stripe
Copy link
Contributor

iOS currently uses a different user experience for PayNow and PromptPay. On iOS, we display the URL-hosted instructions containing the QR code, and behind that, we present the polling view controller, which supports long-form polling since the user has an hour to complete the payment. Polling should continue while the web view is open; in case the user completes the payment on a different device, they should not need to close the web view.

ScreenRecording_10-01-2024.08-51-37_1.MP4

Copy link
Contributor

github-actions bot commented Oct 1, 2024

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 │ +1.1 KiB │   8.6 MiB │   8.6 MiB │ +1.7 KiB 
     arsc │   2.3 MiB │   2.3 MiB │   +896 B │   2.3 MiB │   2.3 MiB │   +896 B 
 manifest │   5.1 KiB │   5.1 KiB │      0 B │  25.6 KiB │  25.6 KiB │      0 B 
      res │ 933.8 KiB │ 937.4 KiB │ +3.6 KiB │   1.5 MiB │   1.5 MiB │ +7.1 KiB 
   native │   2.6 MiB │   2.6 MiB │      0 B │     6 MiB │     6 MiB │      0 B 
    asset │   2.9 MiB │   2.9 MiB │ -1.5 KiB │   2.9 MiB │   2.9 MiB │ -1.5 KiB 
    other │   196 KiB │ 196.2 KiB │   +231 B │ 430.6 KiB │ 431.3 KiB │   +709 B 
──────────┼───────────┼───────────┼──────────┼───────────┼───────────┼──────────
    total │  12.9 MiB │  12.9 MiB │ +4.3 KiB │  21.8 MiB │  21.8 MiB │ +8.9 KiB 

 DEX     │ old   │ new   │ diff            
─────────┼───────┼───────┼─────────────────
   files │     1 │     1 │   0             
 strings │ 42477 │ 42486 │  +9 (+26 -17)   
   types │ 14257 │ 14260 │  +3 (+18 -15)   
 classes │ 11869 │ 11871 │  +2 (+3 -1)     
 methods │ 61060 │ 61080 │ +20 (+466 -446) 
  fields │ 40245 │ 40252 │  +7 (+341 -334) 

 ARSC    │ old  │ new  │ diff       
─────────┼──────┼──────┼────────────
 configs │  242 │  242 │  0         
 entries │ 6271 │ 6273 │ +2 (+2 -0)
APK
     compressed      │     uncompressed     │                                           
──────────┬──────────┼───────────┬──────────┤                                           
 size     │ diff     │ size      │ diff     │ path                                      
──────────┼──────────┼───────────┼──────────┼───────────────────────────────────────────
  1.8 KiB │ +1.8 KiB │   3.6 KiB │ +3.6 KiB │ + res/oH.xml                              
  6.5 KiB │ -1.5 KiB │   6.3 KiB │ -1.5 KiB │ ∆ assets/dexopt/baseline.prof             
  1.8 KiB │ +1.4 KiB │   3.6 KiB │ +2.8 KiB │ ∆ res/kn.xml                              
    4 MiB │ +1.1 KiB │   8.6 MiB │ +1.7 KiB │ ∆ classes.dex                             
  2.3 MiB │   +896 B │   2.3 MiB │   +896 B │ ∆ resources.arsc                          
    439 B │   +439 B │     816 B │   +816 B │ + res/kn1.xml                             
 53.5 KiB │    +80 B │ 118.4 KiB │   +165 B │ ∆ META-INF/CERT.SF                        
 50.2 KiB │    +79 B │ 118.4 KiB │   +165 B │ ∆ META-INF/MANIFEST.MF                    
  3.6 KiB │    +74 B │    29 KiB │   +379 B │ ∆ lpms.json                               
  1,017 B │     +4 B │     885 B │     +4 B │ ∆ assets/dexopt/baseline.profm            
    270 B │     -2 B │     120 B │      0 B │ ∆ META-INF/version-control-info.textproto 
    850 B │     +1 B │   1.8 KiB │      0 B │ ∆ res/8Q.xml                              
    706 B │     -1 B │   1.3 KiB │      0 B │ ∆ res/UK.xml                              
──────────┼──────────┼───────────┼──────────┼───────────────────────────────────────────
  6.4 MiB │ +4.3 KiB │  11.3 MiB │ +8.9 KiB │ (total)
DEX
STRINGS:

   old   │ new   │ diff         
  ───────┼───────┼──────────────
   42477 │ 42486 │ +9 (+26 -17) 
  
  + DisplayPayNowDetails
  + DisplayPayNowDetails(hostedVoucherUrl=
  + LW6/P;
  + La7/l3;
  + Ls2/K;
  + PayNow
  + VLLZZLZI
  + [La7/R2;
  + [La7/W2;
  + [La7/b3;
  + [La7/l3;
  + [Lcom/google/android/material/datepicker/c;
  + [Ln6/L;
  + [Ln6/s2;
  + [Ln8/Q;
  + [Ls2/J;
  + [Ls2/l;
  + [Ls2/u;
  + [Ls8/A;
  + [Ls8/C;
  + [Ls8/y;
  + [Lx3/n;
  + hosted_instructions_url
  + paynow
  + paynow_display_qr_code
  + ~~R8{"backend":"dex","compilation-mode":"release","has-checksums":false,"min-api":21,"pg-map-id":"56e8c68","r8-mode":"full","version":"8.5.35"}
  
  - Ls8/P;
  - VLLZLZI
  - [La7/S2;
  - [La7/X2;
  - [La7/f3;
  - [Lcom/google/android/material/datepicker/b;
  - [Ln6/K;
  - [Ln6/r2;
  - [Ln8/P;
  - [Ls2/I;
  - [Ls2/k;
  - [Ls2/t;
  - [Ls8/B;
  - [Ls8/G;
  - [Ls8/z;
  - [Lx3/m;
  - ~~R8{"backend":"dex","compilation-mode":"release","has-checksums":false,"min-api":21,"pg-map-id":"28a3c0e","r8-mode":"full","version":"8.5.35"}
  

TYPES:

   old   │ new   │ diff         
  ───────┼───────┼──────────────
   14257 │ 14260 │ +3 (+18 -15) 
  
  + LW6/P;
  + La7/l3;
  + Ls2/K;
  + [La7/R2;
  + [La7/W2;
  + [La7/b3;
  + [La7/l3;
  + [Lcom/google/android/material/datepicker/c;
  + [Ln6/L;
  + [Ln6/s2;
  + [Ln8/Q;
  + [Ls2/J;
  + [Ls2/l;
  + [Ls2/u;
  + [Ls8/A;
  + [Ls8/C;
  + [Ls8/y;
  + [Lx3/n;
  
  - Ls8/P;
  - [La7/S2;
  - [La7/X2;
  - [La7/f3;
  - [Lcom/google/android/material/datepicker/b;
  - [Ln6/K;
  - [Ln6/r2;
  - [Ln8/P;
  - [Ls2/I;
  - [Ls2/k;
  - [Ls2/t;
  - [Ls8/B;
  - [Ls8/G;
  - [Ls8/z;
  - [Lx3/m;
  

METHODS:

   old   │ new   │ diff            
  ───────┼───────┼─────────────────
   61060 │ 61080 │ +20 (+466 -446) 
  
  + B6.K c(d3, String, Long, String) → k
  + D6.o <init>(d3, String, String, n, Map, boolean, Map, m)
  + E9.b L(d3) → int
  + G.h l0(JSONObject) → c3
  + I5.n <init>(U0, h3)
  + I7.c <init>(FinancialConnectionsSheetNativeActivity, T, A, z)
  + M4.f a0(JSONObject) → h3
  + N5.H a(String, String, k3, f, r, s, t, u, d) → Object
  + N5.V a(L2, H0, t2, d) → Object
  + N5.n c(Throwable, k3) → Throwable
  + U6.f a(d3, String) → e
  + U6.g a(String, q, d3, boolean) → boolean
  + V4.F f() → d3
  + V4.L f() → d3
  + V4.v f() → d3
  + V6.k <init>(d3, z1, boolean, boolean, List, c, String, w1, a, List, List, boolean, boolean, b, q, z0, boolean, a)
  + W6.P <clinit>()
  + W6.P a() → m1
  + W6.P b(boolean) → Set
  + W6.P c() → boolean
  + W6.P d() → v
  + W6.P e(k) → boolean
  + X2.c d(d3, int) → String
  + a7.I2 <init>(W2)
  + a7.L0 k(String) → i3
  + a7.M2 e() → boolean
  + a7.M2 f() → String
  + a7.O2 e() → boolean
  + a7.O2 f() → String
  + a7.P2 e() → boolean
  + a7.P2 f() → String
  + a7.Q2 e() → boolean
  + a7.Q2 f() → String
  + a7.R2 <clinit>()
  + a7.R2 <init>(String)
  + a7.R2 describeContents() → int
  + a7.R2 e() → boolean
  + a7.R2 equals(Object) → boolean
  + a7.R2 f() → String
  + a7.R2 hashCode() → int
  + a7.R2 toString() → String
  + a7.R2 writeToParcel(Parcel, int)
  + a7.S0 <init>(String, List, Long, long, I0, J0, String, M0, String, long, String, String, boolean, v1, String, String, StripeIntent_Status, StripeIntent_Usage, P0, Q0, List, List, c3, String)
  + a7.S0 h() → c3
  + a7.S2 e() → boolean
  + a7.S2 f() → String
  + a7.T2 <init>(Uri, String)
  + a7.U2 <init>(String)
  + a7.V2 <init>(String, String, String, List)
  + a7.W2 <clinit>()
  + a7.W2 <init>(String, String, String, V2, String, String)
  + a7.W2 describeContents() → int
  + a7.W2 equals(Object) → boolean
  + a7.W2 hashCode() → int
  + a7.W2 toString() → String
  + a7.W2 writeToParcel(Parcel, int)
  + a7.X e() → i3
  + a7.Y2 <init>(String)
  + a7.Y e() → i3
  + a7.Z e() → i3
  + a7.a0 e() → i3
  + a7.a3 <init>(long, String, E0)
  + a7.b2 <init>(String, X1, long, String, String, String, boolean, v1, String, List, StripeIntent_Status, StripeIntent_Usage, a2, List, List, c3, String)
  + a7.b2 h() → c3
  + a7.b3 <clinit>()
  + a7.b3 <init>(l3)
  + a7.b3 describeContents() → int
  + a7.b3 equals(Object) → boolean
  + a7.b3 hashCode() → int
  + a7.b3 toString() → String
  + a7.b3 writeToParcel(Parcel, int)
  + a7.d3 A() → v1
  + a7.d3 B() → boolean
  + a7.d3 H() → boolean
  + a7.d3 L() → List
  + a7.d3 b() → String
  + a7.d3 getId() → String
  + a7.d3 h() → c3
  + a7.d3 i() → StripeIntent_NextActionType
  + a7.d3 m() → List
  + a7.d3 n() → boolean
  + a7.d3 q() → List
  + a7.d3 r() → String
  + a7.d3 t() → StripeIn
...✂
ARSC
ENTRIES:

   old  │ new  │ diff       
  ──────┼──────┼────────────
   6271 │ 6273 │ +2 (+2 -0) 
  + drawable/stripe_ic_paymentsheet_pm_paynow
  + string/stripe_paymentsheet_payment_method_paynow

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants