package Ġde . app com . k mp playground . pixel sort . presentation Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Environment Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . lifecycle . Lifecycle . Event . ON _ DESTROY Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Date Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġapp com Ġinteractive ĠGmbH Ġon Ġ 2 0 1 9 - 1 1 - 2 2 . Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 Ġapp com Ġinteractive ĠGmbH . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ class ĠPixel sort Presenter Impl Ġ@ Inject Ġconstructor ( ĊĠ Ġvar Ġview : ĠPixel sort View , ĊĠ Ġvar Ġcontext : ĠContext , ĊĠ Ġvar Ġactivity : ĠPixel sort Activity Ċ ) Ġ: ĠPixel sort Presenter Ġ{ ĊĊĠ Ġprivate Ġvar Ġimage Path : ĠString Ġ= Ġ"" ĊĠ Ġval ĠPER MISSION _ CAMERA _ REQUEST _ ID Ġ= Ġ 0 ĊĊĠ Ġ@ On Lifecycle Event ( ON _ DESTROY ) ĊĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġdelete Temp Image File () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġtake Picture () Ġ{ ĊĠĠĠ Ġif Ġ( has Camera Permission ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġtemporary File Ġ= Ġcreate Temp Image File () ĊĠĠĠĠĠ Ġif Ġ( temporary File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġphoto URI : ĠUri Ġ= ĊĠĠĠĠĠĠĠĠĠ ĠFile Provider . get Uri For File ( context , Ġ" de . app com . k mp playground . provider ", Ġtemporary File ) ĊĠĠĠĠĠĠĠ Ġimage Path Ġ= Ġtemporary File . absolute Path ĊĠĠĠĠĠĠĠ Ġview . start Camera ( photo URI ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġview . show Error (" File Ġcould Ġnot Ġbe Ġcreated ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġrequest Camera Permission () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġchoose Picture From Gallery () Ġ{ ĊĠĠĠ Ġview . start Gallery () ĊĠ Ġ} ĊĊĠ Ġfun Ġhas Camera Permission (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠ ĠManifest . permission . CAMERA ĊĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠ Ġ} ĊĊĠ Ġfun Ġrequest Camera Permission () Ġ{ ĊĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( activity , ĠManifest . permission . CAMERA )) Ġ{ ĊĠĠĠĠĠ Ġview . show Error (" You Ġneed Ġto Ġenable Ġcamera Ġin Ġsettings ") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠ ĠPER MISSION _ CAMERA _ REQUEST _ ID ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Picture Taken () Ġ{ ĊĠĠĠ Ġview . show Image ( image Path ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Picture Ch osen ( uri : ĠUri ?) Ġ{ ĊĠĠĠ Ġif Ġ( uri Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġview . show Error (" Image Ġnot Ġfound ") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġwrite Image ToFile ( uri ) ĊĠĠĠĠĠ Ġview . show Image ( image Path ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Request Permission Result ( ĊĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠ Ġgrant Results : ĠInt Array ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ( request Code Ġ== ĠPER MISSION _ CAMERA _ REQUEST _ ID Ġ&& Ġgrant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġcamera Ġpermission Ġgranted ĊĠĠĠĠĠ Ġtake Picture () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Temp Image File (): ĠFile ? Ġ{ ĊĠĠĠ Ġ// ĠCreate Ġan Ġimage Ġfile Ġname ĊĠĠĠ Ġval Ġtime Stamp : ĠString Ġ= ĠSimpleDateFormat (" yyyy MM dd _ HH mm ss "). format ( Date ()) ĊĠĠĠ Ġ// ĠAccess Ġstorage Ġdirectory ĊĠĠĠ Ġval Ġstorage Dir : ĠFile ? Ġ= Ġcontext . get External Files Dir ( Environment . DIRECTORY _ PI CTURE S ) ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ ĠFile . create TempFile ( ĊĠĠĠĠĠĠĠ Ġ" JPEG _${ time Stamp }_ ", ĊĠĠĠĠĠĠĠ Ġ". jpg ", ĊĠĠĠĠĠĠĠ Ġstorage Dir ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġwrite Image ToFile ( content Uri : ĠUri ): ĠString Ġ{ ĊĠĠĠ Ġval Ġfile : ĠFile ? Ġ= Ġcreate Temp Image File () ĊĠĠĠ Ġif Ġ( file Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġimage Path Ġ= Ġfile . absolute Path ĊĠĠĠĠĠ Ġvar ĠinputStream : ĠInputStream ? Ġ= Ġnull ĊĠĠĠĠĠ Ġvar ĠoutputStream : ĠOutputStream ? Ġ= Ġnull ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġcontext . getContent Resolver (). open InputStream ( content Uri ) ĊĠĠĠĠĠĠĠ ĠoutputStream Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠ Ġif Ġ( inputStream Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( inputStream . read Bytes ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ( exception ) ĊĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ ĠoutputStream ?. close () ĊĠĠĠĠĠĠĠ ĠinputStream ?. close () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ"" ĊĠ Ġ} ĊĊĠ Ġfun Ġdelete Temp Image File () Ġ{ ĊĠĠĠ Ġif Ġ( image Path Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠ ĠFile ( image Path ). delete () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }