1*d44a6d96SWill Schurman // Copyright 2015-present 650 Industries. All rights reserved.
2*d44a6d96SWill Schurman package host.exp.exponent
3*d44a6d96SWill Schurman 
4*d44a6d96SWill Schurman import android.content.Context
5*d44a6d96SWill Schurman import host.exp.exponent.analytics.EXL
6*d44a6d96SWill Schurman import host.exp.exponent.experience.ExperienceActivity
7*d44a6d96SWill Schurman 
8*d44a6d96SWill Schurman class ExponentUncaughtExceptionHandler(private val context: Context) : Thread.UncaughtExceptionHandler {
9*d44a6d96SWill Schurman   private val oldExceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
10*d44a6d96SWill Schurman 
uncaughtExceptionnull11*d44a6d96SWill Schurman   override fun uncaughtException(thread: Thread, ex: Throwable) {
12*d44a6d96SWill Schurman     try {
13*d44a6d96SWill Schurman       ExperienceActivity.removeNotification(context)
14*d44a6d96SWill Schurman     } catch (e: Throwable) {
15*d44a6d96SWill Schurman       // Don't ever want to crash before getting to default exception handler
16*d44a6d96SWill Schurman       EXL.e(TAG, e)
17*d44a6d96SWill Schurman     }
18*d44a6d96SWill Schurman     oldExceptionHandler.uncaughtException(thread, ex)
19*d44a6d96SWill Schurman 
20*d44a6d96SWill Schurman     // TODO: open up home screen with error screen preloaded.
21*d44a6d96SWill Schurman     // KernelProvider.getInstance().handleError doesn't always work because sometimes the process gets corrupted.
22*d44a6d96SWill Schurman     System.exit(1)
23*d44a6d96SWill Schurman   }
24*d44a6d96SWill Schurman 
25*d44a6d96SWill Schurman   companion object {
26*d44a6d96SWill Schurman     private val TAG = ExponentUncaughtExceptionHandler::class.java.simpleName
27*d44a6d96SWill Schurman   }
28*d44a6d96SWill Schurman }
29