package Ġabi 4 5 _ 0 _ 0 . expo . modules . device Ċ Ċ import Ġabi 4 5 _ 0 _ 0 . expo . modules . core . Exported Module Ċ import Ġabi 4 5 _ 0 _ 0 . expo . modules . core . Promise Ċ import Ġabi 4 5 _ 0 _ 0 . expo . modules . core . interfaces . Ex po Method Ċ Ċ import Ġcom . facebook . device . year class . Year Class Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . app . Ui Mode Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . util . Display Metrics Ċ Ċ import Ġjava . io . File Ċ import Ġkotlin . math . pow Ċ import Ġkotlin . math . sqrt Ċ Ċ private Ġconst Ġval ĠNAME Ġ= Ġ" Ex po Device " Ċ Ċ class ĠDevice Module ( private Ġval ĠmContext : ĠContext ) Ġ: ĠExport ed Module ( mContext ) Ġ{ ĊĠ Ġ// ĠKeep Ġthis Ġenum Ġin Ġsync Ġwith ĠJavaScript ĊĠ Ġenum Ġclass ĠDevice Type ( val ĠJS Value : ĠInt ) Ġ{ ĊĠĠĠ ĠUNKNOWN ( 0 ), ĊĠĠĠ ĠPH ONE ( 1 ), ĊĠĠĠ ĠTABLE T ( 2 ), ĊĠĠĠ ĠDES K TOP ( 3 ), ĊĠĠĠ ĠTV ( 4 ); ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠ Ġreturn ĠNAME ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Constants (): ĠMap < String , ĠAny > Ġ= Ġmap Of ( ĊĠĠĠ Ġ" is Device " Ġto Ġ(! isRunning On Gen ym otion Ġ&& Ġ! isRunning On Stock Em ulator ), ĊĠĠĠ Ġ" brand " Ġto ĠBuild . B RAND , ĊĠĠĠ Ġ" manufacturer " Ġto ĠBuild . MAN U FACT UR ER , ĊĠĠĠ Ġ" model Name " Ġto ĠBuild . MODEL , ĊĠĠĠ Ġ" design Name " Ġto ĠBuild . DEVICE , ĊĠĠĠ Ġ" product Name " Ġto ĠBuild . DEVICE , ĊĠĠĠ Ġ" device Year Class " Ġto Ġdevice Year Class , ĊĠĠĠ Ġ" total Memory " Ġto Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġmemory Info Ġ= ĠActivity Manager . Memory Info () ĊĠĠĠĠĠ Ġ( mContext . getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ). get Memory Info ( memory Info ) ĊĠĠĠĠĠ Ġmemory Info . total Mem ĊĠĠĠ Ġ}, ĊĠĠĠ Ġ" supported Cpu Arch itect ures " Ġto Ġrun Ġ{ ĊĠĠĠĠĠ Ġvar Ġsupported Ab is Ġ= ĠBuild . SUPPORTED _ AB IS ĊĠĠĠĠĠ Ġif Ġ( supported Ab is Ġ!= Ġnull Ġ&& Ġsupported Ab is . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupported Ab is Ġ= Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġsupported Ab is ĊĠĠĠ Ġ}, ĊĠĠĠ Ġ" os Name " Ġto Ġsystem Name , ĊĠĠĠ Ġ" os Version " Ġto ĠBuild . VERSION . RELEASE , ĊĠĠĠ Ġ" os Build Id " Ġto ĠBuild . DISPLAY , ĊĠĠĠ Ġ" os Internal Build Id " Ġto ĠBuild . ID , ĊĠĠĠ Ġ" os Build Fingerprint " Ġto ĠBuild . F ING ER PRINT , ĊĠĠĠ Ġ" platform Api Level " Ġto ĠBuild . VERSION . SDK _ INT , ĊĠĠĠ Ġ" device Name " Ġto ĠSettings . Secure . getString ( mContext . content Resolver , Ġ" bluetooth _ name ") ĊĠ Ġ) ĊĊĠ Ġprivate Ġval Ġdevice Year Class : ĠInt ĊĠĠĠ Ġget () Ġ= ĠYear Class . get ( mContext ) ĊĊĠ Ġprivate Ġval Ġsystem Name : ĠString ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ< Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Android " ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠBuild . VERSION . BASE _ OS . take If Ġ{ Ġit . isNotEmpty () Ġ} Ġ?: Ġ" Android " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġ@ Ex po Method ĊĠ Ġfun Ġget DeviceType Async ( promise : ĠPromise ) Ġ{ ĊĠĠĠ Ġpromise . resolve ( get DeviceType ( mContext ). JS Value ) ĊĠ Ġ} ĊĊĠ Ġ@ Ex po Method ĊĠ Ġfun Ġget U ptime Async ( promise : ĠPromise ) Ġ{ ĊĠĠĠ Ġpromise . resolve ( System Clock . uptime Millis (). toDouble ()) ĊĠ Ġ} ĊĊĠ Ġ@ Ex po Method ĊĠ Ġfun ĠgetMax Memory Async ( promise : ĠPromise ) Ġ{ ĊĠĠĠ Ġval Ġmax Memory Ġ= ĠRuntime . get Runtime (). max Memory () ĊĠĠĠ Ġpromise . resolve ( if Ġ( max Memory Ġ!= ĠLong . MAX _ VALUE ) Ġmax Memory . toDouble () Ġelse Ġ- 1 ) ĊĠ Ġ} ĊĊĠ Ġ@ Ex po Method ĊĠ Ġfun Ġis Root ed Experimental Async ( promise : ĠPromise ) Ġ{ ĊĠĠĠ Ġvar Ġis Root ed Ġ= Ġfalse ĊĠĠĠ Ġval Ġis Device Ġ= Ġ! isRunning On Gen ym otion Ġ&& Ġ! isRunning On Stock Em ulator ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġbuild Tags Ġ= ĠBuild . TAGS ĊĠĠĠĠĠ Ġis Root ed Ġ= Ġif Ġ( is Device Ġ&& Ġbuild Tags Ġ!= Ġnull Ġ&& Ġbuild Tags . contains (" test - keys ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( File ("/ system / app / Super user . apk "). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis Device Ġ&& ĠFile ("/ system / x bin / su "). exists () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( se : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠ Ġpromise . reject ( ĊĠĠĠĠĠĠĠ Ġ" ERR _ DEVICE _ ROOT _ DE TE CTION ", ĊĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġaccess Ġthe Ġfile Ġsystem Ġto Ġdetermine Ġif Ġthe Ġdevice Ġis Ġroot ed .", ĊĠĠĠĠĠĠĠ Ġse ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpromise . resolve ( is Root ed ) ĊĠ Ġ} ĊĊĠ Ġ@ Ex po Method ĊĠ Ġfun Ġis Side Loading Enabled Async ( promise : ĠPromise ) Ġ{ ĊĠĠĠ Ġval Ġenabled : ĠBoolean Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠ ĠSettings . Global . getInt ( ĊĠĠĠĠĠĠĠ ĠmContext . application Context . content Resolver , ĊĠĠĠĠĠĠĠ ĠSettings . Global . INSTALL _ NON _ MARK ET _ APPS , ĊĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠ Ġ) Ġ== Ġ 1 ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ ĠmContext . application Context . package Manager . can Request Package Install s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpromise . resolve ( enabled ) ĊĠ Ġ} ĊĊĠ Ġ@ Ex po Method ĊĠ Ġfun Ġget Platform Features Async ( promise : ĠPromise ) Ġ{ ĊĠĠĠ Ġval Ġall Features Ġ= ĠmContext . application Context . package Manager . system Available Features ĊĠĠĠ Ġval Ġfeature List Ġ= Ġall Features . filter NotNull (). map Ġ{ Ġit . name Ġ} ĊĠĠĠ Ġpromise . resolve ( feature List ) ĊĠ Ġ} ĊĊĠ Ġ@ Ex po Method ĊĠ Ġfun Ġhas Platform Feature Async ( feature : ĠString , Ġpromise : ĠPromise ) Ġ{ ĊĠĠĠ Ġpromise . resolve ( mContext . application Context . package Manager . has System Feature ( feature )) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠDevice Module :: class . java . simple Name ĊĊĠĠĠ Ġprivate Ġval Ġis Running On Gen ym otion : ĠBoolean ĊĠĠĠĠĠ Ġget () Ġ= ĠBuild . F ING ER PRINT . contains (" v box ") ĊĠĠĠ Ġprivate Ġval Ġis Running On Stock Em ulator : ĠBoolean ĊĠĠĠĠĠ Ġget () Ġ= ĠBuild . F ING ER PRINT . contains (" generic ") ĊĊĠĠĠ Ġprivate Ġfun Ġget DeviceType ( context : ĠContext ): ĠDevice Type Ġ{ ĊĠĠĠĠĠ Ġ// ĠDetect ĠT Vs Ġvia ĠUI Ġmode Ġ( Android ĠT Vs ) Ġor Ġsystem Ġfeatures Ġ( Fire ĠTV ). ĊĠĠĠĠĠ Ġif Ġ( context . application Context . package Manager . has System Feature (" amazon . hardware . fire _ tv ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDevice Type . TV ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġui Manager Ġ= Ġcontext . getSystem Service ( Context . UI _ MODE _ SERVICE ) Ġas ĠUi Mode Manager ? ĊĠĠĠĠĠ Ġif Ġ( ui Manager Ġ!= Ġnull Ġ&& Ġui Manager . current Mode Type Ġ== ĠConfiguration . UI _ MODE _ TYPE _ TELE V ISION ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDevice Type . TV ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// ĠFind Ġthe Ġcurrent Ġwindow Ġmanager , Ġif Ġnone Ġis Ġfound Ġwe Ġcan 't Ġmeasure Ġthe Ġdevice Ġphysical Ġsize . ĊĠĠĠĠĠ Ġval Ġwindow Manager Ġ= Ġcontext . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ? Ġ?: Ġreturn ĠDevice Type . UNKNOWN ĊĊĠĠĠĠĠ Ġ// ĠGet Ġdisplay Ġmetrics Ġto Ġsee Ġif Ġwe Ġcan Ġdifferent iate Ġph ones Ġand Ġtable ts . ĊĠĠĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠ Ġwindow Manager . default Display . get Metrics ( metrics ) ĊĊĠĠĠĠĠ Ġ// ĠCalculate Ġphysical Ġsize . ĊĠĠĠĠĠ Ġval Ġwidth In ches Ġ= Ġmetrics . width Pixels Ġ/ Ġmetrics . xd pi . toDouble () ĊĠĠĠĠĠ Ġval Ġheight In ches Ġ= Ġmetrics . height Pixels Ġ/ Ġmetrics . yd pi . toDouble () ĊĠĠĠĠĠ Ġval Ġdiagonal Size In ches Ġ= Ġsqrt ( width In ches . pow ( 2 . 0 ) Ġ+ Ġheight In ches . pow ( 2 . 0 )) ĊĠĠĠĠĠ Ġreturn Ġif Ġ( diagonal Size In ches Ġ>= Ġ 3 . 0 Ġ&& Ġdiagonal Size In ches Ġ<= Ġ 6 . 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDevices Ġin Ġa Ġs ane Ġrange Ġfor Ġph ones Ġare Ġconsidered Ġto Ġbe Ġph ones . ĊĠĠĠĠĠĠĠ ĠDevice Type . PHONE ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( diagonal Size In ches Ġ> Ġ 6 . 9 Ġ&& Ġdiagonal Size In ches Ġ<= Ġ 1 8 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDevices Ġlarger Ġthan Ġa Ġphone Ġand Ġin Ġa Ġs ane Ġrange Ġfor Ġtable ts Ġare Ġtable ts . ĊĠĠĠĠĠĠĠ ĠDevice Type . TABLE T ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOtherwise , Ġwe Ġdon 't Ġknow Ġwhat Ġdevice Ġtype Ġwe 're Ġon . ĊĠĠĠĠĠĠĠ ĠDevice Type . UNKNOWN ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ