package Ġcom . k raft werk 2 8 . po cket cms . dialogs Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . k raft werk 2 8 . po cket cms . Item Swipe Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ġas ĠR V Ċ import Ġcom . k raft werk 2 8 . po cket cms . R Ċ import Ġkotlinx . android . synt hetic . main . dialog _ create _ table . view .* Ċ import Ġkotlinx . android . synt hetic . main . dialog _ create _ table . view . columns RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . item _ create _ table . view .* Ċ Ċ data Ġclass ĠTable Column ( val Ġtype : ĠString , Ġval Ġvalue : ĠString ) Ċ Ċ class ĠCreate Table RV ViewHolder ( item View : ĠView ) Ġ: ĠR V . ViewHolder ( item View ) Ċ Ċ class ĠCreate Table Diff Callback Ġ: ĠDiff Util . Item Callback < TableColumn >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( ĊĠĠĠĠĠĠĠ Ġold Item : ĠTable Column , ĊĠĠĠĠĠĠĠ Ġnew Item : ĠTable Column ĊĠĠĠ Ġ) Ġ= Ġold Item Ġ=== Ġnew Item ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠ Ġold Item : ĠTable Column , ĊĠĠĠĠĠĠĠ Ġnew Item : ĠTable Column ĊĠĠĠ Ġ) Ġ= Ġold Item Ġ== Ġnew Item Ċ } Ċ Ċ type alias ĠLA Ġ= ĠList Adapter < TableColumn , ĠCreate Table RV ViewHolder > Ċ type alias ĠCol Change Callback Ġ= Ġ( adapter : ĠCreate Table RV Adapter , Ġcol : ĠTable Column , Ġposition : ĠInt ) Ġ-> ĠUnit Ċ Ċ class ĠCreate Table RV Adapter ( val ĠonUpdate Column : ĠCol Change Callback ) Ġ: ĊĠĠĠ ĠLA ( CreateTable Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ): ĠCreate Table RV ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . item _ create _ table , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠCreate Table RV ViewHolder ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( ĊĠĠĠĠĠĠĠ Ġholder : ĠCreate Table RV ViewHolder , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . item View . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Input . setText ( data . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName Input . setText ( data . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Input . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Column ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ CreateTable RV Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . copy ( type Ġ= Ġit . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName Input . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Column ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ CreateTable RV Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . copy ( value Ġ= Ġit . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCreate Table Dialog ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ ĠonSubmit Columns : Ġ( tableName : ĠString , Ġcolumns : ĠList < TableColumn >) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdialog : ĠAlertDialog ĊĠĠĠ Ġprivate Ġval Ġcolumn List Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠ ĠTable Column (" SERIAL ", Ġ" id ") ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġadapter : ĠCreate Table RV Adapter ĊĠĠĠ Ġprivate Ġvar ĠtableName Ġ= Ġ" sample _ name " ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . dialog _ create _ table , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠCreate Table RV Adapter Ġ{ Ġadapter , Ġcol , Ġpos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn List . set ( pos , Ġcol ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter . submit List ( column List . toList ()) ĊĠĠĠĠĠĠĠ Ġview . columns RecyclerView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= ĠItem Swipe Helper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn List . remove At ( it . adapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( column List . toList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠItem Touch Helper ( s ). attach To RecyclerView ( view . columns RecyclerView ) ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠMaterial AlertDialog Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . dialog _ add _ column ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( context . getString ( R . string . dialog _ create )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSubmit Columns ( tableName , Ġcolumn List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( context . getString ( R . string . dialog _ create _ table )) ĊĊĠĠĠĠĠĠĠ Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġdialog . setOn Show Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . get Button ( AlertDialog . BUTTON _ NE UT R AL ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn List . add ( TableColumn ("", Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( column List . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . tableName Input . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtableName Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . get Button ( AlertDialog . BUTTON _ POSITIVE ). isEnabled Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinvoke () Ġ= Ġdialog . show () Ċ }