From e63102712be40b14b0bc8944f20bc357b524f7a7 Mon Sep 17 00:00:00 2001 From: kyori19 Date: Sun, 11 Jun 2023 14:28:54 +0900 Subject: [PATCH] [debug] Show toast when network error occurred --- .../keylesspalace/tusky/di/NetworkModule.kt | 2 ++ .../tusky/network/HttpToastInterceptor.kt | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 app/src/main/java/com/keylesspalace/tusky/network/HttpToastInterceptor.kt diff --git a/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt b/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt index 03b4ad394..485a73b42 100644 --- a/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt +++ b/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt @@ -25,6 +25,7 @@ import com.google.gson.GsonBuilder import com.keylesspalace.tusky.BuildConfig import com.keylesspalace.tusky.db.AccountManager import com.keylesspalace.tusky.json.Rfc3339DateJsonAdapter +import com.keylesspalace.tusky.network.HttpToastInterceptor import com.keylesspalace.tusky.network.InstanceSwitchAuthInterceptor import com.keylesspalace.tusky.network.MastodonApi import com.keylesspalace.tusky.network.MediaUploadApi @@ -105,6 +106,7 @@ class NetworkModule { addInterceptor(InstanceSwitchAuthInterceptor(accountManager)) if (BuildConfig.DEBUG) { addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BASIC }) + addInterceptor(HttpToastInterceptor(context)) } } .build() diff --git a/app/src/main/java/com/keylesspalace/tusky/network/HttpToastInterceptor.kt b/app/src/main/java/com/keylesspalace/tusky/network/HttpToastInterceptor.kt new file mode 100644 index 000000000..d8edfb0a2 --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/network/HttpToastInterceptor.kt @@ -0,0 +1,31 @@ +package com.keylesspalace.tusky.network + +import android.content.Context +import android.widget.Toast +import androidx.core.content.ContextCompat +import okhttp3.Interceptor +import okhttp3.Response + +class HttpToastInterceptor( + private val context: Context, +) : Interceptor { + + override fun intercept(chain: Interceptor.Chain): Response { + val request = chain.request() + + return runCatching { chain.proceed(request) } + .onSuccess { + if (!it.isSuccessful) { + showToast("${request.method} ${request.url}\n${it.code} ${it.message}") + } + } + .onFailure { showToast("${request.method} ${request.url}\n${it}") } + .getOrThrow() + } + + private fun showToast(message: String) { + ContextCompat.getMainExecutor(context).execute { + Toast.makeText(context, message, Toast.LENGTH_SHORT).show() + } + } +}