package Ġx in . z 7 workbench . bj ut login app . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . content . edit Ċ import Ġandroidx . lifecycle . observe Ċ import Ġandroidx . recyclerview . widget . Default Item Animator Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġx in . z 7 workbench . bj ut login app . R Ċ import Ġx in . z 7 workbench . bj ut login app . databinding . Activity Users Binding Ċ import Ġx in . z 7 workbench . bj ut login app . databinding . Dialog User Binding Ċ import Ġx in . z 7 workbench . bj ut login app . databinding . Item Users Binding Ċ import Ġx in . z 7 workbench . bj ut login app . model . User Ċ Ċ class ĠUsers Activity Ġ: ĠBasic Activity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcurrent Id Ġ= Ġ 0 ĊĠĠĠ Ġval Ġprefs Ġby Ġlazy Ġ{ Ġapp . prefs Ġ} ĊĠĠĠ Ġprivate Ġval Ġuser Dao Ġby Ġlazy Ġ{ Ġapp . app Database . user Dao () Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Users Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Users Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . title Ġ= ĠgetString ( R . string . action _ users ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation OnClickListener Ġ{ Ġon Back Pressed () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġusers Adapter Ġ= ĠUsers Adapter () ĊĠĠĠĠĠĠĠ Ġval Ġll m Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġll m . orientation Ġ= ĠLinearLayoutManager . VERTICAL ĊĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġuser Dao . all () ĊĠĠĠĠĠĠĠ Ġusers . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Util Ġ= ĠDiff Util . calculate Diff ( User Diff Callback ( users Adapter . users , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusers Adapter . users Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Util . dispatch Updates To ( users Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . placeholder 1 . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . placeholder 2 . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . placeholder 1 . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . placeholder 2 . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . recycler . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġusers Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġll m ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Animator Ġ= ĠDefault Item Animator () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcurrent Id Ġ= Ġapp . prefs . getInt (" current _ user ", Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠUser Diff Callback ( private Ġval Ġold : ĠList < User >, Ġprivate Ġval Ġnew : ĠList < User >) Ġ: ĠDiff Util . Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size () Ġ= Ġold . size ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size () Ġ= Ġnew . size ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( p 0 : ĠInt , Ġp 1 : ĠInt ) Ġ= Ġold [ p 0 ]. id Ġ== Ġnew [ p 1 ]. id ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( p 0 : ĠInt , Ġp 1 : ĠInt ) Ġ= Ġold [ p 0 ] Ġ== Ġnew [ p 1 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen User Dialog ( new User : ĠBoolean , Ġuser : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Package Ġ= Ġ 8 ĊĠĠĠĠĠĠĠ Ġval Ġdialog Binding Ġ= ĠDialog User Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġdialog Binding . name . setText ( user . name ) ĊĠĠĠĠĠĠĠ Ġdialog Binding . name . setSelection ( user . name . length ) ĊĠĠĠĠĠĠĠ Ġdialog Binding . password . setText ( user . password ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! new User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Package Ġ= Ġuser . pack ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Binding . seek Pack . progress Ġ= Ġuser . pack ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog Binding . text Pack . text Ġ= Ġ""" $ current Package ĠGB """ ĊĊĠĠĠĠĠĠĠ Ġdialog Binding . seek Pack . setOn Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( p 0 : ĠSeek Bar ?, Ġp 1 : ĠInt , Ġp 2 : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Binding . text Pack . text Ġ= Ġ""" ${ dialog Binding . seek Pack . progress } ĠGB """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Package Ġ= Ġdialog Binding . seek Pack . progress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( p 0 : ĠSeek Bar ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( p 0 : ĠSeek Bar ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( dialog Binding . root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . OK ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . name Ġ= Ġdialog Binding . name . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . password Ġ= Ġdialog Binding . password . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . pack Ġ= Ġcurrent Package ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! new User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Dao . update ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Dao . insert ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . cancel ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠUsers Adapter ( var Ġusers : ĠMutable List < User > Ġ= Ġmutable ListOf ()) Ġ: ĠRecyclerView . Adapter < Users Adapter . Users ViewHolder >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsers ViewHolder ( Item Users Binding . inflate ( layout Inflater )) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġusers . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠUsers ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġusers [ holder . adapter Position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . edit Ġ{ Ġput Int (" current _ user ", Ġuser . id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Users Activity . finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . binding . user . text Ġ= Ġuser . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . binding . edit . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen User Dialog ( false , Ġuser . copy ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . binding . trash . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Dao . delete ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Id Ġ== Ġuser . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . binding . user . toggle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠUsers ViewHolder ( val Ġbinding : ĠItem Users Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ users , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ add Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen User Dialog ( true , ĠUser ( 0 , Ġ"", Ġ"", Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }