From 995a2afd90997c704322a1b94702cb105d278264 Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Tue, 31 Mar 2026 19:46:49 +0600 Subject: [PATCH] fix: fix icons in the Categories screen Parse Google Play category IDs from the current browseUrl format and keep the legacy query format working. Add icon aliases for the current CleanAPK category slugs so categories with existing artwork no longer fall back to the default icon. --- .../data/application/utils/CategoryUtils.kt | 47 +++++++++++++ .../application/utils/GplayApiExtensions.kt | 14 ++-- app/src/main/res/drawable/ic_cat_browser.xml | 20 ++++++ app/src/main/res/drawable/ic_cat_cloud.xml | 12 ++++ app/src/main/res/drawable/ic_cat_time.xml | 10 +++ app/src/main/res/drawable/ic_cat_travel.xml | 69 ++++++++++++------- .../application/utils/CategoryUtilsTest.kt | 28 ++++++++ 7 files changed, 169 insertions(+), 31 deletions(-) create mode 100644 app/src/main/res/drawable/ic_cat_browser.xml create mode 100644 app/src/main/res/drawable/ic_cat_cloud.xml create mode 100644 app/src/main/res/drawable/ic_cat_time.xml diff --git a/app/src/main/java/foundation/e/apps/data/application/utils/CategoryUtils.kt b/app/src/main/java/foundation/e/apps/data/application/utils/CategoryUtils.kt index e8a4b5927..52f7b00b3 100644 --- a/app/src/main/java/foundation/e/apps/data/application/utils/CategoryUtils.kt +++ b/app/src/main/java/foundation/e/apps/data/application/utils/CategoryUtils.kt @@ -105,6 +105,53 @@ object CategoryUtils { "pwa_business" to R.drawable.ic_business, "watch_face" to R.drawable.ic_watchface, "android_wear" to R.drawable.ic_watch_apps, + "ai-chat" to R.drawable.ic_cat_communication, + "app-store-updater" to R.drawable.ic_cat_tools, + "battery" to R.drawable.ic_cat_tools, + "bookmark" to R.drawable.ic_books_and_reference, + "browser" to R.drawable.ic_cat_browser, + "calculator" to R.drawable.ic_cat_tools, + "calendar-agenda" to R.drawable.ic_cat_events, + "clock" to R.drawable.ic_cat_time, + "cloud-storage-file-sync" to R.drawable.ic_cat_cloud, + "dns-hosts" to R.drawable.ic_cat_connectivity, + "draw" to R.drawable.ic_art_and_design, + "ebook-reader" to R.drawable.ic_books_and_reference, + "email" to R.drawable.ic_cat_communication, + "file-encryption-vault" to R.drawable.ic_cat_security, + "file-transfer" to R.drawable.ic_cat_connectivity, + "finance-manager" to R.drawable.ic_cat_finance, + "flashlight" to R.drawable.ic_cat_tools, + "forum" to R.drawable.ic_cat_social, + "gallery" to R.drawable.ic_cat_photography, + "habit-tracker" to R.drawable.ic_cat_productivity, + "icon-pack" to R.drawable.ic_cat_personalization, + "keyboard-ime" to R.drawable.ic_cat_personalization, + "launcher" to R.drawable.ic_cat_personalization, + "local-media-player" to R.drawable.ic_cat_video_players, + "location-tracker-sharer" to R.drawable.ic_cat_maps_and_navigation, + "messaging" to R.drawable.ic_cat_communication, + "music-practice-tool" to R.drawable.ic_cat_music_and_audio, + "network-analyzer" to R.drawable.ic_cat_connectivity, + "note" to R.drawable.ic_cat_productivity, + "online-media-player" to R.drawable.ic_cat_video_players, + "pass-wallet" to R.drawable.ic_cat_finance, + "password-2fa" to R.drawable.ic_cat_security, + "podcast" to R.drawable.ic_cat_music_and_audio, + "radio" to R.drawable.ic_cat_music_and_audio, + "recipe-manager" to R.drawable.ic_cat_food_and_drink, + "religion" to R.drawable.ic_cat_lifestyle, + "shopping-list" to R.drawable.ic_cat_shopping, + "social-network" to R.drawable.ic_cat_social, + "task" to R.drawable.ic_cat_productivity, + "text-editor" to R.drawable.ic_cat_productivity, + "translation-dictionary" to R.drawable.ic_cat_reference, + "unit-convertor" to R.drawable.ic_cat_tools, + "voice-video-chat" to R.drawable.ic_cat_communication, + "vpn-proxy" to R.drawable.ic_cat_security, + "wallet" to R.drawable.ic_cat_finance, + "wallpaper" to R.drawable.ic_cat_personalization, + "workout" to R.drawable.ic_cat_health_and_fitness, ) fun provideAppsCategoryIconResource(categoryId: String) = diff --git a/app/src/main/java/foundation/e/apps/data/application/utils/GplayApiExtensions.kt b/app/src/main/java/foundation/e/apps/data/application/utils/GplayApiExtensions.kt index a60bbd804..b5564558b 100644 --- a/app/src/main/java/foundation/e/apps/data/application/utils/GplayApiExtensions.kt +++ b/app/src/main/java/foundation/e/apps/data/application/utils/GplayApiExtensions.kt @@ -21,7 +21,6 @@ package foundation.e.apps.data.application.utils import android.content.Context import android.text.format.Formatter import com.aurora.gplayapi.data.models.App -import com.aurora.gplayapi.data.models.Artwork import com.aurora.gplayapi.data.models.Category import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.application.data.Ratings @@ -66,7 +65,7 @@ fun App.toApplication(context: Context): Application { } fun Category.toCategory(): AppLoungeCategory { - val id = this.browseUrl.substringAfter("cat=").substringBefore("&c=") + val id = getCategoryId(this.browseUrl) return AppLoungeCategory( id = id.lowercase(), title = this.title, @@ -75,10 +74,11 @@ fun Category.toCategory(): AppLoungeCategory { ) } -private fun MutableList.toList(): List { - val list = mutableListOf() - this.forEach { - list.add(it.url) +private fun getCategoryId(browseUrl: String): String { + val queryCategory = browseUrl.substringAfter("cat=", "").substringBefore("&") + if (queryCategory.isNotBlank()) { + return queryCategory } - return list + + return browseUrl.substringBefore("?").trimEnd('/').substringAfterLast('/') } diff --git a/app/src/main/res/drawable/ic_cat_browser.xml b/app/src/main/res/drawable/ic_cat_browser.xml new file mode 100644 index 000000000..25cec913f --- /dev/null +++ b/app/src/main/res/drawable/ic_cat_browser.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_cat_cloud.xml b/app/src/main/res/drawable/ic_cat_cloud.xml new file mode 100644 index 000000000..c8809f643 --- /dev/null +++ b/app/src/main/res/drawable/ic_cat_cloud.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_cat_time.xml b/app/src/main/res/drawable/ic_cat_time.xml new file mode 100644 index 000000000..66dbd5095 --- /dev/null +++ b/app/src/main/res/drawable/ic_cat_time.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_cat_travel.xml b/app/src/main/res/drawable/ic_cat_travel.xml index 061bf84e1..53e9157be 100644 --- a/app/src/main/res/drawable/ic_cat_travel.xml +++ b/app/src/main/res/drawable/ic_cat_travel.xml @@ -1,27 +1,48 @@ - - - + android:viewportWidth="32" + android:viewportHeight="32"> + + + + + + + + + + + + + + + + + + diff --git a/app/src/test/java/foundation/e/apps/data/application/utils/CategoryUtilsTest.kt b/app/src/test/java/foundation/e/apps/data/application/utils/CategoryUtilsTest.kt index c41e966f8..f0ebe61e4 100644 --- a/app/src/test/java/foundation/e/apps/data/application/utils/CategoryUtilsTest.kt +++ b/app/src/test/java/foundation/e/apps/data/application/utils/CategoryUtilsTest.kt @@ -63,4 +63,32 @@ class CategoryUtilsTest { assertThat(iconName).isEqualTo("maps_and_navigation") } + + @Test + fun provideAppsCategoryIconResource_returnsAliasForBrowser() { + val icon = CategoryUtils.provideAppsCategoryIconResource("browser") + + assertThat(icon).isEqualTo(R.drawable.ic_cat_browser) + } + + @Test + fun provideAppsCategoryIconResource_returnsAliasForWallet() { + val icon = CategoryUtils.provideAppsCategoryIconResource("wallet") + + assertThat(icon).isEqualTo(R.drawable.ic_cat_finance) + } + + @Test + fun provideAppsCategoryIconResource_returnsAliasForVoiceVideoChat() { + val icon = CategoryUtils.provideAppsCategoryIconResource("voice-video-chat") + + assertThat(icon).isEqualTo(R.drawable.ic_cat_communication) + } + + @Test + fun provideAppsCategoryIconResource_returnsAliasForWorkout() { + val icon = CategoryUtils.provideAppsCategoryIconResource("workout") + + assertThat(icon).isEqualTo(R.drawable.ic_cat_health_and_fitness) + } } -- GitLab