package Ġcom . example . myapp . ui Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . view .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . databinding . Data Binding Component Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . example . myapp . R Ċ import Ġcom . example . myapp . binding . Fragment Data Binding Component Ċ import Ġcom . example . myapp . databinding . Detail Fragment Binding Ċ import Ġcom . example . myapp . observer . Detail ViewModel Ċ import Ġcom . example . myapp . util . App Executors Ċ import Ġcom . example . myapp . util . to Bitmap Ċ Ċ class ĠDetail Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġexec utors : ĠApp Executors ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠDetail ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠDetail Fragment Binding ĊĠĠĠ Ġprivate Ġvar Ġphoto Id Ġ= Ġ" 0 " ĊĊĠĠĠ Ġprivate Ġvar Ġdata Binding Component : ĠData Binding Component Ġ= ĠFragment Data Binding Component ( this ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . putString ( PH OTO _ ID , Ġphoto Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ ĠData Binding Util . inflate < Detail Fragment Binding >( in flater , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . detail _ fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Binding Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec utors Ġ= ĠApp Executors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . root ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġphoto Id Ġ= ĠsavedInstanceState ?. getString ( PH OTO _ ID ) Ġ?: ĠDetail Fragment Args . from Bundle ( arguments ). photo Id ĊĊĠĠĠĠĠĠĠ ĠViewModel Providers . of ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Detail ViewModel :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . init ( app Executor Ġ= Ġexec utors ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Res Id ( res Id Ġ= Ġphoto Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . result . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAppCompatActivity ?) ?. set Support ActionBar ( binding . detail Toolbar ) ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAppCompatActivity ?) ?. support ActionBar ?. set Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġbinding . detail Toolbar . let Ġ{ toolbar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . navigation Icon Ġ= ĠContext Compat . get Drawable ( require Context (), ĠR . drawable . av d _ arrow _ back ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?, Ġinflater : ĠMenu Inflater ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater ?. inflate ( R . menu . menu _ detail , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item ?. itemId Ġ== ĠR . id . action _ share ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Photo () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshare Photo () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Drawable Ġ= Ġ Ġbinding . image . drawable . to Bitmap () ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Path Ġ= ĠMedia Store . Images . Media . insert Image ( context ?. content Resolver , Ġbitmap Drawable ," some Ġtitle ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Uri Ġ= ĠUri . parse ( bitmap Path ); ĊĠĠĠĠĠĠĠ Ġval Ġshare Intent = ĠIntent ( Intent . ACTION _ SEND ); ĊĠĠĠĠĠĠĠ Ġshare Intent . type Ġ= Ġ" image / jpeg "; ĊĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ STREAM , Ġbitmap Uri ); ĊĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ TEXT , Ġ" H ey ĠCheckout Ġthis ! Ġ\ n Ġ${ viewModel . result . value ?. data ?. title }") ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( share Intent ," Share ĠImage ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPH OTO _ ID Ġ= Ġ" photo _ id " ĊĠĠĠ Ġ} Ċ } Ċ