From 9f637a602c88c353dc948e4e37bb2db65ac9b774 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 10 Sep 2024 09:19:43 -0300 Subject: [PATCH 1/4] [app] Don't crash on malformed fdroid.link Uri Fixes acra-crash-reports#740 --- .../src/main/java/org/fdroid/repo/RepoUriGetter.kt | 2 +- .../test/java/org/fdroid/repo/RepoUriGetterTest.kt | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/libs/database/src/main/java/org/fdroid/repo/RepoUriGetter.kt b/libs/database/src/main/java/org/fdroid/repo/RepoUriGetter.kt index d36afb8c9..7fc8e3255 100644 --- a/libs/database/src/main/java/org/fdroid/repo/RepoUriGetter.kt +++ b/libs/database/src/main/java/org/fdroid/repo/RepoUriGetter.kt @@ -16,7 +16,7 @@ internal object RepoUriGetter { it.buildUpon().scheme("http").build() } - it.host == "fdroid.link" -> getFdroidLinkUri(it) + it.host == "fdroid.link" && it.encodedFragment != null -> getFdroidLinkUri(it) it.scheme.isNullOrBlank() -> { // assume https:// when no scheme given diff --git a/libs/database/src/test/java/org/fdroid/repo/RepoUriGetterTest.kt b/libs/database/src/test/java/org/fdroid/repo/RepoUriGetterTest.kt index 5eba87ff4..00b7a947e 100644 --- a/libs/database/src/test/java/org/fdroid/repo/RepoUriGetterTest.kt +++ b/libs/database/src/test/java/org/fdroid/repo/RepoUriGetterTest.kt @@ -90,6 +90,18 @@ internal class RepoUriGetterTest { val uri3 = RepoUriGetter.getUri("https://fdroid.link/#http://f-droid.org/repo") assertEquals("http://f-droid.org/repo", uri3.uri.toString()) assertNull(uri3.fingerprint) + + val uri4 = RepoUriGetter.getUri("https://fdroid.link/") + // we don't care what it is as long as it doesn't crash + assertNull(uri4.fingerprint) + + val uri5 = RepoUriGetter.getUri("https://fdroid.link/#foo") + // we don't care what it is as long as it doesn't crash + assertNull(uri5.fingerprint) + + val uri6 = RepoUriGetter.getUri("https://fdroid.link/#invalid://foo.bar") + // we don't care what it is as long as it doesn't crash + assertNull(uri6.fingerprint) } @Test From 650dc4432ab121addfad86705caebb395777ad85 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 10 Sep 2024 09:39:44 -0300 Subject: [PATCH 2/4] [app] Don't crash when trying to enable Wi-Fi Fixes acra-crash-reports#741 --- .../org/fdroid/fdroid/nearby/SwapWorkflowActivity.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java index 34fed2e54..150a7abef 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java @@ -492,7 +492,13 @@ public class SwapWorkflowActivity extends AppCompatActivity { if (Build.VERSION.SDK_INT <= 28) { wifiManager.setWifiEnabled(false); } - if (wifiApControl.enable()) { + boolean wifiEnabled = false; + try { + wifiEnabled = wifiApControl.enable(); + } catch (Exception e) { + Log.e(TAG, "Error enabling WiFi: ", e); + } + if (wifiEnabled) { Toast.makeText(this, R.string.swap_toast_hotspot_enabled, Toast.LENGTH_SHORT).show(); SwapService.putHotspotActivatedUserPreference(true); } else { From 3590bad5d3d7c309c2eda5d51d7e819a177e71ac Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 10 Sep 2024 10:32:31 -0300 Subject: [PATCH 3/4] [app] Show Toast from UiThread to avoid crash Fixes acra-crash-reports#748 --- app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt b/app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt index eb056ff21..1ee1a7608 100644 --- a/app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt +++ b/app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt @@ -1,6 +1,8 @@ package org.fdroid.fdroid import android.content.Context +import android.os.Handler +import android.os.Looper import android.util.Log import android.widget.Toast import android.widget.Toast.LENGTH_LONG @@ -149,7 +151,10 @@ class RepoUpdateManager @JvmOverloads constructor( msgBuilder.append("$repoName: ${e.localizedMessage} ${cause.localizedMessage}") } } - Toast.makeText(context, msgBuilder.toString(), LENGTH_LONG).show() + // can't show Toast from background thread, so we need to move this to UiThread + Handler(Looper.getMainLooper()).post { + Toast.makeText(context, msgBuilder.toString(), LENGTH_LONG).show() + } } override fun onDownloadProgress(repo: Repository, bytesRead: Long, totalBytes: Long) { From da717bca621133f867348d49ec361dcd32cad26b Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 10 Sep 2024 10:36:09 -0300 Subject: [PATCH 4/4] [app] Don't crash RepoDetailsActivity when repo is gone Fixes acra-crash-reports#749 --- .../org/fdroid/fdroid/views/repos/RepoDetailsActivity.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.java b/app/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.java index 8b2328ece..e0990fd56 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.java @@ -150,6 +150,11 @@ public class RepoDetailsActivity extends AppCompatActivity { repoId = getIntent().getLongExtra(ARG_REPO_ID, 0); model.initRepo(repoId); repo = FDroidApp.getRepoManager(this).getRepository(repoId); + if (repo == null) { + // repo must have been deleted just now (maybe slow UI?) + finish(); + return; + } TextView inputUrl = findViewById(R.id.input_repo_url); inputUrl.setText(repo.getAddress());