stripe / stripe-android

Stripe Android SDK
https://stripe.com/docs/mobile/android
MIT License
1.23k stars 628 forks source link

Uppercase UK post codes #8669

Closed jaynewstrom-stripe closed 1 week ago

jaynewstrom-stripe commented 1 week ago

Summary

This pulls in a public PR from #7256

Update PostalCodeConfig for GB (United Kingdom).

Only allow letters, digits, and spaces Capitalize letters

Motivation

GB postal codes should be uppercase. Lowercase postal codes are considered invalid by some United Kingdom card providers.

UK Government advice on postcode format: https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/611951/Appendix_C_ILR_2017_to_2018_v1_Published_28April17.pdf

Testing

vercel[bot] commented 1 week ago

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
stripe-android ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jun 21, 2024 4:33pm
github-actions[bot] commented 1 week ago

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 │ +53 B │   8.7 MiB │   8.7 MiB │ +296 B 
     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 │ 919.3 KiB │ 919.3 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 │ -20 B │   2.9 MiB │   2.9 MiB │  -20 B 
    other │ 195.1 KiB │ 195.1 KiB │  -7 B │ 428.7 KiB │ 428.7 KiB │    0 B 
──────────┼───────────┼───────────┼───────┼───────────┼───────────┼────────
    total │  12.8 MiB │  12.8 MiB │ +26 B │  21.8 MiB │  21.8 MiB │ +276 B 

 DEX     │ old   │ new   │ diff           
─────────┼───────┼───────┼────────────────
   files │     1 │     1 │  0             
 strings │ 43517 │ 43519 │ +2 (+6 -4)     
   types │ 14959 │ 14960 │ +1 (+4 -3)     
 classes │ 12643 │ 12644 │ +1 (+1 -0)     
 methods │ 61915 │ 61916 │ +1 (+299 -298) 
  fields │ 40826 │ 40827 │ +1 (+220 -219) 

 ARSC    │ old  │ new  │ diff 
─────────┼──────┼──────┼──────
 configs │  242 │  242 │  0   
 entries │ 6047 │ 6047 │  0
APK ``` compressed │ uncompressed │ ──────────┬───────┼───────────┬────────┤ size │ diff │ size │ diff │ path ──────────┼───────┼───────────┼────────┼─────────────────────────────────────────── 4 MiB │ +53 B │ 8.7 MiB │ +296 B │ ∆ classes.dex 7.3 KiB │ -18 B │ 7.2 KiB │ -18 B │ ∆ assets/dexopt/baseline.prof 53 KiB │ -4 B │ 117.3 KiB │ 0 B │ ∆ META-INF/CERT.SF 874 B │ -2 B │ 742 B │ -2 B │ ∆ assets/dexopt/baseline.profm 1.2 KiB │ -2 B │ 1.2 KiB │ 0 B │ ∆ META-INF/CERT.RSA 49.7 KiB │ -2 B │ 117.3 KiB │ 0 B │ ∆ META-INF/MANIFEST.MF 271 B │ +1 B │ 120 B │ 0 B │ ∆ META-INF/version-control-info.textproto ──────────┼───────┼───────────┼────────┼─────────────────────────────────────────── 4.1 MiB │ +26 B │ 9 MiB │ +276 B │ (total) ```
DEX ``` STRINGS: old │ new │ diff ───────┼───────┼──────────── 43517 │ 43519 │ +2 (+6 -4) + Li8/F1; + [Li8/Q0; + [Li8/U0; + [Li8/W0; + ^[A-Za-z][A-Za-z0-9]*(?: [A-Za-z0-9]*)?_ + ~~R8{backend:dex,compilation-mode:release,has-checksums:false,min-api:21,pg-map-id:9085188,r8-mode:full,version:8.3.37} - [Li8/P0; - [Li8/T0; - [Li8/V0; - ~~R8{backend:dex,compilation-mode:release,has-checksums:false,min-api:21,pg-map-id:921fc10,r8-mode:full,version:8.3.37} TYPES: old │ new │ diff ───────┼───────┼──────────── 14959 │ 14960 │ +1 (+4 -3) + Li8/F1; + [Li8/Q0; + [Li8/U0; + [Li8/W0; - [Li8/P0; - [Li8/T0; - [Li8/V0; METHODS: old │ new │ diff ───────┼───────┼──────────────── 61915 │ 61916 │ +1 (+299 -298) + A5.c (boolean, g1, boolean, boolean, k0) + A5.d (boolean, g1, boolean, boolean, int) + A5.l (String, a1, h0, f2) + B7.l0 S(U0, Integer) → M0 + B7.l0 T(Integer, List) → M0 + H6.w P(boolean, Q0, q, Set, P, int, int, k, int, int) + N6.H r(boolean, M0, Set, P, int, int, k, int, int) + androidx.lifecycle.r0 l(boolean, g1, boolean, boolean, k, int) + b.d (g1, c, k0, k0, k0) + b8.A1 d(Map) → M0 + b8.A k(String) → m1 + b8.E k(String) → m1 + b8.H k(String) → m1 + b8.J0 d(Map) → M0 + b8.S (P, Map, Set, K0, Map, b) + b8.W c(boolean, Q0, q, Set, P, int, int, k, int) + b8.X0 k(String) → m1 + b8.X1 d(Map) → M0 + b8.Y0 (P, a1) + b8.Z g() → S0 + b8.c d(Map, Map) → M0 + b8.f2 k(String) → m1 + b8.l k(String) → m1 + b8.n0 a(m1, boolean) → L + b8.o0 c(boolean, Q0, q, Set, P, int, int, k, int) + b8.o0 l(h1) + b8.o0 q(String) → m1 + b8.t k(String) → m1 + b8.v0 c(boolean, Q0, q, Set, P, int, int, k, int) + b8.v0 l(h1) + b8.v0 q(String) → m1 + e3.a c(boolean, g1, a, int, m, boolean, e, k, int, int) + e3.a h(L0, g1, h0, g1, boolean, a, boolean, boolean, f, q, k, int, int) + g0.B (i1, boolean, c, int) + g3.g F(boolean, b, b1, List, c, long, long, a, k, int) + h6.E (String, L0, g1, h0, g1, a, boolean, boolean, boolean, f, a, q, int, int, int) + h6.H (q, g1, int, boolean, boolean, Integer, c, int, int) + h6.H (boolean, g1, a, int, m, boolean, e, int, int) + h6.K (e, g1, boolean, m, m, m, boolean, e) + h6.L (L0, g1, h0, g1, boolean, a, boolean, boolean, f, q, int, int) + h6.u (a, boolean, boolean, g1, a, boolean, m, h0, m, g1, m, f) + h6.v (boolean, a, boolean, h0, m, g1, m, f, boolean, a, boolean, g1, m) + h6.w (Integer, g1, h0, g1, a, boolean, boolean, boolean, f, boolean, a, q, m, m, m, int, int, int) + h6.y (g1, h0, g1, a, boolean, boolean, f, k0, m, k0) + i7.q (a, String, String, boolean, boolean, boolean, boolean, g1, g1, h0, b, P, K0, I1, a, int, int) + i7.r (a, boolean, boolean, boolean, g1, g1, h0, b, P, K0, int) + i7.r (boolean, a, boolean, boolean, g1, g1, h0, b, P, K0, int) + i7.r (boolean, boolean, a, boolean, f, L0, g1, h0, g1, m, int) + i8.A1 (k0, e, int, o1, e) + i8.A1 F(Object, Object) → Object + i8.A1 f(Object, e) → e + i8.A1 k(Object) → Object + i8.C0 () + i8.C c(boolean, Q0, q, Set, P, int, int, k, int) + i8.D0 (int, int, h) + i8.D1 () + i8.D1 I(Object) → Object + i8.E0 (F0, String) + i8.E0 a() → boolean + i8.E0 b() → boolean + i8.E0 c() → boolean + i8.E0 d(boolean) → boolean + i8.E0 h() → L + i8.E1 (E, boolean, boolean, String, String, l1, boolean, boolean, q, P, e0, d0, c, c, int, int, int) + i8.E1 F(Object, Object) → Object + i8.F0 (int, String) + i8.F0 a() → Integer + i8.F0 b() → o0 + i8.F0 c(String) → String + i8.F0 d() → P + i8.F0 e() → String + i8.F0 f() → int + i8.F0 g() → m0 + i8.F0 h(String) → String + i8.F0 i() → int + i8.F0 j(String) → String + i8.F0 k(String) → m1 + i8.F1 () + i8.F1 a(List, boolean, k, int) + i8.F1 b(g1, boolean, int, q, c, int, int, m, k, int, int) + i8.F1 c(boolean, k) → v0 + i8.F1 d(q, g1, int, boolean, boolean, Integer, c, k, int, int) + i8.F1 e(E, boolean, boolean, String, String, l1, boolean, boolean, q, P, e0, d0, c, c, k, int, int, int) + i8.F1 f(k1, boolean, q, k, int, int) + i8.F1 g(i1, boolean, c, k, int) + i8.G0 (D0) + i8.G0 a(e) → M + i8.H0 (List) + i8.H0 c(boolean, Q0, q, Set, ...✂ ```