package Ġcom . example . the cock tail db . ui Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . the cock tail db . R Ċ import Ġcom . example . the cock tail db . adapter . Ingredient Adapter Ċ import Ġcom . example . the cock tail db . databinding . Dr ink Fragment Binding Ċ import Ġcom . example . the cock tail db . model . Ingredient Ċ import Ġcom . example . the cock tail db . model . dr ink . Dr ink Ċ import Ġcom . example . the cock tail db . ui . util . ViewModel Abstract Fragment Ċ import Ġcom . example . the cock tail db . view model . ViewModel Ċ import Ġcom . squareup . pic asso . Pic asso Ċ Ċ class ĠD rink Fragment Ġ: ĠViewModel Abstract Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdefault Dr ink Id Ġ= Ġ- 1 L ĊĠĠĠ Ġprivate Ġvar Ġdrink Id : ĠLong Ġ= Ġdefault Dr ink Id ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Binding : ĠD rink Fragment Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠIng redient Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrink : ĠD rink ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsetup D atab ind ing ( in flater , Ġcontainer ) ĊĠĠĠĠĠĠĠ Ġm Binding . cock tail Image . clip To Outline Ġ= Ġtrue Ġ// Ġwill Ġbe Ġchanged ĊĠĠĠĠĠĠĠ Ġget Dr ink Id () ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ Ġreturn Ġget Root View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup D atab ind ing ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . dr ink _ fragment , container , false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Root View (): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Dr ink Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrink Id Ġ= Ġ ĠD rink Fragment Args . from Bundle ( require Arguments ()). dr ink Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView (){ ĊĠĠĠĠĠĠĠ Ġsetup LayoutManager () ĊĠĠĠĠĠĠĠ Ġsetup Adapter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup LayoutManager (){ ĊĠĠĠĠĠĠĠ Ġget RecyclerView (). layout Manager Ġ= Ġcreate Grid LayoutManager () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Grid LayoutManager (): ĠGrid LayoutManager ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠGrid LayoutManager ( context , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġmanager . orientation Ġ= ĠRecyclerView . VERTICAL ĊĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Adapter (){ ĊĠĠĠĠĠĠĠ Ġcreate Adapter () ĊĠĠĠĠĠĠĠ Ġset Adapter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Adapter (){ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠIng redient Adapter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Adapter (){ ĊĠĠĠĠĠĠĠ Ġget RecyclerView (). adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget RecyclerView (): ĠRecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Binding . ingredient RecyclerView ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewModel (){ ĊĠĠĠĠĠĠĠ Ġget ViewModel () ĊĠĠĠĠĠĠĠ Ġobserve Dr ink () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Dr ink (){ ĊĠĠĠĠĠĠĠ ĠviewModel . get Dr ink ( dr ink Id ). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġdrink Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Dr inks And UI ( dr ink ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dr ink Ġ= Ġdrink ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Dr inks And UI ( dr ink : ĠD rink ){ ĊĠĠĠĠĠĠĠ Ġsetup Dr inks In Adapter ( dr ink . get Ing redients ()) ĊĠĠĠĠĠĠĠ Ġsetup UI ( dr ink ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup UI ( dr ink : ĠD rink ){ ĊĠĠĠĠĠĠĠ Ġset Dr ink Name ( dr ink . name ) ĊĠĠĠĠĠĠĠ Ġset Dr ink Image ( dr ink . image ) ĊĠĠĠĠĠĠĠ Ġset Dr ink Type And G lass ( dr ink . category , Ġdrink . glass ) ĊĠĠĠĠĠĠĠ Ġset Dr ink Instructions ( dr ink . instruction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Dr ink Name ( name : ĠString ? ){ ĊĠĠĠĠĠĠĠ Ġname ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . cock tail Title . text Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Dr ink Image ( image : ĠString ? ){ ĊĠĠĠĠĠĠĠ Ġimage ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . get (). load ( image ). into ( m Binding . cock tail Image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Dr ink Type And G lass ( category : ĠString ?, Ġg lass : ĠString ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcategory ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg lass ?. let Ġ{ Ġit 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype And G lass Ġ= Ġ"$ it 1 Ġ- Ġ$ it " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . type And G lass . text Ġ= Ġtype And G lass ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Dr ink Instructions ( instructions : ĠString ? ){ ĊĠĠĠĠĠĠĠ Ġinstructions ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . instructions . text Ġ= Ġinstructions ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Dr inks In Adapter ( ingredient List : ĠList < Ingredient > ){ ĊĠĠĠĠĠĠĠ Ġadapter . set Ing redients ( ingredient List ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif ( is Dr ink Id Default ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . random _ and _ share _ menu , Ġmenu ); ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . share _ menu , Ġmenu ); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Dr ink Id Default (): ĠBoolean { ĊĠĠĠĠĠĠĠ Ġreturn Ġdrink Id Ġ== Ġdefault Dr ink Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( item . itemId ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ random Ġ-> ĠgetRandom C ock tail () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ share Ġ-> Ġshare C ock tail () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetRandom C ock tail (): ĠBoolean { ĊĠĠĠĠĠĠĠ ĠviewModel . update Random Dr ink () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshare C ock tail (){ ĊĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent . create Chooser ( create Intent (), Ġnull ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( share Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Intent (): ĠIntent { ĊĊĠĠĠĠĠĠĠ Ġreturn ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ TEXT , Ġdrink ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdrink ToString (): ĠString { ĊĠĠĠĠĠĠĠ Ġreturn Ġdrink . name Ġ+ Ġ"\ n \ n " Ġ+ Ġ Ġdrink . instruction Ġ+ Ġ"\ n \ n " Ġ+ Ġget Ing redients String () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Ing redients String (): ĠString { ĊĠĠĠĠĠĠĠ Ġvar Ġingredients String Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġfor ( ingredient : ĠIng redient Ġin Ġdrink . get Ing redients ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients String Ġ+= Ġingredient . name Ġ+ Ġ" Ġ- Ġ" Ġ+ Ġingredient . measure Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġingredients String ĊĠĠĠ Ġ} Ċ }