package Ġcom . ep am . ny ek il aj os . arch comp p oc . ui . app widget Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . app widget . App Widget Provider Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Remote Views Ċ import Ġcom . ep am . ny ek il aj os . arch comp p oc . R Ċ import Ġcom . ep am . ny ek il aj os . arch comp p oc . repository . Address Item Ċ import Ġcom . ep am . ny ek il aj os . arch comp p oc . repository . Widget Properties Ċ import Ġcom . ep am . ny ek il aj os . arch comp p oc . service . Call Handler Service Ċ import Ġdagger . android . Android Injection Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠCall Address App Widget Provider Ġ: ĠApp Widget Provider () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġwidget Properties : ĠWidget Properties ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠAndroid Injection . inject ( this , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġsuper . on Receive ( context , Ġintent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonUpdate ( context : ĠContext ?, Ġapp Widget Manager : ĠApp Widget Manager ?, Ġapp Widget Ids : ĠInt Array ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Update ( context , Ġapp Widget Manager , Ġapp Widget Ids ) ĊĠĠĠĠĠĠĠ Ġapp Widget Ids ?. forEach Ġ{ Ġapp Widget Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Properties . get Widget Settings ( app Widget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġaddress Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Remote Views ( context , Ġaddress Item , Ġapp Widget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĠLog . e ( LOG _ TAG , Ġit . localized Message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Deleted ( context : ĠContext ?, Ġapp Widget Ids : ĠInt Array ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Deleted ( context , Ġapp Widget Ids ) ĊĠĠĠĠĠĠĠ Ġapp Widget Ids ?. forEach Ġ{ Ġapp Widget Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Properties . delete ( app Widget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( onError Ġ= Ġ{ ĠLog . e ( LOG _ TAG , Ġit . localized Message ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsetup Remote Views ( context : ĠContext , Ġaddress Item : ĠAddress Item , Ġapp Widget Id : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġapp Widget Manager Ġ= ĠApp Widget Manager . getInstance ( context ) ĊĠĠĠ Ġval Ġcall Pending Intent Ġ= ĠPending Intent . getService ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( context , ĠCall Handler Service :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Call Handler Service . EXTRA _ ADDRESS _ ITEM , Ġaddress Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĊĠĠĠ Ġval Ġsettings Pending Intent Ġ= ĠPending Intent . getActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( context , ĠConfigure Widget Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠApp Widget Manager . ACTION _ APP WIDGET _ CONFIGURE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( App Widget Manager . EXTRA _ APP WIDGET _ ID , Ġapp Widget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĊĠĠĠ Ġval Ġviews Ġ= ĠRemote Views ( context . packageName , ĠR . layout . app _ widget ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset OnClick Pending Intent ( R . id . call _ button , Ġcall Pending Intent ) ĊĠĠĠĠĠĠĠ Ġset OnClick Pending Intent ( R . id . widget _ settings , Ġsettings Pending Intent ) ĊĠĠĠĠĠĠĠ Ġset TextView Text ( R . id . address _ name , Ġaddress Item . name ) ĊĠĠĠĠĠĠĠ Ġset TextView Text ( R . id . address _ text , Ġ"${ address Item . protocol . displayName }${ address Item . ipAddress }:${ address Item . port }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġapp Widget Manager . update App Widget ( Component Name ( context , ĠCall Address App Widget Provider :: class . java ), Ġviews ) Ċ } Ċ Ċ private Ġval ĠLOG _ TAG Ġ= ĠCall Address App Widget Provider :: class . java . simple Name Ċ