package Ġjp . gr . java _ conf . mi w ax . tro uto ss . view . activity Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġjp . gr . java _ conf . mi w ax . tro uto ss . R Ċ import Ġjp . gr . java _ conf . mi w ax . tro uto ss . databinding . Activity Tab C us om ize Binding Ċ import Ġjp . gr . java _ conf . mi w ax . tro uto ss . model . entity . S ns Tab Ċ import Ġjp . gr . java _ conf . mi w ax . tro uto ss . view . adapter . Tab Drag Adapter Ċ import Ġjp . gr . java _ conf . mi w ax . tro uto ss . view . dialog . Tab Menu Dialog Ċ import Ġjp . gr . java _ conf . mi w ax . tro uto ss . view model . Tab Custom ize ViewModel ĊĊ Ċ class ĠTab Custom ize Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġprivate Ġvar Ġbinding : ĠActivity Tab C us om ize Binding ĊĠĠĠ Ġlateinit Ġprivate Ġvar ĠviewModel : ĠTab Custom ize ViewModel ĊĠĠĠ Ġlateinit Ġprivate Ġvar Ġadapter : ĠTab Drag Adapter ĊĠĠĠ Ġlateinit Ġvar Ġbefore : ĠArray < S ns Tab > ĊĊĠĠĠ Ġprivate Ġval ĠREQUEST _ SELECT _ TAB _ TYPE Ġ= Ġ 1 0 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtabs Ġ= ĠsavedInstanceState ?. let Ġ{ Ġit . get Parcelable Array ( SAVE _ TAB _ LIST )?. to Mutable List () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ tab _ cus om ize ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġobject Ġ: ĠTab Drag Adapter ( binding . tabs , Ġtabs ?. let Ġ{ Ġit Ġas ? ĠMutable List < S ns Tab > Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick Tab ( position : ĠInt , Ġtab : ĠS ns Tab , Ġname : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTab Menu Dialog ( this @ Tab Custom ize Activity , Ġname ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ ĠviewModel . on Select Action ( it , Ġposition , Ġtab ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġadapter . get Re Indexed Tabs (). map Ġ{ Ġit . clone () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠTab Custom ize ViewModel ( adapter ) ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . fab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( Intent ( this , ĠSelect Tab Type Activity :: class . java ), ĠREQUEST _ SELECT _ TAB _ TYPE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . tabs . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( this @ Tab Custom ize Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġthis @ Tab Custom ize Activity . adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ== ĠREQUEST _ SELECT _ TAB _ TYPE Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK Ġ&& Ġdata Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtab Ġ= Ġdata . let Ġ{ ĠSelect Tab Type Activity . extract S ns Tab ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab ?. let Ġ{ Ġadapter . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Changed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! before . content Equals ( adapter . get Re Indexed Tabs (). to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfirm If Changed ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Changed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠMaterial Dialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( R . string . confirm _ close _ tab _ customize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Text ( R . string . close ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. negative Text ( R . string . cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Positive Ġ{ Ġ_, Ġ_ Ġ-> Ġblock () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . tab _ customize _ app bar , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm If Changed ( this :: finish ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ok Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . onClick Ok () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġconfirm If Changed ( this :: finish ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable Array ( SAVE _ TAB _ LIST , Ġadapter . tabs . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSAVE _ TAB _ LIST Ġ= Ġ" save _ tab _ list " ĊĠĠĠ Ġ} Ċ } Ċ