package Ġcom . b ren tp an ther . bitcoin widget . strategy . presenter Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Remote Views Ċ import Ġandroidx . annotation . String Res Ċ import Ġcom . b ren tp an ther . bitcoin widget . R Ċ import Ġcom . b ren tp an ther . bitcoin widget . Widget Application . Companion . dp To Px Ċ import Ġcom . b ren tp an ther . bitcoin widget . db . Widget Ċ import Ġcom . b ren tp an ther . bitcoin widget . receiver . Widget Broadcast Receiver Ċ Ċ class ĠRemote Widget Presenter ( context : ĠContext , Ġwidget : ĠWidget ) Ġ: ĠWidget Presenter Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġremote Views : ĠRemote Views ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Dark Ġ= Ġwidget . night Mode . is Dark ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġwidget . theme . get Layout ( is Dark , Ġwidget . widget Type ) ĊĠĠĠĠĠĠĠ Ġremote Views Ġ= ĠRemote Views ( context . packageName , Ġlayout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset TextView Text ( view Id : ĠInt , Ġtext : ĠCharSequence ) Ġ= Ġremote Views . setText View Text ( view Id , Ġtext ) ĊĊĠĠĠ Ġoverride Ġfun Ġset ImageView Resource ( view Id : ĠInt , Ġsrc Id : ĠInt ) Ġ= Ġremote Views . set ImageView Resource ( view Id , Ġsrc Id ) ĊĊĠĠĠ Ġoverride Ġfun Ġset ImageView Uri ( view Id : ĠInt , Ġuri : ĠUri ) Ġ= Ġremote Views . set ImageView Uri ( view Id , Ġuri ) ĊĊĠĠĠ Ġoverride Ġfun Ġset ImageView Bitmap ( view Id : ĠInt , Ġbitmap : ĠBitmap ) Ġ= Ġremote Views . set ImageView Bitmap ( view Id , Ġbitmap ) ĊĊĠĠĠ Ġoverride Ġfun Ġset TextView Text Size ( view Id : ĠInt , Ġunits : ĠInt , Ġsize : ĠFloat ) Ġ= Ġremote Views . setText View Text Size ( view Id , Ġunits , Ġsize ) ĊĊĠĠĠ Ġoverride Ġfun Ġset TextColor ( view Id : ĠInt , Ġcolor : ĠInt ) Ġ= Ġremote Views . setTextColor ( view Id , Ġcolor ) ĊĊĠĠĠ Ġoverride Ġfun Ġset Background ( view Id : ĠInt , Ġvalue : ĠInt ) Ġ= Ġremote Views . setInt ( view Id , Ġ" setBackground Resource ", Ġvalue ) ĊĊĠĠĠ Ġoverride Ġfun Ġshow ( var arg Ġview Ids : ĠInt ) Ġ= Ġview Ids . forEach Ġ{ Ġremote Views . setView Visibility ( it , ĠView . VISIBLE ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgone ( var arg Ġview Ids : ĠInt ) Ġ= Ġview Ids . forEach Ġ{ Ġremote Views . setView Visibility ( it , ĠView . GONE ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide ( var arg Ġview Ids : ĠInt ) Ġ= Ġview Ids . forEach Ġ{ Ġremote Views . setView Visibility ( it , ĠView . IN VISIBLE ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset OnClick Refresh ( context : ĠContext , Ġwidget Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprice Update Ġ= ĠIntent ( context , ĠWidget Broadcast Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġprice Update . action Ġ= Ġ" refresh " ĊĠĠĠĠĠĠĠ Ġprice Update . putExtra ( App Widget Manager . EXTRA _ APP WIDGET _ ID , Ġwidget Id ) ĊĠĠĠĠĠĠĠ Ġval Ġpending Price Update Ġ= ĠPending Intent . get Broadcast ( context , Ġwidget Id , Ġprice Update , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ CANCEL _ CURRENT Ġor ĠPending Intent . FLAG _ IM MUT ABLE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġremote Views . setOn Click Pending Intent ( R . id . parent , Ġpending Price Update ) ĊĠĠĠĠĠĠĠ ĠApp Widget Manager . getInstance ( context ). update App Widget ( widget Id , Ġremote Views ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset OnClick Message ( context : ĠContext , Ġ@ String Res Ġmessage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Intent Ġ= ĠIntent ( context , ĠWidget Broadcast Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġmessage Intent . action Ġ= Ġ" message " ĊĠĠĠĠĠĠĠ Ġmessage Intent . putExtra (" message ", Ġmessage ) ĊĠĠĠĠĠĠĠ Ġval Ġalert Pending Intent Ġ= ĠPending Intent . get Broadcast ( context , Ġ 9 6 8 5 4 , Ġmessage Intent , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ CANCEL _ CURRENT Ġor ĠPending Intent . FLAG _ IM MUT ABLE ) ĊĠĠĠĠĠĠĠ Ġremote Views . setOn Click Pending Intent ( R . id . state , Ġalert Pending Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġloading ( context : ĠContext , Ġwidget Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow ( R . id . loading ) ĊĠĠĠĠĠĠĠ Ġhide ( R . id . state ) ĊĠĠĠĠĠĠĠ ĠApp Widget Manager . getInstance ( context ). update App Widget ( widget Id , Ġremote Views ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Widget Size ( context : ĠContext , Ġwidget Id : ĠInt ): ĠRect F Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpor trait Ġ= Ġcontext . resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġif Ġ( portrait ) ĠApp Widget Manager . OPTION _ APP WIDGET _ MIN _ WIDTH Ġelse ĠApp Widget Manager . OPTION _ APP WIDGET _ MAX _ WIDTH ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġif Ġ( portrait ) ĠApp Widget Manager . OPTION _ APP WIDGET _ MAX _ HEIGHT Ġelse ĠApp Widget Manager . OPTION _ APP WIDGET _ MIN _ HEIGHT ĊĠĠĠĠĠĠĠ Ġval Ġapp Widget Manager Ġ= ĠApp Widget Manager . getInstance ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġapp Widget Manager . getApp Widget Options ( widget Id ). getInt ( w ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġapp Widget Manager . getApp Widget Options ( widget Id ). getInt ( h ) ĊĠĠĠĠĠĠĠ Ġ// Ġwidgets Ġusually Ġhave Ġpadding Ġand Ġthere Ġis Ġno Ġway Ġto Ġknow Ġhow Ġmuch . Ġusually Ġ 8 dp . ĊĠĠĠĠĠĠĠ Ġval Ġpx Ġ= ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 1 6 F , ĠResources . getSystem (). display Metrics ) ĊĠĠĠĠĠĠĠ Ġvar Ġavailable Width Ġ= Ġwidth . dp To Px () Ġ- Ġpx ĊĠĠĠĠĠĠĠ Ġvar Ġavailable Height Ġ= Ġheight . dp To Px () Ġ- Ġpx ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġcan 't Ġfigure Ġout Ġthe Ġwidget Ġsize , Ġfallback Ġto Ġwhat Ġthe Ġapp Ġuses ĊĠĠĠĠĠĠĠ Ġif Ġ( available Width Ġ<= Ġ 0 Ġ|| Ġavailable Height Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Height Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . widget _ preview _ height ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Width Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . widget _ preview _ width ). toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠRect F ( 0 F , Ġ 0 F , Ġavailable Width , Ġavailable Height ) ĊĠĠĠ Ġ} Ċ Ċ }