package Ġcom . li ar studio . recycler _ drag Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . li ar studio . recycler _ drag . controller . Drag gable Controller Ċ import Ġcom . li ar studio . recycler _ drag . controller . Separ at ror Controller Ċ import Ġcom . li ar studio . recycler _ drag _ helper . Recycler Drag Helper Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġru . surf studio . android . easy adapter . Easy Adapter Ċ import Ġru . surf studio . android . easy adapter . ItemList Ċ Ċ /** Ċ Ġ* ĠMain ĠScreen Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġscreen Model Ġ= ĠMain Screen Model () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrag Helper : ĠRe cycler Drag Helper ĊĊĠĠĠ Ġprivate Ġval Ġadapter Ġ= ĠEasy Adapter () ĊĠĠĠ Ġprivate Ġval Ġdraggable Controller Ġ= ĠDrag gable Controller ( ĊĠĠĠĠĠĠĠ Ġon Drag Started Ġ= Ġ{ Ġdrag Helper . initialize Drag ( it ) Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġseparator Controller Ġ= ĠSepar at ror Controller () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent _ rv . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġcontent _ rv . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġdrag Helper Ġ= ĠRe cycler Drag Helper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent _ rv , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ:: on Drag Started , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ:: on Drag ged , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ:: on Drag Completed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ:: on Drag Completed ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcontent _ rv . setOn Drag Listener ( drag Helper . on Drag Listener ) ĊĠĠĠĠĠĠĠ Ġtoolbar . setOn Drag Listener ( drag Helper . on Drag Listener ) ĊĠĠĠĠĠĠĠ Ġre cycler _ drag _ bottom . setOn Drag Listener ( drag Helper . on Drag Listener ) ĊĠĠĠĠĠĠĠ Ġrender ( screen Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Drag Started ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscreen Model . start Drag ( id ) ĊĠĠĠĠĠĠĠ Ġrender ( screen Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Drag ged ( id : ĠString , Ġis Pl aced Up : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscreen Model . update Drag State ( id , Ġis Pl aced Up ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Drag Completed () Ġ{ ĊĠĠĠĠĠĠĠ Ġscreen Model . end Drag () ĊĠĠĠĠĠĠĠ Ġrender ( screen Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrender ( screen Model : ĠMain Screen Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . set Items ( create ItemList ( screen Model )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate ItemList ( screen Model : ĠMain Screen Model ): ĠItem List Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem List Ġ= ĠItem List . create () ĊĠĠĠĠĠĠĠ Ġscreen Model . draggable Elements . forEach Indexed Ġ{ Ġi , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( i , Ġseparator Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . add ( item , Ġdraggable Controller ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem List ĊĠĠĠ Ġ} Ċ } Ċ