/** Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠS av vas ĠD alk its is Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ* Ġ' Game ĠFrame ' Ġis Ġa Ġregistered Ġtrade mark Ġof ĠLED SEQ Ċ Ġ*/ Ċ package Ġcom . sav vas d alk its is . game frame . feature . workspace . element . layer . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . helper . Item Touch Helper Ċ import Ġandroid . util . Attribute Set Ċ Ċ import Ġcom . sav vas d alk its is . game frame . feature . history . use case . History UseCase Ċ import Ġcom . sav vas d alk its is . game frame . feature . workspace . model . Workspace Model Ċ import Ġcom . sav vas d alk its is . game frame . infra . kotlin . Action Ċ Ċ class ĠLay ers View Ġ: ĠRecyclerView Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayers : ĠLay ers Adapter ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĠĠĠĠĠĠĠ Ġlayers Ġ= ĠLay ers Adapter () ĊĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context , ĠLinearLayoutManager . VERTICAL , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġitem Touch Helper Ġ= ĠItem Touch Helper ( Move Layers Item Helper ()) ĊĠĠĠĠĠĠĠ Ġitem Touch Helper . attach To RecyclerView ( this ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġlayers ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd New Layer () Ġ= Ġlayers . add New Layer () ĊĊĠĠĠ Ġfun Ġbind ( model History : ĠHistory UseCase < Workspace Model >, Ġaction : ĠAction ) Ġ= Ġlayers . bind ( model History , Ġaction ) ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠMove Layers Item Helper Ġinternal Ġconstructor () Ġ: ĠItem Touch Helper . Simple Callback ( Item Touch Helper . UP Ġor ĠItem Touch Helper . DOWN , Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠALLOW _ DR AG Ġ= ĠItem Touch Helper . Callback . make Flag ( Item Touch Helper . ACTION _ STATE _ DR AG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . DOWN Ġor ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . START Ġor ĠItem Touch Helper . END ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġnew Move Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Moved ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠRecyclerView . ViewHolder , Ġfrom Pos : ĠInt , Ġtarget : ĠRecyclerView . ViewHolder , Ġto Pos : ĠInt , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Moved ( re cyclerView , ĠviewHolder , Ġfrom Pos , Ġtarget , Ġto Pos , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayers . swap Layers ( view Holder , Ġtarget ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠRecyclerView . ViewHolder , Ġtarget : ĠRecyclerView . ViewHolder ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Move ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Move Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayers . swap Started () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtarget . adapter Position Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Movement Flags ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠRecyclerView . ViewHolder ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Holder . adapter Position Ġ> Ġ 0 ) ĠALLOW _ DR AG Ġelse Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclear View ( re cyclerView : ĠRecyclerView ?, ĠviewHolder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . clear View ( re cyclerView , ĠviewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Finished () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmotion Finished () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Move Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayers . swap Layers Finished () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }