/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . example . android . mars re ale state Ċ Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . example . android . mars re ale state . network . M ars Property Ċ import Ġcom . example . android . mars re ale state . overview . M ars Api Status Ċ import Ġcom . example . android . mars re ale state . overview . Photo Grid Adapter Ċ Ċ // ĠThe Ġ@ Binding Adapter Ġannotation Ġtells Ġdata Ġbinding Ġthat Ġyou Ġwant Ġthis Ġbinding Ġadapter Ġexecuted Ċ // Ġwhen Ġan ĠXML Ġitem Ġhas Ġthe ĠimageUrl Ġattribute Ċ @ Binding Adapter (" imageUrl ") Ċ fun Ġbind Image ( img View : ĠImageView , Ġimg Url : ĠString ?) Ġ{ ĊĠĠĠ Ġimg Url ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġconvert Ġthe ĠURL Ġstring Ġ( from Ġthe ĠXML ) Ġto Ġa ĠUri Ġobject ĊĠĠĠĠĠĠĠ Ġ// Ġuse Ġthe ĠHTTPS Ġscheme , Ġbecause Ġthe Ġserver Ġyou Ġpull Ġthe Ġimages Ġfrom Ġrequires Ġthat Ġsecure Ġscheme ĊĠĠĠĠĠĠĠ Ġval Ġimg Uri Ġ= Ġit . to Uri () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build Up on () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scheme (" https ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠRequest Options (). placeholder ( R . drawable . loading _ animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . ic _ broken _ image ) ĊĠĠĠĠĠĠĠ ĠG lide . with ( img View . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( img Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( img View ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġinitialize Ġthe ĠPhoto Grid Adapter Ġwith Ġthe Ġlist Ġof ĠM ars Property Ġobjects . ĠUsing Ġa ĠBinding Adapter Ġto Ċ // Ġset Ġthe ĠRecyclerView Ġdata Ġcauses Ġdata Ġbinding Ġto Ġautomatically Ġobserve Ġthe ĠLive Data Ġfor Ġthe Ġlist Ċ // Ġof ĠM ars Property Ġobjects . ĠThen Ġthe Ġbinding Ġadapter Ġis Ġcalled Ġautomatically Ġwhen Ġthe ĠM ars Property Ċ // Ġlist Ġchanges . Ċ @ Binding Adapter (" list Data ") Ċ fun Ġbind RecyclerView ( re cyclerView : ĠRecyclerView , Ġdata : ĠList < M ars Property > ?) Ġ{ ĊĠĠĠ Ġval Ġadapter Ġ= Ġre cyclerView . adapter Ġas ĠPhoto Grid Adapter ĊĠĠĠ Ġ// Ġtell Ġthe ĠRecyclerView Ġwhen Ġa Ġnew Ġlist Ġis Ġavailable ĊĠĠĠ Ġadapter . submit List ( data ) Ċ } Ċ Ċ @ Binding Adapter (" mars Api Status ") Ċ fun Ġbind Status ( status ImageView : ĠImageView , Ġstatus : ĠM ars Api Status ?) Ġ{ ĊĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠ ĠM ars Api Status . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġthe ĠImageView Ġto Ġvisible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassign Ġit Ġthe Ġloading Ġanimation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . setImage Resource ( R . drawable . loading _ animation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠM ars Api Status . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġstatus ĠImageView Ġto Ġvisible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreuse Ġthe Ġconnection - error Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . setImage Resource ( R . drawable . ic _ connection _ error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠM ars Api Status . DONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġturn Ġoff Ġthe Ġvisibility Ġof Ġthe Ġstatus ĠImageView Ġto Ġhide Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ImageView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }