/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠZ ac ĠS we ers Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" NOTH ING _ TO _ INLINE ") Ċ Ċ package Ġio . s we ers . catch up . util Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Build . VERSION _ CODES Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . widget . Toast Ċ import Ġandroid . widget . Toast . LENGTH _ LONG Ċ import Ġandroidx . annotation . Attr Res Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Ui Thread Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . getSystem Service Ċ import Ġio . reactivex . Observable Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ Ċ /* Ċ Ġ* ĠAndroid Ġframework Ġextension Ġfunctions Ġfor Ġthings Ġlike ĠContext , ĠActivity , ĠResources , Ġetc Ċ Ġ*/ Ċ Ċ fun ĠContext . clear Cache () Ġ= Ġclean Dir ( application Context . cacheDir ) Ċ Ċ private Ġfun Ġclean Dir ( dir : ĠFile ): ĠLong Ġ{ ĊĠ Ġvar Ġbytes Deleted : ĠLong Ġ= Ġ 0 ĊĠ Ġdir . list Files () ĊĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġit . length () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . delete ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd Ġ{ Ġ" Deleted Ġfile " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbytes Deleted Ġ+= Ġlength ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġthese Ġfor Ġnow ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġreturn Ġbytes Deleted Ċ } Ċ Ċ /** Ċ Ġ* ĠAttempt Ġto Ġlaunch Ġthe Ġsupplied Ġ[ Intent ]. ĠQueries Ġon - device Ġpackages Ġbefore Ġlaunch ing Ġand Ċ Ġ* Ġwill Ġdisplay Ġa Ġsimple Ġmessage Ġif Ġnone Ġare Ġavailable Ġto Ġhandle Ġit . Ċ Ġ*/ Ċ fun ĠContext . maybe Start Activity ( intent : ĠIntent ): ĠBoolean Ġ= Ġmaybe Start Activity ( intent , Ġfalse ) Ċ Ċ /** Ċ Ġ* ĠAttempt Ġto Ġlaunch ĠAndroid 's Ġcho oser Ġfor Ġthe Ġsupplied Ġ[ Intent ]. ĠQueries Ġon - device Ċ Ġ* Ġpackages Ġbefore Ġlaunch ing Ġand Ġwill Ġdisplay Ġa Ġsimple Ġmessage Ġif Ġnone Ġare Ġavailable Ġto Ġhandle Ċ Ġ* Ġit . Ċ Ġ*/ Ċ fun ĠContext . maybe Start Chooser ( intent : ĠIntent ): ĠBoolean Ġ= Ġmaybe Start Activity ( intent , Ġtrue ) Ċ Ċ private Ġfun ĠContext . maybe Start Activity ( input Intent : ĠIntent , ĊĠĠĠ Ġcho oser : ĠBoolean ): ĠBoolean Ġ{ ĊĠ Ġvar Ġintent Ġ= Ġinput Intent ĊĠ Ġreturn Ġif Ġ( has Handler ( intent )) Ġ{ ĊĠĠĠ Ġif Ġ( cho oser ) Ġ{ ĊĠĠĠĠĠ Ġintent Ġ= ĠIntent . create Chooser ( intent , Ġnull ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġtrue ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ ĠToast . makeText ( this , ĠR . string . no _ intent _ handler , ĊĠĠĠĠĠĠĠ ĠLEN GTH _ LONG ). show () ĊĠĠĠ Ġfalse ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠQueries Ġon - device Ġpackages Ġfor Ġa Ġhandler Ġfor Ġthe Ġsupplied Ġ[ Intent ]. Ċ Ġ*/ Ċ private Ġfun ĠContext . has Handler ( intent : ĠIntent ) Ġ= ĊĠĠĠ Ġ! package Manager . query Intent Activities ( intent , Ġ 0 ). isEmpty () Ċ Ċ private Ġval Ġtyped Value Ġ= ĠTyped Value () Ċ Ċ @ Color Int Ċ @ Ui Thread Ċ fun ĠContext . resolve Attribute Color (@ Attr Res Ġres Id : ĠInt ): ĠInt Ġ{ ĊĠ Ġtheme . resolve Attribute ( res Id , Ġtyped Value , Ġtrue ) ĊĠ Ġif Ġ( typed Value . type Ġin ĠTyped Value . TYPE _ FIRST _ COLOR _ INT .. Typed Value . TYPE _ LAST _ COLOR _ INT ) Ġ{ ĊĠĠĠ Ġreturn Ġtyped Value . data ĊĠ Ġ} ĊĠ Ġval Ġcolor Res Ġ= Ġif Ġ( typed Value . resourceId Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠ Ġtyped Value . resourceId ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġtyped Value . data ĊĠ Ġ} ĊĠ Ġreturn ĠContext Compat . getColor ( this , Ġcolor Res ) Ċ } Ċ Ċ fun ĠContext . isIn Night Mode (): ĠBoolean Ġ{ ĊĠ Ġval Ġcurrent Night Mode Ġ= Ġresources . configuration . ui Mode Ġand ĠConfiguration . UI _ MODE _ N IGHT _ MASK ĊĠ Ġreturn Ġwhen Ġ( current Night Mode ) Ġ{ ĊĠĠĠ ĠConfiguration . UI _ MODE _ N IGHT _ NO Ġ-> Ġfalse Ġ// ĠNight Ġmode Ġis Ġnot Ġactive , Ġwe 're Ġin Ġday Ġtime ĊĠĠĠ ĠConfiguration . UI _ MODE _ N IGHT _ YES Ġ-> Ġtrue Ġ// ĠNight Ġmode Ġis Ġactive , Ġwe 're Ġat Ġnight ! ĊĠĠĠ Ġelse Ġ-> Ġfalse Ġ// ĠWe Ġdon 't Ġknow Ġwhat Ġmode Ġwe 're Ġin , Ġassume Ġnot night ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDetermine Ġif Ġthe Ġnavigation Ġbar Ġwill Ġbe Ġon Ġthe Ġbottom Ġof Ġthe Ġscreen , Ġbased Ġon Ġlogic Ġin Ċ Ġ* ĠPhone WindowManager . Ċ Ġ*/ Ċ fun ĠContext . is NavBar On Bottom (): ĠBoolean Ġ{ ĊĠ Ġval Ġres Ġ= Ġresources ĊĠ Ġval Ġcfg Ġ= Ġresources . configuration ĊĠ Ġval Ġdm Ġ= Ġres . display Metrics ĊĠ Ġval Ġcan Move Ġ= Ġdm . width Pixels Ġ!= Ġdm . height Pixels Ġ&& Ġcfg . sm allest Screen Width Dp Ġ< Ġ 6 0 0 ĊĠ Ġreturn Ġ! can Move Ġ|| Ġdm . width Pixels Ġ< Ġdm . height Pixels Ċ } Ċ Ċ inline Ġfun ĠContext . dp 2 px ( dip Value : ĠFloat ) Ġ= Ġresources . dp 2 px ( dip Value ) Ċ Ċ inline Ġfun ĠResources . dp 2 px ( dip Value : ĠFloat ) Ġ= ĊĠĠĠ ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġdip Value , Ġdisplay Metrics ) Ċ Ċ @ Target Api ( VERSION _ CODES . M ) Ċ inline Ġfun Ġ< re ified ĠT > ĠContext . getSystem Service (): ĠT Ġ{ ĊĠ Ġif Ġ( is M ()) Ġ{ ĊĠĠĠ Ġreturn Ġget System Service < T >() !! ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( T :: class ) Ġ{ ĊĠĠĠĠĠ Ġandroid . view . WindowManager :: class Ġ-> ĠContext . WINDOW _ SERVICE ĊĠĠĠĠĠ Ġandroid . view . LayoutInflater :: class Ġ-> ĠContext . LAYOUT _ IN FL ATER _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . Activity Manager :: class Ġ-> ĠContext . ACTIVITY _ SERVICE ĊĠĠĠĠĠ Ġandroid . os . Power Manager :: class Ġ-> ĠContext . POWER _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . Alarm Manager :: class Ġ-> ĠContext . ALARM _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . Notification Manager :: class Ġ-> ĠContext . NOTIFICATION _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . Key guard Manager :: class Ġ-> ĠContext . KEY GU ARD _ SERVICE ĊĠĠĠĠĠ Ġandroid . location . Location Manager :: class Ġ-> ĠContext . LOCATION _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . Search Manager :: class Ġ-> ĠContext . SEARCH _ SERVICE ĊĠĠĠĠĠ Ġandroid . os . V ibr ator :: class Ġ-> ĠContext . V IB R ATOR _ SERVICE ĊĠĠĠĠĠ Ġandroid . net . Connectivity Manager :: class Ġ-> ĠContext . CONNECT IVITY _ SERVICE ĊĠĠĠĠĠ Ġandroid . net . wifi . Wifi Manager :: class Ġ-> ĠContext . WINDOW _ SERVICE ĊĠĠĠĠĠ Ġandroid . media . Audio Manager :: class Ġ-> ĠContext . AUDIO _ SERVICE ĊĠĠĠĠĠ Ġandroid . media . Media Router :: class Ġ-> ĠContext . MEDIA _ ROUT ER _ SERVICE ĊĠĠĠĠĠ Ġandroid . tele phony . Tele phony Manager :: class Ġ-> ĠContext . TELE PHONY _ SERVICE ĊĠĠĠĠĠ Ġandroid . tele phony . Subscription Manager :: class Ġ-> ĠContext . TELE PHONY _ SUB SCRIPTION _ SERVICE ĊĠĠĠĠĠ Ġandroid . view . input method . Input Method Manager :: class Ġ-> ĠContext . INPUT _ METHOD _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . Ui Mode Manager :: class Ġ-> ĠContext . UI _ MODE _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . Download Manager :: class Ġ-> ĠContext . DOWNLOAD _ SERVICE ĊĠĠĠĠĠ Ġandroid . os . Battery Manager :: class Ġ-> ĠContext . B ATTER Y _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . job . Job Scheduler :: class Ġ-> ĠContext . JOB _ SCHEDUL ER _ SERVICE ĊĠĠĠĠĠ Ġandroid . app . usage . Network Stats Manager :: class Ġ-> ĠContext . NETWORK _ STATS _ SERVICE ĊĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Unsupported Ġservice : Ġ${ T :: class . java }") ĊĠĠĠ Ġ}. let Ġ{ Ġget System Service ( it ) Ġas ĠT Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠContext . register Receiver ( intent Filter : ĠIntent Filter ): ĠObservable < Intent > Ġ{ ĊĠ Ġreturn ĠObservable . create Ġ{ Ġemitter Ġ-> ĊĠĠĠ Ġval Ġreceiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġemitter . onNext ( intent ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġregister Receiver ( receiver , Ġintent Filter ) ĊĊĠĠĠ Ġemitter . set C ancellable Ġ{ Ġunregister Receiver ( receiver ) Ġ} ĊĠ Ġ} Ċ } Ċ