package Ġfr . tw ent yn ine . keep on . services Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . graphics . drawable . Icon Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . service . quick settings . Tile Ċ import Ġandroid . service . quick settings . Tile Service Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Service Lifecycle Dispatcher Ċ import Ġcom . bump tech . glide . Priority Ċ import Ġcom . bump tech . glide . Request Manager Ċ import Ġcom . bump tech . glide . request . target . Custom Target Ċ import Ġcom . bump tech . glide . request . transition . Transition Ċ import Ġfr . tw ent yn ine . keep on . R Ċ import Ġfr . tw ent yn ine . keep on . di . T ooth pick Helper Ċ import Ġfr . tw ent yn ine . keep on . ui . MainActivity Ċ import Ġfr . tw ent yn ine . keep on . utils . Bundle Sc rub ber Ċ import Ġfr . tw ent yn ine . keep on . utils . Common Utils Ċ import Ġfr . tw ent yn ine . keep on . utils . glide . Timeout Icon Data Ċ import Ġfr . tw ent yn ine . keep on . utils . preferences . Preferences Ċ import Ġfr . tw ent yn ine . keep on . utils . px Ċ import Ġtoo th pick . k tp . delegate . lazy Ċ import Ġjava . lang . StringBuilder Ċ Ċ class ĠKeep On Tile Service Ġ: ĠTile Service (), ĠLifecycle Owner Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcommon Utils : ĠCommon Utils Ġby Ġlazy () ĊĠĠĠ Ġprivate Ġval Ġbundle Sc rub ber : ĠBundle Sc rub ber Ġby Ġlazy () ĊĠĠĠ Ġprivate Ġval Ġpreferences : ĠPreferences Ġby Ġlazy () ĊĠĠĠ Ġprivate Ġval Ġg lide App : ĠRequest Manager Ġby Ġlazy () ĊĊĠĠĠ Ġprivate Ġval Ġqs G lide Target : ĠCustom Target < Bitmap > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠCustom Target < Bitmap >( 5 0 . px , Ġ 5 0 . px ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠBitmap , Ġtransition : ĠTransition < in ĠBitmap > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qs Tile Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . state Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preferences . get Keep On State ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTile . STATE _ ACTIVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTile . STATE _ IN ACTIVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . icon Ġ= ĠIcon . create With Bitmap ( resource ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qs Tile . label Ġ!= Ġqs Tile Label ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . label Ġ= Ġqs Tile Label ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . update Tile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Cle ared ( placeholder : ĠDrawable ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġqs Tile Label Ġby Ġlazy Ġ{ ĠgetString ( R . string . qs _ service _ name ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġqs Tile Loading Label Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( qs Tile Label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġ- Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( getString ( R . string . initialization _ short _ text )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdispatcher Ġ= ĠService Lifecycle Dispatcher ( this ) ĊĊĠĠĠ Ġprivate Ġvar Ġlast Set Timeout Icon Data : ĠTimeout Icon Data ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġglobal Last Set Timeout Icon Data ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġglobal Last Set Timeout Icon Data Ġ= Ġvalue Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatcher . on Service Pre Super On Create () ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĊĠĠĠĠĠĠĠ Ġ// ĠInject Ġdependencies Ġwith ĠT ooth pick ĊĠĠĠĠĠĠĠ ĠT ooth pick Helper . scoped Injection ( this ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! preferences . get Tile Added ()) Ġpreferences . set Tile Added ( true ) ĊĊĠĠĠĠĠĠĠ Ġcommon Utils . update Q ST ile () ĊĊĠĠĠĠĠĠĠ Ġcommon Utils . start Screen Timeout Observer Service () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatcher . on Service Pre Super On Bind () ĊĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġhack Ġto Ġprevent Ġa Ġprivate Ġserial izable Ġclass loader Ġattack Ġand Ġignore Ġimplicit Ġintent s , Ġbecause Ġthey Ġare Ġnot Ġvalid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bundle Sc rub ber . scr ub ( intent ) Ġ|| Ġ( packageName Ġ!= Ġintent . get Package () Ġ&& ĠComponent Name ( this , Ġthis . java Class . name ) Ġ!= Ġintent . component )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Bind ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tile Added () Ġ{ ĊĠĠĠĠĠĠĠ Ġpreferences . set Tile Added ( true ) ĊĊĠĠĠĠĠĠĠ Ġcommon Utils . update Q ST ile () ĊĊĠĠĠĠĠĠĠ Ġsuper . on Tile Added () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tile Removed () Ġ{ ĊĠĠĠĠĠĠĠ Ġpreferences . set Tile Added ( false ) ĊĊĠĠĠĠĠĠĠ Ġsuper . on Tile Removed () ĊĊĠĠĠĠĠĠĠ Ġstop Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Listening () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart Listening () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( qs Tile Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preferences . getApp Is La unched ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Timeout Ġ= Ġpreferences . getCurrent Timeout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Timeout Icon Data Ġ= Ġcommon Utils . get Timeout Icon Data ( new Timeout , Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Set Timeout Icon Data Ġ!= Ġnew Timeout Icon Data Ġ|| Ġqs Tile . state Ġ== ĠTile . STATE _ UN AVAILABLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġbitmap Ġand Ġload Ġto Ġtile Ġicon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg lide App ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. priority ( Priority . HIGH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( new Timeout Icon Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( qs G lide Target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . update Tile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Set Timeout Icon Data Ġ= Ġnew Timeout Icon Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . label Ġ= Ġqs Tile Loading Label ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . icon Ġ= ĠIcon . create With Resource ( this , ĠR . mip map . ic _ loading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . state Ġ= ĠTile . STATE _ UN AVAILABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqs Tile . update Tile () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onClick () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( preferences . getApp Is La unched () Ġ&& Ġpreferences . get Skip Intro ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preferences . getSelected Timeout (). size Ġ< Ġ 1 Ġ|| Ġ! Settings . System . can Write ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preferences . get Keep On State ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . setTimeout ( preferences . get Original Timeout ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Intent Ġ= ĠMainActivity . new Intent ( this . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preferences . getSelected Timeout (). size Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Intent . action Ġ= ĠCommon Utils . ACTION _ MAIN _ ACTIVITY _ MISSING _ SETTINGS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Utils . send Broadcast Missing Settings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity And Collapse ( main Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . setTimeout ( preferences . getNext Timeout Value ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Lifecycle (): ĠLifecycle Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdispatcher . lifecycle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatcher . on Service Pre Super On Destroy () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" deprecation ") ĊĠĠĠ Ġoverride Ġfun ĠonStart ( intent : ĠIntent ?, Ġstart Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatcher . on Service Pre Super On Start () ĊĠĠĠĠĠĠĠ Ġsuper . onStart ( intent , Ġstart Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġglobal Last Set Timeout Icon Data : ĠTimeout Icon Data ? Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ