package Ġcom . mar ag ues . planner . visor Ċ Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . RecyclerView . HORIZONTAL Ċ import Ġandroid . support . v 7 . widget . RecyclerView . Item Decoration Ċ import Ġandroid . support . v 7 . widget . RecyclerView . On Item Touch Listener Ċ import Ġandroid . support . v 7 . widget . RecyclerView . On Scroll Listener Ċ import Ġandroid . support . v 7 . widget . RecyclerView . State Ċ import Ġandroid . support . v 7 . widget . RecyclerView . VERTICAL Ċ import Ġandroid . support . v 7 . widget . RecyclerView . ViewHolder Ċ import Ġandroid . view . Drag Event Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . On Drag Listener Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . mar ag ues . planner . common . Base Fragment Ċ import Ġcom . mar ag ues . planner . common . inflate Ċ import Ġcom . mar ag ues . planner . visor . Planner Vis or Fragment . Days Adapter . Day ViewHolder Ċ import Ġcom . mar ag ues . planner . visor . Planner Vis or Fragment . Week s Adapter . Week ViewHolder Ċ import Ġcom . mar ag ues . planner . visor . Planner Vis or ViewModel . Factory Ċ import Ġcom . mar ag ues . planner _ kotlin . R Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . fragment _ planner _ visor . planner Days RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . fragment _ planner _ visor . planner Drag Bottom Zone Ċ import Ġkotlinx . android . synt hetic . main . fragment _ planner _ visor . planner Drag Right Zone Ċ import Ġkotlinx . android . synt hetic . main . fragment _ planner _ visor . planner Me als RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . fragment _ planner _ visor . planner Week s RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . item _ planner _ day . view . item Planner Day Ċ import Ġorg . th reet en . bp . LocalDate Ċ import Ġorg . th reet en . bp . format . DateTime Formatter Ċ import Ġorg . th reet en . bp . temporal . Week Fields Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . Locale Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . math . absolute Value Ċ Ċ class ĠPl anner Vis or Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġinternal Ġlateinit Ġvar ĠviewModel Factory : ĠFactory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠPl anner Vis or ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġme als Adapter Ġ= ĠMe als Adapter () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ planner _ visor , Ġcontainer , Ġfalse ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Planner Vis or ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġinit Days RecyclerView () ĊĊĠĠĠĠĠĠĠ Ġinit Week s RecyclerView () ĊĊĠĠĠĠĠĠĠ Ġinit Me als RecyclerView () ĊĊĠĠĠĠĠĠĠ Ġsynchronize Recycler Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Days RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdays LayoutManager Ġ= ĠLinearLayoutManager ( context , ĠV ERT ICAL , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġpl anner Days RecyclerView . layout Manager Ġ= Ġdays LayoutManager ĊĠĠĠĠĠĠĠ Ġpl anner Days RecyclerView . adapter Ġ= ĠDays Adapter () ĊĊĠĠĠĠĠĠĠ Ġpl anner Days RecyclerView . add On Item Touch Listener ( scroll Dis abler ) ĊĠĠĠĠĠĠĠ Ġpl anner Days RecyclerView . addItem Decoration ( object Ġ: ĠItem Decoration () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseparation : ĠInt Ġ= Ġcontext !!. resources . get Dimension Pixel Size ( R . dim en . visor _ me als _ separ ation ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( out Rect : ĠRect , Ġview : ĠView , Ġparent : ĠRecyclerView , Ġstate : ĠState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild Layout Position ( view ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . top Ġ= Ġif Ġ( position Ġ== Ġ 0 ) Ġ 0 Ġelse Ġseparation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Week s RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweeks LayoutManager Ġ= ĠLinearLayoutManager ( context , ĠH ORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġpl anner Week s RecyclerView . layout Manager Ġ= Ġweeks LayoutManager ĊĠĠĠĠĠĠĠ Ġpl anner Week s RecyclerView . adapter Ġ= ĠWeek s Adapter () ĊĊĠĠĠĠĠĠĠ Ġpl anner Week s RecyclerView . add On Item Touch Listener ( scroll Dis abler ) ĊĠĠĠĠĠĠĠ Ġpl anner Week s RecyclerView . addItem Decoration ( object Ġ: ĠItem Decoration () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseparation : ĠInt Ġ= Ġcontext !!. resources . get Dimension Pixel Size ( R . dim en . visor _ me als _ separ ation ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( out Rect : ĠRect , Ġview : ĠView , Ġparent : ĠRecyclerView , Ġstate : ĠState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild Layout Position ( view ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . left Ġ= Ġif Ġ( position Ġ== Ġ 0 ) Ġ 0 Ġelse Ġseparation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . right Ġ= Ġif Ġ( position Ġ== Ġ( parent . adapter ?. item Count ?. minus ( 1 ))) Ġ 0 Ġelse Ġseparation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Me als RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġme als LayoutManager Ġ= ĠFixed Grid LayoutManager () ĊĠĠĠĠĠĠĠ Ġme als LayoutManager . set Total Column Count ( 3 ) ĊĠĠĠĠĠĠĠ Ġpl anner Me als RecyclerView . layout Manager Ġ= Ġme als LayoutManager ĊĊĠĠĠĠĠĠĠ Ġpl anner Me als RecyclerView . adapter Ġ= Ġme als Adapter ĊĠĠĠĠĠĠĠ Ġpl anner Me als RecyclerView . add On Scroll Listener ( me als Scroll Listener ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . on Me al Re placed Observable ( me als Adapter . meal Re placed Observable ()) ĊĊĠĠĠĠĠĠĠ Ġdis pos ables (). add ( planner Me als RecyclerView . column Height Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Terminate Detach () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: on Column Height Received , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable :: printStackTrace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdis pos ables (). add ( planner Me als RecyclerView . column Width Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Terminate Detach () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: on Column Width Received , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable :: printStackTrace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġinit Drag Zones () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Drag Zones () Ġ{ ĊĠĠĠĠĠĠĠ Ġpl anner Days RecyclerView . setOn Drag Listener ( object Ġ: ĠOn Drag Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġy Entered : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġx Multiplier Ġ= Ġ 5 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drag ( v : ĠView , Ġevent : ĠDrag Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ STARTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Entered Ġ= Ġevent . y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ ENTER ED Ġ-> Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ LOCATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd X Ġ= Ġ( v . width Ġ- Ġevent . x ). absolute Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Y Ġ= Ġevent . y Ġ- Ġy Entered ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI Ġtried Ġto Ġset Ġan Ġinterval Ġ+ Ġinvoking Ġsmooth Scroll By Ġand Ġit Ġdidn 't Ġwork . ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI Ġalso Ġtried Ġto Ġqueue Ġit Ġthrough Ġa Ġhandler Ġand Ġit Ġalso Ġdidn 't Ġwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpl anner Me als RecyclerView . smooth Scroll By (- ( dX . toInt () Ġ* Ġx Multiplier ), Ġd Y . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġpl anner Drag Right Zone . setOn Drag Listener ( object Ġ: ĠOn Drag Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġy Entered : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drag ( v : ĠView , Ġevent : ĠDrag Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ STARTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Entered Ġ= Ġevent . y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ ENTER ED Ġ-> Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ LOCATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Y Ġ= Ġevent . y Ġ- Ġy Entered ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpl anner Me als RecyclerView . smooth Scroll By ( event . x . toInt (), Ġd Y . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġpl anner Week s RecyclerView . setOn Drag Listener ( On Drag Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ STARTED , ĠDrag Event . ACTION _ DR AG _ ENTER ED Ġ-> Ġreturn @ On Drag Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ LOCATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpl anner Me als RecyclerView . smooth Scroll By ( 0 , Ġ-( v . height * 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġpl anner Drag Bottom Zone . setOn Drag Listener ( On Drag Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ STARTED , ĠDrag Event . ACTION _ DR AG _ ENTER ED Ġ-> Ġreturn @ On Drag Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ LOCATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpl anner Me als RecyclerView . smooth Scroll By ( 0 , Ġv . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġdis pos ables (). add ( viewModel . view State Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġrender ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable :: printStackTrace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĊĠĠĠĠĠĠĠ Ġdis pos ables (). clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender ( view State : ĠPl anner Vis or ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġme als Adapter . submit List ( view State . day Me als . sorted Descending ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Column Height Received ( column Height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( planner Me als RecyclerView . adapter Ġas ĠMe als Adapter ). set Column Height ( column Height ) ĊĠĠĠĠĠĠĠ Ġ( planner Days RecyclerView . adapter Ġas ĠDays Adapter ). set Column Height ( column Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Column Width Received ( column Width : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( planner Me als RecyclerView . adapter Ġas ĠMe als Adapter ). set Column Width ( column Width ) ĊĠĠĠĠĠĠĠ Ġ( planner Week s RecyclerView . adapter Ġas ĠWeek s Adapter ). set Column Width ( column Width ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsynchronize Recycler Views () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġme als Scroll Listener Ġ= Ġobject Ġ: ĠOn Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpl anner Week s RecyclerView . scroll By ( dx , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpl anner Days RecyclerView . scroll By ( 0 , Ġdy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġscroll Dis abler Ġ= Ġobject Ġ: ĠOn Item Touch Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch Event ( rv : ĠRecyclerView , Ġe : ĠMotion Event ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Request Dis allow Intercept Touch Event ( dis allow Intercept : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( rv : ĠRecyclerView , Ġe : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDays Adapter Ġ: ĠRecyclerView . Adapter < Day ViewHolder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġweek Days : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Week days () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinit Week days () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠLocalDate . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield ISO Ġ= ĠWeek Fields . of ( Locale . getDefault ()). day OfWeek () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweek day Formatter Ġ= ĠDateTime Formatter . of Pattern (" EEE ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweek Days . add ( weekday Formatter . format ( now . with ( field ISO , Ġi . to Long ()))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠDay ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDay ViewHolder ( parent . inflate ( R . layout . item _ planner _ day )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġweek Days . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠDay ViewHolder , Ġposition : ĠInt ) Ġ= Ġholder . bind ( week Days . get ( position ), Ġcolumn Height ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcolumn Height : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfun Ġset Column Height ( column Height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . column Height Ġ= Ġcolumn Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclass ĠDay ViewHolder ( item View : ĠView ) Ġ: ĠViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġbind ( day : ĠString , Ġcolumn Height : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . item Planner Day . text Ġ= Ġday ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column Height Ġ!= Ġnull ) ĠitemView . layout Params . height Ġ= Ġcolumn Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠWeek s Adapter Ġ: ĠRecyclerView . Adapter < Week ViewHolder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġweeks : ĠMutable List < String > Ġ= Ġmutable ListOf (" Previous ĠWeek ", Ġ" Current ĠWeek ", Ġ" Next ĠWeek ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠWeek ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWeek ViewHolder ( parent . inflate ( R . layout . item _ planner _ day )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġweeks . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠWeek ViewHolder , Ġposition : ĠInt ) Ġ= Ġholder . bind ( week s . get ( position ), Ġcolumn Width ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcolumn Width : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfun Ġset Column Width ( column Width : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . column Width Ġ= Ġcolumn Width ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclass ĠWeek ViewHolder ( item View : ĠView ) Ġ: ĠViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġbind ( day : ĠString , Ġcolumn Width : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . item Planner Day . text Ġ= Ġday ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column Width Ġ!= Ġnull ) ĠitemView . layout Params . width Ġ= Ġcolumn Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }