package Ġl abs . zero _ one . pat route Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Count Down Timer Ċ import Ġorg . apache . commons . net . time . Time TCP Client Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġorg . jetbrains . ank o . ui Thread Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ åı įä½ľ å¼ Ĭ å·¥åħ· Ċ Ġ* Ċ Ġ* ĠæıĲ ä¾Ľ ä¸ĢäºĽ åı įä½ľ å¼ Ĭ åĬŁèĥ½ Ċ Ġ* Ċ Ġ* Ġ## Ġå±ŀæĢ§ åĪĹè¡¨ Ċ Ġ* Ġ- Ġ[ timer ] Ċ Ġ* Ċ Ġ* Ġ## Ġ åŃĲ ç±» åĪĹè¡¨ Ċ Ġ* Ġ- Ġ[ Tr ume Listener ] Ċ Ġ* Ċ Ġ* Ġ## Ġæĸ¹æ³ķ åĪĹè¡¨ Ċ Ġ* Ġ- Ġ[ check Mock ] Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ context ] Ġ çİ¯å¢ĥ Ċ Ġ* Ġ@ param Ġ[ tr ume Listener ] Ġæ ¶ Ī æģ¯ çĽĳåĲ¬ åĻ¨ Ċ Ġ* Ċ Ġ* Ġ@ author Ġluck a Ċ Ġ* Ġ@ since Ġ 1 . 4 . 0 Ċ Ġ* Ċ Ġ* Ġ@ property Ġ[ timer ] Ġ è®¡ æĹ¶ åĻ¨ ï¼Į çĶ¨äºİ æĹ¶éĹ´ ç¯ ¡ æĶ¹ æ£Ģæµĭ Ċ Ġ*/ Ċ class ĠTr ume Kit ( private Ġval Ġcontext : ĠContext , Ġprivate Ġval Ġtr ume Listener : ĠTr ume Listener ) Ġ{ ĊĊĠĠĠ Ġ// ĠCheck Ġevery Ġ 2 Ġmin ĊĠĠĠ Ġprivate Ġval Ġtimer : ĠCount Down Timer Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠCount Down Timer ( 1 2 0 0 0 0 , Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Time Tr ick () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}. start () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åı įä½ľ å¼ Ĭ å·¥åħ· æ¶Īæģ¯ çĽĳåĲ¬ åĻ¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ## Ġæ ¶ Ī æģ¯ åĪĹè¡¨ ĊĠĠĠĠ Ġ* Ġ- Ġ[ on Time Tr ick Detected ] ĊĠĠĠĠ Ġ* Ġ- Ġ[ on Exception ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author Ġluck a ĊĠĠĠĠ Ġ* Ġ@ since Ġ 1 . 4 . 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠTr ume Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åıĳçİ° æĹ¶éĹ´ ç¯ ¡ æĶ¹ æĹ¶ è°ĥçĶ¨ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġ[ internet Time ] Ġ ç½ĳç»ľ æĹ¶éĹ´ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġ[ device Time ] Ġ è®¾å¤ĩ æĹ¶éĹ´ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ author Ġluck a ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ since Ġ 1 . 4 . 0 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Time Tr ick Detected ( internet Time : ĠLong , Ġdevice Time : ĠLong ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĩºçİ° éĶĻè¯¯ æĹ¶ è°ĥçĶ¨ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġ[ error ] Ġ éĶĻè¯¯ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ author Ġluck a ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ since Ġ 1 . 4 . 0 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Exception ( error : ĠException ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æµĭ æĹ¶éĹ´ ç¯ ¡ æĶ¹ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġå¯¹ æ¯Ķ ç½ĳç»ľ æĹ¶éĹ´ åĴĮ è®¾å¤ĩ æĹ¶éĹ´ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ< a Ġhref =" https :// stackoverflow . com / a / 1 3 0 6 6 2 6 8 "> Stack ĠOverflow </ a > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author Ġluck a ĊĠĠĠĠ Ġ* Ġ@ since Ġ 1 . 4 . 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Time Tr ick () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Client Ġ= ĠTime TCP Client () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Client . default Timeout Ġ= Ġ 6 0 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Client . connect ( context . getString ( R . string . internet Time Host )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 0 + Ġmin Ġdiff Ġbetween Ġdevice Ġand Ġinternet Ġtime Ġcould Ġbe Ġreg arded Ġas Ġtime Ġtrick ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinternet Time Ġ= Ġtime Client . date . time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Time Ġ= ĠDate (). time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( device Time Ġ- Ġinternet Time ) Ġ> Ġ 1 0 Ġ* Ġ 6 0 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ume Listener . on Time Tr ick Detected ( internet Time , Ġdevice Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ume Listener . on Exception ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ do Async ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Client . disconnect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ume Listener . on Exception ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ do Async ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæ¨¡ æĭŁ åĻ¨ æ£Ģæµĭ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ[ Boolean ] Ġæĺ¯åĲ¦ ä¸º æ¨¡ æĭŁ åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ see Ġ< a Ġhref =" https :// stackoverflow . com / a / 2 1 5 0 5 1 9 3 "> Detect Ġemulator Ġ| ĠStack ĠOverflow </ a > ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ author Ġluck a ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ since Ġ 1 . 4 . 0 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcheck Em ulator (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBuild . F ING ER PRINT . startsWith (" generic ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . F ING ER PRINT . startsWith (" unknown ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . MODEL . contains (" google _ sdk ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . MODEL . contains (" Em ulator ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . MODEL . contains (" Android ĠSDK Ġbuilt Ġfor Ġx 8 6 ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . MAN U FACT UR ER . contains (" Gen ym otion ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . B RAND . startsWith (" generic ") Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . DEVICE . startsWith (" generic ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" google _ sdk " Ġ== ĠBuild . PRODUCT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæ¨¡ æĭŁ ä½įç½® æ£Ģæµĭ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġ[ location ] Ġ å¾ħ æ£Ģæµĭ ä½įç½® ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ[ Boolean ] Ġæĺ¯åĲ¦ ä¸º æ¨¡ æĭŁ ä½įç½® ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ author Ġluck a ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ since Ġ 1 . 4 . 0 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcheck Mock ( location : ĠLocation ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location Ġ== Ġnull ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlocation . is From Mock Provider ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }