/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠV ital iy ĠZ ar ub in Ċ Ġ* Ċ Ġ* Ġ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 . key gen qt . stack _ 2 0 2 1 . ui . home Ċ Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . compose . animation . Cross fade Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . List Ċ import Ġandroidx . compose . material . icons . filled . People Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . vector . Image Vector Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġandroidx . paging . Experimental Paging Api Ċ import Ġandroidx . paging . compose . Lazy Paging Items Ċ import Ġandroidx . paging . compose . collect As Lazy Paging Items Ċ import Ġcom . google . ac comp an ist . in sets . navigation Bars Height Ċ import Ġcom . google . ac comp an ist . in sets . navigation Bars Padding Ċ import Ġcom . key gen qt . stack _ 2 0 2 1 . R Ċ import Ġcom . key gen qt . stack _ 2 0 2 1 . base . Local Base ViewModel Ċ import Ġcom . key gen qt . stack _ 2 0 2 1 . models . Model Follower Ċ import Ġcom . key gen qt . stack _ 2 0 2 1 . models . Model Repo Ċ import Ġcom . key gen qt . stack _ 2 0 2 1 . ui . theme . Pur ple 7 0 0 Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ Ċ @ Experimental Cor outines Api Ċ @ Experimental Paging Api Ċ @ Composable Ċ fun ĠTabs Home ( ĊĠĠĠ ĠviewModel : ĠViewModel Home , ĊĠĠĠ Ġnavigate To Details Repo : Ġ( Long ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġtabs Ġ= ĠHome Tab . values () ĊĠĠĠ Ġval Ġtab Id : ĠInt Ġby ĠviewModel . selected Tab . collect As State ( initial Ġ= Ġ 0 ) ĊĠĠĠ Ġval Ġlazy Repos : ĠLazy Paging Items < Model Repo > Ġ= ĠviewModel . repos . collect As Lazy Paging Items () ĊĠĠĠ Ġval Ġlazy Follow ers : ĠLazy Paging Items < Model Follower > Ġ= ĠviewModel . followers . collect As Lazy Paging Items () ĊĠĠĠ Ġval Ġshow Sn ackBar : ĠBoolean Ġby ĠLocal Base ViewModel . current . is Show Sn ackBar . collect As State () ĊĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCross fade ( Home Tab . get Tab From Resource ( tab Id )) Ġ{ Ġdestination Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( destination ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Tab . RE POS Ġ-> ĠPost er AppBar ( string Resource ( id Ġ= ĠR . string . title _ repos )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Tab . FOLLOW ERS Ġ-> ĠPost er AppBar ( string Resource ( id Ġ= ĠR . string . title _ followers )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġbottom Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( vertical Alignment Ġ= ĠAlignment . Center Vert ically ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Sn ackBar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Navigation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠPur ple 7 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . navigation Bars Height ( 5 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtabs . forEach Ġ{ Ġtab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Navigation Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ{ ĠIcon ( image Vector Ġ= Ġtab . icon , Ġcontent Description Ġ= Ġnull ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġtab Ġ== ĠHome Tab . get Tab From Resource ( tab Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĠviewModel . select Tab ( tab . title ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Content Color Ġ= ĠColor . White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun selected Content Color Ġ= ĠColor . White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . navigation Bars Padding () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ Ġinner Padding Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġmodifier Ġ= ĠModifier . padding ( inner Padding ) ĊĠĠĠĠĠĠĠ ĠCross fade ( Home Tab . get Tab From Resource ( tab Id )) Ġ{ Ġdestination Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( destination ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Tab . RE POS Ġ-> ĠRe pos List ( modifier , Ġlazy Repos , Ġnavigate To Details Repo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Tab . FOLLOW ERS Ġ-> ĠList Follow ers ( modifier , Ġlazy Follow ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠSn ackbar Info ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar ( modifier Ġ= Ġmodifier . padding ( 8 . dp )) Ġ{ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . exit _ info )) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠPost er AppBar ( title : ĠString ) Ġ{ ĊĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 6 . dp , ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠPur ple 7 0 0 , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . height ( 5 8 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center Vert ically ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 8 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠHome Tab ( ĊĠĠĠ Ġ@ String Res Ġval Ġtitle : ĠInt , ĊĠĠĠ Ġval Ġicon : ĠImage Vector Ċ ) Ġ{ ĊĊĠĠĠ ĠRE POS ( R . string . menu _ repos , ĠIcons . Filled . List ), ĊĠĠĠ ĠFOL LOW ERS ( R . string . menu _ followers , ĠIcons . Filled . People ); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Tab From Resource (@ String Res Ġresource : ĠInt ): ĠHome Tab Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( resource ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ repos Ġ-> ĠRE POS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ followers Ġ-> ĠFOL LOW ERS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠRE POS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ