/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . kot link tx workshop Ċ Ċ import Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . example . android . my k tx library . await Last Location Ċ import Ġcom . example . android . my k tx library . find AndSet Text Ċ import Ġcom . example . android . my k tx library . has Permission Ċ import Ġcom . example . android . my k tx library . location Flow Ċ import Ġcom . example . android . my k tx library . show Location Ċ import Ġcom . google . android . gms . location . F used Location Provider Client Ċ import Ġcom . google . android . gms . location . Location Services Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . conf late Ċ import Ġkotlinx . coroutines . flow . flow On Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġf used Location Client : ĠF used Location Provider Client ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġf used Location Client Ġ= ĠLocation Services . getF used Location Provider Client ( this ) ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ Ġ// Ġonly Ġget Ġresults Ġwhen Ġthe ĠActivity Ġis Ġin Ġthe Ġstarted Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetLast Known Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Updating Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind AndSet Text ( R . id . textView , Ġ" Unable Ġto Ġget Ġlocation .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Unable Ġto Ġget Ġlocation ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! has Permission ( ACCESS _ F INE _ LOCATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( ACCESS _ F INE _ LOCATION ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠgetLast Known Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Location Ġ= Ġf used Location Client . await Last Location () ĊĠĠĠĠĠĠĠ Ġshow Location ( R . id . textView , Ġlast Location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġstart Updating Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġf used Location Client . location Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. conf late () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġa Ġreal Ġapp Ġcollecting Ġa ĠFlow Ġfrom Ġyour Ġdata Ġlayer Ġusing Ġa Ġpa using ĠDispatcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsuch Ġas Ġlifecycle Scope . launch When Started Ġis Ġnot Ġrecommended , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġwe Ġswitch Ġto ĠDispatch ers . Main Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNorm ally Ġuse Ġsomething Ġlike ĠFlow . as LiveData Ġand ĠOb serve Ġthe ĠLive Data Ġfrom ĠUI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . Main ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġlocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Location ( R . id . textView , Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecreate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ const Ġval ĠTAG Ġ= Ġ" K TX CODE LAB " Ċ