package Ġcom . jv . news . ui Ċ Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . jo aqu im ver ges . he li um . core . Ui Block Ċ import Ġcom . jo aqu im ver ges . he li um . core . event . Block Event Ċ import Ġcom . jo aqu im ver ges . he li um . core . state . BlockState Ċ import Ġcom . jo aqu im ver ges . he li um . navigation . toolbar . Col lap sing Toolbar Ui Ċ import Ġcom . jo aqu im ver ges . he li um . ui . list . List Ui Ċ import Ġcom . jv . news . App . Companion . context Ċ import Ġcom . jv . news . R Ċ import Ġcom . jv . news . data . model . Article Ċ import Ġcom . jv . news . logic . state . Article List State Ċ import Ġcom . jv . news . ui . adapter . Article Grid Item Ċ import Ġcom . jv . news . ui . event . Article Event Ċ Ċ /** Ċ Ġ* Ġ@ author Ġjo aqu im Ċ Ġ*/ Ċ class ĠArticle List Ui ( ĊĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠ Ġval Ġlist Ui : ĠList Ui < Article , ĠArticle Event , ĠArticle Grid Item > Ġ= Ġinf late ListView ( in flater ) Ċ ) Ġ: ĠCol lap sing Toolbar Ui < Article List State , ĠArticle Event >( ĊĠĠĠ Ġinflater , ĊĠĠĠ Ġlist Ui , ĊĠĠĠ ĠHeader Ui ( in flater ), ĊĠĠĠ Ġcol lap sing Layout Custom ization Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . title Ġ= Ġcontext . getString ( R . string . app _ name ) ĊĠĠĠĠĠĠĠ Ġit . set Expanded Title Type face ( Type face . DEFAULT _ BOLD ) ĊĠĠĠĠĠĠĠ Ġit . expanded Title Margin Start Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . expanded _ toolbar _ title _ margin ) ĊĠĠĠĠĠĠĠ Ġ// Ġhidden Ġin Ġlandscape ĊĠĠĠĠĠĠĠ Ġit . visibility Ġ= Ġwhen Ġ( context . resources . configuration . orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . OR IENTATION _ LAND SC APE Ġ-> ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, ĊĠĠĠ Ġaction Bar Custom ization Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġit . set Home As Up Indicator ( R . drawable . ic _ menu ) ĊĠĠĠ Ġ} Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDOUBLE _ SPAN _ COUNT Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS INGLE _ SPAN _ COUNT Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinf late ListView ( in flater : ĠLayoutInflater ): ĠList Ui < Article , ĠArticle Event , ĠArticle Grid Item > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġinflater . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspacing : ĠInt Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . grid _ spacing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġwhen Ġ( context . resources . configuration . orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . OR IENTATION _ LAND SC APE Ġ-> ĠLinearLayoutManager . HORIZONTAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLinearLayoutManager . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠGrid LayoutManager ( context , ĠDOUBLE _ SPAN _ COUNT , Ġorientation , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . span Size Lookup Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠLinearLayoutManager . HORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDOUBLE _ SPAN _ COUNT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( position Ġ% Ġ 5 Ġ== Ġ 0 ) ĠDOUBLE _ SPAN _ COUNT Ġelse ĠS INGLE _ SPAN _ COUNT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠList Ui ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler Item Factory Ġ= Ġ{ Ġlayout Inflater , Ġcontainer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Grid Item ( layout Inflater , Ġcontainer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġlayout Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Config Ġ= Ġ{ Ġre cyclerView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( Spaces Item Decoration ( spacing , Ġorientation )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Ui Block Ġ= ĠEmpty Ui ( in flater ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe To Refresh Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( view State : ĠArticle List State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠHeader Ui ( in flater : ĠLayoutInflater ) Ġ: ĠUi Block < BlockState , ĠBlock Event >( R . layout . view _ toolbar _ backdrop , Ġinflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender ( block State : ĠBlock State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠEmpty Ui ( in flater : ĠLayoutInflater ) Ġ: ĠUi Block < BlockState , ĠArticle Event >( R . layout . empty _ view , Ġinflater ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġopen Drawer Button Ġ= Ġfind View < View >( R . id . open _ drawer _ button ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Drawer Button . setOnClickListener Ġ{ Ġpush Event ( Article Event . Get More Sources ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender ( block State : ĠBlock State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ