@ file : Suppress (" Blocking Method In Non Blocking Context ") Ċ Ċ package Ġtool . xf y 9 3 2 6 . schedule . io Ċ Ċ import Ġandroid . net . Uri Ċ import Ġlib . xf y 9 3 2 6 . android . kit . io . File Helper Ċ import Ġlib . xf y 9 3 2 6 . android . kit . io . kt . use Buffer Ċ import Ġlib . xf y 9 3 2 6 . kit . as Parent Of Ċ import Ġlib . xf y 9 3 2 6 . kit . run Only Result IO Job Ċ import Ġlib . xf y 9 3 2 6 . kit . run Safe IO Job Ċ import Ġlib . xf y 9 3 2 6 . kit . run Simple IO Job Ċ import Ġok io . sink Ċ import Ġok io . source Ċ import Ġtool . xf y 9 3 2 6 . schedule . tools . ExceptionHandler Ċ Ċ object ĠCrash FileManager Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠFILE _ NAME _ CR ASH _ RECORD Ġ= Ġ" Last Crash Record " ĊĠĠĠ Ġprivate Ġval ĠFILE _ CR ASH _ RECORD Ġ= ĠPath Manager . Log Dir . as Parent Of ( FILE _ NAME _ CR ASH _ RECORD ) ĊĊĠĠĠ Ġsuspend Ġfun Ġread Crash Log ( name : ĠString ) Ġ= Ġrun Safe IO Job Ġ{ ĊĠĠĠĠĠĠĠ ĠPath Manager . Log Dir . as Parent Of ( name ). source (). use Buffer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Utf 8 () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġwrite Crash Log ( name : ĠString , Ġcontent : ĠString ) Ġ= Ġrun Only Result IO Job Ġ{ ĊĠĠĠĠĠĠĠ ĠPath Manager . Log Dir . as Parent Of ( name ). sink (). use Buffer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Utf 8 ( content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcopy LogFile ( name : ĠString , Ġuri : ĠUri ) Ġ= ĠFile Helper . copy File To Uri ( Path Manager . Log Dir . as Parent Of ( name ), Ġuri ) ĊĊĠĠĠ Ġsuspend Ġfun Ġread Crash Record (): ĠPair < Long , ĠBoolean > Ġ= Ġrun Safe IO Job ( 0 L Ġto Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Arr Ġ= ĠFILE _ CR ASH _ RECORD . source (). use Buffer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Utf 8 (). split (",") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontent Arr [ 0 ]. to Long () Ġto Ġcontent Arr [ 1 ]. to Boolean Strict () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġwrite Crash Record ( m ills : ĠLong , Ġis App Error Rel a unch : ĠBoolean ) Ġ= Ġrun Only Result IO Job Ġ{ ĊĠĠĠĠĠĠĠ ĠFILE _ CR ASH _ RECORD . sink (). use Buffer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Utf 8 ("$ m ills ,$ is App Error Rel a unch ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetAll Debug Logs Name () Ġ= Ġrun Safe IO Job Ġ{ ĊĠĠĠĠĠĠĠ ĠPath Manager . Log Dir . list Files Ġ{ Ġ_, Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith ( ExceptionHandler . CR ASH _ LOG _ FILE _ EXTENSION ) ĊĠĠĠĠĠĠĠ Ġ} ?. sorted By Descending Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . lastModified () ĊĠĠĠĠĠĠĠ Ġ} ?. map Ġ{ Ġit . name Ġ} ĊĠĠĠ Ġ} Ġ?: Ġempty List () ĊĊĠĠĠ Ġsuspend Ġfun Ġrun Crash Log Clean er ( clean Size : ĠInt ) Ġ= Ġrun Simple IO Job Ġ{ ĊĠĠĠĠĠĠĠ ĠPath Manager . Log Dir . list Files Ġ{ Ġ_, Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith ( ExceptionHandler . CR ASH _ LOG _ FILE _ EXTENSION ) ĊĠĠĠĠĠĠĠ Ġ} ?. take If Ġ{ Ġit . size Ġ- Ġ 1 Ġ> Ġclean Size Ġ+ Ġ 1 Ġ} ?. sorted By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . lastModified () ĊĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġfiles Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . take ( files . size Ġ- Ġclean Size ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }