package Ġcz . ik em . d ci . z scanner . screen _ message Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ 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 Ġcz . ik em . d ci . z scanner . R Ċ import Ġcz . ik em . d ci . z scanner . Utils Ċ import Ġkotlinx . android . synt hetic . main . page _ row . view .* Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ Ċ class ĠPages Adapter ( private Ġvar Ġm Actions : ĠPage Actions Queue , Ġval Ġcontext : ĠContext ) Ġ: Ġandroidx . recyclerview . widget . RecyclerView . Adapter < Pages Adapter . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠPages Adapter :: class . java . simple Name ĊĊĠĠĠ Ġprivate Ġvar Ġm Pages : ĠMutable List < Page Actions Queue . Page > Ġ= Ġm Actions . make Pages (). to Mutable List () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . page _ row , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Pages . count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġget Bitmap ( m Pages [ position ]. path ) ĊĠĠĠĠĠĠĠ Ġ// unpack Bitmap ( m Pages [ position ]. path ) ĊĠĠĠĠĠĠĠ Ġval ĠimageView Ġ= Ġholder . m Item View . page _ image view ĊĠĠĠĠĠĠĠ ĠimageView . setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠ ĠimageView . scale Type Ġ= ĠImageView . Scale Type . FIT _ CENTER ĊĠĠĠĠĠĠĠ ĠimageView . adjust View Bounds Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠViewHolder ( val Ġm Item View : ĠView ) Ġ: Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder ( m Item View ) ĊĊĠĠĠ Ġfun Ġsync Actions Queue ( viewModel : ĠCreate Message ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠcurrentPage Actions Ġ= ĠviewModel . page Actions Queue ĊĠĠĠĠĠĠĠ Ġval Ġdiffs Ġ= ĠcurrentPage Actions . subtract Actions List ( m Actions . actions List ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( dif fs . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( diff Ġin Ġdiffs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( diff . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage Actions Queue . Page ActionType . AD DED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff . target Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pages . add ( diff . page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( m Pages . count () Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pages . add ( diff . target , Ġdiff . page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( diff . target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage Actions Queue . Page ActionType . RE MOVED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġm Pages . indexOf ( diff . page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pages . remove ( diff . page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage Actions Queue . Page ActionType . MOVED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġm Pages . indexOf ( diff . page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpg Ġ= Ġdiff . page ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pages . remove ( diff . page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pages . add ( diff . target , Ġpg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Moved ( idx , Ġdiff . target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Actions Ġ= ĠviewModel . page Actions Queue . clone () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bitmap ( path : ĠString ): ĠBitmap Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdigest Ġ= ĠUtils . digest ( path ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġcontext . cacheDir ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( directory , Ġdigest ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap : ĠBitmap ĊĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġcached Ġthumbnail Ġexists , Ġjust Ġunpack Ġand Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbm Options Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbm Options . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbm Options . in Sample Size Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbm Options . in Purge able Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap Factory . decode File ( file . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Found Ġcached Ġthumb Ġfor Ġimage Ġ${ path }") ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġno Ġcached Ġthumbnail , Ġunpack Ġoriginal Ġimage Ġand Ġsave Ġthumb Ġin Ġcache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠUtils . unpack Bitmap ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 8 0 , ĠFileOutputStream ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Generated Ġthumb Ġfor Ġimage Ġ${ path }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊĊ