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/