From df711db957f3f0f89e0d82d50ebc4606a2c318d1 Mon Sep 17 00:00:00 2001 From: kyori19 Date: Sun, 23 Jun 2019 16:57:29 +0900 Subject: [PATCH] [error-toast] Show toast when network error occurred --- .../keylesspalace/tusky/di/NetworkModule.kt | 3 ++ .../accelf/yuito/HttpToastInterceptor.java | 51 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 app/src/main/java/net/accelf/yuito/HttpToastInterceptor.java 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 1999e7584..0bffc770c 100644 --- a/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt +++ b/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt @@ -33,6 +33,7 @@ import dagger.Provides import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap import dagger.multibindings.IntoSet +import net.accelf.yuito.HttpToastInterceptor import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Converter @@ -79,6 +80,7 @@ class NetworkModule { addInterceptor(InstanceSwitchAuthInterceptor(accountManager)) if (BuildConfig.DEBUG) { addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BASIC }) + addInterceptor(HttpToastInterceptor(context)) } } .build() @@ -114,6 +116,7 @@ class NetworkModule { .apply { if (BuildConfig.DEBUG) { addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BASIC }) + addInterceptor(HttpToastInterceptor(context)) } } .build() diff --git a/app/src/main/java/net/accelf/yuito/HttpToastInterceptor.java b/app/src/main/java/net/accelf/yuito/HttpToastInterceptor.java new file mode 100644 index 000000000..047ec04c1 --- /dev/null +++ b/app/src/main/java/net/accelf/yuito/HttpToastInterceptor.java @@ -0,0 +1,51 @@ +package net.accelf.yuito; + +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.widget.Toast; + +import androidx.annotation.NonNull; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +public final class HttpToastInterceptor implements Interceptor { + + private Context context; + + public HttpToastInterceptor(Context context) { + this.context = context; + } + + @Override + @NonNull + public Response intercept(@NonNull Chain chain) throws IOException { + Request request = chain.request(); + Response response; + try { + response = chain.proceed(request); + } catch (Exception e) { + toast(request.method() + " " + request.url() + "\n" + e); + throw e; + } + + int code = response.code(); + if (code == 200) { + return response; + } + + toast(request.method() + " " + request.url() + "\n" + code + " " + response.message()); + + return response; + } + + private void toast(String text) { + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(() -> Toast.makeText(context, text, Toast.LENGTH_SHORT).show()); + + } +}