package Ġcom . ga ur av . pokemon . ui . pokemon _ details Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view .* Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . widget . Nested ScrollView Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . ga ur av . pokemon . R Ċ import Ġcom . ga ur av . pokemon . adapter . Pokemon Type Adapter Ċ import Ġcom . ga ur av . pokemon . data . model .* Ċ import Ġcom . ga ur av . pokemon . data . model . pokemon . Type Ċ import Ġcom . ga ur av . pokemon . data . remote . Response Handler Ċ import Ġcom . ga ur av . pokemon . databinding . Fragment Pokemon Details Binding Ċ import Ġcom . ga ur av . pokemon . ui . main . Main ViewModel Ċ import Ġcom . ga ur av . pokemon . utils .* Ċ import Ġcom . ga ur av . pokemon . utils . Constants . PO KE MON _ CAPTURE D Ċ import Ġcom . ga ur av . pokemon . utils . Constants . PO KE MON _ CAPTURE D _ BY _ OTHER Ċ import Ġcom . ga ur av . pokemon . utils . Constants . PO KE MON _ DETAILS Ċ import Ġcom . ga ur av . pokemon . utils . Constants . PO KE MON _ FROM _ EXP LO RE Ċ import Ġcom . ga ur av . pokemon . utils . Constants . PO KE MON _ W ILD Ċ import Ġcom . ga ur av . pokemon . utils . General Utils . parse Date To Short Month Date And Year Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . On Map Ready Callback Ċ import Ġcom . google . android . gms . maps . Support Map Fragment Ċ import Ġcom . google . android . gms . maps . model . Bitmap Descriptor Factory Ċ import Ġcom . google . android . gms . maps . model . Camera Position Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . Marker Options Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . android x . view model . ext . android . shared ViewModel Ċ import Ġorg . k oin . java . K oin Java Component . inject Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Fragment ] Ġsubclass Ġwhich Ġdisplays Ġthe Ġdetails Ġof ĠPokemon Ġbased Ġon ĠID Ċ Ġ*/ Ċ class ĠPokemon Details Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġ// ĠDecl aring Ġclass Ġdependencies ĊĠĠĠ Ġprivate Ġval Ġmain ViewModel Ġby Ġshared ViewModel < Main ViewModel >() ĊĠĠĠ Ġprivate Ġval Ġgson : ĠGson Ġby Ġinject ( Gson :: class . java ) ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Pokemon Details Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġvar Ġis W ild Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Capt ured Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Capt ured By Other Ġ= Ġfalse ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠReturns Ġthe Ġview Ġbinding Ġfor Ġthe Ġlayout Ġof Ġthe Ġfragment ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Pokemon Details Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġscroll Listener () ĊĊĠĠĠĠĠĠĠ Ġget Intent Extras () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġfor Ġscroll Ġlistener Ġwhich Ġsets Ġthe Ġvisibility Ġof Ġthe Ġtoolbar ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġscroll Listener () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġscroll Bounds Ġ= ĠRect () ĊĊĠĠĠĠĠĠĠ Ġbinding . scroll View . get Hit Rect ( scroll Bounds ) ĊĊĠĠĠĠĠĠĠ Ġbinding . scroll View . setOn Scroll ChangeListener ( ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠNested ScrollView . On Scroll ChangeListener Ġ{ Ġ_, Ġ_, Ġ_, Ġ_, Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . iv Pokemon . getLocal Visible Rect ( scroll Bounds )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! binding . iv Pokemon . getLocal Visible Rect ( scroll Bounds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġscroll Bounds . height () Ġ< Ġbinding . iv Pokemon . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow Toolbar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . iv Pokemon . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ll Toolbar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Pokemon Name . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . fab Capture . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is W ild Ġ&& Ġ! is Capt ured By Other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . fab Capture . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . iv Pokemon . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . ll Toolbar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . tv Pokemon Name . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Intent Extras () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrequire Activity (). intent ?. extras ?. let Ġ{ Ġbundle Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . get Serializable ( PO KE MON _ DETAILS )?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConvert Ġserial izable Ġobject Ġto Ġpokemon Ġdetails Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġobject Ġ: ĠType Token < Pokemon Details >() Ġ{} . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpokemon Details String Ġ= Ġgson . toJson ( it , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpokemon Details : ĠPokemon Details Ġ= Ġgson . fromJson ( pokemon Details String , Ġtype ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" pokemon Details Ġ: Ġ$ pokemon Details ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpokemon Location Info Ġ= Ġpokemon Details . pokemon Location Info ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġstatus Ġof ĠPokemon Ġ- Ġwild , Ġcaptured , Ġcaptured Ġby Ġothers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( pokemon Details . pokemon Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPO KE MON _ W ILD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis W ild Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPO KE MON _ CAPTURE D Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Capt ured Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPO KE MON _ CAPTURE D _ BY _ OTHER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Capt ured By Other Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Map Marker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLat Lng ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Location Info . captured Lat At , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Location Info . captured Long At ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPokemon Ġdetails Ġapi Ġresponse Ġhandler ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġpokemon ĠID Ġwhen Ġrouting Ġfrom Ġexplore Ġfragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpokemon Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pokemon Location Info . id Ġ== ĠPO KE MON _ FROM _ EXP LO RE ) Ġpokemon Location Info . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġpokemon Location Info . id . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . fetch Pokemon Details ( pokemon Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġapi Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( api Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse Handler . Success Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Response . data ?. let Ġ{ Ġget Pokemon Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Pokemon Ġdetails Ġinfo Ġ$ get Pokemon Response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize View ( get Pokemon Response , Ġpokemon Details ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse Handler . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Pokemon Ġdetails Ġerror Ġresponse : Ġ$ api Response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiError ( api Response , Ġrequire Activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse Handler . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize View ( pokemon : ĠPokemon , Ġpokemon Details : ĠPokemon Details ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcapture Button : ĠMaterial Button Ġ= Ġbinding . btn Capture ĊĠĠĠĠĠĠĠ Ġval Ġtv Capture Date Ġ= Ġbinding . layout Basic Info . tv Capture Date ĊĠĠĠĠĠĠĠ Ġval Ġcapture Layout Ġ= Ġbinding . layout Basic Info . tv Capture Date ĊĠĠĠĠĠĠĠ Ġval Ġtv Found Capt ured : ĠTextView Ġ= Ġbinding . layout Map . tv Found In Capt ured In ĊĠĠĠĠĠĠĠ Ġval Ġpokemon Capt ured Ġ= Ġbinding . fab Capture ĊĠĠĠĠĠĠĠ Ġval Ġlayout Map Ġ= Ġbinding . layout Map . cv Found Capt ured ĊĠĠĠĠĠĠĠ Ġval Ġlayout Capt ured By Ġ= Ġbinding . layout Capt ured By . cv Capt ured By ĊĠĠĠĠĠĠĠ Ġval Ġtv Pokemon Ġ= Ġbinding . tv Pokemon Name ĊĊĠĠĠĠĠĠĠ Ġval Ġtv Capt ured By Ġ= Ġbinding . layout Capt ured By . tv Name ĊĠĠĠĠĠĠĠ Ġval Ġtv Level Ġ= Ġbinding . layout Basic Info . tv Level ĊĊĠĠĠĠĠĠĠ Ġsetup RecyclerView ( pokemon . types ) ĊĊĠĠĠĠĠĠĠ Ġrequire Activity (). get Dominant Color ( pokemon . sprites . front Default , Ġbinding . iv Pokemon ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cl Main . set BackgroundColor ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . scroll View . set BackgroundColor ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ll Toolbar . set BackgroundColor ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* val Ġgd Ġ= ĠGradient Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGradient Drawable . Orientation . TOP _ BOTTOM , Ġint ArrayOf (- 0 x 9 e 9 d 9 f , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgd . corner Radius Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cl Main . background Ġ= Ġgd ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . scroll View . background Ġ= Ġ( gd ) */ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetting Ġvalue ĠUI Ġtext Ġviews ĊĠĠĠĠĠĠĠ Ġtv Pokemon . text Ġ= Ġpokemon . name . make 1 st Character Upper () ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Name . text Ġ= Ġpokemon . name . make 1 st Character Upper () ĊĠĠĠĠĠĠĠ Ġtv Level . text Ġ= Ġpokemon . id . toString () ĊĠĠĠĠĠĠĠ Ġtv Capt ured By . text Ġ= Ġpokemon Details . captured ByName ĊĠĠĠĠĠĠĠ Ġtv Capture Date . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse Date To Short Month Date And Year ( pokemon Details . pokemon Location Info . captured At ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġpokemon Ġstatus ĊĠĠĠĠĠĠĠ Ġwhen Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis W ild Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Capt ured . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Basic Info . tv Capture On . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Capt ured Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Capt ured . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . iv Pokemon Toolbar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Found Capt ured . text Ġ= ĠgetString ( R . string . captured _ in ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Capt ured By Other Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Capt ured . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Found Capt ured . text Ġ= ĠgetString ( R . string . captured _ in ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Map . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Capt ured By . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcapture Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Capture Dialog ( pokemon , Ġpokemon Details . pokemon Location Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . ll ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView ( pokemon Type : ĠList < Type >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpokemon Type Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPokemon Type Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . layout Basic Info . re cyclerView Types . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġpokemon Type Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( activity , ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġset ĠMarker Ġon ĠGoogle Ġmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Map Marker ( position : ĠLat Lng ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠOn Map Ready Callback Ġ{ Ġ_ google Map Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Position Ġ= ĠCamera Position . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. target ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. zoom ( 1 3 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ google Map . move Camera ( Camera Update Factory . new Camera Position ( camera Position )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ google Map . add Marker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. position ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title (" Pokemon ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. icon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Descriptor Factory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Resource ( R . drawable . ic _ poke ball _ 9 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Fragment Ġ= Ġchild FragmentManager . find Fragment ById ( R . id . map ) Ġas ĠSupport Map Fragment ? ĊĠĠĠĠĠĠĠ Ġmap Fragment ?. getMap Async ( callback ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDisplays Ġpop - up Ġdialog Ġto Ġconfirm ĠPokemon Ġcapture ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġshow Capture Dialog ( pokemon : ĠPokemon , Ġpokemon Location Info : ĠPokemon Location Info ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠDialog ( require Activity ()) ĊĠĠĠĠĠĠĠ Ġdialog . request Window Feature ( Window . FEATURE _ NO _ TITLE ) ĊĠĠĠĠĠĠĠ Ġdialog . set ContentView ( R . layout . layout _ assign _ name _ to _ pokemon ) ĊĠĠĠĠĠĠĠ Ġdialog . set Canceled On Touch Outside ( true ) ĊĠĠĠĠĠĠĠ Ġdialog . set Cancel able ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcancel Button Ġ= Ġdialog . findViewById ( R . id . btn _ cancel ) Ġas ĠMaterial Button ĊĠĠĠĠĠĠĠ Ġval Ġsave Button Ġ= Ġdialog . findViewById ( R . id . btn _ save ) Ġas ĠMaterial Button ĊĠĠĠĠĠĠĠ Ġval Ġet Name : ĠEditText Ġ= Ġdialog . findViewById ( R . id . et _ name ) Ġas ĠEditText ĊĊĠĠĠĠĠĠĠ Ġresources . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= Ġit . display Metrics ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Width Ġ= Ġ( display Metrics . width Pixels Ġ* Ġ 0 . 7 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Height Ġ= ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . window ?. setLayout ( dialog Width , Ġdialog Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdialog . window ?. setBackground Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . transparent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĊĠĠĠĠĠĠĠ Ġsave Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( et Name . editable Text . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). show Toast (" Please Ġassign Ġa Ġname !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Capture Animation () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . iv Po ke ball . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPost Ġcapture Ġpokemon Ġapi Ġresponse Ġhandling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapture Pokemon Ġ= ĠCapture Pokemon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPokemon Capture ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet Name . editable Text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Location Info . captured Lat At . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Location Info . captured Long At . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . capture Pokemon Data ( capture Pokemon ). let Ġ{ Ġapi Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( api Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse Handler . Success Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Response . data ?. let Ġ{ Ġcapture Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Pokemon Ġcaptured Ġ: Ġ$ capture Response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Capture Animation ( capture Response . successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse Handler . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" capture Pokemon Data Ġerror Ġresponse : Ġ$ api Response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiError ( api Response , Ġrequire Activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse Handler . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcancel Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠShow Ġanimation Ġwhen Ġpokemon Ġcapture Ġapi Ġis Ġcalled ĊĠĠĠ Ġprivate Ġfun Ġstart Capture Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . iv Po ke ball . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġval Ġclk Rotate Ġ= ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . anim _ rotate _ clock wise ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . iv Po ke ball . start Animation ( clk Rotate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHide Ġanimation Ġwhen Ġpokemon Ġcapture Ġapi Ġrespon ds ĊĠĠĠ Ġprivate Ġfun Ġstop Capture Animation ( is Success : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . iv Po ke ball . clear Animation () ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . iv Po ke ball . visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . fab Capture . visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . fab Capture . visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }