/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠS our av ĠDas Ċ Ġ*/ Ċ Ċ package Ġcom . s our av . better e . utils Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . content .* Ċ import Ġandroid . util . Log Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . github . mike phil . chart ing . data . Entry Ċ import Ġcom . s our av . better e . db . entity . Ch arging Log Ċ import Ġcom . s our av . better e . model . Percentage Amp Model Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠUtilities Ġprivate Ġconstructor ( context : ĠContext ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠConstants . UTILS ĊĠĠĠ Ġprivate Ġvar Ġshared Preferences : ĠSharedPreferences Ġ= ĊĠĠĠĠĠĠĠ Ġcontext . get SharedPreferences ( Constants . PRE F _ NAME , ĠContext . MODE _ PRIVATE ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠmContext : ĠContext ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠUtilities ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠUtilities Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠUtilities ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Ġas ĠUtilities ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠwriteTo Pref ( ĊĠĠĠĠĠĠĠ Ġtype : ĠString , ĊĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġvalue Str : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġvalue Int : ĠInt Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġvalue Bool : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PRE F _ TYPE _ INT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( key , Ġvalue Int ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" writeTo Pref : ĠSuccess Ġwith Ġtype : Ġ$ type Ġkey : Ġ$ key , Ġvalue : Ġ$ value Int " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PRE F _ TYPE _ BOOL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( key , Ġvalue Bool ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" writeTo Pref : ĠSuccess Ġwith Ġtype : Ġ$ type Ġkey : Ġ$ key , Ġvalue : Ġ$ value Bool " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PRE F _ TYPE _ STRING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( key , Ġvalue Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" writeTo Pref : ĠSuccess Ġwith Ġtype : Ġ$ type Ġkey : Ġ$ key , Ġvalue : Ġ$ value Str " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠInput Mismatch Exception (" Wrong ĠTYPE ĠOR ĠWH ATE VER ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T > Ġread Pref ( type : ĠString , Ġkey : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PRE F _ TYPE _ STRING Ġ-> Ġshared Preferences . getString ( key , Ġ"") Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PRE F _ TYPE _ INT Ġ-> Ġshared Preferences . getInt ( key , Ġ- 1 ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PRE F _ TYPE _ BOOL Ġ-> Ġshared Preferences . getBoolean ( key , Ġfalse ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠInput Mismatch Exception (" WRONG ĠTYPE ĠB RU H ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget DateTime ( timestamp : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsdf : ĠSimpleDateFormat Ġ= ĠSimpleDateFormat (" yyyy - MM - dd Ġhh : mm Ġa ") ĊĠĠĠĠĠĠĠ Ġval Ġnow : ĠDate Ġ= ĠDate ( timestamp ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsdf . format ( now ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Average ( data : ĠList < Ch arging Log >): ĠList < Entry > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġarray ListOf < Percentage Amp Model >() ĊĠĠĠĠĠĠĠ Ġval Ġamp s Ġ= Ġarray ListOf < Long >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent P Ġ= Ġdata [ 0 ]. percentage ĊĠĠĠĠĠĠĠ Ġfor Ġ( log Ġin Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log . percentage Ġ== Ġcurrent P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamp s . add ( log . current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer centage Amp Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . percentage Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamp s . average (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent P Ġ= Ġlog . percentage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamp s . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġarray ListOf < Entry >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( ch arging Log Ġin Ġnew List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch arging Log . percentage . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch arging Log . current . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġentry ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġload Broadcast Receiver ( inst : ĠT , Ġintent Filter : ĠIntent Filter ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( Constants . DEFAULT , Ġ" Current ĠThread Ġ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠ ĠmContext ?. register Receiver ( inst Ġas ĠBroadcast Receiver , Ġintent Filter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Service ( clazz : ĠClass <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( mContext , Ġclazz ) ĊĠĠĠĠĠĠĠ ĠmContext !!. start Service ( intent ) ĊĠĠĠĠĠĠĠ ĠLog . d ( Constants . GRAPH , Ġ" start Service : ĠService ĠStarted ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Service ( clazz : ĠClass <* >) Ġ{ ĊĠĠĠĠĠĠĠ ĠmContext !!. stop Service ( Intent ( mContext , Ġclazz )) ĊĠĠĠĠĠĠĠ ĠLog . d ( Constants . GRAPH , Ġ" stop Service : ĠService ĠSto pped ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġfun Ġis My Service Running ( service Class : ĠClass < *> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠmContext !!. getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ? ĊĠĠĠĠĠĠĠ Ġfor Ġ( service Ġin Ġmanager !!. get Running Services ( Int . MAX _ VALUE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( service Class . name Ġ== Ġservice . service . className ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ