diff --git a/app/src/main/java/team/retum/jobisandroidv2/JobisApplication.kt b/app/src/main/java/team/retum/jobisandroidv2/JobisApplication.kt index 6407a8275..cbb2fa6d6 100644 --- a/app/src/main/java/team/retum/jobisandroidv2/JobisApplication.kt +++ b/app/src/main/java/team/retum/jobisandroidv2/JobisApplication.kt @@ -1,7 +1,52 @@ package team.retum.jobisandroidv2 import android.app.Application +import android.content.Intent +import android.widget.Toast +import com.google.firebase.Firebase +import com.google.firebase.crashlytics.crashlytics import dagger.hilt.android.HiltAndroidApp +import team.retum.common.exception.ConnectionTimeOutException +import team.retum.common.exception.OfflineException +import team.retum.common.exception.ReissueException +import team.retum.common.exception.UnknownException +import kotlin.system.exitProcess + +private const val InternetErrorMsg = "인터넷 연결을 확인해주세요." +private const val TimeoutErrorMsg = "요청 시간이 초과되었습니다.\n다시 시도해주세요." +private const val LoginErrorMsg = "유저정보가 확인되지 않습니다.\n다시 로그인 해주세요." +private const val UnknownErrorMsg = "처리 중 문제가 발생했습니다." @HiltAndroidApp -class JobisApplication : Application() +class JobisApplication : Application() { + override fun onCreate() { + super.onCreate() + + Thread.setDefaultUncaughtExceptionHandler { _, e -> + Firebase.crashlytics.recordException(e) + + when (e) { + is OfflineException -> makeToast(InternetErrorMsg) + is ConnectionTimeOutException -> makeToast(TimeoutErrorMsg) + is ReissueException -> makeToast(LoginErrorMsg) + is UnknownException -> makeToast(UnknownErrorMsg) + else -> makeToast(UnknownErrorMsg) + } + + val intent = this.packageManager.getLaunchIntentForPackage(this.packageName) + if (intent != null) { + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) + this.startActivity(intent) + exitProcess(0) + } + } + } + + private fun makeToast(message: String) { + Toast.makeText( + this, + message, + Toast.LENGTH_SHORT, + ).show() + } +} diff --git a/core/common/src/main/java/team/retum/common/exception/RequestExceptions.kt b/core/common/src/main/java/team/retum/common/exception/RequestExceptions.kt index d35169974..ea5d906be 100644 --- a/core/common/src/main/java/team/retum/common/exception/RequestExceptions.kt +++ b/core/common/src/main/java/team/retum/common/exception/RequestExceptions.kt @@ -10,3 +10,5 @@ data object TooManyRequestException : RuntimeException() data object ServerException : RuntimeException() data object OfflineException : RuntimeException() data object ConnectionTimeOutException : RuntimeException() +data object UnknownException : RuntimeException() +data object ReissueException : RuntimeException() diff --git a/core/network/src/main/java/team/retum/network/util/RefreshTokenService.kt b/core/network/src/main/java/team/retum/network/util/RefreshTokenService.kt index 523150d72..6e10524a2 100644 --- a/core/network/src/main/java/team/retum/network/util/RefreshTokenService.kt +++ b/core/network/src/main/java/team/retum/network/util/RefreshTokenService.kt @@ -7,6 +7,7 @@ import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory import team.retum.common.enums.PlatformType +import team.retum.common.exception.ReissueException import team.retum.network.BuildConfig import team.retum.network.api.AuthApi import team.retum.network.model.response.TokenResponse @@ -40,7 +41,7 @@ object RefreshTokenService { }.onSuccess { token -> return token }.onFailure { - throw IllegalStateException("Fail refresh: ${it.message}") + throw ReissueException }.getOrThrow() } } diff --git a/core/network/src/main/java/team/retum/network/util/RequestHandler.kt b/core/network/src/main/java/team/retum/network/util/RequestHandler.kt index 622b6e85a..1d1eb6cb6 100644 --- a/core/network/src/main/java/team/retum/network/util/RequestHandler.kt +++ b/core/network/src/main/java/team/retum/network/util/RequestHandler.kt @@ -11,6 +11,7 @@ import team.retum.common.exception.OfflineException import team.retum.common.exception.ServerException import team.retum.common.exception.TooManyRequestException import team.retum.common.exception.UnAuthorizedException +import team.retum.common.exception.UnknownException import java.net.SocketTimeoutException import java.net.UnknownHostException @@ -63,6 +64,6 @@ class RequestHandler { } catch (e: UnknownHostException) { throw OfflineException } catch (e: Throwable) { - throw e + throw UnknownException } }