/** Design ed Ġand Ġdeveloped Ġby Ġ 2 0 2 1 ĠMu ham mad ĠFar han Ċ Ċ 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 Ċ Ċ http :// 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 . far han . pix o . ui . preview Ċ Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġandroidx . transition . Transition Inflater Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . DataSource Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . target . Target Ċ import Ġcom . far han . pix o . R Ċ import Ġcom . far han . pix o . arch . m vi . I View Ċ import Ġcom . far han . pix o . databinding . Preview Fragment Binding Ċ import Ġcom . far han . pix o . ui . preview . action . Preview Actions Ċ import Ġcom . far han . pix o . ui . preview . state . Preview State Ċ import Ġcom . far han . pix o . ui . preview . view model . Preview ViewModel Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠPreview Fragment Ġ: ĠFragment ( R . layout . preview _ fragment ), ĠI View < Preview State > Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Preview ViewModel >() ĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠPreview Fragment Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġval Ġargs : ĠPreview Fragment Args Ġby Ġnav Args () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠPreview Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġset Shared Element Transition On Enter () ĊĠĠĠĠĠĠĠ Ġpost p one Enter Transition () ĊĊĠĠĠĠĠĠĠ Ġsubscribe Observer s () ĊĠĠĠĠĠĠĠ Ġsend Action ( Preview Actions . Load Image ( args . extra ImageUrl )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOb serving Ġthe Ġstate ĊĠĠĠĠĠĠĠ ĠviewModel . state . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Action ( preview Actions : ĠPreview Actions ){ ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . actions . send ( preview Actions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( state : ĠPreview State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( state ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPreview State . Load Image Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Image In View ( state . imageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Shared Element Transition On Enter () Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Element Enter Transition Ġ= ĠTransition Inflater . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate Transition ( R . transition . shared _ element _ transition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Image In View ( imageUrl : String ){ ĊĠĠĠĠĠĠĠ Ġbinding . img Preview Image . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Name Ġ= ĠimageUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Enter Transition After Loading Image ( imageUrl , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Enter Transition After Loading Image ( image Address : ĠString , ĠimageView : ĠImageView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( image Address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dont Animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. listener ( object Ġ: ĠRequest Listener < Drawable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe : ĠG lide Exception ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Post p oned Enter Transition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource : ĠDrawable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource : ĠDataSource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Post p oned Enter Transition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( imageView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }