package Ġn tn u 2 0 . im t 3 6 7 3 . group 4 . aves . adapters Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . media . Ex if Interface Ċ import Ġandroid . media . Thumbnail Utils Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . navigation . Navigation Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġn tn u 2 0 . im t 3 6 7 3 . group 4 . aves . MainActivity Fragment Directions Ċ import Ġn tn u 2 0 . im t 3 6 7 3 . group 4 . aves . data . Observation Data Ċ import Ġn tn u 2 0 . im t 3 6 7 3 . group 4 . aves . databinding . Observation Card Binding Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . util .* ĊĊ Ċ /** Ċ Ġ* Ġ@ brief ĠOb servation Adapter Ċ Ġ* ĠThis Ġadapter Ġshould Ġbe Ġused Ġby Ġre cycler Ġview Ġto Ġshow Ġsight ings Ċ Ġ*/ Ċ class ĠOb servation Adapter ( val Ġcontext : ĠContext ) Ġ: ĊĠĠĠ ĠList Adapter < Observation Data , ĠOb servation Adapter . ViewHolder >( Observation Difference Callback ()) Ġ{ ĊĊĠĠĠ Ġ/** ĠView Ġholder Ġ*/ ĊĠĠĠ Ġclass ĠViewHolder ( val Ġbinding : ĠOb servation Card Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOb servation Card Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĠAdds Ġvariable Ġbindings Ġto Ġthe ĠUI Ġelements Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservation Ġ= ĠgetItem ( position ) ĊĊĠĠĠĠĠĠĠ Ġholder . binding . lbl Card B ird Name . text Ġ= Ġobservation . bird Name ĊĠĠĠĠĠĠĠ Ġholder . binding . lbl Card Description . text Ġ= Ġobservation . description ĊĠĠĠĠĠĠĠ Ġholder . binding . lbl Card Time . text Ġ= ĠDate ( observation . time ). toString () ĊĠĠĠĠĠĠĠ Ġholder . binding . lbl Card Cloud iness . text Ġ= Ġ" Cloud Ġcover : Ġ${ observation . cloud iness } %" ĊĠĠĠĠĠĠĠ Ġholder . binding . lbl Card Rain . text Ġ= Ġ" Rain : Ġ${ observation . rain } Ġmm " ĊĠĠĠĠĠĠĠ Ġholder . binding . lbl Card Wind speed . text Ġ= Ġ" Wind Ġspeed : Ġ${ observation . wind Speed } Ġmp s " ĊĠĠĠĠĠĠĠ Ġholder . binding . lbl Card Temperature . text Ġ= Ġ" Temperature : Ġ${ observation . temperature } Â° C " ĊĠĠĠĠĠĠĠ Ġholder . binding . lbl Card Count . text Ġ= Ġ" Number Ġseen : Ġ${ observation . count }" ĊĊĠĠĠĠĠĠĠ Ġif Ġ( observation . image Path Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthumb Width Ġ= Ġ 1 0 0 // holder . binding . img B ird Preview . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthumb Height Ġ= Ġ 1 0 0 // holder . binding . img B ird Preview . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġthumbnail Ġ= ĠThumb nail Utils . extract Thumbnail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode File ( observation . image Path ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex if Ġ= ĠEx if Interface ( observation . image Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġex if . getAttribute Int ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . TAG _ OR IENTATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ NORMAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠEx if Interface . OR IENTATION _ ROT ATE _ 9 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( 9 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail , Ġ 0 , Ġ 0 , Ġthumbnail . width , Ġthumbnail . height , Ġmatrix , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . binding . img B ird Preview . setImage Bitmap ( thumbnail !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing Ġ- Ġdefault Ġpic Ġwill Ġbe Ġused ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġaction Ġfrom Ġthe Ġnavigation , Ġnavigate Ġto Ġthe Ġdestination Ġthe Ġaction Ġleads Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwith Ġthe Ġobservation Ġas Ġa Ġparameter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Dest View Observation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity Fragment Directions . action View Observation ( observation ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( it ). navigate ( action Dest View Observation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ brief ĠOb servation Difference Callback ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠOb servation Difference Callback Ġ: ĠDiff Util . Item Callback < Observation Data >() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhat Ġdetermines Ġif Ġtwo Ġitems Ġare Ġthe Ġsame ? ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠOb servation Data , Ġnew Item : ĠOb servation Data ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġcontents Ġof Ġthe Ġitems Ġwith Ġsame Ġid Ġis Ġthe Ġsame ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠOb servation Data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠOb servation Data ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . time Ġ== Ġnew Item . time ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }