package Ġcom . pr at iks ah u . dok ify . ui . dialogs Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity . RESULT _ OK Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġcom . pr at iks ah u . dok ify . databinding . Crop Or Convert Dialog Binding Ċ import Ġcom . pr at iks ah u . dok ify . model . Doc Info Ċ import Ġcom . pr at iks ah u . dok ify . ui . view Pager Home . image Pager . Image Pager ViewModel Ċ import Ġcom . the ar to f dev . ed mod o . crop per . Crop Image Ċ import Ġcom . the ar to f dev . ed mod o . crop per . Crop ImageView Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . android . synt hetic . main . crop _ or _ convert _ dialog .* Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . nio . file . Standard Copy Option Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class Ġcrop _ or _ convert _ dialog Ġ: ĠDialog Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġimage Pager ViewModel : ĠImage Pager ViewModel ĊĠĠĠ Ġlateinit Ġvar Ġselected Image : ĠDoc Info ĊĊĠĠĠ Ġprivate Ġval Ġnav Controller Ġby Ġlazy Ġ{ ĠNav Host Fragment . find Nav Controller ( this ) Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠC rop Or Convert Dialog Binding ĊĊĠĠĠ Ġlateinit Ġvar Ġcurrent Photo Path : ĠString ĊĠĠĠ Ġlateinit Ġvar Ġphoto Uri : ĠUri ĊĊĊĠĠĠ Ġprivate Ġvar Ġdelete Original : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Observer s () ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠC rop Or Convert Dialog Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . P ) ĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġkeep Original . text Ġ= Ġ" Delete ĠOriginal ĠPhoto " ĊĠĠĠĠĠĠĠ Ġinit Listeners () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġkeep Original . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcrop Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Crop Activity () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġkeep Original . setOn Checked ChangeListener Ġ{ Ġbutton View , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Original Ġ= Ġis Checked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Pager ViewModel . selected Image . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Image Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Crop Activity () Ġ{ ĊĠĠĠĠĠĠĠ ĠC rop Image . activity ( selected Image . image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Guide lines ( Crop ImageView . Guide lines . ON ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( require Context (), Ġthis ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Suppress Lint (" New Api ") ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠC rop Image . getActivity Result ( data ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// User Ġdecided Ġto Ġdelete Ġold Ġphoto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delete Original ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( selected Image . image Uri . path ). delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Uri : ĠUri Ġ= Ġresult . uri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Path : ĠString Ġ= Ġresult Uri . path . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdest Path Ġ= Ġcurrent Photo Path ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Move Ġfrom Ġcache Ġto Ġdesired Ġlocation ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Files ( Paths . get ( src Path ), ĠPaths . get ( dest Path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Delete Ġthe Ġcached Ġimage Ġif Ġsuccessfully Ġcopied ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( src Path ). delete () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Updating ĠViewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Pager ViewModel . init Images () ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( current Photo Path ). delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġfun Ġmove Files ( src Path : ĠPath , Ġdest Path : ĠPath ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠFiles . move ( src Path , Ġdest Path , ĠStandard Copy Option . REPLACE _ EXIST ING )?. let Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( it . to Uri ()). exists (). let Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// if Ġreaches Ġhere Ġthen Ġfile Ġnot Ġcreated ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġcreate File () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġphoto File : ĠFile ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Image File () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠError Ġoccurred Ġwhile Ġcreating Ġthe ĠFile ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast Message (" Error ĠCreating ĠFile ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Creating ĠUri Ġfor Ġgenerated Ġpath ĊĠĠĠĠĠĠĠ Ġphoto File ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Uri Ġ= ĠFile Provider . get Uri For File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" com . pr at iks ah u . android . file provider ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SimpleDateFormat ") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcreate Image File (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Stamp : ĠString Ġ= ĠSimpleDateFormat (" yyyy MM dd _ HH mm ss "). format ( Date ()) ĊĠĠĠĠĠĠĠ Ġval Ġstorage Dir : ĠFile ? Ġ= Ġcontext ?. get External Files Dir ( Environment . DIRECTORY _ PI CTURE S ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFile . create TempFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" JPEG _${ time Stamp }_ ", Ġ/* Ġprefix Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". jpg ", Ġ/* Ġsuffix Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Dir Ġ/* Ġdirectory Ġ*/ ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġa Ġfile : Ġpath Ġfor Ġuse Ġwith ĠACTION _ VIEW Ġintent s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Photo Path Ġ= Ġabsolute Path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠToast Message ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġmsg , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ }