package Ġio . github . par ass har ma a . usage _ stats Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroidx . annotation . NonNull Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Method Channel . MethodCall Handler Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġio . flutter . plugin . common . Plugin Registry . Registrar Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context ĊĊ Ċ /** ĠUsage Stats Plugin Ġ*/ Ċ public Ġclass ĠUsage Stats Plugin Ġ: ĠFlutter Plugin , ĠMethod Call Handler Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchannel : ĠMethod Channel ĊĊĠĠĠ Ġprivate Ġvar ĠmContext : ĠContext ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine (@ NonNull Ġflutter Plugin Binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel Ġ= ĠMethod Channel ( flutter Plugin Binding . get Flutter Engine (). get Dart Executor (), Ġ" usage _ stats ") ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( this ); ĊĠĠĠĠĠĠĠ Ġset Context ( flutter Plugin Binding . application Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Context ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġregister With ( regist rar : ĠRegist rar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠMethod Channel ( regist rar . messenger (), Ġ" usage _ stats ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġplugin Ġ= ĠUsage Stats Plugin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin . set Context ( regist rar . context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( plugin ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall (@ NonNull Ġcall : ĠMethod Call , Ġ@ NonNull Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" query Events " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart : ĠLong Ġ= Ġcall . argument < Long >(" start ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend : ĠLong Ġ= Ġcall . argument < Long >(" end ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( Usage Stats . query Events ( mContext !! , Ġstart , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Usage Permission " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( Utils . is Usage Permission ( mContext !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" grant Usage Permission " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . grant Usage Permission ( mContext !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" query Configuration " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart : ĠLong Ġ= Ġcall . argument < Long >(" start ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend : ĠLong Ġ= Ġcall . argument < Long >(" end ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( Usage Stats . query Config ( mContext !! , Ġstart , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" query Event Stats " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart : ĠLong Ġ= Ġcall . argument < Long >(" start ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend : ĠLong Ġ= Ġcall . argument < Long >(" end ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( Usage Stats . query Event Stats ( mContext !! , Ġstart , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error (" API ĠError ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Requires ĠAPI ĠLevel Ġ 2 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Target Ġshould Ġbe Ġset Ġto Ġ 2 8 Ġto Ġuse Ġthis ĠAPI " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" query And Aggregate Usage Stats " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart : ĠLong Ġ= Ġcall . argument < Long >(" start ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend : ĠLong Ġ= Ġcall . argument < Long >(" end ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( Usage Stats . query And Aggregate Usage Stats ( mContext !! , Ġstart , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" query Usage Stats " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart : ĠLong Ġ= Ġcall . argument < Long >(" start ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend : ĠLong Ġ= Ġcall . argument < Long >(" end ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( Usage Stats . query Usage Stats ( mContext !! , Ġstart , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" query Network Usage Stats " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart : ĠLong Ġ= Ġcall . argument < Long >(" start ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend : ĠLong Ġ= Ġcall . argument < Long >(" end ") Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnet Result Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Stats . query Network Usage Stats ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= ĠmContext !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġstart , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Ġ= Ġend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( net Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" API ĠError ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Requires ĠAPI ĠLevel Ġ 2 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Target Ġshould Ġbe Ġset Ġto Ġ 2 3 Ġto Ġuse Ġthis ĠAPI " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine (@ NonNull Ġbinding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( null ) ĊĠĠĠ Ġ} Ċ } ĊĊ