package Ġcom . simple mobile tools . calculator . activities ĊĊ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Clipboard Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Spinner Ċ import Ġandroid . widget . Toast Ċ import Ġcom . simple mobile tools . calculator . R Ċ import Ġcom . simple mobile tools . calculator . conversions .* Ċ import Ġcom . simple mobile tools . calculator . helpers . Calculator Ċ import Ġcom . simple mobile tools . calculator . helpers . Calculator Impl Ċ import Ġcom . simple mobile tools . calculator . helpers . Formatter Ċ import Ġcom . simple mobile tools . commons . extensions . perform H aptic Feedback Ċ import Ġkotlinx . android . synt hetic . main . fragment _ unit _ conversion .* Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . text . Decimal Format ĊĊ Ċ class ĠUnit Conversion Fragment Ġ: ĠFragment (), ĠCalculator Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġcalc : ĠCalculator Impl ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconverter : ĠConverter ĊĊĠĠĠ Ġprivate Ġvar Ġvi br ate On Button Press Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġfun Ġget Digit Ids () Ġ= ĠlistOf ( btn _ 0 , Ġbtn _ 1 , Ġbtn _ 2 , Ġbtn _ 3 , Ġbtn _ 4 , Ġbtn _ 5 , Ġbtn _ 6 , Ġbtn _ 7 , Ġbtn _ 8 , Ġbtn _ 9 ) ĊĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ unit _ conversion , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġcalc Ġ= ĠCalculator Impl ( this , Ġactivity !!. application Context ) ĊĊĠĠĠĠĠĠĠ Ġget Digit Ids (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOnClickListener Ġ{ Ġcalc . nump ad Clicked ( it . id ); Ġlive Update (); Ġcheck H aptic ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ decimal . setOnClickListener Ġ{ Ġdecimal Clicked (); Ġcheck H aptic ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ del . setOnClickListener Ġ{ Ġbefore . text Ġ= Ġbefore . text . drop Last ( 1 ); Ġlive Update (); Ġcheck H aptic ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ all _ clear . setOnClickListener Ġ{ Ġcalc . handle Reset (); Ġafter . text Ġ= Ġ""; Ġcheck H aptic ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ swap . setOnClickListener Ġ{ Ġswap (); Ġcheck H aptic ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ save . setOnClickListener Ġ{ Ġcalc . store History ( get Formula ()); Ġcalc . store Result ( after . text . toString ()) } ĊĊĠĠĠĠĠĠĠ Ġbefore . setOn Long ClickListener Ġ{ Ġpaste From Clip Board () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Three Ġdrop Ġdown Ġmenus . ĠThe Ġconversion Choice Spinner Ġchanges Ġthe Ġother Ġtwo Ġautomatically . ĊĠĠĠĠĠĠĠ Ġval Ġconversion Choice Spinner : ĠSp inner Ġ= Ġconversion _ type _ spinner ĊĠĠĠĠĠĠĠ Ġval Ġunits Before Spinner : ĠSp inner Ġ= Ġunits _ before _ spinner ĊĠĠĠĠĠĠĠ Ġval Ġunits After Spinner : ĠSp inner Ġ= Ġunits _ after _ spinner ĊĊĊĊĠĠĠĠĠĠĠ Ġ// Main ĠList Ġfor Ġconversion Ġchoices Ġfrom Ġhelper . ĊĠĠĠĠĠĠĠ Ġval Ġconversion Choice List Ġ= ĠlistOf (" Distance ", Ġ" Speed ", Ġ" Time ", Ġ" Volume ", Ġ" Weight ", Ġ" Temperature ") ĊĊĠĠĠĠĠĠĠ Ġ// Empty Ġlist Ġthat Ġwill Ġbe Ġpopulated Ġwith Ġthe Ġrelevant Ġconversion Ġunits . ĊĠĠĠĠĠĠĠ Ġval Ġunit List Ġ= ĠArrayList < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġchoice Adapter : ĠArray Adapter < String > ĊĠĠĠĠĠĠĠ Ġval Ġbefore Adapter : ĠArray Adapter < String > ĊĠĠĠĠĠĠĠ Ġval Ġafter Adapter : ĠArray Adapter < String > ĊĊĠĠĠĠĠĠĠ Ġ// Create Ġadapters Ġfor Ġeach Ġof Ġthe Ġthree Ġspin ners . ĊĠĠĠĠĠĠĠ Ġchoice Adapter Ġ= ĠArray Adapter ( activity !!. application Context , ĠR . layout . spinner _ item , Ġconversion Choice List ) ĊĠĠĠĠĠĠĠ Ġbefore Adapter Ġ= ĠArray Adapter ( activity !!. application Context , ĠR . layout . spinner _ item _ units , Ġunit List ) ĊĠĠĠĠĠĠĠ Ġafter Adapter Ġ= ĠArray Adapter ( activity !!. application Context , ĠR . layout . spinner _ item _ units , Ġunit List ) ĊĊĠĠĠĠĠĠĠ Ġ// Connect Ġeach Ġspinner Ġto Ġits Ġrespective Ġadapter . ĊĠĠĠĠĠĠĠ Ġconversion Choice Spinner . adapter Ġ= Ġchoice Adapter ĊĠĠĠĠĠĠĠ Ġunits Before Spinner . adapter Ġ= Ġbefore Adapter ĊĠĠĠĠĠĠĠ Ġunits After Spinner . adapter Ġ= Ġafter Adapter ĊĊĠĠĠĠĠĠĠ Ġconversion Choice Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( arg 0 : ĠAdapter View <* >, Ġarg 1 : ĠView , Ġarg 2 : ĠInt , Ġarg 3 : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġconversion Choice Spinner . getItem At Position ( arg 2 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( s ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Speed " Ġ-> Ġconverter Ġ= ĠSpeed Conversion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Distance " Ġ-> Ġconverter Ġ= ĠLength Conversion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Weight " Ġ-> Ġconverter Ġ= ĠWeight Conversion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Time " Ġ-> Ġconverter Ġ= ĠTime Conversion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Volume " Ġ-> Ġconverter Ġ= ĠVolume Conversion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Temperature " Ġ-> Ġconverter Ġ= ĠTemperature Conversion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( m Ġin Ġconverter . getMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit List . add ( m . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunits Before Spinner . setSelection ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( arg 0 : ĠAdapter View <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Auto - generated Ġmethod Ġstub ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġunits Before Spinner . on ItemSelected Listener Ġ Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( arg 0 : ĠAdapter View <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Auto - generated Ġmethod Ġstub ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġunits After Spinner . on ItemSelected Listener Ġ Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( arg 0 : ĠAdapter View <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Auto - generated Ġmethod Ġstub ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠsetValue ( value : ĠString , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore . text Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġused Ġonly Ġby ĠRo bo lectric ĊĠĠĠ Ġoverride Ġfun ĠsetValue Double ( d : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalc . setValue ( Formatter . double ToString ( d )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun Ġset Formula ( value : ĠString , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( value Ġ== Ġ""){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore . text Ġ= Ġbefore . text . toString (). replace (", "," ") Ġ+ Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġcheck H aptic ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( vi br ate On Button Press ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . perform H aptic Feedback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Formula (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbefore . text . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlive Update () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbefore . text Ġ= Ġbefore . text . toString (). replace (",", Ġ"") ĊĊĠĠĠĠĠĠĠ Ġif ( before . text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġinput Ġ= Ġbefore . text . toString (). toDouble OrNull () ĊĊĠĠĠĠĠĠĠ Ġif ( input Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconverter . calculate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunits _ before _ spinner . selected Item . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunits _ after _ spinner . selected Item . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbefore _ abbr . text Ġ= Ġconverter . getMap (). getValue ( units _ before _ spinner . selected Item . toString ()). second ĊĠĠĠĠĠĠĠ Ġafter _ abbr . text Ġ= Ġconverter . getMap (). getValue ( units _ after _ spinner . selected Item . toString ()). second ĊĠĠĠĠĠĠĠ Ġafter . text Ġ= Ġtrim Result ( result ) ĊĠĠĠĠĠĠĠ Ġif ( input Ġ== Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter . text Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecimal Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( before . text . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore . text Ġ= Ġ" 0 ." ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! before . text . contains (". ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Formula (".", Ġactivity !!. application Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtrim Result ( input : ĠDouble ): ĠString { ĊĠĠĠĠĠĠĠ Ġval Ġout Form Ġ= ĠDecimal Format ("# , ### . 0 0 0 0 ") ĊĠĠĠĠĠĠĠ Ġvar Ġraw Out Ġ= Ġout Form . format ( BigDecimal ( input ). set Scale ( 4 , ĠBigDecimal . ROUND _ HALF _ UP ). toDouble ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( raw Out [ 0 ] Ġ== Ġ'.') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Out Ġ= Ġ" 0 $ raw Out " ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġraw Out . length - 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Out . endsWith ('. ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Out Ġ= Ġraw Out . drop Last ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( raw Out . endsWith (' 0 ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Out Ġ= Ġraw Out . drop Last ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( raw Out . endsWith ('. ')) Ġraw Out Ġ= Ġraw Out . drop Last ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġraw Out ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpaste From Clip Board (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// check Ġclipboard ĊĠĠĠĠĠĠĠ Ġval Ġclipboard Ġ= Ġactivity !!. getSystem Service ( Context . CLIP BOARD _ SERVICE ) Ġas ĠClip board Manager ĊĠĠĠĠĠĠĠ Ġif Ġ(! clipboard . primary Clip . getItem At ( 0 ). coerce ToText ( activity !!. application Context ). toString (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore . text Ġ= Ġclipboard . primary Clip . getItem At ( 0 ). text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity !!. application Context ," Past ed Ġfrom Ġclipboard ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// private Ġfun ĠString . is Num () Ġ= Ġmatches ( Regex ("\\ d | \\ d { 2 }| \\ d { 3 }( \\ d { 3 }, )+( .| )( \\ d )+ ")) Ċ Ċ // TODO : ĠThis Ġstopped Ġworking Ġwhen Ġmoving Ġto Ġfragments Ġfor Ġsome Ġreason ? Ċ // ĠĠĠ Ġprivate Ġfun Ġcopy To Clipboard ( copy Result : ĠBoolean ): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġafter . value Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( copy Result ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġafter . value Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( value . isEmpty ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcopy To Clipboard ( value ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswap () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Before Ġ= Ġunits _ before _ spinner . selected Item Position ĊĠĠĠĠĠĠĠ Ġval Ġold After Ġ= Ġunits _ after _ spinner . selected Item Position ĊĊĠĠĠĠĠĠĠ Ġunits _ before _ spinner . setSelection ( old After ) ĊĠĠĠĠĠĠĠ Ġunits _ after _ spinner . setSelection ( old Before ) ĊĠĠĠ Ġ} ĊĊ Ċ }