package Ġcom . bug sn ag . android Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . res . Configuration . OR IENTATION _ LAND SC APE Ċ import Ġandroid . content . res . Configuration . OR IENTATION _ POR TRA IT Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Battery Manager Ċ import Ġandroid . provider . Settings Ċ import Ġjava . io . File Ċ import Ġjava . util . Date Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . Locale Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ internal Ġclass ĠDevice Data Collector ( ĊĠĠĠ Ġprivate Ġval Ġconnectivity : ĠConnect ivity , ĊĠĠĠ Ġprivate Ġval Ġapp Context : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġresources : ĠResources ?, ĊĠĠĠ Ġprivate Ġval Ġinstall Id : ĠString , ĊĠĠĠ Ġprivate Ġval Ġbuild Info : ĠDevice Build Info , ĊĠĠĠ Ġprivate Ġval Ġdata Directory : ĠFile , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdisplay Metrics Ġ= Ġresources ?. display Metrics ĊĠĠĠ Ġprivate Ġval Ġemulator Ġ= Ġis Em ulator () ĊĠĠĠ Ġprivate Ġval Ġroot ed Ġ= Ġis Root ed () ĊĠĠĠ Ġprivate Ġval Ġscreen Density Ġ= Ġget Screen Density () ĊĠĠĠ Ġprivate Ġval Ġdpi Ġ= Ġget Screen Density D pi () ĊĠĠĠ Ġprivate Ġval Ġscreen Resolution Ġ= Ġget Screen Resolution () ĊĠĠĠ Ġprivate Ġval Ġlocale Ġ= ĠLocale . getDefault (). toString () ĊĠĠĠ Ġprivate Ġval Ġcpu Ab i Ġ= Ġget Cpu Ab i () ĊĠĠĠ Ġprivate Ġval Ġruntime Versions : ĠMutable Map < String , ĠAny > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmutable Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġbuild Info . api Level ?. let Ġ{ Ġmap [" android Api Level "] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġbuild Info . os Build ?. let Ġ{ Ġmap [" os Build "] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġruntime Versions Ġ= Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Device () Ġ= ĠDevice ( ĊĠĠĠĠĠĠĠ Ġbuild Info , ĊĠĠĠĠĠĠĠ Ġcpu Ab i , ĊĠĠĠĠĠĠĠ Ġroot ed , ĊĠĠĠĠĠĠĠ Ġinstall Id , ĊĠĠĠĠĠĠĠ Ġlocale , ĊĠĠĠĠĠĠĠ Ġcalculate Total Memory (), ĊĠĠĠĠĠĠĠ Ġruntime Versions . to Mutable Map () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġgenerate Device With State ( now : ĠLong ) Ġ= ĠDevice With State ( ĊĠĠĠĠĠĠĠ Ġbuild Info , ĊĠĠĠĠĠĠĠ Ġroot ed , ĊĠĠĠĠĠĠĠ Ġinstall Id , ĊĠĠĠĠĠĠĠ Ġlocale , ĊĠĠĠĠĠĠĠ Ġcalculate Total Memory (), ĊĠĠĠĠĠĠĠ Ġruntime Versions . to Mutable Map (), ĊĠĠĠĠĠĠĠ Ġcalculate Free Disk (), ĊĠĠĠĠĠĠĠ Ġcalculate Free Memory (), ĊĠĠĠĠĠĠĠ Ġcalculate Orientation (), ĊĠĠĠĠĠĠĠ ĠDate ( now ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġget Device Metadata (): ĠMap < String , ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠAny ?> () ĊĠĠĠĠĠĠĠ Ġmap [" battery Level "] Ġ= Ġget Battery Level () ĊĠĠĠĠĠĠĠ Ġmap [" ch arging "] Ġ= Ġis Ch arging () ĊĠĠĠĠĠĠĠ Ġmap [" location Status "] Ġ= Ġget Location Status () ĊĠĠĠĠĠĠĠ Ġmap [" network Access "] Ġ= Ġget Network Access () ĊĠĠĠĠĠĠĠ Ġmap [" brand "] Ġ= Ġbuild Info . brand ĊĠĠĠĠĠĠĠ Ġmap [" screen Density "] Ġ= Ġscreen Density ĊĠĠĠĠĠĠĠ Ġmap [" dpi "] Ġ= Ġdpi ĊĠĠĠĠĠĠĠ Ġmap [" emulator "] Ġ= Ġemulator ĊĠĠĠĠĠĠĠ Ġmap [" screen Resolution "] Ġ= Ġscreen Resolution ĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthe Ġcurrent ĠAndroid Ġdevice Ġis Ġroot ed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Root ed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġbuild Info . tags ĊĠĠĠĠĠĠĠ Ġif Ġ( tags Ġ!= Ġnull Ġ&& Ġtags . contains (" test - keys ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( candidate Ġin ĠROOT _ IND IC ATORS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( File ( candidate ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠG ues ses Ġwhether Ġthe Ġcurrent Ġdevice Ġis Ġan Ġemulator Ġor Ġnot , Ġerr ing Ġon Ġthe Ġside Ġof Ġca ution ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġcurrent Ġdevice Ġis Ġan Ġemulator ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate // Ġgen ym otion ĊĠĠĠ Ġfun Ġis Em ulator (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfingerprint Ġ= Ġbuild Info . fingerprint ĊĠĠĠĠĠĠĠ Ġreturn Ġfingerprint Ġ!= Ġnull Ġ&& Ġ( fingerprint . startsWith (" unknown ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġfingerprint . contains (" generic ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġfingerprint . contains (" v box ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġscreen Ġdensity Ġof Ġthe Ġcurrent ĠAndroid Ġdevice Ġin Ġdpi , Ġeg . Ġ 3 2 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Screen Density D pi (): ĠInt ? Ġ= Ġdisplay Metrics ?. density D pi ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcurrent Ġbattery Ġcharge Ġlevel , Ġeg Ġ 0 . 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Battery Level (): ĠFloat ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġif ilter Ġ= ĠIntent Filter ( Intent . ACTION _ B ATTER Y _ CHANGED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbattery Status Ġ= Ġapp Context . register Receiver ( null , Ġif ilter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( battery Status Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbattery Status . getInt Extra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" level ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ/ Ġbattery Status . getInt Extra (" scale ", Ġ- 1 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . w (" Could Ġnot Ġget Ġbattery Level ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIs Ġthe Ġdevice Ġcurrently Ġch arging / full Ġbattery ? ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Ch arging (): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġif ilter Ġ= ĠIntent Filter ( Intent . ACTION _ B ATTER Y _ CHANGED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbattery Status Ġ= Ġapp Context . register Receiver ( null , Ġif ilter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( battery Status Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġbattery Status . getInt Extra (" status ", Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstatus Ġ== ĠB attery Manager . B ATTER Y _ STATUS _ CHAR GING Ġ|| Ġstatus Ġ== ĠB attery Manager . B ATTER Y _ STATUS _ FULL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . w (" Could Ġnot Ġget Ġch arging Ġstatus ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcurrent Ġstatus Ġof Ġlocation Ġservices ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Location Status (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcr Ġ= Ġapp Context . content Resolver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") Ġval Ġproviders Allowed Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . Secure . getString ( cr , ĠSettings . Secure . LOCATION _ PRO VID ERS _ ALLOWED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproviders Allowed Ġ!= Ġnull Ġ&& Ġproviders Allowed . isNotEmpty () Ġ-> Ġ" allowed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" dis allowed " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . w (" Could Ġnot Ġget Ġlocation Status ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcurrent Ġstatus Ġof Ġnetwork Ġaccess , Ġeg Ġ" cell ular " ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Network Access (): ĠString Ġ= Ġconnectivity . retrieve Network Access State () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġscreen Ġdensity Ġscaling Ġfactor Ġof Ġthe Ġcurrent ĠAndroid Ġdevice ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Screen Density (): ĠFloat ? Ġ= Ġdisplay Metrics ?. density ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġscreen Ġresolution Ġof Ġthe Ġcurrent ĠAndroid Ġdevice Ġin Ġpx , Ġeg . Ġ 1 9 2 0 x 1 0 8 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Screen Resolution (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( display Metrics Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġmax ( display Metrics . width Pixels , Ġdisplay Metrics . height Pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġmin ( display Metrics . width Pixels , Ġdisplay Metrics . height Pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( Locale . US , Ġ"% dx % d ", Ġmax , Ġmin ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġinformation Ġabout Ġthe ĠCPU Ġ/ ĠAPI ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Cpu Ab i (): ĠArray < String > Ġ= Ġbuild Info . cpu Ab is Ġ?: Ġempty Array () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġusable Ġdisk Ġspace Ġon Ġinternal Ġstorage 's Ġdata Ġdirectory ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Us able Space ") ĊĠĠĠ Ġfun Ġcalculate Free Disk (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġthis Ġspecific Ġcase Ġwe Ġwant Ġthe Ġcurrently Ġusable Ġspace , Ġnot ĊĠĠĠĠĠĠĠ Ġ// ĠStorage Manager # alloc atable Bytes () Ġas Ġthe ĠUs able Space Ġlint Ġinspection Ġsuggests ĊĠĠĠĠĠĠĠ Ġreturn Ġdata Directory . usable Space ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġamount Ġof Ġmemory Ġremaining Ġthat Ġthe ĠVM Ġcan Ġallocate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcalculate Free Memory (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġruntime Ġ= ĠRuntime . get Runtime () ĊĠĠĠĠĠĠĠ Ġval Ġmax Memory Ġ= Ġruntime . max Memory () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( max Memory Ġ!= ĠLong . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Memory Ġ- Ġruntime . total Memory () Ġ+ Ġruntime . free Memory () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġruntime . free Memory () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġtotal Ġmemory Ġavailable Ġon Ġthe Ġcurrent ĠAndroid Ġdevice , Ġin Ġbytes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcalculate Total Memory (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġruntime Ġ= ĠRuntime . get Runtime () ĊĠĠĠĠĠĠĠ Ġval Ġmax Memory Ġ= Ġruntime . max Memory () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Memory Ġ!= ĠLong . MAX _ VALUE Ġ-> Ġmax Memory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġruntime . total Memory () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġdevice Ġorientation , Ġeg . Ġ" land scape " ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġcalculate Orientation () Ġ= Ġwhen Ġ( resources ?. configuration ?. orientation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOR IENTATION _ LAND SC APE Ġ-> Ġ" land scape " ĊĠĠĠĠĠĠĠ ĠOR IENTATION _ POR TRA IT Ġ-> Ġ" portrait " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Runtime VersionInfo ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġruntime Versions [ key ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠROOT _ IND IC ATORS Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommon Ġbinaries ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ system / x bin / su ", Ġ"/ system / bin / su ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ< ĠAndroid Ġ 5 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ system / app / Super user . apk ", Ġ"/ system / app / Super SU . apk ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ>= ĠAndroid Ġ 5 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ system / app / Super user ", Ġ"/ system / app / Super SU ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠF allback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ system / x bin / da em ons u ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSystem less Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ su / bin " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ