package Ġexample . kotlin report . multi platform . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context Wrapper Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ch auth ai . swiper e ve all ayout . Swipe Re veal Layout Ċ import Ġcom . ch auth ai . swiper e ve all ayout . View Binder Helper Ċ import Ġexample . kotlin report . multi platform . R Ċ import Ġexample . kotlin report . shared . config . AppConfig Ċ import Ġexample . kotlin report . shared . model . Sex Type Ċ import Ġexample . kotlin report . shared . model . User Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ Ċ abstract Ġclass ĠUser Adapter ( var Ġm List : ĠArrayList < User ?> ): ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVIEW _ ITEM : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVIEW _ LOADING : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġswipe Ġaction ĊĠĠĠ Ġvar Ġm View Binder Helper : ĠView Binder Helper Ġ= ĠView Binder Helper () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm View Binder Helper . set Open Only One ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġon Action Delete ( user : ĠUser , Ġposition : ĠInt ) ĊĠĠĠ Ġabstract Ġfun Ġon Action Update ( user : ĠUser , Ġposition : ĠInt ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠviewHolder : ĠRecyclerView . ViewHolder ĊĠĠĠĠĠĠĠ Ġif Ġ( view Type Ġ== ĠVIEW _ ITEM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠitemView : ĠView Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . view _ holder _ user , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= ĠUser ViewHolder ( item View ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠitemView : ĠView Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . view _ holder _ progress _ bar , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= ĠLoading ViewHolder ( item View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠviewHolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm List . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m List . get ( position ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVIEW _ LOADING ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠVIEW _ ITEM ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠUser ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser Ġ= Ġm List . get ( position ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġswipe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm View Binder Helper . bind ( holder . m Swipe Re veal Layout , Ġuser . id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm View Binder Helper . close Layout ( user . id . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind View ( user ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( holder Ġis ĠLoading ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind View () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġm List . clear () ĊĠĠĠĠĠĠĠ Ġthis . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Item ( user : ĠUser , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm List [ position ] Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġthis . notify Item Changed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Item ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm List . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġthis . notify Item Removed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd All ( list Add : ĠArrayList < User >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart : ĠInt Ġ= Ġm List . size ĊĠĠĠĠĠĠĠ Ġval Ġcount : ĠInt Ġ= Ġlist Add . size ĊĠĠĠĠĠĠĠ Ġm List . addAll ( list Add ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( start , Ġcount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġm List . add ( null ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( m List . size Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġm List . remove At ( m List . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( m List . size Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠUser ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġswipe ĊĠĠĠĠĠĠĠ Ġvar Ġm Swipe Re veal Layout : ĠSw ipe Re veal Layout ĊĊĠĠĠĠĠĠĠ Ġvar Ġm Swipe Action Delete : ĠImageView ĊĠĠĠĠĠĠĠ Ġvar Ġm Swipe Action Update : ĠImageView ĊĠĠĠĠĠĠĠ Ġ// Ġitem ĊĠĠĠĠĠĠĠ Ġvar Ġm View Content : ĠConstraint Layout ĊĠĠĠĠĠĠĠ Ġvar Ġm TextView Name : ĠTextView ĊĠĠĠĠĠĠĠ Ġvar Ġm ImageView Avatar : ĠImageView ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Re veal Layout Ġ= ĠitemView . findViewById ( R . id . view Holder User Swipe Re veal Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Action Delete Ġ= ĠitemView . findViewById ( R . id . view Holder User Swipe ImageView Delete ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Action Update Ġ= ĠitemView . findViewById ( R . id . view Holder User Swipe ImageView Update ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm View Content Ġ= ĠitemView . findViewById ( R . id . view Holder User Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm TextView Name Ġ= ĠitemView . findViewById ( R . id . textView ViewHolder UserName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ImageView Avatar Ġ= ĠitemView . findViewById ( R . id . imageView ViewHolder User Avatar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind View ( user : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm TextView Name . text Ġ= Ġuser . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . avatar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcw Ġ= ĠContext Wrapper ( item View . context . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdirectory Ġ= Ġcw . get Dir ( AppConfig . User . AV AT AR _ FOLDER _ NAME , ĠContext . MODE _ PRIVATE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġav ata File Ġ= ĠFile ( directory , Ġuser . avatar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( av ata File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode Stream ( FileInputStream ( av ata File )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ImageView Avatar . setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . sex Ġ== ĠS ex Type . M ALE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ImageView Avatar . setImage Resource ( R . drawable . ic _ man ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ImageView Avatar . setImage Resource ( R . drawable . ic _ w oman ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Action Delete . setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" action ", Ġ" delete ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ User Adapter . on Action Delete ( user , Ġlayout Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Action Update . setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" action ", Ġ" update ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ User Adapter . on Action Update ( user , Ġlayout Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLoading ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġm ProgressBar : ĠProgress Bar ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ProgressBar Ġ= ĠitemView . findViewById ( R . id . progress Bar ViewHolder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind View () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ProgressBar . isIn determinate Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ