package Ġcom . ru u vi . station . feature Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . bluetooth . Bluetooth Adapter Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Toast Ċ import Ġcom . ru u vi . station . R Ċ import Ġcom . ru u vi . station . adapters . Add Tag Adapter Ċ import Ġcom . ru u vi . station . feature . main . MainActivity Ċ import Ġcom . ru u vi . station . model . R uu vi Tag Ċ import Ġcom . ru u vi . station . service . Scanner Service Ċ import Ġcom . ru u vi . station . util . Starter Ċ import Ġcom . ru u vi . station . util . Utils Ċ Ċ import Ġkotlinx . android . synt hetic . main . activity _ add _ tag .* Ċ import Ġkotlinx . android . synt hetic . main . content _ add _ tag .* Ċ import Ġjava . util .* Ċ Ċ class ĠAdd Tag Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠAdd Tag Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtags : ĠMutable List < R uu vi Tag >? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġstarter : ĠSt arter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ add _ tag ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġstarter Ġ= ĠSt arter ( this ) ĊĊĠĠĠĠĠĠĠ Ġtags Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠAdd Tag Adapter ( this , Ġtags ) ĊĠĠĠĠĠĠĠ Ġtag _ list View . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġtag _ list View . on ItemClickListener Ġ= ĠAdapter View . On ItemClickListener Ġ{ Ġadapter View , Ġview , Ġi , Ġl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġtag _ list View . getItem At Position ( i ) Ġas ĠR uu vi Tag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( R uu vi Tag . get ( tag . id ). favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . tag _ already _ added ), ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On ItemClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag . default Background Ġ= Ġget Kind a Random Background () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag . update () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScanner Service . log Tag ( tag , Ġthis , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Intent Ġ= ĠIntent ( this , ĠTag Settings :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Intent . putExtra ( Tag Settings . TAG _ ID , Ġtag . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( settings Intent , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter !!. notify DataSet Changed () ĊĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġhandler . post ( object Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags ?. addAll ( R uu vi Tag . getAll ( false )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . SECOND , Ġ- 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġtags !!. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags !!. get ( i ). update At . time Ġ< Ġcalendar . time . time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags !!. remove At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags !!. size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . sort Tags By R ssi ( tags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno _ tags . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno _ tags . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġ!= Ġnull ) Ġadapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( this , Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġstarter . get Things Started () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġcheck Bluetooth () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Bluetooth (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( MainActivity . is Bluetooth Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġenable Bt Intent Ġ= ĠIntent ( Bluetooth Adapter . ACTION _ REQUEST _ ENABLE ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( enable Bt Intent ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item ?. itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġparty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( this , ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstarter . request Permissions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Permission Snackbar ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Permission Ġdenied ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Permission Snackbar ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( tag _ layout , ĠgetString ( R . string . location _ permission _ needed ), ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠ Ġsn ackbar . setAction ( getString ( R . string . settings )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠSettings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . from Parts (" package ", Ġactivity . packageName , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data Ġ= Ġuri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsn ackbar . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Background InUse ( tags : ĠList < R uu vi Tag >, Ġbackground : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġtags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag . default Background Ġ== Ġbackground ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Kind a Random Background (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtags Ġ= ĠR uu vi Tag . getAll ( true ) ĊĠĠĠĠĠĠĠ Ġvar Ġbg Ġ= Ġ( Math . random () Ġ* Ġ 9 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Background InUse ( tags , Ġbg )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Ġ= Ġ( Math . random () Ġ* Ġ 9 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbg ĊĠĠĠ Ġ} Ċ } Ċ