package Ġcom . y az ant ar ifi . issuer . android Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Resolve Info Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Media Store Ċ import Ġandroidx . activity . result . contract . Activity Result Contract Ċ import Ġandroidx . core . content . File Provider Ċ import Ġjava . io . File Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠImage Picker Contact Results : ĠActivity Result Contract < Unit , ĠUri >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġphoto Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Real Path From URI ( context : ĠContext , Ġcontent URI : ĠUri ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġcontext . content Resolver . query ( content URI , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġcontent URI . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . moveTo First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx : ĠInt Ġ= Ġcursor . getColumnIndex ( Media Store . Images . Image Columns . DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġcursor . getString ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Intent ( context : ĠContext , Ġinput : ĠUnit ?): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġopen Image Intent ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse Result ( result Code : ĠInt , Ġintent : ĠIntent ?): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ!= ĠActivity . RESULT _ OK ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġintent ?. data Ġ?: Ġphoto Uri ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Image Intent ( context : ĠContext ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġphoto Uri Ġ= Ġcreate Photo Taken Uri ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġg all Intent Ġ= ĠIntent ( Intent . ACTION _ GET _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġg all Intent . type Ġ= Ġ" image /* " ĊĊĠĠĠĠĠĠĠ Ġ// Ġlook Ġfor Ġavailable Ġintent s ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠArrayList < Resolve Info >() ĊĠĠĠĠĠĠĠ Ġval Ġyour Intent s List Ġ= ĠArrayList < Intent >() ĊĠĠĠĠĠĠĠ Ġval Ġpackage Manager Ġ= Ġcontext . package Manager ĊĊĠĠĠĠĠĠĠ Ġpackage Manager . query Intent Activities ( g all Intent , Ġ 0 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinal Intent Ġ= ĠIntent ( g all Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Intent . component Ġ= ĠComponent Name ( it . activity Info . packageName , Ġit . activity Info . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyour Intent s List . add ( final Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcho oser Ġ= ĠIntent . create Chooser ( g all Intent , Ġ" Select Ġsource ") ĊĠĠĠĠĠĠĠ Ġcho oser . putExtra ( Intent . EXTRA _ INITIAL _ INT ENTS , Ġyour Intent s List . to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcho oser ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate File ( context : ĠContext ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠSimpleDateFormat (" yyyy MM dd _ HH mm ss ", ĠLocale . US ). format ( Date ()) ĊĠĠĠĠĠĠĠ Ġval Ġimage FileName Ġ= Ġ" IMG _" Ġ+ Ġtime Stamp Ġ+ Ġ"_" ĊĠĠĠĠĠĠĠ Ġval Ġstorage Dir Ġ= Ġcontext . get External Files Dir ( Environment . DIRECTORY _ PI CTURE S ) Ġ?: Ġthrow ĠIllegalStateException (" Dir Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġreturn ĠFile . create TempFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage FileName , Ġ Ġ/* Ġprefix Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". jpg ", Ġ Ġ/* Ġsuffix Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Dir Ġ/* Ġdirectory Ġ*/ ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Photo Taken Uri ( context : ĠContext ): ĠUri Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġcreate File ( context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Provider . get Uri For File ( context , Ġ" Issuer " Ġ+ Ġ". provider ", Ġfile ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUri . from File ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }