package Ġcom . fl am yo ad . ts uk iv iew er . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . resource . drawable . Drawable Transition Options Ċ import Ġcom . fl am yo ad . ts uk iv iew er . Action Mode Listener Ċ import Ġcom . fl am yo ad . ts uk iv iew er . R Ċ import Ġcom . fl am yo ad . ts uk iv iew er . model . Bookmark Item Ċ import Ġcom . fl am yo ad . ts uk iv iew er . model . D ou jin Ċ import Ġcom . fl am yo ad . ts uk iv iew er . model . View Mode Ċ import Ġcom . fl am yo ad . ts uk iv iew er . ui . dou jin page . D ou jin Details Activity Ċ Ċ class ĠBook mark Items Adapter ( var Ġaction Mode Enabled : ĠBoolean ) ĊĠĠĠ Ġ: ĠList Adapter < Bookmark Item , ĠBook mark Items Adapter . Bookmark ViewHolder >( Bookmark Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġaction Listener : ĠAction Mode Listener < Bookmark Item >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġview Mode : ĠView Mode Ġ= ĠView Mode . NORMAL _ GRID ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBook mark ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . NORMAL _ GRID . toInt () Ġ-> Ġinflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dou jin _ list _ item _ grid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . SCAL ED . toInt () Ġ-> Ġinflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dou jin _ list _ item _ scaled , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . MIN I _ GRID . toInt () Ġ-> Ġinflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dou jin _ list _ item _ grid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Illegal Ġview Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcover Image : ĠImageView Ġ= Ġlayout . findViewById ( R . id . img Cover ) ĊĊĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠBook mark ViewHolder ( layout ) ĊĊĠĠĠĠĠĠĠ Ġlayout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Index Ġ= Ġholder . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( item Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action Mode Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Listener ?. on Multi Selection Click ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġholder . binding Adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== ĠRecyclerView . NO _ POSITION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent D ou jin Ġ= Ġitem . dou jin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen D ou jin ( it . context , Ġcurrent D ou jin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlayout . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! action Mode Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzoom In Ġ= ĠAnimation Utils . load Animation ( it . context , ĠR . anim . dou jin _ img _ zoom _ in ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzoom Out Ġ= ĠAnimation Utils . load Animation ( it . context , ĠR . anim . dou jin _ img _ zoom _ out ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover Image . start Animation ( zoom In ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Listener ?. start Action Mode () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover Image . start Animation ( zoom Out ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Index Ġ= Ġholder . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( item Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Listener ?. on Multi Selection Click ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Long ClickListener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġholder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBook mark ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetItem ( position ). id Ġ?: Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġview Mode . toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset View Mode ( mode : ĠView Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . view Mode Ġ= Ġmode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget View Mode () Ġ= Ġview Mode ĊĊĠĠĠ Ġfun Ġset Listener ( listener : ĠAction Mode Listener < Bookmark Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Listener Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠBook mark ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcover Img : ĠImageView Ġ= ĠitemView . findViewById ( R . id . img Cover ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtxt Title : ĠTextView Ġ= ĠitemView . findViewById ( R . id . txt Title Eng ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtxt Page Number : ĠTextView Ġ= ĠitemView . findViewById ( R . id . txt Page Number ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmulti Select Indicator : ĠImageView Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . findViewById ( R . id . multi Select Indicator ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠBook mark Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Select Indicator . setImage Resource ( R . drawable . ic _ check _ blue _ custom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( multi Select Indicator . drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Select Indicator . setImage Drawable ( null ) Ġ// ĠClear Ġselected Ġicon Ġif Ġexists Ġpreviously ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ou jin Ġ= Ġitem . dou jin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dou jin Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( item View . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( dou jin . pic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transition ( Drawable Transition Options . with Cross Fade ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size Multiplier ( 0 . 7 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( cover Img ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Title . text Ġ= Ġd ou jin . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Page Number . text Ġ= Ġd ou jin . numberOf Items . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen D ou jin ( context : ĠContext , Ġd ou jin : ĠD ou jin ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dou jin Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠD ou jin Details Activity :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Local D ou j ins Adapter . DO U J IN _ FILE _ PATH , Ġd ou jin . path . toString ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Local D ou j ins Adapter . DO U J IN _ NAME , Ġd ou jin . title ) ĊĊĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠBook mark Diff Callback Ġ: ĠDiff Util . Item Callback < Bookmark Item >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠBook mark Item , Ġnew Item : ĠBook mark Item ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠBook mark Item , Ġnew Item : ĠBook mark Item ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġold Item . isSelected Ġ== Ġnew Item . isSelected ĊĊĠĠĠĠĠĠĠ Ġreturn Ġstatus ĊĠĠĠ Ġ} Ċ } Ċ