package Ġcom . yan . location mock gen ius . mock er Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . location . Criteria Ċ import Ġandroid . location . Location Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . location . Location Provider Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġkotlin . random . Random Ċ Ċ object ĠLocation Mock Utils Ġ{ ĊĊĠĠĠ Ġvar Ġs atell ites Num Ġ= Ġ 1 0 ĊĊĠĠĠ Ġ// generate Ġa Ġlocation ĊĠĠĠ Ġfun Ġgenerate Location ( provider : ĠString , Ġlat : ĠDouble , Ġlon : ĠDouble ): ĠLocation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġloc Ġ= ĠLocation ( provider . remove Suffix (" Mock ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġs atell ites Num Ġ= Ġ 2 0 Ġ+ Ġ( Math . random () Ġ* Ġ 1 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġbundle . put Int (" s atell ites ", Ġs atell ites Num ) ĊĠĠĠĠĠĠĠ Ġloc . extras Ġ= Ġbundle ĊĊĠĠĠĠĠĠĠ ĠLog . i (" temp ", Ġprovider Ġ+ Ġ"\ \" Ġ+ Ġs atell ites Num ) ĊĊĊĠĠĠĠĠĠĠ Ġloc . latitude Ġ= Ġlat Ġ+ Ġ( Math . random () Ġ* Ġ 1 e - 1 2 ) ĊĠĠĠĠĠĠĠ Ġloc . longitude Ġ= Ġlon Ġ+ Ġ( Math . random () Ġ* Ġ 1 e - 1 2 ) ĊĠĠĠĠĠĠĠ Ġloc . accuracy Ġ= Ġ 1 . 0 f Ġ+ Ġ( Math . random () Ġ* Ġ 1 0 ). toFloat () ĊĠĠĠĠĠĠĠ Ġloc . altitude Ġ= Ġ 1 0 . 0 0 Ġ+ Ġ( Math . random () Ġ* Ġ 1 0 ). toFloat () ĊĠĠĠĠĠĠĠ Ġloc . be aring Ġ= Ġ( Math . random () Ġ* Ġ 2 6 0 ). toFloat () ĊĠĠĠĠĠĠĠ Ġloc . time Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloc . elapsed Realtime Nan os Ġ= ĠSystem Clock . elapsed Realtime Nan os () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġloc ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// æ¨¡ æĭŁ ä½įç½® æĿĥéĻĲ æĺ¯åĲ¦ å¼ĢåĲ¯ ĊĠĠĠ Ġfun Ġis Allow Mock Location ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcan Mock Position : ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ<= Ġ 2 2 ) Ġ{// 6 . 0 ä»¥ä¸ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Mock Position Ġ= ĠSettings . Secure . getInt ( context . content Resolver , ĠSettings . Secure . ALLOW _ MOCK _ LOCATION , Ġ 0 ) Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Manager Ġ= Ġcontext . getSystem Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovider Str Ġ= Ġ" test - provider " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġlocation Manager . get Provider ( provider Str ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( provider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . add Test Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Str , Ġtrue , Ġtrue , Ġfalse , Ġfalse , Ġtrue , Ġtrue , Ġtrue , ĠCriteria . POWER _ HIGH , ĠCriteria . AC CUR ACY _ F INE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . set Test Provider Enabled ( provider Str , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . set Test Provider Status ( provider Str , ĠLocation Provider . AVAILABLE , Ġnull , ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Mock Position Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . set Test Provider Enabled ( provider Str , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . remove Test Provider ( provider Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Mock Position Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcan Mock Position ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġopen Dev Settings ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" åĲ¯çĶ¨ ä½įç½® æ¨¡ æĭŁ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" è¯· åľ¨ å¼Ģåıĳ èĢħ éĢīé¡¹ -> éĢīæĭ© æ¨¡ æĭŁ ä½įç½® ä¿¡æģ¯ åºĶçĶ¨ ä¸Ń è¿Ľè¡Į è®¾ç½® ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" è®¾ç½® ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Settings . ACTION _ APPLICATION _ DE VELO P MENT _ SETTINGS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" æĹłæ³ķ è·³è½¬ åĪ° å¼Ģåıĳ èĢħ éĢīé¡¹ , è¯· åħĪ ç¡® ä¿Ŀ æĤ¨çļĦ è®¾å¤ĩ å·² å¤Ħ äºİ å¼Ģåıĳ èĢħ æ¨¡å¼ı ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" åıĸæ¶Ī ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} Ċ } Ċ