File tree 3 files changed +25
-3
lines changed
firebase-crashlytics-ndk/src/main/java/com/google/firebase/crashlytics/ndk 3 files changed +25
-3
lines changed Original file line number Diff line number Diff line change @@ -22,5 +22,7 @@ interface CrashFilesManager {
22
22
23
23
File getSessionFileDirectory (String sessionId );
24
24
25
- void deleteSessionFilesDirectory (String sessionId );
25
+ void deleteSessionFileDirectory (String sessionId );
26
+
27
+ void cleanOldSessionFileDirectories ();
26
28
}
Original file line number Diff line number Diff line change 29
29
30
30
class CrashpadController implements NativeComponentController {
31
31
32
+ @ SuppressWarnings ("CharsetObjectCanBeUsed" ) // StandardCharsets requires API level 19.
32
33
private static final Charset UTF_8 = Charset .forName ("UTF-8" );
34
+
33
35
private static final String SESSION_METADATA_FILE = "session.json" ;
34
36
private static final String APP_METADATA_FILE = "app.json" ;
35
37
private static final String DEVICE_METADATA_FILE = "device.json" ;
@@ -48,6 +50,7 @@ class CrashpadController implements NativeComponentController {
48
50
@ Override
49
51
public boolean initialize (String sessionId ) {
50
52
boolean initSuccess = false ;
53
+ filesManager .cleanOldSessionFileDirectories ();
51
54
final File crashReportDirectory = filesManager .getSessionFileDirectory (sessionId );
52
55
try {
53
56
if (crashReportDirectory != null ) {
@@ -71,7 +74,8 @@ public boolean hasCrashDataForSession(String sessionId) {
71
74
72
75
@ Override
73
76
public boolean finalizeSession (String sessionId ) {
74
- filesManager .deleteSessionFilesDirectory (sessionId );
77
+ filesManager .deleteSessionFileDirectory (sessionId );
78
+ filesManager .cleanOldSessionFileDirectories ();
75
79
return true ;
76
80
}
77
81
Original file line number Diff line number Diff line change 17
17
import androidx .annotation .NonNull ;
18
18
import androidx .annotation .Nullable ;
19
19
import java .io .File ;
20
+ import java .util .Arrays ;
21
+ import java .util .Comparator ;
20
22
21
23
class NdkCrashFilesManager implements CrashFilesManager {
24
+ private static final Comparator <? super File > LATEST_SESSION_FIRST =
25
+ (f1 , f2 ) -> f2 .getName ().compareTo (f1 .getName ());
26
+ private static final int MAX_SESSIONS = 8 ;
22
27
23
28
private final File rootPath ;
24
29
@@ -38,10 +43,21 @@ public File getSessionFileDirectory(String sessionId) {
38
43
}
39
44
40
45
@ Override
41
- public void deleteSessionFilesDirectory (String sessionId ) {
46
+ public void deleteSessionFileDirectory (String sessionId ) {
42
47
recursiveDelete (new File (rootPath , sessionId ));
43
48
}
44
49
50
+ @ Override
51
+ public void cleanOldSessionFileDirectories () {
52
+ File [] sessionFileDirectories = rootPath .listFiles (File ::isDirectory );
53
+ if (sessionFileDirectories != null && sessionFileDirectories .length > MAX_SESSIONS ) {
54
+ Arrays .sort (sessionFileDirectories , LATEST_SESSION_FIRST );
55
+ for (int i = MAX_SESSIONS ; i < sessionFileDirectories .length ; i ++) {
56
+ recursiveDelete (sessionFileDirectories [i ]);
57
+ }
58
+ }
59
+ }
60
+
45
61
@ Nullable
46
62
private static File prepareDirectory (File file ) {
47
63
if (file != null ) {
You can’t perform that action at this time.
0 commit comments