package Ġcom . h erry . test . app . gif . list Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . webkit . MimeType Map Ċ import Ġcom . h erry . libs . node view . model . Node Ċ import Ġcom . h erry . libs . node view . model . Node Helper Ċ import Ġcom . h erry . libs . node view . model . Node Model Group Ċ import Ġcom . h erry . test . data . Gif Media FileInfo Data Ċ import Ġcom . h erry . test . rx . Rx Cursor Iterable Ċ import Ġio . reactivex . Observable ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġh erry . park Ġon Ġ 2 0 2 0 / 0 6 / 1 1 . Ċ Ġ**/ Ċ class ĠG if List Presenter Ġ: ĠG if List Contract . Presenter () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġnodes : ĠNode < Node Model Group > Ġ= ĠNode Helper . createNode Group () ĊĠĠĠ Ġoverride Ġfun Ġon Attach ( view : ĠG if List Contract . View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( view ) ĊĊĠĠĠĠĠĠĠ Ġview . root . begin Transition () ĊĠĠĠĠĠĠĠ ĠNode Helper . add Node ( view . root , Ġnodes ) ĊĠĠĠĠĠĠĠ Ġview . root . end Transition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Launch ( view : ĠG if List Contract . View , Ġre created : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( re created ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġsets Ġlist Ġitems ĊĠĠĠĠĠĠĠ Ġload Gif List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Gif List () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribe Observable ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Gif Contents From Media Store () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Gif List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Gif List ( list : ĠMutable List < Gif Media FileInfo Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. getContext () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġthis . nodes . begin Transition () ĊĊĠĠĠĠĠĠĠ Ġval Ġnodes : ĠNode < Node Model Group > Ġ= ĠNode Helper . createNode Group () ĊĠĠĠĠĠĠĠ ĠNode Helper . add Models ( nodes , Ġ* list . to Typed Array ()) ĊĊĠĠĠĠĠĠĠ ĠNode Helper . up S ert ( this . nodes , Ġnodes ) ĊĠĠĠĠĠĠĠ Ġthis . nodes . end Transition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġfun Ġget Gif Contents From Media Store (): ĠObservable < Mutable List < Gif Media FileInfo Data >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext ? Ġ= Ġview ?. getContext () ĊĠĠĠĠĠĠĠ Ġcontext Ġ?: Ġreturn ĠObservable . empty () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphotos Ġ= Ġmutable ListOf < Gif Media FileInfo Data >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Ġ= ĠMedia Store . Images . Media . MIME _ TYPE Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( MimeType Map . get Singleton (). get MimeType From Extension (" gif ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġcontext . content Resolver ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media ._ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . DATA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . MIME _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . DISPLAY _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . SIZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . WIDTH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . DATE _ AD DED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Media Columns . DATE _ AD DED Ġ+ Ġ" ĠDESC " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRx Cursor Iterable . from ( cursor ). forEach Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġc . getString ( c . getColumnIndex ( Media Store . Images . Media ._ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġc . getString ( c . getColumnIndex ( Media Store . Images . Media . DATA )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmimeType Ġ= Ġc . getString ( c . getColumnIndex ( Media Store . Images . Media . MIME _ TYPE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdisplayName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . getString ( c . getColumnIndex ( Media Store . Images . Media . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġc . getInt ( c . getColumnIndex ( Media Store . Images . Media . SIZE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġc . getInt ( c . getColumnIndex ( Media Store . Video . Media . WIDTH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġc . getInt ( c . getColumnIndex ( Media Store . Video . Media . HEIGHT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġc . getLong ( c . getColumnIndex ( Media Store . Video . Media . DATE _ AD DED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphotos . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG if Media FileInfo Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmimeType Ġ= ĠmimeType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠdisplayName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphotos ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( content : ĠG if Media FileInfo Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. on Detail ( content ) ĊĠĠĠ Ġ} Ċ }