package Ġcom . q icode . merge . ui Ċ Ċ import Ġandroid . animation . Animator Inflater Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġcom . q icode . extension . TAG Ċ import Ġcom . q icode . grid . Grid Drag Builder Ċ import Ġcom . q icode . grid . Grid Manager Ċ import Ġcom . q icode . merge . R Ċ import Ġcom . q icode . merge . data . Tool Bean Ċ import Ġcom . q icode . merge . data . Tools Ċ import Ġkotlinx . android . synt hetic . main . item _ tool . view .* Ċ import Ġjava . math . BigDecimal Ċ Ċ interface ĠH older Help Ġ{ ĊĠĠĠ Ġfun Ġtool Drawable ( context : ĠContext , Ġlevel : ĠInt ): ĠDrawable ĊĠĠĠ Ġfun Ġtool Level ( level : ĠInt ): ĠString ĊĠĠĠ Ġfun Ġtool Level Visibility ( level : ĠInt ): ĠInt ĊĠĠĠ Ġfun Ġtool Pay Load s ( view : ĠView , Ġpayload s : ĠMutable List < Any >) Ċ } Ċ Ċ class ĠTools Holder ( private Ġval Ġview : ĠView , Ġprivate Ġval Ġhelp : ĠH older Help ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠ Ġvar Ġtools : ĠTools ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġbean : ĠTool Bean ĊĠĠĠ Ġvar Ġhandler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġval Ġanim ator Ġ= ĠAn imator Inflater . load Animator ( view . context , ĠR . anim ator . property _ show ) ĊĊĠĠĠ Ġfun Ġon Bind ( tools : ĠTools ?, Ġposition : ĠInt , Ġpayload s : ĠMutable List < Any >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . tools Ġ= Ġtools Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġbean Ġ= Ġtools . getList ()[ position ] ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG (), Ġ" on Bind Ġtools [ ${ bean . row }, Ġ${ bean . col }] ") ĊĠĠĠĠĠĠĠ Ġ// Ġæł¹æį® bean çļĦ æĺ¾ç¤º å±ŀæĢ§ åĪ¤æĸŃ bean æĺ¯åĲ¦ åľ¨ ç¼ĵåŃĺ éĺŁåĪĹ ï¼Į å¦Ĥæŀľ åľ¨ ç¼ĵåŃĺ éĺŁåĪĹ ï¼Į çĽ´æİ¥ è·³ è¿ĩ ä¸į æĺ¾ç¤º ĊĠĠĠĠĠĠĠ Ġview . visibility Ġ= Ġif Ġ( bean . visibility ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġif Ġ( view . visibility Ġ== ĠView . GONE ) Ġreturn ĊĠĠĠĠĠĠĠ Ġ// Ġæł¹æį® ä¿ĿåŃĺ çļĦæķ°æį® ï¼Į è®¾ç½® item çļĦ ä½įç½® ĊĠĠĠĠĠĠĠ Ġ( view . layout Params Ġas ĠGrid Manager . LayoutParams ). apply Ġ{ Ġrow Ġ= Ġbean . row ; col Ġ= Ġbean . col Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æĸĩæľ¬ ï¼Į Ġ åĽ¾çīĩ ĊĠĠĠĠĠĠĠ Ġview . image . setImage Drawable ( help . tool Drawable ( view . context , Ġbean . level )) ĊĠĠĠĠĠĠĠ Ġview . level . text Ġ= Ġhelp . tool Level ( bean . level ) ĊĠĠĠĠĠĠĠ Ġview . level . visibility Ġ= Ġhelp . tool Level Visibility ( bean . level ) ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® view åı¯ è§ģ ĊĠĠĠĠĠĠĠ Ġview . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® drag ĊĠĠĠĠĠĠĠ Ġview . setOn Touch Listener Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æ³¨æĦı ï¼ļ bind æĹ¶åĢĻ çļĦ position åĴĮ drag æĹ¶åĢĻ çļĦ position åı¯èĥ½ å·²ç»ı çĶ±äºİ ï¼Ī merge ãĢģ delete ãĢģ add çŃī æĵįä½ľ ï¼ī ä¸į ä¸Ģæł· äºĨ ï¼Į è¿ĻéĩĮ éľĢè¦ģ éĩįæĸ° èİ·åıĸ ä¸ĭ çĽ®åīį çļĦ ç´¢å¼ķ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġdrag ( event , Ġtools . getList (). indexOf ( bean ), Ġbean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġproperty Show () ĊĠĠĠĠĠĠĠ Ġ// ĠæĶ¯æĮģ åĬ¨ æķĪ ï¼Į æĪĸèĢħ åħ¶ä»ĸ é¢Ŀ å¤ĸ åĨħå®¹ ĊĠĠĠĠĠĠĠ Ġpayload s ?. apply Ġ{ Ġif Ġ( size Ġ> Ġ 0 ) Ġhelp . tool Pay Load s ( view , Ġthis ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġproperty Show () Ġ{ ĊĠĠĠĠĠĠĠ Ġbean . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®¡ç®Ĺ äº§çĶŁ çļĦ èµĦæºĲ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Ġ= ĠBigDecimal (( current Ġ- Ġupdate Time ) Ġ/ Ġ 1 0 0 0 ) Ġ* Ġproperty Per Ġ* Ġcoefficient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŁ¥ çľĭ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG (), Ġ" property Show Ġtools [ ${ row }, Ġ${ col }] Ġwith Ġresource : Ġ$ resource ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG (), Ġ" Ġresource [$ resource ] Ġ= Ġtime [ ${ ( current Ġ- Ġupdate Time ) Ġ/ Ġ 1 0 0 0 }] Ġ* Ġproperty Per [$ property Per ] Ġ* Ġcoefficient [$ coefficient ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resource Ġ> ĠBigDecimal . ZERO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĽ´æĸ° tool ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Time Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtools ?. addProperty ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĽ´æĸ° æĺ¾ç¤º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . property . text Ġ= Ġview . context . resources . getString ( R . string . add _ resource , ĠTool Bean . getText ( resource )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . property Container . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲ¯åĬ¨ åĬ¨çĶ» ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . setTarget ( view . property Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĩĨå¤ĩ ä¸ĭ ä¸Ģ è½® æĽ´æĸ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( this @ Tools Holder :: property Show , Ġ 4 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdrag ( event : ĠMotion Event , Ġposition : ĠInt , Ġtool : ĠTool Bean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtools ?. listener ?. on Tools Select ( position ) ĊĠĠĠĠĠĠĠ Ġ// Ġ éļĲèĹı view ä¸ŃçļĦ åĬ¨çĶ» éĥ¨åĪĨ ĊĠĠĠĠĠĠĠ Ġview . property Container . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º Drag Shadow Builder ï¼Į æĪĳ æĬĬ æİ§ä»¶ æľ¬ èº« ä¼ł è¿Ľ åİ» ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠGrid Drag Builder ( view , Ġevent . x , Ġevent . y ) ĊĠĠĠĠĠĠĠ Ġ// Ġ åī ª åĪĩ æĿ¿ æķ°æį® ï¼Į åı¯ä»¥åľ¨ Drag Event . ACTION _ DROP æĸ¹æ³ķ çļĦæĹ¶åĢĻ èİ·åıĸ ãĢĤ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠClip Data . new Plain Text (" position ", Ġposition . toString ()) ĊĠĠĠĠĠĠĠ Ġ// Ġ å¼Ģå§ĭ æĭ ĸ æĭ ½ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġview . start Drag And Drop ( data , Ġbuilder , Ġview , ĠView . DR AG _ FLAG _ OP A QUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result ) Ġtools ?. listener ?. on Tools Stop Drag ( position , Ġtool ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġview . start Drag ( data , Ġbuilder , Ġview , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result ) Ġtools ?. listener ?. on Tools Stop Drag ( position , Ġtool ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ éļĲèĹı åİŁå§ĭ view ĊĠĠĠĠĠĠĠ Ġview . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }