/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 . ĠMan uel ĠRe b ollo ĠB Ã¡ ez Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . m re bol lob . m 2 p . utils . credit card Ċ Ċ import Ġandroid . text . Editable Ċ import Ġandroid . widget . EditText ĊĊ Ċ class ĠCard Number Text Watcher Ġconstructor ( val Ġnumber EditText : ĠEditText , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Listener : ĠCard ActionListener ) ĊĠĠĠ Ġ: ĠCredit Card Text Watcher ( action Listener ) Ġ{ ĊĊĠĠĠ Ġval ĠMAX _ LENGTH _ CARD _ NUMBER _ WITH _ SP ACES Ġ= Ġ 1 9 ĊĠĠĠ Ġval ĠMAX _ LENGTH _ CARD _ NUMBER Ġ= Ġ 1 6 ĊĠĠĠ Ġval ĠSPACE _ SE PER ATOR Ġ= Ġ" Ġ" ĊĊĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcursor Position Ġ= Ġnumber EditText . selection End ĊĠĠĠĠĠĠĠ Ġval Ġprevious Length Ġ= Ġnumber EditText . text . length ĊĊĠĠĠĠĠĠĠ Ġval Ġcard Number Ġ= Ġhandle Card Number ( s . toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġmodified Length Ġ= Ġcard Number . length ĊĊĠĠĠĠĠĠĠ Ġnumber EditText . remove TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġnumber EditText . setText ( card Number ) ĊĠĠĠĠĠĠĠ Ġnumber EditText . setSelection ( if Ġ( card Number . length Ġ> ĠMAX _ LENGTH _ CARD _ NUMBER _ WITH _ SP ACES ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMAX _ LENGTH _ CARD _ NUMBER _ WITH _ SP ACES Ġelse Ġcard Number . length ) ĊĠĠĠĠĠĠĠ Ġnumber EditText . add TextChanged Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( modified Length Ġ<= Ġprevious Length Ġ&& Ġcursor Position Ġ< Ġmodified Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumber EditText . setSelection ( cursor Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( card Number . replace ( SPACE _ SE PER ATOR , Ġ""). length Ġ== ĠMAX _ LENGTH _ CARD _ NUMBER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Card Number ( input Card Number : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhandle Card Number ( input Card Number , Ġ" Ġ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Card Number ( input Card Number : ĠString , Ġse perator : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatting Text Ġ= Ġinput Card Number . replace ( se perator , Ġ"") ĊĠĠĠĠĠĠĠ Ġvar Ġtext : ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( formatting Text . length Ġ>= Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġformatting Text . substring ( 0 , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( formatting Text . length Ġ>= Ġ 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext Ġ+ Ġse perator Ġ+ Ġformatting Text . substring ( 4 , Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( formatting Text . length Ġ> Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext Ġ+ Ġse perator Ġ+ Ġformatting Text . substring ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( formatting Text . length Ġ>= Ġ 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext Ġ+ Ġse perator Ġ+ Ġformatting Text . substring ( 8 , Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( formatting Text . length Ġ> Ġ 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext Ġ+ Ġse perator Ġ+ Ġformatting Text . substring ( 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( formatting Text . length Ġ>= Ġ 1 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext Ġ+ Ġse perator Ġ+ Ġformatting Text . substring ( 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( formatting Text . length Ġ> Ġ 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext Ġ+ Ġse perator Ġ+ Ġformatting Text . substring ( 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġformatting Text . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfocus () Ġ{ ĊĠĠĠĠĠĠĠ Ġnumber EditText . request Focus () ĊĠĠĠĠĠĠĠ Ġnumber EditText . selectAll () ĊĠĠĠ Ġ} Ċ }