package Ġcom . f riday tech . dex . presentation . widgets . status info Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . view . animation . Accel erate De cel erate Interpolator Ċ import Ġandroid . view . animation . Accel erate Interpolator Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . isIn visible Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġcom . f riday tech . dex . R Ċ import Ġcom . f riday tech . dex . presentation . widgets . listeners . Simple Animator Listener Ċ import Ġcom . f riday tech . dex . utils .* Ċ import Ġkotlin . math . absolute Value Ċ Ċ @ Suppress Lint (" View Constructor ") Ċ class ĠStatus Info View ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġstring Text : ĠString ?, ĊĠĠĠ Ġ@ Color Res Ġalert Color Res : ĠInt , ĊĠĠĠ Ġ@ String Res Ġtext Res : ĠInt ? Ċ ) Ġ: ĠLinearLayout ( context , Ġnull , Ġ 0 ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġactivity : ĠActivity ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcontext Ġas ĠActivity ĊĊĠĠĠ Ġvar Ġstatus Bar Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġis StatusBar Trans luc ent : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar ĠtextView : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġprogress View : ĠProgress Bar ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . observe Lifecycle ( activity ) ĊĠĠĠĠĠĠĠ Ġthis . init View ( string Text , Ġalert Color Res , Ġtext Res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Lifecycle ( activity : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . lifecycle . add Observer ( object Ġ: ĠLifecycle Observer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRunnable Ġ{}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . lifecycle . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View ( ĊĠĠĠĠĠĠĠ Ġtext : ĠString ?, ĊĠĠĠĠĠĠĠ Ġ@ Color Res Ġalert Color Res : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ String Res Ġtext Res : ĠInt ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . layout Params Ġ= ĠViewGroup . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , Ġactivity . status Bar Height ) ĊĠĠĠĠĠĠĠ Ġthis . gravity Ġ= ĠGr avity . CENTER _ HORIZONTAL ĊĊĠĠĠĠĠĠĠ Ġval Ġdecor Ġ= Ġactivity . window . decor View Ġas ĠViewGroup ĊĊĠĠĠĠĠĠĠ Ġif Ġ( alert Color Res . absolute Value Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( Context Compat . getColor ( context , Ġalert Color Res )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Background Resource ( android . R . color . transparent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Container Ġ= ĠLinearLayout ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠH ORIZONTAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠViewGroup . LayoutParams ( ViewGroup . LayoutParams . WRAP _ CONTENT , ĠViewGroup . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress View Ġ= ĠProgress Bar ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠMargin LayoutParams ( dp ( 1 2 f ), ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . margin End Ġ= Ġdp ( 4 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn determinate Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠtextView Ġ= ĠTextView ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= ĠMargin LayoutParams ( ViewGroup . LayoutParams . WRAP _ CONTENT , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . margin End Ġ= Ġdp ( 1 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 1 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( context . theme . get Attr ( R . attr . Primary TextColor ) Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Font Padding Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Res Ġ!= Ġnull Ġ&& Ġtext Res Ġ!= Ġ 0 Ġ-> Ġactivity . resources . getString ( text Res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ!= Ġ"" Ġ-> Ġ"$ text " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchild Container . addView ( progress View ) ĊĠĠĠĠĠĠĠ Ġchild Container . addView ( textView ) ĊĠĠĠĠĠĠĠ Ġadd View ( child Container ) ĊĊĠĠĠĠĠĠĠ Ġconfigure Window Flags () ĊĊĠĠĠĠĠĠĠ Ġdecor . addView ( this ) ĊĊĠĠĠĠĠĠĠ Ġchild Container . translation Y Ġ= Ġ- context . status Bar Height . toFloat () ĊĠĠĠĠĠĠĠ Ġchild Container . animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 1 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Start Delay ( 3 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Accel erate De cel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Window Flags () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . window . decor View . root View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsystem Ui Flags Ġ= ĠView . SYSTEM _ UI _ FLAG _ LOW _ PROFILE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Theme Helper . is Light Theme ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Ui Flags Ġ= Ġsystem Ui Flags Ġor ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ STATUS _ BAR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Ui Visibility Ġ= Ġsystem Ui Flags ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On System Ui Visibility ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . system Ui Visibility Ġ= Ġsystem Ui Flags ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis StatusBar Trans luc ent Ġ= Ġactivity . is Trans luc ent Status ĊĊĠĠĠĠĠĠĠ Ġactivity . window . clear Flags ( WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ STATUS ) ĊĊĠĠĠĠĠĠĠ Ġstatus Bar Color Ġ= Ġactivity . window . status Bar Color ĊĠĠĠĠĠĠĠ Ġactivity . window . status Bar Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( context Ġas ĠActivity ). window . decor View . setOn System Ui Visibility ChangeListener ( null ) ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView ?. text Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text (@ String Res Ġtext : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView ?. text Ġ= Ġ"${ context . resources . getString ( text )}" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Progress Visible ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress View ?. isIn visible Ġ= Ġ! visible ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval Ġactive Info Views : ĠMutable Map < String , ĠMutable List < Status Info View > ?> Ġ= Ġmutable Map Of () ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġadd StatusBar Info Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity : ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext : ĠString ? Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ String Res Ġtext Res : ĠInt ? Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Color Res Ġalert Color : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ): ĠStatus Info View ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġactivity . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Bar Info View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus Info View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Res ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active Info Views [ key ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Info Views [ key ] Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Info Views [ key ]?. add ( status Bar Info View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstatus Bar Info View ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġhide ( activity : ĠActivity , Ġon Hidden : ĠRunnable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġactivity . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active Info Views [ key ] Ġ== Ġnull Ġ|| Ġactive Info Views [ key ]?. size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Hidden ?. run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Info Views [ key ]?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Hidden ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Info Views [ key ]?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġhide Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity : ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Info View : ĠStatus Info View , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Hidden : ĠRunnable ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Info View . parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecor Ġ= Ġactivity . window . decor View Ġas ĠViewGroup ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Info View . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y (- activity . status Bar Height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 1 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Start Delay ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Accel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠSimple Animator Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsystem Ui Flags Ġ= ĠView . SYSTEM _ UI _ FLAG _ VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Theme Helper . is Light Theme ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Ui Flags Ġ= Ġsystem Ui Flags Ġor ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ STATUS _ BAR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . decor View . root View . system Ui Visibility Ġ= Ġsystem Ui Flags ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . status Bar Color Ġ= Ġstatus Info View . status Bar Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Info View . is StatusBar Trans luc ent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . add Flags ( WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ STATUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor . remove View ( status Info View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Hidden ?. run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ