/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ package Ġcom . example . android dev challenge Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . compose . setContent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy List State Ċ import Ġandroidx . compose . foundation . shape . Circle Shape Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Favorite Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Composition Local Provider Ċ import Ġandroidx . compose . runtime . remember Coroutine Scope Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . example . android dev challenge . ui . theme . My Theme Ċ import Ġdev . chr is ban es . ac comp an ist . co il . Co il Image Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġval Ġdo gs : ĠList < Dog > Ġ= ĠList ( 1 0 0 ) Ġ{ ĠDog () Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠInfo Activity :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout s Code Lab ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo gs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġdog : ĠDog , Ġi : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" id ", Ġdog . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" url ", Ġdog . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" year ", Ġdog . year ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" name ", Ġdog . name Ġ+ Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠStart Ġbuilding Ġyour Ġapp Ġhere ! Ċ @ Composable Ċ fun ĠMy App () Ġ{ ĊĠĠĠ ĠSurface ( color Ġ= ĠMaterial Theme . colors . background ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNews Story () Ċ // ĠĠĠĠĠĠĠ ĠPhoto grapher Card () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠNews Story () Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġandroidx . compose . ui . Modifier . padding ( 1 6 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText (" A Ġday Ġin ĠSh ark ĠFin ĠC ove ") ĊĠĠĠĠĠĠĠ ĠText (" D aven port , ĠCalifornia ") ĊĠĠĠĠĠĠĠ ĠText (" De cember Ġ 2 0 1 8 ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġ@ Preview Ċ @ Composable Ċ fun ĠDefault Preview () Ġ{ ĊĠĠĠ ĠNews Story () Ċ } Ċ Ċ // Ġ@ Preview (" Light ĠTheme ", Ġwidth Dp Ġ= Ġ 3 6 0 , Ġheight Dp Ġ= Ġ 6 4 0 ) Ċ @ Composable Ċ fun ĠLight Preview () Ġ{ ĊĠĠĠ ĠMy Theme Ġ{ ĊĠĠĠĠĠĠĠ ĠMy App () ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġ@ Preview (" Dark ĠTheme ", Ġwidth Dp Ġ= Ġ 3 6 0 , Ġheight Dp Ġ= Ġ 6 4 0 ) Ċ @ Composable Ċ fun ĠDark Preview () Ġ{ ĊĠĠĠ ĠMy Theme ( dark Theme Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMy App () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠLayout s Code Lab ( dog s : ĠList < Dog >, ĠonClick : Ġ( dog : ĠDog , Ġi : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Compose _ week 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( Icons . Filled . Favorite , Ġcontent Description Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ Ġinner Padding Ġ-> ĊĠĠĠĠĠĠĠ ĠBody Content ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( inner Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo gs , ĠonClick ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠBody Content ( modifier : ĠModifier Ġ= ĠModifier , Ġdo gs : ĠList < Dog >, ĠonClick : Ġ( dog : ĠDog , Ġi : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠScroll ing List ( modifier , Ġdo gs , ĠonClick ) Ċ } Ċ Ċ @ Composable Ċ fun ĠLazy List () Ġ{ ĊĠĠĠ Ġ// ĠWe Ġsave Ġthe Ġscrolling Ġposition Ġwith Ġthis Ġstate Ġthat Ġcan Ġalso ĊĠĠĠ Ġ// Ġbe Ġused Ġto Ġprogram matically Ġscroll Ġthe Ġlist ĊĠĠĠ Ġval Ġscroll State Ġ= Ġremember Lazy List State () ĊĊĠĠĠ ĠLazy Column ( state Ġ= Ġscroll State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Item Ġ#$ it ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠPhoto grapher Card ( modifier : ĠModifier Ġ= ĠModifier , Ġdog : ĠDog , Ġi : ĠInt , ĠonClick : Ġ( dog : ĠDog , Ġi : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Rounded Corner Shape ( 4 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Material Theme . colors . surface ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( dog , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( 5 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= ĠCircle Shape , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . on Surface . copy ( alpha Ġ= Ġ 0 . 2 f ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠImage Ġgoes Ġhere Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ launcher _ background ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( p ainter Ġ= Ġpainter , Ġcontent Description Ġ= Ġ" hello ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCo il Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdog . url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Android ĠLogo ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( 5 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center Vert ically ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( dog . name Ġ+ Ġi , ĠfontWeight Ġ= ĠFontWeight . Bold ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp osition Local Provider ( Local Content Alpha Ġprovides ĠContent Alpha . medium ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" 3 Ġminutes Ġago ", Ġstyle Ġ= ĠMaterial Theme . typography . body 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠImage ListItem ( dog : ĠDog , Ġi : ĠInt ) Ġ{ Ċ // ĠĠĠ ĠRow ( vertical Alignment Ġ= ĠAlignment . Center Vert ically ) Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠCo il Image ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġ" https :// g img 2 . baidu . com / image _ search / src = http % 3 A % 2 F % 2 F pic 1 . win 4 0 0 0 . com % 2 F wall paper % 2 Fc % 2 F 5 2 8 ed 1 6 c 3 fc 8 2 . jpg & refer = http % 3 A % 2 F % 2 F pic 1 . win 4 0 0 0 . com & app = 2 0 0 2 & size = f 9 9 9 9 , 1 0 0 0 0 & q = a 8 0 & n = 0 & g = 0 n & fmt = jpeg ? sec = 1 6 1 7 0 9 5 9 1 6 & t = af 1 7 0 cb 5 3 4 9 dce 1 c 0 7 6 c 9 6 ce eb 7 5 6 3 4 1 ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Android ĠLogo ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( 5 0 . dp ) Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ ĠSp acer ( Modifier . width ( 1 0 . dp )) Ċ // ĠĠĠĠĠĠĠ ĠText (" Item Ġ#$ index ", Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 1 ) Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ ĠPhoto grapher Card ( dog Ġ= Ġdog , Ġi Ġ= Ġi ) Ċ } Ċ Ċ @ Composable Ċ fun ĠScroll ing List ( modifier : ĠModifier , Ġdo gs : ĠList < Dog >, ĠonClick : Ġ( dog : ĠDog , Ġi : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġlist Size Ġ= Ġ 1 0 0 ĊĠĠĠ Ġ// ĠWe Ġsave Ġthe Ġscrolling Ġposition Ġwith Ġthis Ġstate ĊĠĠĠ Ġval Ġscroll State Ġ= Ġremember Lazy List State () ĊĠĠĠ Ġ// ĠWe Ġsave Ġthe Ġcoroutine Ġscope Ġwhere Ġour Ġanimated Ġscroll Ġwill Ġbe Ġexecuted ĊĠĠĠ Ġval Ġcoroutine Scope Ġ= Ġremember Coroutine Scope () ĊĊĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠ ĠLazy Column ( state Ġ= Ġscroll State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( list Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto grapher Card ( dog Ġ= Ġdo gs [ it ], Ġi Ġ= Ġit , ĠonClick Ġ= ĠonClick ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider ( color Ġ= ĠColor . Black ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠRow () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 0 Ġis Ġthe Ġfirst Ġitem Ġindex Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State . animate Scroll To Item ( 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" æ»ĳ åĬ¨ åĪ° é¡¶ éĥ¨ ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlist Size Ġ- Ġ 1 Ġis Ġthe Ġlast Ġindex Ġof Ġthe Ġlist Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State . animate Scroll To Item ( list Size Ġ- Ġ 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" æ»ĳ åĬ¨ åĪ° åºķ éĥ¨ ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ