package Ġcom . opens oo q . super nova . gl igar . dataSource Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġcom . opens oo q . Open S oo q . ui . image Picker . model . Album Item Ċ import Ġcom . opens oo q . Open S oo q . ui . image Picker . model . Media Item Ċ import Ġcom . opens oo q . Open S oo q . ui . image Picker . model . Image Source Ċ import Ġcom . opens oo q . super nova . gl igar . utils .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠH ani ĠAl M om ani Ġon Ġ 2 4 , September , 2 0 1 9 Ċ Ġ*/ Ċ Ċ internal Ġclass ĠImages DataSource ( private Ġval Ġcontent Resolver : ĠContent Resolver ){ ĊĊĠĠĠ Ġprivate Ġval Ġselection Ġ= Ġ( Media Store . Files . File Columns . MEDIA _ TYPE Ġ+ Ġ"=" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠMedia Store . Files . File Columns . MEDIA _ TYPE _ IMAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠOR Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠMedia Store . Files . File Columns . MEDIA _ TYPE Ġ+ Ġ"=" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠMedia Store . Files . File Columns . MEDIA _ TYPE _ VIDEO ) ĊĊĠĠĠ Ġfun Ġload Album s (): ĠArrayList < Album Item > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġalbum Cursor Ġ= Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Files . File Columns . BUCKET _ DISPLAY _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Files . File Columns . BUCKET _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠORDER _ BY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" bucket _ display _ name ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" bucket _ id " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠORDER _ BY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġarray ListOf < Album Item >() ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Album Item (" All ", Ġtrue , Ġ" 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Cursor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Cursor . do While Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbucket Id Ġ= Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Cursor . getString ( album Cursor . getColumnIndex ( Media Store . Files . File Columns . BUCKET _ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Cursor . getString ( album Cursor . getColumnIndex (" bucket _ id ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Cursor . getString ( album Cursor . getColumnIndex ( Media Store . Files . File Columns . BUCKET _ DISPLAY _ NAME )) Ġ?: Ġbucket Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Cursor . getString ( album Cursor . getColumnIndex (" bucket _ display _ name ")) Ġ?: Ġbucket Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum Item Ġ= ĠAlbum Item ( name , Ġfalse , Ġbucket Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! list . contains ( album Item ) Ġ&& Ġ! name . isNull OrEmpty () Ġ&& Ġ! bucket Id . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( album Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Cursor Ġ!= Ġnull Ġ&& Ġ! album Cursor . is Closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Cursor . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Album Images ( ĊĠĠĠĠĠĠĠ Ġalbum Item : ĠAlbum Item ?, ĊĠĠĠĠĠĠĠ Ġpage : ĠInt ĊĠĠĠ Ġ): ĠArrayList < Media Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġpage Ġ* ĠPAGE _ SIZE ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠArrayList < Media Item > Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġvar Ġphoto Cursor : ĠCursor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( Content Resolver . QUERY _ ARG _ LIMIT , ĠPAGE _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( Content Resolver . QUERY _ ARG _ OFFSET , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Content Resolver . QUERY _ ARG _ SQL _ SORT _ ORDER , ĠORDER _ BY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Item Ġ!= Ġnull Ġ&& Ġ! album Item . is All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent Resolver . QUERY _ ARG _ SQL _ SELECTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Media Store . Files . File Columns . BUCKET _ ID } Ġ= ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String Array ( Content Resolver . QUERY _ ARG _ SQL _ SELECTION _ ARGS , ĠarrayOf ( album Item . bucket Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġput String ( Content Resolver . QUERY _ ARG _ SQL _ SELECTION , Ġselection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Cursor Ġ= Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ COLUMN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPATH _ COLUMN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIME _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Cursor Ġ= Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ COLUMN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPATH _ COLUMN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIME _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Item Ġ== Ġnull Ġ|| Ġalbum Item . is All ) Ġselection Ġelse Ġ"${ Media Store . Files . File Columns . BUCKET _ ID } Ġ= ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Item Ġ== Ġnull Ġ|| Ġalbum Item . is All ) Ġnull Ġelse ĠarrayOf ( album Item . bucket Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ ORDER _ BY ĠLIMIT Ġ$ PAGE _ SIZE ĠOFFSET Ġ$ offset " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Cursor ?. is After Last Ġ?: Ġreturn Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Cursor . do While Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġphoto Cursor . getString (( photo Cursor . getColumnIndex ( PATH _ COLUMN ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmimeType Ġ= Ġphoto Cursor . getString (( photo Cursor . getColumnIndex ( MIME _ TYPE ))) Ġ?: Ġ" null " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Media Item ( mime Type . contains (" video "), Ġimage , ĠImage Source . G ALL ERY , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photo Cursor Ġ!= Ġnull Ġ&& Ġ! photo Cursor . is Closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Cursor . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} Ċ }