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 . Image Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . foundation . shape . Circle Shape Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . foundation . vertical Scroll Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime .* Ċ 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 . graphics . p ainter . Painter Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġcom . example . android dev challenge . model . Dog Ċ Ċ /** Ċ Ġ* Ġ@ author : Ġx uz hi y ong Ċ Ġ* Ġ@ date : Ġ 2 0 2 1 / 3 / 3 Ġ Ġä¸Ĭ åįĪ 1 0 : 0 4 Ċ Ġ* Ġ@ Email : Ġ 1 8 9 7 1 2 6 9 6 4 8 @ 1 6 3 . com Ċ Ġ* Ġ@ description : Ċ Ġ*/ Ċ Ċ const Ġval ĠA DO PT ED Ġ= Ġ" ad opt ed " Ċ class ĠDog Detail Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġselected Dog Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġintent . get Parcelable Extra < Dog >( SELECT _ DOG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġselected Position Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġintent . getInt Extra ( SELECT _ POS , 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠ Ġif ( selected Dog Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġselected Dog !!. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . Transparent , Ġelevation Ġ= Ġ 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ ĠBack () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġback Icon : ĠP ainter Ġ= Ġpainter Resource ( R . drawable . ic _ back ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( p ainter Ġ= Ġback Icon , Ġcontent Description Ġ= Ġ" ic _ back ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShow Dog Detail ( dog Ġ= Ġselected Dog !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ ĠBack () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠBack (){ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (). putExtra ( SELECT _ POS , selected Position ). putExtra ( AD OPT ED , selected Dog ?. ad opt ed ) ĊĠĠĠĠĠĠĠ Ġset Result ( RESULT _ OK , intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĊĊĊ Ċ } Ċ Ċ var Ġshow Confirm Dialog Ġby Ġmutable State Of ( false ) Ċ Ċ @ Composable Ċ fun ĠShow Dog Detail ( dog : ĠDog ) Ġ{ ĊĠĠĠ Ġval Ġstate Dog Ġby Ġremember Ġ{ Ġmutable State Of ( dog ) Ġ} ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertical Scroll ( remember Scroll State ()) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDog Avatar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Ġ= Ġstate Dog . avatar Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġstate Dog . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Height ( 2 6 . dp ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠA dopt Button ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadopt ed Ġ= Ġstate Dog . ad opt ed ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Height ( 2 6 . dp ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDog Introduction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintroduction Ġ= Ġstate Dog . desc ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( show Confirm Dialog ) Ġ{ ĊĠĠĠĠĠĠĠ ĠA dopt Confirm Dialog ( dog Ġ= Ġstate Dog ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠDog Avatar ( avatar : ĠString , Ġname : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġimage Identity Ġ= ĠSimple App . context . resources . getIdentifier ( ĊĠĠĠĠĠĠĠ Ġavatar , Ġ" drawable ", ĊĠĠĠĠĠĠĠ ĠSimple App . context . packageName ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġimage : ĠP ainter Ġ= Ġpainter Resource ( image Identity ) ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġimage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( shape Ġ= ĠRo unded Corner Shape ( 4 . dp )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Scale Ġ= ĠContent Scale . Crop ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠDog Introduction ( introduction : ĠString ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġintroduction , ĊĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 8 . sp , ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 1 ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ fun ĠA dopt Button ( ad opt ed : ĠBoolean ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġshow Confirm Dialog Ġ= Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġ! ad opt ed ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġif Ġ( ad opt ed ) Ġ" A dopt ed " Ġelse Ġ" A dopt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠA dopt Confirm Dialog ( dog : ĠDog ) Ġ{ ĊĠĠĠ ĠAlertDialog ( ĊĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Confirm Dialog Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Do Ġyou Ġwant Ġto Ġadopt Ġthis Ġlo vel y Ġdog ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġconfirm Button Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Confirm Dialog Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdog . ad opt ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Yes " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdismiss Button Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Confirm Dialog Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" No " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ }