/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠN az mul ĠI dr is . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// 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 . google . api . places . places _ api _ p oc . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View Ċ import Ġcom . google . api . places . places _ api _ p oc . R Ċ import Ġcom . google . api . places . places _ api _ p oc . d agg ger . Place Details Sheet LiveData Ċ import Ġcom . google . api . places . places _ api _ p oc . misc . Permission Dependent Task Ċ import Ġcom . google . api . places . places _ api _ p oc . misc . Permissions Handler Ċ import Ġcom . google . api . places . places _ api _ p oc . misc . get My Application Ċ import Ġcom . google . api . places . places _ api _ p oc . model . Places API Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠDriver Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ driver ) ĊĠĠĠĠĠĠĠ Ġsetup Fragments () ĊĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠĠĠĠĠ Ġsetup Modal Place Detail Sheet Handler () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute Task On Permission Granted ( task : ĠPermission Dependent Task ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPermissions Handler . execute Task On Permission Granted ( this , Ġtask ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPermissions Handler . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplaces API ViewModel : ĠPl aces API ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠViewModel Ġwhich Ġacts Ġas Ġa Ġproxy Ġto Ġthe ĠPl aces ĠAPI Ġclient ( s ). ĊĠĠĠĠĠĠĠ Ġplaces API ViewModel Ġ= ĠViewModel Providers . of ( this ). get ( Places API :: class . java ) ĊĠĠĠĠĠĠĠ Ġ// ĠConnect Ġto Ġthe ĠPl aces ĠAPI . ĊĠĠĠĠĠĠĠ Ġlifecycle . add Observer ( places API ViewModel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠManage Ġcreating Ġand Ġswitching ĠF rag ments . ĊĠĠĠ Ġprivate Ġfun Ġsetup Fragments () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġbottom Ġbar Ġnavigation Ġto Ġrespond Ġto Ġuser Ġinput . ĊĠĠĠĠĠĠĠ ĠfindViewById < Bottom Navigation View >( R . id . layout _ app _ navigation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Navigation ItemSelected Listener ( on Navigation ItemSelected Listener ) ĊĠĠĠĠĠĠĠ Ġ// ĠPre - select Ġthe Ġfirst Ġfragment . ĊĠĠĠĠĠĠĠ Ġswitch Fragment ( R . id . navigation _ tab 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfragment Map : ĠMap < Int , ĠFragment > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map Of < Int , ĠFragment >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( R . id . navigation _ tab 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTab 1 Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( R . id . navigation _ tab 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTab 2 Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( R . id . navigation _ tab 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTab 3 Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap () ĊĊĠĠĠ Ġprivate Ġfun Ġswitch Fragment ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Map [ id ]?. let Ġ{ Ġnew Fragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . layout _ app _ fragment , Ġnew Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġallow Ġuser Ġto Ġuse Ġback Ġbutton Ġto Ġundo Ġfragment Ġswitch Ġuncomment Ġthis . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// . addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHandle Ġuser Ġinput Ġon Ġbottom Ġbar Ġnavigation . ĊĠĠĠ Ġprivate Ġval Ġon Navigation ItemSelected Listener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Navigation View . On Navigation ItemSelected Listener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġin Ġfragment Map . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Fragment ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Navigation ItemSelected Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġreturn @ On Navigation ItemSelected Listener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġmodal Place Details Sheet LiveData : ĠPlace Details Sheet LiveData ĊĊĠĠĠ Ġ// ĠHandle Ġshowing Ġthe ĠPlace Details Sheet Fragment Ġ( modal / dialog ). ĊĠĠĠ Ġprivate Ġfun Ġsetup Modal Place Detail Sheet Handler () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠInject Ġobjects Ġinto Ġfields . ĊĠĠĠĠĠĠĠ Ġget My Application (). activity Component ?. inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġmodal Place Details Sheet LiveData . sheet Visible Observable (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġshow Flag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace Details Sheet Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( this . support FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace Details Sheet Fragment :: java Class . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġdo Ġanything . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} Ċ Ċ }