/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 . ĠM ak sym ĠO li iny k . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" FunctionName ") Ċ Ċ package Ġio . github . x lo pec . reader . app . ui . screens . home Ċ Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . calculate End Padding Ċ import Ġandroidx . compose . foundation . layout . calculate Start Padding Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . navigation Bars Padding Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . lazy . Lazy List State Ċ import Ġandroidx . compose . material . Bottom Navigation Ċ import Ġandroidx . compose . material . Bottom Navigation Item Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Sca ffold Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . icons . Icons . Filled Ċ import Ġandroidx . compose . material . icons . Icons . Outlined Ċ import Ġandroidx . compose . material . icons . filled . Settings Ċ import Ġandroidx . compose . material . icons . filled . Trend ing Up Ċ import Ġandroidx . compose . material . icons . outlined . Favorite Border Ċ import Ġandroidx . compose . material . icons . outlined . Language Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Disposable Effect Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Layout Direction Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . google . ac comp an ist . swiper ef resh . Swipe Refresh Ċ import Ġcom . google . ac comp an ist . swiper ef resh . Swipe Refresh Indicator Ċ import Ġcom . google . ac comp an ist . swiper ef resh . remember Swipe Refresh State Ċ import Ġio . github . x lo pec . reader . app . AppState Ċ import Ġio . github . x lo pec . reader . app . MessageHandler Ċ import Ġio . github . x lo pec . reader . app . feature . article . list . Articles State Ċ import Ġio . github . x lo pec . reader . app . feature . article . list . Refresh Articles Ċ import Ġio . github . x lo pec . reader . app . feature . article . list . Scroll State Ċ import Ġio . github . x lo pec . reader . app . feature . article . list . Sync Scroll Position Ċ import Ġio . github . x lo pec . reader . app . feature . navigation . Navigate To Favorite Ċ import Ġio . github . x lo pec . reader . app . feature . navigation . Navigate To Feed Ċ import Ġio . github . x lo pec . reader . app . feature . navigation . Navigate To Settings Ċ import Ġio . github . x lo pec . reader . app . feature . navigation . Navigate To Trend ing Ċ import Ġio . github . x lo pec . reader . app . feature . navigation . Navigation Ċ import Ġio . github . x lo pec . reader . app . misc . is Exception Ċ import Ġio . github . x lo pec . reader . app . misc . is Idle Ċ import Ġio . github . x lo pec . reader . app . misc . is Refresh ing Ċ import Ġio . github . x lo pec . reader . app . model . Filter Ċ import Ġio . github . x lo pec . reader . app . ui . misc . Inset Aware Top AppBar Ċ import Ġio . github . x lo pec . reader . app . ui . screens . article . Articles Screen Ċ import Ġio . github . x lo pec . reader . app . ui . screens . home . Bottom MenuItem . Favorite Ċ import Ġio . github . x lo pec . reader . app . ui . screens . home . Bottom MenuItem . Feed Ċ import Ġio . github . x lo pec . reader . app . ui . screens . home . Bottom MenuItem . Settings Ċ import Ġio . github . x lo pec . reader . app . ui . screens . home . Bottom MenuItem . Trend ing Ċ import Ġio . github . x lo pec . reader . app . ui . screens . settings . Settings Screen Ċ import Ġio . github . x lo pec . reader . app . model . Filter Type . Favorite Ġas ĠF avorite Query Ċ import Ġio . github . x lo pec . reader . app . model . Filter Type . Regular Ġas ĠRegular Query Ċ import Ġio . github . x lo pec . reader . app . model . Filter Type . Trend ing Ġas ĠT rend ing Query Ċ Ċ enum Ġclass ĠBottom MenuItem Ġ{ ĊĠĠĠ ĠFeed , ĊĠĠĠ ĠF avorite , ĊĠĠĠ ĠT rend ing , ĊĠĠĠ ĠSettings Ċ } Ċ Ċ @ Composable Ċ fun ĠHome Screen ( ĊĠĠĠ Ġstate : ĠArticles State , ĊĠĠĠ Ġon Message : ĠMessage Handler , ĊĠĠĠ Ġcontent : Ġ(@ Composable Ġ( inner Padding : ĠPadding Values ) Ġ-> ĠUnit )? , Ċ ) Ġ{ ĊĠĠĠ ĠSw ipe Refresh ( ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Swipe Refresh State ( state . load able . is Refresh ing ), ĊĠĠĠĠĠĠĠ Ġswipe Enabled Ġ= Ġstate . is Refresh able , ĊĠĠĠĠĠĠĠ Ġindicator Ġ= Ġ{ Ġindicator State , Ġdp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSw ipe Refresh Indicator ( refresh Trigger Distance Ġ= Ġdp , Ġstate Ġ= Ġindicator State , Ġrefresh ing Offset Ġ= Ġ 4 0 . dp ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Refresh Ġ= Ġ{ Ġon Message ( Refresh Articles ( state . id )) Ġ}, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscroll Trigger Ġ= Ġremember ( state . id ) Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlist State Ġ= Ġremember ( state . id ) Ġ{ Ġstate . scroll State . to Lazy List State () Ġ} ĊĊĠĠĠĠĠĠĠ ĠDis posable Effect ( state . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dispose Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Message ( Sync Scroll Position ( state . id , Ġlist State . to Scroll State ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Bar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . navigation Bars Padding (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġstate . filter . to MenuItem (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Ġ= Ġ{ Ġre selected , Ġnav Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Message ( nav ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re selected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Trigger . value ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Trigger . value Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLa unched Effect ( scroll Trigger . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist State . animate Scroll To Item ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġcontent Ġ= Ġ{ Ġinner Padding Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticles Screen ( state , Ġlist State , ĠModifier . padding ( inner Padding ), Ġon Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent ( inner Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠHome Screen ( ĊĠĠĠ Ġstate : ĠApp State , ĊĠĠĠ Ġon Message : ĠMessage Handler , Ċ ) Ġ{ ĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize (), ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn set Aware Top AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠMaterial Theme . colors . surface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Settings ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġbottom Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Bar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . navigation Bars Padding (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= ĠSettings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Ġ= Ġ{ Ġ_, Ġnav Ġ-> Ġon Message ( nav ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, Ġcontent Ġ= Ġ{ Ġinner Padding Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Padding Ġ= Ġinner Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Ġ= Ġstate . settings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Message Ġ= Ġon Message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) Ċ } Ċ Ċ @ Composable Ċ operator Ġfun ĠPadding Values . plus ( other : ĠPadding Values ) Ġ= ĊĠĠĠ ĠPadding Values ( ĊĠĠĠĠĠĠĠ Ġstart Ġ= Ġother . calculate Start Padding ( Local Layout Direction . current ), ĊĠĠĠĠĠĠĠ Ġtop Ġ= Ġother . calculate Top Padding (), ĊĠĠĠĠĠĠĠ Ġend Ġ= Ġother . calculate End Padding ( Local Layout Direction . current ), ĊĠĠĠĠĠĠĠ Ġbottom Ġ= Ġother . calculate Bottom Padding () ĊĠĠĠ Ġ) Ċ Ċ @ Composable Ċ fun ĠBottom Bar ( ĊĠĠĠ Ġmodifier : ĠModifier , ĊĠĠĠ Ġitem : ĠBottom MenuItem , ĊĠĠĠ Ġhandler : Ġ( re selected : ĠBoolean , Ġnavigation : ĠNavigation ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠBottom Navigation ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠMaterial Theme . colors . surface ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠBottom Navigation Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= ĠOut lined . Language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Feed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġitem Ġ=== ĠFeed , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġhandler ( item Ġ=== ĠFeed , ĠNavigate To Feed ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠBottom Navigation Item ( icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= ĠOut lined . Favorite Border , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Favorite " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġitem Ġ=== ĠF avorite , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġhandler ( item Ġ=== ĠF avorite , ĠNavigate To Favorite ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠBottom Navigation Item ( icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= ĠF illed . Trend ing Up , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Trend ing " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġitem Ġ=== ĠT rend ing , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġhandler ( item Ġ=== ĠT rend ing , ĠNavigate To Trend ing ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠBottom Navigation Item ( icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= ĠF illed . Settings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Settings " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġitem Ġ=== ĠSettings , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġhandler ( item Ġ=== ĠSettings , ĠNavigate To Settings ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠLazy List State . to Scroll State () Ġ= ĊĠĠĠ ĠScroll State ( first Visible Item Index , Ġfirst Visible Item Scroll Offset ) Ċ Ċ private Ġfun ĠScroll State . to Lazy List State () Ġ= ĊĠĠĠ ĠLazy List State ( first Visible Item Index , Ġfirst Visible Item Scroll Offset ) Ċ Ċ private Ġfun ĠFilter . to MenuItem () Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠ ĠRegular Query Ġ-> ĠFeed ĊĠĠĠ ĠF avorite Query Ġ-> ĠF avorite ĊĠĠĠ ĠT rend ing Query Ġ-> ĠT rend ing Ċ } Ċ Ċ private Ġval ĠArticles State . is Refresh able : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġload able . data . isNotEmpty () Ġ&& Ġ( load able . is Idle Ġ|| Ġload able . is Exception ) Ċ