package Ġcom . will . wei y ue kotlin . widget Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Dialog Fragment Ċ import Ġandroid . support . v 7 . widget . Grid LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . helper . Item Touch Helper Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġcom . will . wei y ue kotlin . R Ċ import Ġcom . will . wei y ue kotlin . bean . Channel Ċ import Ġcom . will . wei y ue kotlin . event . New Channel Event Ċ import Ġcom . will . wei y ue kotlin . event . Select Channel Event Ċ import Ġcom . will . wei y ue kotlin . ui . adapter . New Adapter Ċ import Ġcom . will . wei y ue kotlin . widget . channel Dialog . Item Drag Helper CallBack Ċ import Ġcom . will . wei y ue kotlin . widget . channel Dialog . On Channel Listener Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġjava . io . Serializable Ċ import Ġjava . util .* ĊĊ Ċ /** Ċ Ġ* Ġdesc : Ġ é¢ĳ éģĵ ç®¡çĲĨ Ġ. Ċ Ġ* Ġauthor : ĠWill Ġ. Ċ Ġ* Ġdate : Ġ 2 0 1 7 / 1 2 / 9 Ġ. Ċ Ġ*/ Ċ Ċ class ĠChannel Dialog Fragment Ġ: ĠDialog Fragment (), ĠOn Channel Listener Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm RecyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmi V Close : ĠImageView ĊĠĠĠ Ġprivate Ġval Ġm Data Ġ= ĠArrayList < Channel >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Selected Data : ĠArrayList < Channel > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Un Selected Data : ĠArrayList < Channel > ĊĠĠĠ Ġprivate Ġvar Ġm Adapter : ĠNew Adapter ? Ġ= Ġnull ĊĠĠĠ Ġ// æĺ¯åĲ¦ éľĢè¦ģ æĽ´æĸ° Ġ ä¸» é¡µ é¢ĳ éģĵ ä¿¡æģ¯ ĊĠĠĠ Ġprivate Ġvar Ġis Update Ġ= Ġfalse ĊĊĊĠĠĠ Ġprivate Ġvar Ġon Channel Listener : ĠOn Channel Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġset On Channel Listener ( on Channel Listener : ĠOn Channel Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Channel Listener Ġ= Ġon Channel Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( selected Data : ĠList < Channel > ?, Ġun selected Data : ĠList < Channel >? ): ĠChannel Dialog Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Fragment Ġ= ĠChannel Dialog Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Serializable (" data Selected ", Ġselected Data Ġas ĠSerializable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Serializable (" data Un selected ", Ġun selected Data Ġas ĠSerializable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Fragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdialog Fragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Style ( Dialog Fragment . STYLE _ NORMAL , Ġandroid . R . style . Theme _ Black _ No Title Bar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater ?, Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġdialog ĊĠĠĠĠĠĠĠ Ġ// æ·»åĬł åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġdialog ?. window !!. setWindow Animations ( R . style . dialog Slide Anim ) ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater !!. inflate ( R . layout . dialog _ channel , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView ?, ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView Ġ= Ġview !!. findViewById ( R . id . re cyclerView ) Ġas ĠRecyclerView ĊĠĠĠĠĠĠĠ Ġmi V Close Ġ= Ġview . findViewById ( R . id . icon _ collapse ) Ġas ĠImageView ĊĠĠĠĠĠĠĠ Ġmi V Close . setOnClickListener Ġ{ Ġdismiss () Ġ} ĊĠĠĠĠĠĠĠ Ġprocess Logic () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Logic () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠChannel () ĊĠĠĠĠĠĠĠ Ġchannel . view Type Ġ= ĠChannel . TYPE _ MY ĊĠĠĠĠĠĠĠ Ġchannel . channel Name Ġ= Ġ" æĪĳçļĦ é¢ĳ éģĵ " ĊĠĠĠĠĠĠĠ Ġm Data . add ( channel ) ĊĊĠĠĠĠĠĠĠ Ġm Selected Data Ġ= Ġarguments . get Serializable (" data Selected ") Ġas ĠArrayList < Channel > ĊĠĠĠĠĠĠĠ Ġm Un Selected Data Ġ= Ġarguments . get Serializable (" data Un selected ") Ġas ĠArrayList < Channel > ĊĠĠĠĠĠĠĠ Ġset DataType ( m Selected Data , ĠChannel . TYPE _ MY _ CHANNEL ) ĊĠĠĠĠĠĠĠ Ġset DataType ( m Un Selected Data , ĠChannel . TYPE _ OTHER _ CHANNEL ) ĊĠĠĠĠĠĠĠ Ġm Data . addAll ( m Selected Data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmore Channel Ġ= ĠChannel () ĊĠĠĠĠĠĠĠ Ġmore Channel . view Type Ġ= ĠChannel . TYPE _ OTHER ĊĠĠĠĠĠĠĠ Ġmore Channel . channel Name Ġ= Ġ" é¢ĳ éģĵ æİ¨èįĲ " ĊĠĠĠĠĠĠĠ Ġm Data . add ( more Channel ) ĊĊĠĠĠĠĠĠĠ Ġm Data . addAll ( m Un Selected Data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠItem Drag Helper CallBack ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġhelper Ġ= ĠItem Touch Helper ( callback ) ĊĠĠĠĠĠĠĠ Ġhelper . attach To RecyclerView ( m RecyclerView ) ĊĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠNew Adapter ( m Data , Ġhelper ) ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠGrid LayoutManager ( activity , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView . layout Manager Ġ= Ġmanager ĊĠĠĠĠĠĠĠ Ġm RecyclerView . adapter Ġ= Ġm Adapter ĊĠĠĠĠĠĠĠ Ġmanager . span Size Lookup Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠitemView Type Ġ= Ġm Adapter !!. getItem ViewType ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( item ViewType Ġ== ĠChannel . TYPE _ MY _ CHANNEL Ġ|| ĠitemView Type Ġ== ĠChannel . TYPE _ OTHER _ CHANNEL ) Ġ 1 Ġelse Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Adapter ?. on Channel Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset DataType ( data : ĠList < Channel >, Ġtype : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ i ]. view Type Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĭ ĸ åĬ¨ é¢ĳ éģĵ åĽŀè°ĥ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstar Pos Ġ èµ· å§ĭ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ param Ġend Pos Ġ Ġ ç»ĵæĿŁ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Item Move ( star Pos : ĠInt , Ġend Pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( star Pos Ġ< Ġ 0 Ġ|| Ġend Pos Ġ< Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( m Data [ end Pos ]. channel Name . equals (" å¤´ æĿ¡ ")) Ġreturn ĊĠĠĠĠĠĠĠ Ġ// æĪĳçļĦ é¢ĳ éģĵ ä¹ĭéĹ´ ç§»åĬ¨ ĊĠĠĠĠĠĠĠ Ġon Channel Listener ?. on Item Move ( star Pos Ġ- Ġ 1 , Ġend Pos Ġ- Ġ 1 )// åİ» éĻ¤ æłĩé¢ĺ æīĢ åįł çļĦä¸Ģä¸ª index ĊĠĠĠĠĠĠĠ Ġon Move ( star Pos , Ġend Pos , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł åĪ° æĪĳçļĦ é¢ĳ éģĵ åĽŀè°ĥ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstar Pos Ġ èµ· å§ĭ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ param Ġend Pos Ġ Ġ ç»ĵæĿŁ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon MoveTo My Channel ( star Pos : ĠInt , Ġend Pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Move ( star Pos , Ġend Pos , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç§»åĬ¨ åĪ° æİ¨èįĲ é¢ĳ éģĵ åĽŀè°ĥ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstar Pos Ġ èµ· å§ĭ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ param Ġend Pos Ġ Ġ ç»ĵæĿŁ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon MoveTo Other Channel ( star Pos : ĠInt , Ġend Pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Move ( star Pos , Ġend Pos , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġfirst Add Channel Name Ġ= Ġ"" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ é¢ĳ éģĵ ç§»åĬ¨ åĽŀè°ĥ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstar Pos Ġ èµ· å§ĭ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ param Ġend Pos Ġ Ġ ç»ĵæĿŁ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ param Ġis Add ĠĠ Ġæĺ¯åĲ¦ æĺ¯ æ·»åĬł æĵįä½ľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Move ( star Pos : ĠInt , Ġend Pos : ĠInt , Ġis Add : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Update Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġstart Channel Ġ= Ġm Data [ star Pos ] ĊĠĠĠĠĠĠĠ Ġ// åħĪ åĪłéĻ¤ ä¹ĭåīį çļĦ ä½įç½® ĊĠĠĠĠĠĠĠ Ġm Data . remove At ( star Pos ) ĊĠĠĠĠĠĠĠ Ġ// æ·»åĬł åĪ° çİ°åľ¨ çļĦ ä½įç½® ĊĠĠĠĠĠĠĠ Ġm Data . add ( end Pos , Ġstart Channel ) ĊĠĠĠĠĠĠĠ Ġm Adapter ?. notify Item Moved ( star Pos , Ġend Pos ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Add ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( first Add Channel Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Add Channel Name Ġ= Ġstart Channel . channel Name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Channel . channel Name !! Ġ== Ġfirst Add Channel Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Add Channel Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĤ¹åĩ» éĢī ä¸Ń é¢ĳ éģĵ Ġ åħ³éĹŃ ç®¡çĲĨ é¡µéĿ¢ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġselected Channel Name Ġ éĢī ä¸Ń é¢ĳ éģĵ åĲįç§° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Finish ( selected Channel Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). post ( Select Channel Event ( selected Channel Name )) ĊĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). post ( New Channel Event ( m Adapter ?. data , Ġfirst Add Channel Name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} Ċ Ċ }