1package eu.siacs.conversations.utils;
2
3import android.content.Context;
4
5import androidx.annotation.NonNull;
6
7import java.io.PrintWriter;
8import java.io.StringWriter;
9import java.io.Writer;
10import java.lang.Thread.UncaughtExceptionHandler;
11
12import eu.siacs.conversations.services.NotificationService;
13
14public class ExceptionHandler implements UncaughtExceptionHandler {
15
16 private final UncaughtExceptionHandler defaultHandler;
17 private final Context context;
18
19 ExceptionHandler(final Context context) {
20 this.context = context;
21 this.defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
22 }
23
24 @Override
25 public void uncaughtException(@NonNull Thread thread, final Throwable throwable) {
26 NotificationService.cancelIncomingCallNotification(context);
27 final Writer stringWriter = new StringWriter();
28 final PrintWriter printWriter = new PrintWriter(stringWriter);
29 throwable.printStackTrace(printWriter);
30 final String stacktrace = stringWriter.toString();
31 printWriter.close();
32 ExceptionHelper.writeToStacktraceFile(context, stacktrace);
33 this.defaultHandler.uncaughtException(thread, throwable);
34 }
35
36}