package Ġcom . m uri lo dev . dog s . view Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . tele phony . Sms Manager Ċ import Ġandroid . view .* Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . palette . graphics . Palette Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . target . Custom Target Ċ import Ġcom . bump tech . glide . request . transition . Transition Ċ import Ġcom . m uri lo dev . dog s . R Ċ import Ġcom . m uri lo dev . dog s . databinding . Fragment Detail Binding Ċ import Ġcom . m uri lo dev . dog s . databinding . Send Sms Dialog Binding Ċ import Ġcom . m uri lo dev . dog s . model . Dog B reed Ċ import Ġcom . m uri lo dev . dog s . model . Dog Palette Ċ import Ġcom . m uri lo dev . dog s . model . Sms Info Ċ import Ġcom . m uri lo dev . dog s . util . get Progress Drawable Ċ import Ġcom . m uri lo dev . dog s . util . load Image Ċ import Ġcom . m uri lo dev . dog s . view model . Details ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ detail .* Ċ Ċ class ĠDetail Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdog Uuid Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠDetails ViewModel ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdata Binding : ĠFragment Detail Binding ĊĠĠĠ Ġprivate Ġvar Ġsend Sms Started Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcurrent Dog : ĠDog B reed ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġdata Binding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ detail , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdata Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdog Uuid Ġ= ĠDetail Fragment Args . from Bundle ( it ). dog Uuid ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this ). get ( Details ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ ĠviewModel . fetch ( dog Uuid ) ĊĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . dog LiveData . observe ( this , ĠObserver Ġ{ Ġdog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdog ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Dog Ġ= Ġdog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Binding . dog Ġ= Ġdog ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . imageUrl ?. let Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup BackgroundColor ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup BackgroundColor ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( object Ġ: ĠCustom Target < Bitmap >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠBitmap , Ġtransition : ĠTransition < in ĠBitmap > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPalette . from ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate Ġ{ Ġpalette Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġint Color Ġ= Ġpalette ?. vi br ant Sw atch ?. rgb Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Palette Ġ= ĠDog Palette ( int Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Binding . palette Ġ= Ġmy Palette ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Cle ared ( placeholder : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . detail _ menu , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ send _ sms Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Sms Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ). check Sms Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ share Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ SUBJECT , Ġ" Check Ġout Ġthis Ġdog Ġmy Ġd ude ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ TEXT , Ġ"${ current Dog ?. dog B reed } Ġb red Ġfor Ġ${ current Dog ?. b red For }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ STREAM , Ġcurrent Dog ?. imageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( intent , Ġ" Share Ġwith ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Permission Result ( permission Granted : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( send Sms Started Ġ&& Ġpermission Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsms Info Ġ= ĠS ms Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ current Dog ?. dog B reed } Ġb red Ġfor Ġ${ current Dog ?. b red For }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Dog ?. imageUrl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Binding Ġ= ĠData Binding Util . inflate < Send Sms Dialog Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( it ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . send _ sms _ dialog , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( dialog Binding . root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Send ĠSMS ") Ġ{ dialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! dialog Binding . sms Destination . text . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsms Info . to Ġ= Ġdialog Binding . sms Destination . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Sms ( sms Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Cancel ") Ġ{ dialog , Ġwhich Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Binding . sms Info Ġ= Ġsms Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Sms ( sms Info : ĠS ms Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= ĠPending Intent . getActivity ( context , Ġ 0 , Ġintent , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsms Ġ= ĠS ms Manager . getDefault () ĊĠĠĠĠĠĠĠ Ġsms . send Text Message ( sms Info . to , Ġnull , Ġsms Info . text , Ġpending Intent , Ġnull ) ĊĠĠĠ Ġ} Ċ }