package Ġcom . k ken su . www . image pager Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Alpha Animation Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . widget . PopupMenu Ċ import Ġandroid . widget . ToggleButton Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 . On Page Change Callback Ċ import Ġcom . k ken su . www . image pager . adapter . Image ListAdapter Ċ import Ġcom . k ken su . www . image pager . adapter . Image Page Adapter Ċ import Ġcom . k ken su . www . image pager . databinding . Activity View pager Binding Ċ import Ġcom . k ken su . www . image pager . interfaces . On Selected Image Callback Ċ import Ġcom . k ken su . www . image pager . model . ImageData Ċ import Ġcom . k ken su . www . image pager . util . Download Util Ċ import Ġjava . util .* ĊĊ Ċ class ĠImage Pager Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ IMAGE _ LIST Ġ= Ġ" ARG _ IMAGE _ LIST " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ TH UMB NA IL _ LIST Ġ= Ġ" ARG _ TH UMB NA IL _ LIST " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ CLOSE _ TYPE Ġ= Ġ" ARG _ CLOSE _ TYPE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ TITLE Ġ= Ġ" ARG _ TITLE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ POSITION Ġ= Ġ" ARG _ POSITION " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ IS _ SHOW _ MORE Ġ= Ġ" ARG _ IS _ SHOW _ MORE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ IS _ SHOW _ POSITION Ġ= Ġ" ARG _ IS _ SHOW _ POSITION " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ IS _ SHOW _ BOTTOM _ VIEW Ġ= Ġ" ARG _ IS _ SHOW _ BOTTOM _ VIEW " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġ: ĠActivity View pager Binding Ġby Ġlazy Ġ{ ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ view pager ) Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġposition Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġclose Type : ĠClose Type ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtoggle Buttons : ĠArray < ToggleButton ?> ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġtitle : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Show Position Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Show Bottom View Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġimage ListAdapter : ĠImage ListAdapter ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġimage List : ĠMutable List < ImageData >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġthumbnail List : ĠMutable List < ImageData >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġinit Data () ĊĠĠĠĠĠĠĠ Ġinit Resources () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġimage List Ġ= Ġintent . get Serializable Extra ( ARG _ IMAGE _ LIST ) Ġas ĠArrayList < ImageData > ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail List Ġ= Ġintent . get Serializable Extra ( ARG _ TH UMB NA IL _ LIST ) Ġas ĠArrayList < ImageData > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( thumbnail List ?. size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail List Ġ= Ġimage List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( thumbnail List Ġ== Ġnull Ġ|| Ġthumbnail List ?. size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail List Ġ= Ġimage List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġintent . getInt Extra ( ARG _ POSITION , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġintent . getString Extra ( ARG _ TITLE ) ĊĠĠĠĠĠĠĠ Ġis Show Position Ġ= Ġintent . getBoolean Extra ( ARG _ IS _ SHOW _ POSITION , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġis Show Bottom View Ġ= Ġintent . getBoolean Extra ( ARG _ IS _ SHOW _ BOTTOM _ VIEW , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġclose Type Ġ= ĠClose Type . from Value ( intent . getInt Extra ( ARG _ CLOSE _ TYPE , Ġ 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Resources () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Close () ĊĠĠĠĠĠĠĠ Ġinit Title () ĊĠĠĠĠĠĠĠ Ġinit Page Number () ĊĠĠĠĠĠĠĠ Ġinit ViewPager () ĊĠĠĠĠĠĠĠ Ġinit Bottom View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Title () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . txt Title . text Ġ= Ġtitle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Page Number () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . txt Position . visibility Ġ= Ġif Ġ( is Show Position ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġupdate Page Number ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Bottom View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Bottom View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this , ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage ListAdapter Ġ= ĠImage ListAdapter ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage ListAdapter ?. setItem ( thumbnail List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage ListAdapter ?. setOn SelectedItem Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . view Pager ?. currentItem Ġ= Ġit . idx !! Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= Ġimage ListAdapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewPager () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . view Pager ?. adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Page Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage List !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOn Selected Image Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Hide Menu Layout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menu () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Long ClickListener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . view Pager ?. orientation Ġ= ĠView Pager 2 . OR IENTATION _ HORIZONTAL ĊĠĠĠĠĠĠĠ Ġbinding . view Pager ?. register On Page Change Callback ( object Ġ: ĠOn Page Change Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Selected ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . re cyclerView . layout Manager Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager !!. smooth Scroll To Position ( binding . re cyclerView , ĠRecyclerView . State (), Ġ( position Ġ* Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Page Number ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Un Select () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail List ?. get ( position )?. isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage ListAdapter ?. setItem ( thumbnail List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . view Pager ?. currentItem Ġ= Ġposition ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġall Un Select () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( image Ġin Ġthis . thumbnail List !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Hide Menu Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding . layout Top . visibility Ġ== ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshow Anim : ĠAnimation Ġ= ĠAlpha Animation ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Anim . duration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Top . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Top . animation Ġ= Ġshow Anim ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Show Bottom View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . animation Ġ= Ġshow Anim ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhide Anim : ĠAnimation Ġ= ĠAlpha Animation ( 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Anim . duration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Top . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . layout Top . animation Ġ= Ġhide Anim ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Show Bottom View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . animation Ġ= Ġhide Anim ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopup Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpopup Menu Ġ= ĠPopup Menu ( this , Ġbinding . btn More ) ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . image view _ more _ menu , Ġpopup Menu . menu ) ĊĠĠĠĠĠĠĠ Ġpopup Menu . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ image _ save Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Util . download Data ( this , Ġimage List ?. get ( binding . view Pager . currentItem )?. image Ġas ĠString ?) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpopup Menu . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Page Number ( cur No : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . txt Position . text Ġ= ĠString . format ("% d Ġ/ Ġ% d ", Ġ( cur No Ġ+ Ġ 1 ), Ġimage List ?. size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Close () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( close Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClose Type . TYPE _ BACK Ġ-> Ġbinding . btn Close . setImage Resource ( R . drawable . ic _ back _ black ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClose Type . TYPE _ CLOSE Ġ-> Ġbinding . btn Close . setImage Resource ( R . drawable . ic _ nav _ close _ black ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . btn Close . setOnClickListener Ġ{ Ġfinish () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠClose Type ( var Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTYPE _ BACK ( 1 ), ĊĠĠĠĠĠĠĠ ĠTYPE _ CLOSE ( 2 ), ĊĠĠĠĠĠĠĠ Ġ; ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom Value ( value : ĠInt ): ĠClose Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( state Ġin Ġvalues ()) Ġif Ġ( state . value Ġ== Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTYPE _ BACK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }