Skip to content

Conversation

@toluo-stripe
Copy link
Contributor

Summary

Motivation

Testing

  • Added tests
  • Modified tests
  • Manually verified

Screenshots

Before After
before screenshot after screenshot

Changelog

toluo-stripe and others added 3 commits October 26, 2025 19:20
Implements AddressTextFilter to remove emojis from address input fields while preserving all legitimate address characters including:
- All digits, punctuation, and special characters
- International characters (Latin, CJK, Arabic, Cyrillic, etc.)
- All scripts used in global addresses

Key features:
- Multi-API level support (API 21-34) with appropriate fallbacks
- Handles complex emoji sequences (ZWJ, keycap, skin tones, etc.)
- Comprehensive test coverage (280 tests across 7 Android SDK versions)
- Passes all detekt and ktlint checks

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Committed-By-Agent: claude
Adds comprehensive unit tests for the new optional textFilter parameter:
- Verifies textFilter is applied when provided
- Confirms textFilter is not applied when null
- Tests filter chaining (keyboard filter + textFilter)
- Validates various transformation scenarios

All 16 tests passing (10 existing + 6 new).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Committed-By-Agent: claude
…internal

- Added test in TransformAddressToElementTest to verify AddressTextFilter is configured
  on address text fields (address line 1, address line 2, and city)
- Changed textFilter property in SimpleTextFieldConfig from private to internal
  to allow instanceof checks in tests
- Test uses instanceof check to verify the correct filter type is configured

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Committed-By-Agent: claude
@github-actions
Copy link
Contributor

github-actions bot commented Oct 27, 2025

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.8 MiB │   4.8 MiB │ +2.2 KiB │  10.7 MiB │  10.7 MiB │ +1.4 KiB 
     arsc │   2.6 MiB │   2.6 MiB │      0 B │   2.6 MiB │   2.6 MiB │      0 B 
 manifest │   5.8 KiB │   5.8 KiB │      0 B │  30.6 KiB │  30.6 KiB │      0 B 
      res │ 929.9 KiB │ 929.9 KiB │      0 B │   1.5 MiB │   1.5 MiB │      0 B 
   native │   3.5 MiB │   3.5 MiB │      0 B │   8.5 MiB │   8.5 MiB │      0 B 
    asset │   1.6 MiB │   1.6 MiB │   -358 B │   1.6 MiB │   1.6 MiB │   -358 B 
    other │ 198.8 KiB │ 198.8 KiB │     -5 B │ 375.5 KiB │ 375.5 KiB │      0 B 
──────────┼───────────┼───────────┼──────────┼───────────┼───────────┼──────────
    total │  13.7 MiB │  13.7 MiB │ +1.8 KiB │  25.3 MiB │  25.3 MiB │ +1.1 KiB 

         │         raw          │             unique              
         ├───────┬───────┬──────┼───────┬───────┬─────────────────
 DEX     │ old   │ new   │ diff │ old   │ new   │ diff            
─────────┼───────┼───────┼──────┼───────┼───────┼─────────────────
   files │     2 │     2 │    0 │       │       │                 
 strings │ 55147 │ 55159 │  +12 │ 50343 │ 50355 │ +12 (+15 -3)    
   types │ 19960 │ 19963 │   +3 │ 17559 │ 17561 │  +2 (+3 -1)     
 classes │ 14823 │ 14823 │    0 │ 14823 │ 14823 │   0 (+1 -1)     
 methods │ 76015 │ 76021 │   +6 │ 72430 │ 72434 │  +4 (+234 -230) 
  fields │ 49701 │ 49710 │   +9 │ 48225 │ 48235 │ +10 (+160 -150) 

 ARSC    │ old  │ new  │ diff 
─────────┼──────┼──────┼──────
 configs │  242 │  242 │  0   
 entries │ 6367 │ 6367 │  0
APK
     compressed      │     uncompressed     │                                           
──────────┬──────────┼───────────┬──────────┤                                           
 size     │ diff     │ size      │ diff     │ path                                      
──────────┼──────────┼───────────┼──────────┼───────────────────────────────────────────
  4.3 MiB │ +1.8 KiB │   9.5 MiB │   +824 B │ ∆ classes.dex                             
  555 KiB │   +378 B │   1.3 MiB │   +644 B │ ∆ classes2.dex                            
  9.1 KiB │   -353 B │     9 KiB │   -353 B │ ∆ assets/dexopt/baseline.prof             
 55.2 KiB │     -9 B │ 122.5 KiB │      0 B │ ∆ META-INF/CERT.SF                        
  1.1 KiB │     -5 B │     1 KiB │     -5 B │ ∆ assets/dexopt/baseline.profm            
 51.7 KiB │     +4 B │ 122.5 KiB │      0 B │ ∆ META-INF/MANIFEST.MF                    
    272 B │     +1 B │     120 B │      0 B │ ∆ META-INF/version-control-info.textproto 
  1.2 KiB │     -1 B │   1.2 KiB │      0 B │ ∆ META-INF/CERT.RSA                       
──────────┼──────────┼───────────┼──────────┼───────────────────────────────────────────
    5 MiB │ +1.8 KiB │    11 MiB │ +1.1 KiB │ (total)
DEX
STRINGS:

   old   │ new   │ diff         
  ───────┼───────┼──────────────
   50343 │ 50355 │ +12 (+15 -3) 
  
  + DINGBATS
  + EMOTICONS
  + ENCLOSED_ALPHANUMERICS
  + ENCLOSED_ALPHANUMERIC_SUPPLEMENT
  + ENCLOSED_IDEOGRAPHIC_SUPPLEMENT
  + Landroid/icu/lang/UCharacter;
  + Ljava/lang/Character_UnicodeBlock;
  + Ly/w;
  + MISCELLANEOUS_SYMBOLS
  + MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS
  + SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS
  + TRANSPORT_AND_MAP_SYMBOLS
  + VLIILZLI
  + hasBinaryProperty
  + ~~R8{"backend":"dex","compilation-mode":"release","has-checksums":false,"min-api":21,"pg-map-id":"8c5bf73","r8-mode":"full","version":"8.8.34"}
  
  - VLIILZI
  - ~~R8{"backend":"dex","compilation-mode":"release","has-checksums":false,"min-api":21,"pg-map-id":"b77baaf","r8-mode":"full","version":"8.8.34"}
  - Lyb/a;
  

TYPES:

   old   │ new   │ diff       
  ───────┼───────┼────────────
   17559 │ 17561 │ +2 (+3 -1) 
  
  + Landroid/icu/lang/UCharacter;
  + Ljava/lang/Character_UnicodeBlock;
  + Ly/w;
  
  - Lyb/a;
  

METHODS:

   old   │ new   │ diff           
  ───────┼───────┼────────────────
   72430 │ 72434 │ +4 (+234 -230) 
  
  + C6.d f() → L
  + E7.e <init>(p, B, boolean, int)
  + G8.D0 <init>(w, Function0)
  + K7.v <init>(c, C1, G, Function1, b3, s3, i3, K, boolean, w, boolean, Boolean, c)
  + K7.w <init>(c, C1, LinkedHashMap, K, Map, boolean, String, d, x0, boolean, Function1, a, boolean, w, G, boolean, Boolean, c)
  + da.P <init>(g0, Map, Set, w, U0, Map, c, int)
  + da.P j() → H
  + da.V1 <init>(g0, O)
  + da.d i(LinkedHashMap, Map, w) → List
  + f9.P <init>(O, Application, b, h0, w)
  + f9.Q a(p, B, boolean, r, int)
  + f9.y <init>(boolean, e, H1, String, boolean, boolean, boolean, String, String, String, b, B, w, Function1, Function2, Function1, Function1, Function1, Function1, Function0, boolean, b, boolean, z1, String, boolean, o)
  + i.w c(Locale[]) → LocaleList
  + i.w d(Context) → PointerIcon
  + i.w e(Context, int) → PointerIcon
  + i.w f(View) → PointerIcon
  + i.w g() → AccessibilityNodeInfo_AccessibilityAction
  + i.w h(LocaleList) → String
  + i.w i(CharSequence) → IntStream
  + i.w j(CameraCaptureSession_CaptureCallback, CameraCaptureSession, CaptureRequest, Surface, long)
  + i.w k(ConnectivityManager, ConnectivityManager_NetworkCallback)
  + i.w l(LocaleList)
  + i.w m(View, PointerIcon)
  + i.w n(Window_Callback, List, Menu, int)
  + i.w o(Window, m)
  + i.w p(Window, m, Handler)
  + i.w q(AccessibilityNodeInfo, boolean)
  + i.w r(EditorInfo)
  + i.w s(EditorInfo, LocaleList)
  + i.w t(Consumer, Rect)
  + i.w u(IntConsumer, int)
  + i.w v(int) → boolean
  + j1.M <init>(z)
  + m1.a0 c(DeleteGesture) → RectF
  + m1.a0 d(SelectGesture) → RectF
  + m1.a0 e(SelectRangeGesture) → RectF
  + m1.a0 f(Object) → DeleteGesture
  + m1.a0 g(Object) → DeleteRangeGesture
  + m1.a0 h(Object) → InsertGesture
  + m1.a0 i(Object) → JoinOrSplitGesture
  + m1.a0 j(Object) → RemoveSpaceGesture
  + m1.a0 k(Object) → SelectRangeGesture
  + m1.a0 l() → Character_UnicodeBlock
  + ma.A <init>(boolean, boolean)
  + ma.A h(Object, Object) → Object
  + ma.B <init>(f, boolean)
  + ma.B p(boolean, X0, p, Set, g0, r, int)
  + ma.C <init>(g0, B)
  + ma.C c(boolean)
  + ma.C d() → c
  + ma.C e() → g0
  + ma.C f() → boolean
  + ma.C g() → l0
  + ma.C h() → l0
  + ma.D <init>(p, boolean, boolean, Function1, a, a, int)
  + ma.D <init>(String, p, List, boolean, int, Function1, boolean, int)
  + ma.E <init>(Object, long, int, int)
  + ma.F h(Object, Object) → Object
  + ma.G <clinit>()
  + ma.H <init>(g0, O)
  + ma.H d() → c
  + ma.H e() → g0
  + ma.H equals(Object) → boolean
  + ma.H f() → boolean
  + ma.H hashCode() → int
  + ma.H k() → h0
  + ma.H toString() → String
  + ma.I <init>()
  + ma.I a() → n0
  + ma.I b() → c
  + ma.I c(String) → String
  + ma.I d() → O
  + ma.I e() → String
  + ma.I f() → int
  + ma.I g() → l0
  + ma.I getLayoutDirection() → l
  + ma.I h() → boolean
  + ma.I i(String) → String
  + ma.I j() → boolean
  + ma.I k() → int
  + ma.I l(String) → String
  + ma.I m(String) → r1
  + ma.I n() → boolean
  + ma.J <clinit>()
  + ma.K <init>(boolean)
  + ma.K equals(Object) → boolean
  + ma.K hashCode() → int
  + ma.K toString() → String
  + ma.M b() → c
  + ma.M c(String) → String
  + ma.M d(int) → String
  + ma.M f() → L
  + ma.M h() → boolean
  + ma.M j() → List
  + ma.M n() → ArrayList
  + ma.N <init>(O, int)
  + ma.N i(Object) → Object
  + ma.O <init>(M, String)
  + ma.O c(boolean)
  + ma.O h() → l0
  + ma.O l(Stri
...✂

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