package Ġcom . b ren tp an ther . bitcoin widget ĊĊ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Pending Intent . FLAG _ CANCEL _ CURRENT Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . widget . Remote Views Ċ import Ġandroidx . annotation . NonNull Ċ import Ġandroidx . core . app . Job Intent Service ĊĊ Ċ class ĠUpdate Price Service Ġ: ĠJob Intent Service () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Handle Work (@ NonNull Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp Widget Id Ġ= Ġintent . getInt Extra ( App Widget Manager . EXTRA _ APP WIDGET _ ID , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= ĠP refs ( app Widget Id ) ĊĠĠĠĠĠĠĠ Ġval Ġapp Widget Manager Ġ= ĠApp Widget Manager . getInstance ( application Context ) ĊĠĠĠĠĠĠĠ Ġval Ġviews Ġ= ĠRemote Views ( application Context . packageName , Ġprefs . theme Layout ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Value ( application Context , Ġviews , Ġprefs ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWidget Views . put Value ( application Context , Ġviews , Ġapplication Context . getString ( R . string . value _ exchange _ removed ), Ġprefs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Widget Manager . update App Widget ( app Widget Id , Ġviews ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprice Update Ġ= ĠIntent ( application Context , ĠPrice Broadcast Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġprice Update . putExtra ( App Widget Manager . EXTRA _ APP WIDGET _ ID , Ġapp Widget Id ) ĊĠĠĠĠĠĠĠ Ġprice Update . putExtra ( EXTRA _ MAN UAL _ REFRESH , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġpending Price Update Ġ= ĠPending Intent . get Broadcast ( application Context , Ġapp Widget Id , Ġprice Update , ĠFLAG _ CANCEL _ CURRENT ) ĊĠĠĠĠĠĠĠ Ġviews . setOn Click Pending Intent ( R . id . parent , Ġpending Price Update ) ĊĠĠĠĠĠĠĠ Ġapp Widget Manager . update App Widget ( app Widget Id , Ġviews ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠJOB _ ID Ġ= Ġ 3 5 4 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ MAN UAL _ REFRESH Ġ= Ġ" manual Refresh " ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġenqueue Work ( context : ĠContext , Ġwork : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Migration . migrate ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Work ( context , ĠUpdate Price Service :: class . java , ĠJOB _ ID , Ġwork ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( IllegalArgumentException :: class ) ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġupdate Value ( context : ĠContext , Ġviews : ĠRemote Views , Ġprefs : ĠP refs ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrency Code Ġ= Ġprefs . exchange Currency Name Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexchange Ġ= Ġprefs . exchange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġexchange . getValue ( prefs . exchange Coin Name , Ġcurrency Code ) Ġ?: Ġthrow ĠException ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWidget Views . setText ( context , Ġviews , Ġamount , Ġprefs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . set Last Update () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġamount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Update Ġ= Ġprefs . last Update ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġits Ġbeen Ġ" a Ġwhile " Ġsince Ġthe Ġlast Ġsuccessful Ġupdate , Ġgray Ġout Ġthe Ġicon . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Old Ġ= ĠSystem . currentTimeMillis () Ġ- Ġlast Update Ġ> Ġ 1 0 0 0 Ġ* Ġ 9 0 Ġ* Ġprefs . interval ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Old ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWidget Views . set Last Text ( context , Ġviews , Ġprefs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWidget Views . set Old ( context , Ġviews , Ġis Old , Ġprefs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ