From 370a400abb2751ec0bacd4ae6a1f5eeb21e66132 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Mon, 8 Mar 2021 20:25:42 +0800 Subject: [PATCH] [app] Show better tips for repo load failure (#291) --- .../java/io/github/lsposed/manager/App.java | 7 ----- .../lsposed/manager/repo/RepoLoader.java | 27 ++++++++++++------- .../manager/ui/activity/RepoActivity.java | 10 +++++++ .../manager/ui/activity/RepoItemActivity.java | 22 ++++++++++++--- app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 6 files changed, 50 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/io/github/lsposed/manager/App.java b/app/src/main/java/io/github/lsposed/manager/App.java index 8bf70f48..bb871590 100644 --- a/app/src/main/java/io/github/lsposed/manager/App.java +++ b/app/src/main/java/io/github/lsposed/manager/App.java @@ -24,8 +24,6 @@ import android.annotation.SuppressLint; import android.app.Application; import android.content.Intent; import android.content.SharedPreferences; -import android.os.Handler; -import android.os.Looper; import android.util.Log; import androidx.annotation.NonNull; @@ -52,7 +50,6 @@ public class App extends Application { private static OkHttpClient okHttpClient; private static Cache okHttpCache; private SharedPreferences pref; - private final Handler handler = new Handler(Looper.getMainLooper()); public static App getInstance() { return instance; @@ -126,8 +123,4 @@ public class App extends Application { } return okHttpCache; } - - public void runOnUiThread(Runnable runnable) { - handler.post(runnable); - } } diff --git a/app/src/main/java/io/github/lsposed/manager/repo/RepoLoader.java b/app/src/main/java/io/github/lsposed/manager/repo/RepoLoader.java index 5da6afa6..427c09c8 100644 --- a/app/src/main/java/io/github/lsposed/manager/repo/RepoLoader.java +++ b/app/src/main/java/io/github/lsposed/manager/repo/RepoLoader.java @@ -21,7 +21,6 @@ package io.github.lsposed.manager.repo; import android.util.Log; -import android.widget.Toast; import androidx.annotation.NonNull; @@ -80,7 +79,9 @@ public class RepoLoader { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { Log.e(App.TAG, Log.getStackTraceString(e)); - App.getInstance().runOnUiThread(() -> Toast.makeText(App.getInstance(), e.getMessage(), Toast.LENGTH_LONG).show()); + for (Listener listener : listeners) { + listener.onThrowable(e); + } synchronized (this) { isLoading = false; } @@ -105,9 +106,11 @@ public class RepoLoader { synchronized (this) { repoLoaded = true; } - } catch (Throwable e) { - Log.e(App.TAG, Log.getStackTraceString(e)); - App.getInstance().runOnUiThread(() -> Toast.makeText(App.getInstance(), e.getMessage(), Toast.LENGTH_LONG).show()); + } catch (Throwable t) { + Log.e(App.TAG, Log.getStackTraceString(t)); + for (Listener listener : listeners) { + listener.onThrowable(t); + } } } } @@ -125,7 +128,9 @@ public class RepoLoader { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { Log.e(App.TAG, Log.getStackTraceString(e)); - App.getInstance().runOnUiThread(() -> Toast.makeText(App.getInstance(), e.getMessage(), Toast.LENGTH_LONG).show()); + for (Listener listener : listeners) { + listener.onThrowable(e); + } } @Override @@ -142,9 +147,11 @@ public class RepoLoader { for (Listener listener : listeners) { listener.moduleReleasesLoaded(module); } - } catch (Throwable e) { - Log.e(App.TAG, Log.getStackTraceString(e)); - App.getInstance().runOnUiThread(() -> Toast.makeText(App.getInstance(), e.getMessage(), Toast.LENGTH_LONG).show()); + } catch (Throwable t) { + Log.e(App.TAG, Log.getStackTraceString(t)); + for (Listener listener : listeners) { + listener.onThrowable(t); + } } } } @@ -173,5 +180,7 @@ public class RepoLoader { void repoLoaded(); void moduleReleasesLoaded(OnlineModule module); + + void onThrowable(Throwable t); } } diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoActivity.java index fd8e4ba1..eb59109f 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoActivity.java @@ -34,8 +34,11 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.lifecycle.Lifecycle; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.snackbar.Snackbar; + import java.time.Instant; import java.util.ArrayList; import java.util.Collection; @@ -90,6 +93,13 @@ public class RepoActivity extends ListActivity implements RepoLoader.Listener { } + @Override + public void onThrowable(Throwable t) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) { + Snackbar.make(binding.snackbar, getString(R.string.repo_load_failed, t.getLocalizedMessage()), Snackbar.LENGTH_SHORT).show(); + } + } + @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { int itemId = item.getItemId(); diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoItemActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoItemActivity.java index abd43446..02315146 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoItemActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoItemActivity.java @@ -36,6 +36,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; +import androidx.lifecycle.Lifecycle; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.widget.ViewPager2; @@ -156,12 +157,23 @@ public class RepoItemActivity extends BaseActivity implements RepoLoader.Listene this.module = module; if (releaseAdapter != null) { runOnUiThread(() -> { - if (module.getReleases().size() == 1) { - Snackbar.make(binding.snackbar, R.string.module_release_no_more, Snackbar.LENGTH_SHORT).show(); - } releaseAdapter.loadItems(); - releaseAdapter.notifyDataSetChanged(); }); + if (module.getReleases().size() == 1) { + Snackbar.make(binding.snackbar, R.string.module_release_no_more, Snackbar.LENGTH_SHORT).show(); + } + } + } + + @Override + public void onThrowable(Throwable t) { + if (releaseAdapter != null) { + runOnUiThread(() -> { + releaseAdapter.loadItems(); + }); + } + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) { + Snackbar.make(binding.snackbar, getString(R.string.repo_load_failed, t.getLocalizedMessage()), Snackbar.LENGTH_SHORT).show(); } } @@ -282,6 +294,8 @@ public class RepoItemActivity extends BaseActivity implements RepoLoader.Listene @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { if (position == items.size()) { + holder.progress.setVisibility(View.GONE); + holder.title.setVisibility(View.VISIBLE); holder.itemView.setOnClickListener(v -> { if (holder.progress.getVisibility() == View.GONE) { holder.title.setVisibility(View.GONE); diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1f3dc344..b06e4e1b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -183,4 +183,6 @@ 要卸载此模块吗? 已卸载%1$s 卸载失败 + 模块仓库加载失败:%s + 更旧的版本加载失败:%s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 80bfa77f..8e3d9336 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -160,6 +160,8 @@ Refresh Show older versions No more release + Failed to load module repo: %s + Failed to load older versions: %s https://github.com/LSPosed/LSPosed/