package Ġcom . y uman . another exercise . volume list Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . y uman . another exercise . R Ċ import Ġcom . y uman . another exercise . data . Year Volume Item Ċ import Ġcom . y uman . another exercise . util . VOLUME _ ITEM _ KEY Ċ import Ġkotlinx . android . synt hetic . main . volume _ cell _ normal . view .* Ċ import Ġjava . text . NumberFormat Ċ Ċ class ĠVolume List Ad at per Ġ( use Card : ĠBoolean ): ĊĠĠĠ ĠList Adapter < Year Volume Item , ĠVolume List Ad at per . Volume ListView Holder >( Diff Callback ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġis Card View : ĠBoolean Ġ= Ġuse Card ĊĠĠĠ Ġprivate Ġval Ġnf Ġ= ĠNumber Format . getInstance (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . maximum Fraction Digits Ġ= Ġ 6 ĊĠĠĠĠĠĠĠ Ġthis . is Grouping Used Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠVolume ListView Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠviewHolder Ġ= ĠVolume ListView Holder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Card View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . volume _ cell _ card , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . volume _ cell _ normal , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewHolder . iv Down . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( parent . context ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setTitle ( R . string . dropdown _ alert _ title ). setMessage ( R . string . msg _ volume _ dropdown ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Positive Button ( R . string . button _ ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . create (). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewHolder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( VOLUME _ ITEM _ KEY , ĠgetItem ( view Holder . adapter Position )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . item View . find Nav Controller () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate ( R . id . action _ volume List Fragment _ to _ volume Details Fragment , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠviewHolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠVolume ListView Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . tv Year . text Ġ= Ġitem . year . toString () ĊĠĠĠĠĠĠĠ Ġval Ġvolume Ġ= Ġitem . volume ĊĠĠĠĠĠĠĠ Ġval Ġvolume Str Ġ= Ġnf . format ( volume ) ĊĠĠĠĠĠĠĠ Ġval Ġnumbers Ġ= Ġvolume Str . split ('.') ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Part Ġ= Ġ"-- " ĊĠĠĠĠĠĠĠ Ġvar Ġsecond Part Ġ= Ġ"-- " ĊĠĠĠĠĠĠĠ Ġif Ġ( numbers . isNotEmpty () Ġ&& Ġnumbers . size Ġ<= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Part Ġ= Ġnumbers [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numbers . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Part Ġ= Ġnumbers [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . tv Volume Int . text Ġ= Ġfirst Part ĊĠĠĠĠĠĠĠ Ġholder . tv Volume Decimal . text Ġ= Ġ".$ second Part " ĊĠĠĠĠĠĠĠ Ġwith ( item . quarter Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this [ 0 ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv Q 1 . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv Q 1 . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this [ 1 ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv Q 2 . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv Q 2 . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this [ 2 ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv Q 3 . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv Q 3 . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this [ 3 ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv Q 4 . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv Q 4 . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( item . is Dropdown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . iv Down . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . iv Down . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . iv Down . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . iv Down . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠDiff Callback Ġ: ĠDiff Util . Item Callback < Year Volume Item >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠYear Volume Item , Ġnew Item : ĠYear Volume Item ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . year Ġ== Ġnew Item . year ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠYear Volume Item , Ġnew Item : ĠYear Volume Item ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠVolume ListView Holder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtv Year : ĠTextView Ġ= ĠitemView . tv Year ĊĠĠĠĠĠĠĠ Ġval Ġtv Volume Int : ĠTextView Ġ= ĠitemView . tv Volume Int ĊĠĠĠĠĠĠĠ Ġval Ġtv Volume Decimal : ĠTextView Ġ= ĠitemView . tv Volume Decimal ĊĠĠĠĠĠĠĠ Ġval Ġtv Q 1 : ĠTextView Ġ= ĠitemView . tv Q 1 ĊĠĠĠĠĠĠĠ Ġval Ġtv Q 2 : ĠTextView Ġ= ĠitemView . tv Q 2 ĊĠĠĠĠĠĠĠ Ġval Ġtv Q 3 : ĠTextView Ġ= ĠitemView . tv Q 3 ĊĠĠĠĠĠĠĠ Ġval Ġtv Q 4 : ĠTextView Ġ= ĠitemView . tv Q 4 ĊĠĠĠĠĠĠĠ Ġval Ġiv Down : ĠImageView Ġ= ĠitemView . iv Down ĊĠĠĠ Ġ} Ċ }