@ file : Suppress (" DE PREC ATION ") Ċ Ċ package Ġcom . tr inity . sample . fragment Ċ Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . tr inity . sample . R Ċ import Ġcom . tr inity . sample . adapter . Media Adapter Ċ import Ġcom . tr inity . sample . entity . Media Item Ċ import Ġcom . tr inity . sample . view . Spaces Item Decoration Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠPicture Fragment Ġ: ĠFragment () Ġ{ ĊĊĠ Ġprivate Ġval Ġm Adapter Ġ= ĠMedia Adapter () ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠD URATION Ġ= Ġ" duration " ĊĠĠĠ Ġprivate Ġval ĠPRO JECTION Ġ= ĠarrayOf ( Media Store . Files . File Columns ._ ID , ĠMedia Store . Media Columns . DATA , ĠMedia Store . Media Columns . MIME _ TYPE , ĠMedia Store . Media Columns . WIDTH , ĠMedia Store . Media Columns . HEIGHT , ĠD URATION ) ĊĠĠĠ Ġprivate Ġconst Ġval ĠORDER _ BY Ġ= ĠMedia Store . Files . File Columns ._ ID Ġ+ Ġ" ĠDESC " ĊĠĠĠ Ġprivate Ġval ĠQUERY _ URI Ġ= ĠMedia Store . Files . getContent Uri (" external ") ĊĠĠĠ Ġprivate Ġconst Ġval ĠSE LECTION _ NOT _ G IF Ġ= Ġ( Media Store . Files . File Columns . MEDIA _ TYPE Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠ Ġ+ Ġ" ĠAND Ġ" Ġ+ ĠMedia Store . Media Columns . SIZE Ġ+ Ġ"> 0 " ĊĠĠĠĠĠĠĠ Ġ+ Ġ" ĠAND Ġ" Ġ+ ĠMedia Store . Media Columns . MIME _ TYPE Ġ+ Ġ" !=' image / gif '") ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ video , Ġcontainer , Ġfalse ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠ Ġval Ġre cyclerView Ġ= Ġview . findViewById < RecyclerView >( R . id . recycler _ view ) ĊĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠGrid LayoutManager ( activity , Ġ 4 ) ĊĠĠĠ Ġre cyclerView . adapter Ġ= Ġm Adapter ĊĠĠĠ Ġre cyclerView . addItem Decoration ( Spaces Item Decoration ( Typed Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 2 f , Ġresources . display Metrics ). toInt (), Ġ 4 )) ĊĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠ Ġload Picture () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġget Select Med ias (): ĠMutable List < Media Item > Ġ{ ĊĠĠĠ Ġreturn Ġm Adapter . get Select Media () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġload Picture From Content ( content Uri : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġcursor : ĠCursor ? Ġ= Ġnull ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( Media Store . Images . Media . DATA ) ĊĠĠĠĠĠ Ġcursor Ġ= Ġcontext ?. content Resolver ?. query ( Uri . parse ( content Uri ), Ġprojection , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠ Ġval ĠcolumnIndex = Ġcursor ?. getColumnIndex OrThrow ( Media Store . Images . Media . DATA ) Ġ?: Ġ 0 ĊĠĠĠĠĠ Ġcursor ?. moveTo First () ĊĠĠĠĠĠ Ġcursor ?. getString ( column Index ) Ġ?: Ġ"" ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġsuspend Ġfun Ġload Picture () Ġ{ ĊĠĠĠ Ġval Ġmedi as Ġ= Ġmutable ListOf < Media Item >() ĊĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠ Ġval Ġcursor Ġ= Ġit . content Resolver . query ( QUERY _ URI , ĊĠĠĠĠĠĠĠĠĠ ĠPRO JECTION , ĊĠĠĠĠĠĠĠĠĠ ĠSE LECTION _ NOT _ G IF , ĊĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Media Store . Files . File Columns . MEDIA _ TYPE _ IMAGE . toString ()), ĠORDER _ BY ) ĊĠĠĠĠĠ Ġwhile Ġ( cursor ?. moveTo Next () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcursor . getLong ( cursor . getColumnIndex OrThrow ( PRO JECTION [ 0 ])) ĊĠĠĠĠĠĠĠ Ġvar Ġpath Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠQUERY _ URI . build Up on (). append Path ( id . toString ()). build (). toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( PRO JECTION [ 1 ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( path . startsWith (" content ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġload Picture From Content ( path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpicture Type Ġ= Ġcursor . getString ( cursor . getColumnIndex OrThrow ( PRO JECTION [ 2 ])) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġcursor . getInt ( cursor . getColumnIndex OrThrow ( PRO JECTION [ 3 ])) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġcursor . getInt ( cursor . getColumnIndex OrThrow ( PRO JECTION [ 4 ])) ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġcursor . getInt ( cursor . getColumnIndex OrThrow ( PRO JECTION [ 5 ])) ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠMedia Item ( path , Ġpicture Type , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġitem . duration Ġ= Ġ 3 0 0 0 ĊĠĠĠĠĠĠĠ Ġmedi as . add ( item ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcursor ?. close () ĊĊĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Adapter . add Med ias ( medi as ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }