package Ġcom . raf al z aw ad z ki . me at y view pager . detail Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Shared Element Callback Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . transition . Transition Inflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Tree Observer Ċ import Ġcom . raf al z aw ad z ki . me at y view pager . R Ċ import Ġcom . raf al z aw ad z ki . me at y view pager . core . Me at Service Ċ import Ġcom . raf al z aw ad z ki . me at y view pager . core . Util . map Range Ċ import Ġcom . raf al z aw ad z ki . me at y view pager . core . model . Me at Ċ import Ġcom . raf al z aw ad z ki . me at y view pager . list . MainActivity . Companion . EXTRA _ CURRENT _ ME AT _ POSITION Ċ import Ġcom . raf al z aw ad z ki . me at y view pager . list . MainActivity . Companion . EXTRA _ START ING _ ME AT _ POSITION Ċ import Ġkotlinx . android . synt hetic . main . activity _ detail .* Ċ Ċ class ĠDetail Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdetail Pager Adapter Ġ= ĠDetail Pager Adapter ( support FragmentManager ) ĊĠĠĠ Ġprivate Ġvar Ġme ats Ġ= ĠMe at Service (). get Me ats () ĊĠĠĠ Ġprivate Ġvar Ġstarting Position : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġpage Transformer Ġ= ĠZoom Page Transformer () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ detail ) ĊĠĠĠĠĠĠĠ Ġpost p one Enter Transition () ĊĠĠĠĠĠĠĠ Ġset Enter Shared Element Callback ( enter Shared Element Callback ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtransition Ġ= ĠTransition Inflater . from ( this ). inflate Transition ( R . transition . me at _ transition ) ĊĠĠĠĠĠĠĠ Ġwindow . shared Element Enter Transition Ġ= Ġtransition ĊĠĠĠĠĠĠĠ Ġwindow . shared Element Exit Transition Ġ= Ġtransition ĊĠĠĠĠĠĠĠ Ġwindow . shared Element Return Transition Ġ= Ġtransition ĊĠĠĠĠĠĠĠ Ġwindow . shared Element Re enter Transition Ġ= Ġtransition ĊĊĠĠĠĠĠĠĠ Ġset UI () ĊĊĠĠĠĠĠĠĠ Ġintent . extras ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġme at Ġ= Ġit . get Serializable ( EXTRA _ ME AT ) Ġas ĠMe at ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġme ats . indexOf First Ġ{ Ġit Ġ== Ġme at Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstarting Position Ġ= Ġif Ġ( index Ġ> Ġ 0 ) Ġindex Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpager . currentItem Ġ= Ġstarting Position ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġpager . adapter Ġ= Ġdetail Pager Adapter ĊĠĠĠĠĠĠĠ Ġpager . set Page Transformer ( true , Ġpage Transformer ) ĊĠĠĠĠĠĠĠ Ġdetail Pager Adapter . set Items ( me ats ) ĊĠĠĠĠĠĠĠ Ġcontainer Drag gable . close Action Ġ= Ġthis :: close Activity ĊĠĠĠĠĠĠĠ Ġcontainer Drag gable . drag Action Ġ= Ġthis :: on Container Drag ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġenter Shared Element Callback Ġ= Ġobject Ġ: ĠShared Element Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Map Shared Elements ( names : ĠMutable List < String >, Ġshared Elements : ĠMutable Map < String , ĠView >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Element Ġ= Ġdetail Pager Adapter . current Detail Fragment ?. shared Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Element ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames . add ( shared Element . transition Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Elements . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Elements [ shared Element . transition Name ] Ġ= Ġshared Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġschedule Start Post p oned Transition ( shared Element : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Element . view Tree Observer . add On Pre Draw Listener ( object : ĠView Tree Observer . On Pre Draw Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Draw (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Element . view Tree Observer . remove On Pre Draw Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Post p oned Enter Transition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġclose Activity () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġresult . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( EXTRA _ START ING _ ME AT _ POSITION , Ġstarting Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( EXTRA _ CURRENT _ ME AT _ POSITION , Ġpager . currentItem ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġresult ) ĊĠĠĠĠĠĠĠ Ġsuper . finish After Transition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Container Drag ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrag Range Y Ġ= Ġ 1 0 0 0 f Ġ// Ġ 1 0 0 0 Ġis Ġan Ġarbitrary Ġnumber ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ> Ġdrag Range Y ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġmapped Value Ġ= Ġmap Range ( 0 f . range To ( drag Range Y ), Ġ 0 f . range To ( 0 . 5 f ), ĠMath . abs ( y )) ĊĠĠĠĠĠĠĠ Ġdetail Pager Adapter . current Detail Fragment ?. view ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Transformer . make Small ( mapped Value , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ ME AT Ġ= Ġ" extra _ me at " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Intent ( context : ĠContext , Ġme at : ĠMe at ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠDetail Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( EXTRA _ ME AT , Ġme at ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ