/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠR in Or z Ġ( åĩ Ľ ) Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . Ċ Ġ* ĠGithub Ġhome Ġpage : Ġhttps :// github . com / R in Or z Ċ Ġ*/ Ċ package Ġcom . rin . compose . kit ty . ui Ċ Ċ import Ġandroidx . compose . animation . animate Color As State Ċ import Ġandroidx . compose . animation . core . animate Dp As State Ċ import Ġandroidx . compose . animation . core . animate Float As State Ċ import Ġandroidx . compose . animation . core . spring Ċ import Ġandroidx . compose . animation . core . t ween Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . alpha Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . constraint layout . compose . Constraint Layout Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . view model . compose . viewModel Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . compose . Nav Host Ċ import Ġandroidx . navigation . compose . comp osable Ċ import Ġandroidx . navigation . compose . remember Nav Controller Ċ import Ġcom . rin . compose . kit ty . data . Screen Ċ import Ġcom . rin . compose . kit ty . ui . popular . Pop ular Ċ import Ġcom . rin . compose . kit ty . ui . popular . gallery . Gallery Ċ import Ġcom . rin . compose . kit ty . util . viewModel Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġdev . chr is ban es . ac comp an ist . in sets . Provide Window Insets Ċ import Ġdev . chr is ban es . ac comp an ist . in sets . navigation Bars Height Ċ import Ġdev . chr is ban es . ac comp an ist . in sets . status Bars Height Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠKit ty ĠApp ĠçļĦ ĠUI Ġ åĶ¯ä¸Ģ åħ¥ åı£ çĤ¹ Ċ Ġ* ĠThe Ġonly ĠUI Ġentry Ġpoint Ġfor Ġthe ĠKit ty ĠApp . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ åĩ Ľ Ġ( https :// github . com / R in Or z ) Ċ Ġ*/ Ċ @ Composable Ċ fun ĠKit ty App () Ġ{ ĊĠ Ġval Ġnav Controller Ġ= Ġremember Nav Controller () ĊĠ Ġval Ġapp ViewModel Ġ= ĠviewModel < App ViewModel >(). apply Ġ{ Ġnavigator Ġ= Ġnav Controller Ġ} ĊĠ Ġval Ġsearch Bar State Ġby Ġapp ViewModel . search Bar State ĊĠ Ġval Ġsearch Text Ġby Ġapp ViewModel . search Text State ĊĊĠ ĠScaffold ( ĊĠĠĠ Ġapp ViewModel Ġ= Ġapp ViewModel , ĊĠĠĠ Ġsearch Bar Ġ= Ġ{ ĊĠĠĠĠĠ ĠBox ( content Alignment Ġ= ĠAlignment . Center End ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSearch Bar ( search Bar State , Ġsearch Text ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, ĊĠĠĠ Ġbottom Navigation Ġ= Ġ{ ĠBottom Navigation () Ġ} ĊĠ Ġ) Ġ{ ĊĠĠĠ ĠNav Host ( nav Controller , Ġstart Destination Ġ= ĠScreen . Pop ular . route ) Ġ{ ĊĠĠĠĠĠ Ġcomp osable ( Screen . Pop ular . route ) Ġ{ ĠPop ular ( viewModel Ġ= Ġit . viewModel ()) Ġ} ĊĠĠĠĠĠ Ġcomp osable ( Screen . Explore . route ) Ġ{ ĠPop ular ( viewModel Ġ= Ġit . viewModel ()) Ġ} ĊĠĠĠĠĠ Ġcomp osable ( Screen . Favorite . route ) Ġ{ ĠPop ular ( viewModel Ġ= Ġit . viewModel ()) Ġ} ĊĠĠĠĠĠ Ġcomp osable ( Screen . Profile . route ) Ġ{ ĠPop ular ( viewModel Ġ= Ġit . viewModel ()) Ġ} ĊĊĠĠĠĠĠ Ġcomp osable ( Screen . Pop ular . Gallery . route ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGallery ( ĊĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġit . arguments ?. getString (" country ") Ġ?: Ġerror (" Navigation Ġmust Ġhave Ġparameters ! "), ĊĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġit . viewModel () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠScaffold ( ĊĠ Ġapp ViewModel : ĠApp ViewModel , ĊĠ Ġsearch Bar : Ġ@ Composable ĠApp ViewModel . () Ġ-> ĠUnit , ĊĠ Ġbottom Navigation : Ġ@ Composable ĠApp ViewModel . () Ġ-> ĠUnit , ĊĠ Ġcontent : Ġ@ Composable ĠApp ViewModel . () Ġ-> ĠUnit Ċ ) Ġ= Ġwith ( app ViewModel ) Ġ{ ĊĠ Ġ// Ġ åĪ·æĸ° èĥĮæĻ¯ ĊĠ Ġval Ġbackground Ġby Ġbackground State ĊĠ Ġval Ġfa ded Background Ġby Ġfa ded Background State ĊĊĠ Ġbackground ?. let Ġ{ Ġ( modifier , Ġcontent ) Ġ-> ĊĠĠĠ ĠBox ( modifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠ Ġcontent () ĊĠĠĠĠĠ Ġ// Ġ å¢ŀåĬł ä¸Ģä¸ª éģ ® ç½ © å±Ĥ ï¼Į ä»¥ ä½¿ è§Ĩé¢ĳ åıĺ æļ Ĺ ĊĠĠĠĠĠ Ġif Ġ(! fa ded Background ) ĠSp acer ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠ Ġ. background ( Color . Black . copy ( alpha Ġ= Ġ 0 . 8 f )) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval ĠbackgroundColor Ġby Ġanimate Color As State ( ĊĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġif Ġ( fa ded Background ) ĠMaterial Theme . colors . background Ġelse ĠColor . Transparent , ĊĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġt ween ( 1 0 0 0 ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠSp acer ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠ Ġ. background ( backgroundColor ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ ĠProvide Window Insets Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠ Ġ. padding ( 2 4 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ ĠSp acer ( Modifier . status Bars Height ()) ĊĊĠĠĠĠĠ ĠConstraint Layout Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( title Ref , Ġsearch Bar Ref ) Ġ= Ġcreate Refs () ĊĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġby Ġtitle State ĊĠĠĠĠĠĠĠ Ġval Ġhide Title Ġby Ġhide Title State ĊĠĠĠĠĠĠĠ Ġtitle ?. let Ġ{ Ġ( modifier , Ġwidget ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġanim Offset Ġby Ġanimate Dp As State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġif Ġ( hide Title ) Ġ(- 1 0 0 ). dp Ġelse Ġ 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġspring ( 3 f ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġanim Alpha Ġby Ġanimate Float As State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġif Ġ( hide Title ) Ġ 0 f Ġelse Ġ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġspring ( 3 f ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. constr ain As ( title Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop . link To ( search Bar Ref . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom . link To ( search Bar Ref . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( y Ġ= Ġanim Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( anim Alpha ) ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġwidget () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . constr ain As ( search Bar Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend . link To ( parent . end ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop . link To ( parent . top ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġsearch Bar () Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 6 . dp , Ġvertical Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠ Ġ) Ġ{ Ġcontent () Ġ} ĊĊĠĠĠĠĠ Ġbottom Navigation () ĊĠĠĠĠĠ ĠSp acer ( Modifier . navigation Bars Height ()) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ çĶ¨äºİ ç®¡çĲĨ ĠKit ty ĠApp ĠçļĦ ĠUI Ġ ä¹ĭéĹ´ åħ±äº« çļĦæķ°æį® Ċ Ġ* ĠManage ĠUI Ġdata Ġshared Ġbetween ĠKit ty ĠApp ĠUI . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ åĩ Ľ Ġ( https :// github . com / R in Or z ) Ċ Ġ*/ Ċ @ H ilt ViewModel Ċ class ĠApp ViewModel Ġ@ Inject Ġconstructor () Ġ: ĠViewModel () Ġ{ ĊĠ Ġprivate Ġval Ġ_ background Ġ= ĠMutable LiveData < Pair < Modifier , Ġ@ Composable ĠBox Scope . () Ġ-> ĠUnit >>() ĊĠ Ġprivate Ġval Ġ_ title Ġ= ĠMutable LiveData < Pair < Modifier , Ġ@ Composable ĠBox Scope . () Ġ-> ĠUnit >>() ĊĠ Ġprivate Ġval Ġ_ hide Title Ġ= ĠMutable LiveData < Boolean >() ĊĠ Ġprivate Ġval Ġ_ fa ded Background Ġ= ĠMutable LiveData < Boolean >() ĊĠ Ġprivate Ġval Ġ_ search Text Ġ= ĠMutable LiveData < String >() ĊĠ Ġprivate Ġval Ġ_ search Bar Mode Ġ= ĠMutable LiveData < Search Bar Mode >() ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠApp Ġä¸Ĭ ä¸ĭ æĸĩ çļĦ å¯¼èĪª æİ§åĪ¶åĻ¨ ĊĠĠ Ġ* ĠNavigation Ġcontroller Ġfor Ġapp Ġcontext . ĊĠĠ Ġ*/ ĊĠ Ġlateinit Ġvar Ġnavigator : ĠNav Controller ĊĊĠ Ġval Ġtitle State Ġ@ Composable Ġget () Ġ= Ġ_ title . observe As State () ĊĠ Ġval Ġhide Title State Ġ@ Composable Ġget () Ġ= Ġ_ hide Title . observe As State ( false ) ĊĠ Ġval Ġbackground State Ġ@ Composable Ġget () Ġ= Ġ_ background . observe As State () ĊĠ Ġval Ġfa ded Background State Ġ@ Composable Ġget () Ġ= Ġ_ fa ded Background . observe As State ( false ) ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġæ Ĳ ľç´¢ æłı çļĦ æĺ¾ç¤º æ¨¡å¼ı ĊĠĠ Ġ* ĠDisplay Ġmode Ġof Ġthe Ġ[ Search Bar ]. ĊĠĠ Ġ*/ ĊĠ Ġvar Ġsearch Bar Mode ĊĠĠĠ Ġget () Ġ= Ġ_ search Bar Mode . value ĊĠĠĠ Ġset ( value ) Ġ= Ġ_ search Bar Mode . setValue ( value ) ĊĊĠ Ġval Ġsearch Bar State ĊĠĠĠ Ġ@ Composable Ġget () Ġ= Ġ_ search Bar Mode . observe As State ( Search Bar Mode . Default ) ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġæ Ĳ ľç´¢ æłı æĺ¾ç¤º çļĦ æĸĩæľ¬ ĊĠĠ Ġ* ĠThe Ġtext Ġshow Ġto Ġ[ Search Bar ]. ĊĠĠ Ġ*/ ĊĠ Ġvar Ġsearch Text ĊĠĠĠ Ġget () Ġ= Ġ_ search Text . value ĊĠĠĠ Ġset ( value ) Ġ= Ġ_ search Text . setValue ( value ) ĊĊĠ Ġval Ġsearch Text State ĊĠĠĠ Ġ@ Composable Ġget () Ġ= Ġ_ search Text . observe As State () ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ å£°æĺİ ĠKit ty ĠUI Ġ èĦļ æīĭ æŀ¶ çļĦ æłĩé¢ĺ ĊĠĠ Ġ* ĠDeclare Ġthe Ġscaffold Ġtitle . ĊĠĠ Ġ*/ ĊĠ Ġ@ Composable ĊĠ Ġfun ĠTitle ( modifier : ĠModifier Ġ= ĠModifier , Ġcontent : Ġ@ Composable ĠBox Scope . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġ_ title . value Ġ= Ġmodifier Ġto Ġcontent ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ å£°æĺİ ĠKit ty ĠUI Ġ èĦļ æīĭ æŀ¶ çļĦ èĥĮæĻ¯ ĊĠĠ Ġ* ĠDeclare Ġthe Ġscaffold Ġbackground . ĊĠĠ Ġ*/ ĊĠ Ġ@ Composable ĊĠ Ġfun ĠBackground ( modifier : ĠModifier Ġ= ĠModifier , Ġcontent : Ġ@ Composable ĠBox Scope . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġ_ background . value Ġ= Ġmodifier Ġto Ġcontent ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġæ Ĵ Ń æĶ¾ ä¸Ģä¸ª èĥĮæĻ¯ æ¶Ī å¤± çļĦ åĬ¨çĶ» ĊĠĠ Ġ* ĠPlay Ġa Ġbackground Ġfade Ġout Ġeffect . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġfade Out Background () Ġ{ ĊĠĠĠ Ġ_ fa ded Background . value Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġæ Ĵ Ń æĶ¾ ä¸Ģä¸ª æłĩé¢ĺ éļĲèĹı çļĦ åĬ¨çĶ» ĊĠĠ Ġ* ĠPlay Ġa Ġbackground Ġhide Ġeffect . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġhide Title () Ġ{ ĊĠĠĠ Ġ_ hide Title . value Ġ= Ġtrue ĊĠ Ġ} Ċ } Ċ