package Ġcom . lo dz . android . pand ora . widget . rv . decoration Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . lo dz . android . core kt . array . Group able Ċ Ċ /** Ċ Ġ* ĠåĪĨ ç»Ħ æłĩçŃ¾ è£ħ é¥ ° åĻ¨ ï¼Ī åĪĨ ç»Ħ æłĩé¢ĺ çĶ± item éĩĮ åŃĹç¬¦ä¸² çļĦ ç¬¬ä¸Ģ ä½į æĪª åıĸ ï¼ī Ċ Ġ* Ġ æ³Ľ åŀĭ T åı¯ä»¥ ä¸º String æĪĸèĢħ å®ŀçİ° äºĨ Group able çļĦ ä»»æĦı ç±» Ċ Ġ* ĠCreated Ġby Ġz hou L Ġon Ġ 2 0 1 8 / 1 1 / 2 2 . Ċ Ġ*/ Ċ open Ġclass ĠSection Item Decoration < T > Ġprotected Ġconstructor ( context : ĠContext ) Ġ: ĠBase Section Item Decoration ( context ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠåĪĽå»º Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcreate ( context : ĠContext ): ĠSection Item Decoration < T > Ġ= ĠSection Item Decoration ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġæķ°æį® åĽŀè°ĥ Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġm P dr On Section Callback : ĠOn Section Callback < T >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġè®¾ç½® åĽŀè°ĥ [ callback ] Ġ*/ ĊĠĠĠ Ġfun Ġset On Section Callback ( callback : ĠOn Section Callback < T >? ): ĠSection Item Decoration < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġm P dr On Section Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( out Rect : ĠRect , Ġview : ĠView , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . getItem Offsets ( out Rect , Ġview , Ġparent , Ġstate ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m P dr On Section Callback Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Ver LinearLayout ( parent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild Adapter Position ( view ) ĊĠĠĠĠĠĠĠ Ġif Ġ( getItem ( position , Ġm P dr On Section Callback !! ). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġout Rect . top Ġ= Ġif Ġ( is First Group Item ( position , Ġm P dr On Section Callback !! )) Ġm P dr Section Height Px Ġelse Ġ 0 // Ġè®¾ç½® åĪĨ ç»Ħ é«ĺåº¦ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas , Ġparent , Ġstate ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Ver LinearLayout ( parent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m P dr On Section Callback Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġparent . child Count ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġparent . padding Left ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġparent . width Ġ- Ġparent . padding Right ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparent . getChild At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild Adapter Position ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is First Group Item ( position , Ġm P dr On Section Callback !! )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġview . top Ġ- Ġm P dr Section Height Px ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġview . top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bg Paint ( canvas , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Text Paint ( canvas , ĠgetItem ( position , Ġm P dr On Section Callback !! ), Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ è¯¥ ä½įç½® [ position ] çļĦæķ°æį® æĺ¯åĲ¦ æĺ¯ åĪĨ ç»Ħ çļĦ ç¬¬ä¸Ģä¸ª æķ°æį® ï¼Į æķ°æį® åĽŀè°ĥ [ callback ] Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġis First Group Item ( position : ĠInt , Ġcallback : ĠOn Section Callback < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠgetItem ( position , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġval Ġprevious Ġ= ĠgetItem ( position Ġ- Ġ 1 , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġif Ġ( current . isEmpty () Ġ|| Ġprevious . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent . substring ( 0 , Ġ 1 ) Ġ!= Ġprevious . substring ( 0 , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġèİ·åıĸ å¯¹åºĶ ä½įç½® [ position ] çļĦæķ°æį® ï¼Į æķ°æį® åĽŀè°ĥ [ callback ] Ġ*/ ĊĠĠĠ Ġprotected Ġfun ĠgetItem ( position : ĠInt , Ġcallback : ĠOn Section Callback < T >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġcallback . getSource Item ( position ) ĊĠĠĠĠĠĠĠ Ġif Ġ( t Ġ! is ĠGroup able Ġ&& Ġt Ġ! is ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġif Ġ( t Ġis ĠGroup able ) Ġt . get Sort Str () Ġelse Ġt Ġas ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( item . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw Text Paint ( canvas : ĠCanvas , Ġtext : ĠString , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtext . substring ( 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . draw Text Paint ( canvas , Ġtitle , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinterface ĠOn Section Callback < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** Ġæł¹æį® ä½įç½® [ position ] èİ·åıĸ åĪĹè¡¨ åĨħå®¹ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Source Item ( position : ĠInt ): ĠT ĊĠĠĠ Ġ} Ċ }