package Ġcom . tr inity mirror . network monitor . usage callback Ċ Ċ import Ġandroid . app . usage . Network Stats Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Process Ċ import Ġandroid . support . annotation . Requires Api Ċ import Ġandroid . support . v 4 . util . Sparse Array Compat Ċ import Ġandroid . util . Log Ċ import Ġcom . tr inity mirror . network monitor . Usage Listener Ċ import Ġcom . tr inity mirror . network monitor . stats . Network Stats Helper Ċ import Ġcom . tr inity mirror . network monitor . stats . Utils Ċ Ċ /** Ċ Ġ* ĠInterface Ġwith Ġthe ĠN ou gat - only Ġfeature Ġof Ġ[ android . app . usage . Network Stats Manager . register Usage Callback ] Ċ Ġ* Ġand Ġ[ android . app . usage . Network Stats Manager . unregister Usage Callback ] Ċ Ġ*/ Ċ internal Ġinterface ĠUsage Callback Register Ġ{ ĊĊĠĠĠ Ġfun Ġregister Usage Callback ( listener : ĠUsage Listener ) ĊĠĠĠ Ġfun Ġunregister Usage Callback ( listener : ĠUsage Listener ) ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . N ) ĊĠĠĠ Ġopen Ġclass ĠN ou gat ( private Ġval Ġcontext : ĠContext , Ġprivate Ġval Ġnetwork Stats Manager : ĠNetwork Stats Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmain Handler : ĠHandler Ġ= ĠHandler ( Looper . get Main Looper ())) Ġ: ĠUsage Callback Register Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġuid Ġ= ĠProcess . my Uid () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnetwork Stats Helper Ġ= ĠNetwork Stats Helper ( network Stats Manager ) ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġusage Callbacks List Ġ= ĠSparse Array Compat < Network Stats Manager . Usage Callback >() ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġregister Usage Callback ( listener : ĠUsage Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthreshold Bytes Ġ= Ġlistener . params . max Bytes Since App Restart ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Type Ġ= Ġmap Network Type ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubscriber Id Ġ= Ġmap Subscriber Id ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusage Callback Ġ= Ġobject Ġ: ĠNetwork Stats Manager . Usage Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Threshold Reached ( network Type : ĠInt , Ġsubscriber Id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Threshold Reached ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusage Callbacks List . put ( listener . id , Ġusage Callback ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Stats Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Usage Callback ( network Type , Ġsubscriber Id , Ġthreshold Bytes , Ġusage Callback , Ġmain Handler ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmap Subscriber Id ( listener : ĠUsage Listener ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( listener . params . network Type Ġ== ĠUsage Listener . Network Type . MOB ILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Subscriber Id () Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmap Network Type ( listener : ĠUsage Listener ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( listener . params . network Type Ġ== ĠUsage Listener . Network Type . MOB ILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConnect ivity Manager . TYPE _ MOB ILE Ġelse ĠConnect ivity Manager . TYPE _ WIFI ĊĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġon Threshold Reached ( listener : ĠUsage Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Usage Callback Register ", Ġ" Threshold Ġreached Ġon Ġ$ listener ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . callback . on Max Bytes Reached ( build Result ( listener )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Usage Callback ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Result ( listener : ĠUsage Listener ): ĠUsage Listener . Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubscriber Id Ġ= Ġget Subscriber Id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrx Mobile Ġ= Ġrx Mobile ( listener , Ġsubscriber Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Mobile Ġ= Ġtx Mobile ( listener , Ġsubscriber Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrx Wifi Ġ= Ġrx Wifi ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Wifi Ġ= Ġtx Wifi ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrx Bytes Ġ= Ġrx Mobile Ġ+ Ġrx Wifi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Bytes Ġ= Ġtx Mobile Ġ+ Ġtx Wifi ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUsage Listener . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsage Listener . ResultCode . MAX _ BYTES _ SIN CE _ APP _ RE START , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsage Listener . Result . Extras ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrx Mobile , Ġtx Mobile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrx Wifi , Ġtx Wifi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrx Bytes , Ġtx Bytes )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġunregister Usage Callback ( listener : ĠUsage Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusage Callbacks List . get ( listener . id )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Stats Manager . unregister Usage Callback ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġusage Callbacks List . remove ( listener . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġrx Mobile ( listener : ĠUsage Listener , Ġsubscriber Id : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Stats Helper . query Package Rx Bytes Mobile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid , Ġsubscriber Id , Ġlistener . params . period In Millis ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtx Mobile ( listener : ĠUsage Listener , Ġsubscriber Id : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Stats Helper . query Package Tx Bytes Mobile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid , Ġsubscriber Id , Ġlistener . params . period In Millis ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġrx Wifi ( listener : ĠUsage Listener ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Stats Helper . query Package Rx Bytes Wifi ( uid , Ġlistener . params . period In Millis ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtx Wifi ( listener : ĠUsage Listener ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Stats Helper . query Package Tx Bytes Wifi ( uid , Ġlistener . params . period In Millis ) ĊĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġget Subscriber Id () Ġ= ĠUtils . get Subscriber Id ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠEmpty Ġ: ĠUsage Callback Register Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġregister Usage Callback ( listener : ĠUsage Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġunregister Usage Callback ( listener : ĠUsage Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }