package Ġio . homeassistant . comp anion . android . qs čĊč Ċ import Ġandroid . content . Context č Ċ import Ġandroid . graphics . Bitmap č Ċ import Ġandroid . graphics . drawable . Icon č Ċ import Ġandroid . os . Build č Ċ import Ġandroid . service . quick settings . Tile č Ċ import Ġandroid . service . quick settings . Tile Service č Ċ import Ġandroid . util . Log č Ċ import Ġandroid . widget . Toast č Ċ import Ġandroidx . annotation . Requires Api č Ċ import Ġandroidx . core . graphics . drawable . Drawable Compat č Ċ import Ġandroidx . core . graphics . drawable . to Bitmap č Ċ import Ġcom . mal ta is n . icon dialog . pack . Icon Pack č Ċ import Ġcom . mal ta is n . icon dialog . pack . Icon Pack Loader č Ċ import Ġcom . mal ta is n . icon pack . mdi . create Material Design Icon Pack č Ċ import Ġdagger . h ilt . android . Android EntryPoint č Ċ import Ġio . homeassistant . comp anion . android . common . data . integration . Integration Repository č Ċ import Ġio . homeassistant . comp anion . android . database . App Database č Ċ import Ġkotlinx . coroutines . run Blocking č Ċ import Ġjavax . inject . Inject č Ċ import Ġio . homeassistant . comp anion . android . common . R Ġas Ġcommon R čĊč Ċ @ Requires Api ( Build . VERSION _ CODES . N ) č Ċ @ Android EntryPoint č Ċ abstract Ġclass ĠTile Extensions Ġ: ĠTile Service () Ġ{ čĊčĊĠĠĠ Ġabstract Ġfun Ġget Tile (): ĠTile ? čĊčĊĠĠĠ Ġabstract Ġfun Ġget Tile Id (): ĠString čĊčĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġintegration UseCase : ĠIntegration Repository čĊčĊĠĠĠ Ġoverride Ġfun ĠonClick () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onClick () čĊĠĠĠĠĠĠĠ Ġif Ġ( get Tile () Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tile Data ( application Context , Ġget Tile Id (), Ġget Tile () !! , Ġintegration UseCase ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile Clicked ( application Context , Ġget Tile Id (), Ġget Tile () !! , Ġintegration UseCase ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Tile Added () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Tile Added () čĊĠĠĠĠĠĠĠ Ġif Ġ( get Tile () Ġ!= Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tile Data ( application Context , Ġget Tile Id (), Ġget Tile () !! , Ġintegration UseCase ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠonStart Listening () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onStart Listening () čĊĠĠĠĠĠĠĠ Ġif Ġ( get Tile () Ġ!= Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tile Data ( application Context , Ġget Tile Id (), Ġget Tile () !! , Ġintegration UseCase ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Tile Extensions " čĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġicon Pack : ĠIcon Pack ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtoggle Domains Ġ= ĠlistOf ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cover ", Ġ" fan ", Ġ" hum id ifier ", Ġ" input _ boolean ", Ġ" light ", čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" media _ player ", Ġ" remote ", Ġ" s ire n ", Ġ" switch " čĊĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . N ) čĊĠĠĠĠĠĠĠ Ġfun Ġset Tile Data ( context : ĠContext , Ġtile Id : ĠString , Ġtile : ĠTile , Ġintegration UseCase : ĠIntegration Repository ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtile Dao Ġ= ĠApp Database . getInstance ( context ). tile Dao () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtile Data Ġ= Ġtile Dao . get ( tile Id ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( tile Data Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . label Ġ= Ġtile Data . label čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . subtitle Ġ= Ġtile Data . subtitle čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tile Data . entityId . split ('. ')[ 0 ] Ġin Ġtoggle Domains ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġrun Blocking Ġ{ Ġintegration UseCase . getEntity ( tile Data . entityId ) Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . state Ġ= Ġif Ġ( state . state Ġ== Ġ" on " Ġ|| Ġstate . state Ġ== Ġ" open ") ĠTile . STATE _ ACTIVE Ġelse ĠTile . STATE _ IN ACTIVE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . state Ġ= ĠTile . STATE _ IN ACTIVE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Id Ġ= Ġtile Data . icon Id čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( icon Id Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġget Tile Icon ( icon Id , Ġcontext ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . icon Ġ= ĠIcon . create With Bitmap ( icon ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . update Tile () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . state Ġ= ĠTile . STATE _ UN AVAILABLE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . update Tile () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Unable Ġto Ġset Ġtile Ġdata ", Ġe ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . N ) čĊĠĠĠĠĠĠĠ Ġfun Ġtile Clicked ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile Id : ĠString , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile : ĠTile , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġintegration UseCase : ĠIntegration Repository čĊĠĠĠĠĠĠĠ Ġ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtile Dao Ġ= ĠApp Database . getInstance ( context ). tile Dao () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtile Data Ġ= Ġtile Dao . get ( tile Id ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Tile Ġ= Ġset Tile Data ( context , Ġtile Id , Ġtile , Ġintegration UseCase ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Tile ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . state Ġ= ĠTile . STATE _ ACTIVE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . update Tile () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintegration UseCase . call Service ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile Data ?. entityId ?. split (".") ! ![ 0 ], čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tile Data . entityId . split (". ")[ 0 ] Ġin Ġtoggle Domains ) Ġ" toggle " Ġelse Ġ" turn _ on ", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhash Map Of (" entity _ id " Ġto Ġtile Data . entityId ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Unable Ġto Ġcall Ġservice ", Ġe ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġcommon R . string . service _ call _ failure , ĠToast . LENGTH _ SHORT ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . state Ġ= ĠTile . STATE _ IN ACTIVE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . update Tile () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . state Ġ= ĠTile . STATE _ UN AVAILABLE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtile . update Tile () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġcommon R . string . tile _ data _ missing , ĠToast . LENGTH _ SHORT ). show () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Tile Icon ( tile Icon Id : ĠInt , Ġcontext : ĠContext ): ĠBitmap ? Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġan Ġicon Ġpack Ġand Ġload Ġall Ġdraw ables . čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( icon Pack Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloader Ġ= ĠIcon Pack Loader ( context ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Pack Ġ= Ġcreate Material Design Icon Pack ( loader ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Pack !!. load Draw ables ( loader . drawable Loader ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Drawable Ġ= Ġicon Pack ?. icons ?. get ( tile Icon Id )?. drawable čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( icon Drawable Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDrawable Compat . wrap ( icon Drawable ). to Bitmap () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊ