package Ġme . pe ace . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġme . pe ace . constant . Constant Ċ import Ġjava . io .* Ċ Ċ object ĠCrash Utils Ġ{ ĊĠĠĠ Ġfun Ġsave ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , Ġthrowable : ĠThrowable , ĊĠĠĠĠĠĠĠ Ġdate : ĠString , Ġcrash Record Count : ĠInt ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" Crash -$ date . log " ĊĠĠĠĠĠĠĠ Ġval Ġcrash Dir Ġ= Ġcontext . cacheDir . path Ġ+ ĠConstant . CR ASH _ DIR ĊĠĠĠĠĠĠĠ Ġval Ġcrash Path Ġ= Ġcrash Dir Ġ+ ĠfileName ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( crash Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! create File ( file , Ġcrash Record Count )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwrite ( file , Ġthrowable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate File ( file : ĠFile ?, Ġcrash Record Count : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠFile ( file . parent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdir . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Files Ġ= Ġlist Files ( dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Files Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġchild Files . size Ġ- Ġcrash Record Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Modified File Ġ= Ġfind First Modified File ( dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Modified File ?. delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite ( file : ĠFile , Ġthrowable : ĠThrowable ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġthrowable Ġ= Ġthrowable ĊĠĠĠĠĠĠĠ Ġval Ġwriter : ĠPrintWriter ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= ĠPrintWriter ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcause Ġ= Ġthrowable . cause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġcause Ġ?: Ġthrowable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . printStackTrace ( writer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind LastModified File ( file : ĠFile ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlast Modified File : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġtimestamp : ĠLong Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġlist Files ( file )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Modified Ġ= Ġf !!. lastModified () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lastModified Ġ> Ġtimestamp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġlast Modified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Modified File Ġ= Ġf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlast Modified File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind First Modified File ( file : ĠFile ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Modified File : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġtimestamp Ġ= ĠLong . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġlist Files ( file )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Modified Ġ= Ġf !!. lastModified () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lastModified Ġ< Ġtimestamp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġlast Modified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Modified File Ġ= Ġf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfirst Modified File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Crash File ( context : ĠContext ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcrash Dir Ġ= Ġcontext . cacheDir . path Ġ+ ĠConstant . CR ASH _ DIR ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( crash Dir ) ĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Modified File Ġ= Ġfind LastModified File ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lastModified File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlast Modified File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġread ( file : ĠFile ?): ĠArrayList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġfile ?. reader (). use { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ?. read Lines () Ġas ĠArrayList < String > ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlist Files ( file : ĠFile ?): ĠArray < File ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! file . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf Null s ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġfile . list Files ( Filename Filter Ġ{ Ġdir , Ġname Ġ-> ĠUtils . contains ( name ) Ġ}) ĊĠĠĠ Ġ} Ċ }