package Ġnet . v on for st . ev map . adapter Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġco il . Image Loader Ċ import Ġco il . load Ċ import Ġco il . memory . Memory Cache Ċ import Ġco il . util . Debug Logger Ċ import Ġcom . ort iz . touch view . Touch ImageView Ċ import Ġnet . v on for st . ev map . R Ċ import Ġnet . v on for st . ev map . api . going electric . Ch arger Photo ĊĊ Ċ class ĠGallery Adapter ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġval Ġitem ClickListener : ĠItem ClickListener ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġdetail View : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġpage To Load : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġimage CacheKey : ĠMemory Cache . Key ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġloaded Listener : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull Ċ ) Ġ: ĊĠĠĠ ĠList Adapter < Ch arger Photo , ĠGallery Adapter . ViewHolder >( Ch arger Photo Diff Callback ()) Ġ{ ĊĠĠĠ Ġclass ĠViewHolder ( val Ġview : ĠImageView ) Ġ: ĠRecyclerView . ViewHolder ( view ) ĊĊĠĠĠ Ġinterface ĠItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( view : ĠView , Ġposition : ĠInt , Ġimage CacheKey : ĠMemory Cache . Key ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġapi key Ġ= Ġcontext . getString ( R . string . going electric _ key ) ĊĠĠĠ Ġvar Ġloaded Ġ= Ġfalse ĊĠĠĠ Ġval Ġmemory Keys Ġ= ĠHashMap < String , ĠMemory Cache . Key ?> () ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġview : ĠImageView ĊĠĠĠĠĠĠĠ Ġif Ġ( detail View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġinflater . inflate ( R . layout . gallery _ item _ fullscreen , Ġparent , Ġfalse ) Ġas ĠImageView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOn Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// can Ġscroll Ġh orizontally Ġchecks Ġif Ġthere 's Ġstill Ġa Ġpart Ġof Ġthe Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// that Ġcan Ġbe Ġsc rolled Ġuntil Ġyou Ġreach Ġthe Ġedge ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . pointer Count Ġ>= Ġ 2 Ġ|| Ġv . can Scroll H orizontally ( 1 ) Ġ&& Ġv . can Scroll H orizontally ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// multi - touch Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN , ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDis allow ĠRecyclerView Ġto Ġintercept Ġtouch Ġevents . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . request Dis allow Intercept Touch Event ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisable Ġtouch Ġon Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAllow ĠRecyclerView Ġto Ġintercept Ġtouch Ġevents . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . request Dis allow Intercept Touch Event ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġinflater . inflate ( R . layout . gallery _ item , Ġparent , Ġfalse ) Ġas ĠImageView ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( detail View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder . view Ġas ĠTouch ImageView ). reset Zoom () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠgetItem ( position ). id ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// api . going electric . de / charge points / photo /? key =${ apikey }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"& id =$ id " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detail View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"& size = 1 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"& height =${ holder . view . height }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . view . load ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Loader Ġ= ĠImage Loader . Builder ( holder . view . context ). logger ( Debug Logger ()). build () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page To Load Ġ== Ġposition Ġ&& Ġimage CacheKey Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder Memory CacheKey ( image CacheKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder ( Color Drawable ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Hardware ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġ_, Ġmetadata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemory Keys [ id ] Ġ= Ġmetadata . memory CacheKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page To Load Ġ== Ġposition ) Ġinvoke Loaded Listener ( holder . view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! loaded Ġ&& Ġloaded Listener Ġ!= Ġnull Ġ&& Ġpage To Load Ġ== Ġposition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Ġ= Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Cancel Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( page To Load Ġ== Ġposition Ġ&& Ġimage CacheKey Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġtransition Ġimmediately ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page To Load Ġ== Ġposition ) Ġinvoke Loaded Listener ( holder . view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġholder . view . transition Name Ġ= Ġgallery Transition Name ( position ) ĊĠĠĠĠĠĠĠ Ġif Ġ( item ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . view . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem ClickListener . on Item Click ( holder . view , Ġposition , Ġmemory Keys [ id ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinvoke Loaded Listener ( ĊĠĠĠĠĠĠĠ Ġview : ĠImageView ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! loaded Ġ&& Ġloaded Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . view Tree Observer . add On Pre Draw Listener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Tree Observer . On Pre Draw Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Draw (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . view Tree Observer . remove On Pre Draw Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġgallery Transition Name ( position : ĠInt ) Ġ= Ġ" gallery _$ position " Ċ Ċ class ĠCh arger Photo Diff Callback Ġ: ĠDiff Util . Item Callback < Ch arger Photo >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠCh arger Photo , Ġnew Item : ĠCh arger Photo ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠCh arger Photo , Ġnew Item : ĠCh arger Photo ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠ Ġ} Ċ Ċ } Ċ