From 056aaa7e0e0edf22325a6805e5f1ece1fcd60c21 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 4 May 2024 18:36:26 +0200 Subject: [PATCH 1/3] [v25.1] fix crash when exceeding max shortcut number (#4415) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I made a mistake in https://github.com/tuskyapp/Tusky/pull/4389 🙄 With `addDynamicShortcuts` the limit can still be exceeded, `setDynamicShortcuts` is what we want. Also, `setLongLived` says: > Sets if a shortcut would be valid even if it has been unpublished/invisible by the app (as a dynamic or pinned shortcut). If it is long lived, it can be cached by various system services even after it has been unpublished as a dynamic shortcut. I don't think we want that so I removed it. --- .../java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt b/app/src/main/java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt index d35e3af5a..44a5e81e0 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt @@ -89,12 +89,11 @@ class ShareShortcutHelper @Inject constructor( .setCategories(setOf("com.keylesspalace.tusky.Share")) .setShortLabel(account.displayName) .setPerson(person) - .setLongLived(true) .setIcon(icon) .build() } - ShortcutManagerCompat.addDynamicShortcuts(context, shortcuts) + ShortcutManagerCompat.setDynamicShortcuts(context, shortcuts) } } From c10f82ffa655007430c10b1fdee3ea9148455496 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 4 May 2024 18:36:39 +0200 Subject: [PATCH 2/3] [v25.1] fix crash when glide fails to load avatar in ShareShortcutHelper (#4417) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🙄 fixes #4416 --- .../tusky/util/GlideExtensions.kt | 3 +- .../tusky/util/ShareShortcutHelper.kt | 28 ++++++++++++++----- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/util/GlideExtensions.kt b/app/src/main/java/com/keylesspalace/tusky/util/GlideExtensions.kt index bbad02f5f..bc5ad2b3a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/GlideExtensions.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/GlideExtensions.kt @@ -8,7 +8,6 @@ import com.bumptech.glide.request.target.Target import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlinx.coroutines.suspendCancellableCoroutine -import okio.IOException /** * Allows waiting for a Glide request to complete without blocking a background thread. @@ -26,7 +25,7 @@ suspend fun RequestBuilder.submitAsync( target: Target, isFirstResource: Boolean ): Boolean { - continuation.resumeWithException(e ?: IOException("Image loading failed")) + continuation.resumeWithException(e ?: GlideException("Image loading failed")) return false } diff --git a/app/src/main/java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt b/app/src/main/java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt index 44a5e81e0..1715e2ba5 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/ShareShortcutHelper.kt @@ -21,11 +21,15 @@ import android.content.Context import android.content.Intent import android.graphics.Bitmap import android.graphics.Canvas +import android.util.Log +import androidx.appcompat.content.res.AppCompatResources import androidx.core.app.Person import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat +import androidx.core.graphics.drawable.toBitmap import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.GlideException import com.keylesspalace.tusky.MainActivity import com.keylesspalace.tusky.R import com.keylesspalace.tusky.db.AccountEntity @@ -49,14 +53,20 @@ class ShareShortcutHelper @Inject constructor( val maxNumberOfShortcuts = ShortcutManagerCompat.getMaxShortcutCountPerActivity(context) - val shortcuts = accountManager.accounts.take(maxNumberOfShortcuts).map { account -> + val shortcuts = accountManager.accounts.take(maxNumberOfShortcuts).mapNotNull { account -> - val bmp = Glide.with(context) - .asBitmap() - .load(account.profilePictureUrl) - .placeholder(R.drawable.avatar_default) - .error(R.drawable.avatar_default) - .submitAsync(innerSize, innerSize) + val bmp = try { + Glide.with(context) + .asBitmap() + .load(account.profilePictureUrl) + .placeholder(R.drawable.avatar_default) + .error(R.drawable.avatar_default) + .submitAsync(innerSize, innerSize) + } catch (e: GlideException) { + // https://github.com/bumptech/glide/issues/4672 :/ + Log.w(TAG, "failed to load avatar ${account.profilePictureUrl}", e) + AppCompatResources.getDrawable(context, R.drawable.avatar_default)?.toBitmap(innerSize, innerSize) ?: return@mapNotNull null + } // inset the loaded bitmap inside a 108dp transparent canvas so it looks good as adaptive icon val outBmp = Bitmap.createBitmap(outerSize, outerSize, Bitmap.Config.ARGB_8888) @@ -100,4 +110,8 @@ class ShareShortcutHelper @Inject constructor( fun removeShortcut(account: AccountEntity) { ShortcutManagerCompat.removeDynamicShortcuts(context, listOf(account.id.toString())) } + + companion object { + private const val TAG = "ShareShortcutHelper" + } } From 7e9e729331bbb5bbe7fc8b09108b6c4636f76c68 Mon Sep 17 00:00:00 2001 From: Conny Duck Date: Sat, 4 May 2024 20:20:36 +0200 Subject: [PATCH 3/3] Release 120 --- CHANGELOG.md | 6 ++++++ app/build.gradle | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cd57cc67..431397483 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ ### Significant bug fixes +## v25.1 + +### Significant bug fixes + +- Fixed two crashes at startup introduced in 25.0 [PR#4415](https://github.com/tuskyapp/Tusky/pull/4415) [PR#4417](https://github.com/tuskyapp/Tusky/pull/4417) + ## v25.0 ### New features and other improvements diff --git a/app/build.gradle b/app/build.gradle index 97e604233..b6c224555 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { namespace "com.keylesspalace.tusky" minSdk 24 targetSdk 34 - versionCode 119 - versionName "25.0" + versionCode 120 + versionName "25.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true