mirror of
https://github.com/f-droid/fdroidclient.git
synced 2026-06-17 20:29:34 -04:00
Add localized screenshot creation
This adds an instrumentation test that produces localized screenshots of so far the three main screens of the app. The screenshots get saved on the test device and still need to be downloaded manually for now. Data for the screenshots can be updated with a Python script that was also added. It fetches the current index and gets data from the top apps.
This commit is contained in:
4453
app/src/androidTest/java/org/fdroid/ui/screenshots/CategoryItems.kt
Normal file
4453
app/src/androidTest/java/org/fdroid/ui/screenshots/CategoryItems.kt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,180 @@
|
||||
package org.fdroid.ui.screenshots
|
||||
|
||||
import org.fdroid.database.AppMetadata
|
||||
|
||||
val appMetadata =
|
||||
AppMetadata(
|
||||
repoId = 1L,
|
||||
packageName = "org.fdroid.basic",
|
||||
added = 1680776466000L,
|
||||
lastUpdated = 1772364577000L,
|
||||
name =
|
||||
mapOf(
|
||||
"en-GB" to "F-Droid Basic",
|
||||
"es" to "F-Droid Basic",
|
||||
"pl" to "F-Droid Podstawowy",
|
||||
"pt" to "F-Droid Básico",
|
||||
"pt-PT" to "F-Droid Básico",
|
||||
"ru" to "F-Droid Basic",
|
||||
"ar" to "F-Droid Basic",
|
||||
"ca" to "F-Droid bàsic",
|
||||
"cs" to "F-Droid Basic",
|
||||
"de" to "F-Droid Basic",
|
||||
"en-US" to "F-Droid Basic",
|
||||
"eo" to "F-Droid Baza",
|
||||
"et" to "F-Droid Basic",
|
||||
"fa-IR" to "افدروید پایهای",
|
||||
"fr" to "F-Droid Basic",
|
||||
"ga" to "F-Droid Bunúsach",
|
||||
"he" to "F-Droid בסיסי",
|
||||
"hu-HU" to "Alap F-Droid",
|
||||
"is-IS" to "Grunnútgáfa F-Droid",
|
||||
"ja" to "F-Droid Basic",
|
||||
"pt-BR" to "F-Droid Básico",
|
||||
"ro" to "F-Droid Basic",
|
||||
"sr" to "Основни F-Droid",
|
||||
"sv-SE" to "F-Droid Basic",
|
||||
"ta-IN" to "எஃப்-டிராய்டு அடிப்படை",
|
||||
"tr" to "F-Droid Temel",
|
||||
"uk" to "F-Droid Basic",
|
||||
"zh-CN" to "F-Droid Basic",
|
||||
"zh-TW" to "F-Droid Basic",
|
||||
),
|
||||
summary =
|
||||
mapOf(
|
||||
"en-GB" to "The minimal client app for the app store that respects freedom and privacy",
|
||||
"es" to "Aplicación para la tienda de aplicaciones; respeta la libertad y la privacidad",
|
||||
"pl" to "Minimalistyczna apka kliencka dla sklepu z apkami szanująca wolność i prywatność",
|
||||
"pt" to "App cliente mínima para a loja de apps que respeita a liberdade e a privacidade",
|
||||
"pt-PT" to
|
||||
"App cliente mínima para a loja de apps que respeita a liberdade e a privacidade",
|
||||
"ru" to "Минималистичный магазин приложений, уважающий свободу и приватность",
|
||||
"ar" to "تطبيق عميل خفيف لمتجر التطبيقات والذي يحترم الحرية والخصوصية",
|
||||
"ca" to "El client mínim del centre d'aplicacions que respecta la llibertat i privadesa",
|
||||
"cs" to "Minimální klient pro obchod s aplikacemi, který respektuje svobodu a soukromí",
|
||||
"de" to "Der minimale Client für den App-Store, der Freiheit und Privatsphäre respektiert",
|
||||
"en-US" to "The minimal client app for the app store that respects freedom and privacy",
|
||||
"eo" to "Minimuma kliento por la aplikaĵa vendejo respektanta liberecon kaj privatecon",
|
||||
"et" to "Lihtsustatud variant F-Droidi rakendustepoe kliendist",
|
||||
"fa-IR" to "کارخواه کمینه برای فروشگاه کارهای که به آزادی و محرمانگی احترام میگذارد",
|
||||
"fr" to "L’application minimale pour le magasin d’applis respectueux de la vie privée",
|
||||
"ga" to "Aip íosta cliant don siopa a léiríonn meas ar shaoirse agus ar phríobháideachas",
|
||||
"he" to "יישומון הלקוח המזערי לחנות יישומונים שמכבד חופש ופרטיות",
|
||||
"hu-HU" to "Az alap app a tárolóban, amely tiszteli a szabadságot és a magánéletet",
|
||||
"is-IS" to
|
||||
"Lágmarksviðmót forritsins fyrir hugbúnaðarsafnið sem virðir frelsi og gagnaleynd",
|
||||
"ja" to "自由とプライバシーを尊重するアプリストアの簡略版クライアント",
|
||||
"pt-BR" to
|
||||
"App cliente mínimo para a loja de apps que respeita a liberdade e a privacidade",
|
||||
"ro" to "Client minim pentru magazinul de aplicații ce respectă libertatea și intimitatea",
|
||||
"sr" to "Клијент апликација за продавницу апликација која поштује слободу и приватност",
|
||||
"sv-SE" to "Den minimala klient-appen för app-butiken som respekterar frihet och privatliv",
|
||||
"sw" to "An app cliant íosta don siopa app a urramaíonn saoirse agus príobháideachta",
|
||||
"ta-IN" to
|
||||
"விடுதலை மற்றும் தனியுரிமையை மதிக்கும் பயன்பாட்டு கடைக்கான குறைந்தபட்ச வாங்கி பயன",
|
||||
"tr" to "Özgürlük ve gizliliğe saygılı uygulama mağazası için sade bir istemci uygulaması",
|
||||
"uk" to "Мінімалістичний клієнтський застосунок, який поважає свободу й приватність",
|
||||
"zh-CN" to "尊重自由和隐私的应用商店的极简客户端应用",
|
||||
"zh-TW" to "尊重自由和隱私的應用商店最小客戶端應用程序",
|
||||
),
|
||||
description =
|
||||
mapOf(
|
||||
"en-GB" to
|
||||
"NOTE: The Basic version of F-Droid Client has a reduced feature set (e.g. no nearby share and no panic feature). It targets Android 13 and can do unattended updates without privileged extension or root.\n\nF-Droid is an installable catalogue of libre softw",
|
||||
"es" to
|
||||
"NOTA: La versión básica de F-Droid Client tiene un conjunto de características reducidas (por ejemplo, no hay recursos compartidos cercanos y no hay función de pánico). Está dirigido a Android 13 y puede hacer actualizaciones desatendidas sin extensión pri",
|
||||
"pl" to
|
||||
"UWAGA: Podstawowa wersja klienta F-Droid ma ograniczony zestaw funkcji (np. brak pobliskiego udziału i funkcji paniki). Jest przeznaczona dla systemu Android 13 i może wykonywać nienadzorowane aktualizacje bez uprzywilejowanego rozszerzenia lub roota.\n\nF",
|
||||
"pt" to
|
||||
"AVISO: A versão básica do cliente F-Droid tem menos funções (por exemplo, não tem o \"Por perto\" ou a função de pânico). Está preparado para o Android 13 e pode fazer atualizações sem intervenção do utilizador, sem precisar da extensão privilegiada ou de ",
|
||||
"pt-PT" to
|
||||
"AVISO: A versão básica do cliente F-Droid tem menos funções (por exemplo, não tem o \"Por perto\" ou a função de pânico). Está preparado para o Android 13 e pode fazer atualizações sem intervenção do utilizador, sem precisar da extensão privilegiada ou de ",
|
||||
"ru" to
|
||||
"ПРИМЕЧАНИЕ: Basic-версия клиента F-Droid имеет урезанный набор функций (например, нет общего доступа к близлежащим ресурсам и функции паники). Она нацелена на Android 13 и может выполнять обновления без участия пользователя и без особого расширения или roo",
|
||||
"ar" to
|
||||
"ملاحظة: الإصدار الأساسي من عميل F-Droid يحتوي على مجموعة ميزات مخفضة (على سبيل المثال، لا توجد مشاركة قريبة ولا توجد ميزة الذعر). وهو يستهدف Android 13 ويمكنه إجراء تحديثات غير مراقبة بدون امتداد أو جذر مميز.\n\nF-Droid عبارة عن كتالوج قابل للتثبيت لتطبيقا",
|
||||
"ca" to
|
||||
"NOTA: La versió bàsica del client de l'F-Droid té un conjunt de funcionalitats reduït (p. ex. no hi ha compartició propera i funció del pànic). Està orientada a l'Android 13 i pot fer actualitzacions desateses sense extensions de privilegis ni permisos d'a",
|
||||
"cs" to
|
||||
"UPOZORNĚNÍ: Základní (Basic) verze klienta F-Droid má omezenou sadu funkcí (např. žádné sdílení nablízku nebo funkci paniky). Cílí na systém Android 13 a dokáže provádět automatické aktualizace bez privilegovaného rozšíření nebo rootu.\n\nF-Droid je katalo",
|
||||
"de" to
|
||||
"HINWEIS: Die Basisversion von F-Droid Client hat einen eingeschränkten Funktionsumfang (z. B. keine Freigabe in der Nähe und keine Panikfunktion). Sie zielt auf Android 13 ab und kann unbeaufsichtigte Updates ohne privilegierte Erweiterung oder Root durchf",
|
||||
"en-US" to
|
||||
"NOTE: The Basic version of F-Droid Client has a reduced feature set (e.g. no nearby share and no panic feature). It targets Android 13 and can do unattended updates without privileged extension or root.\n\nF-Droid is an installable catalogue of libre softw",
|
||||
"eo" to
|
||||
"RIMARKO: la baza versio de kliento F-Droid estas senigita de kelkaj ebloj (kiel proksima interŝanĝo kaj panika butono). Ĝi celas Android 13 kaj povas ĝisdatigi aplikaĵojn fone sen uzi ĉefuzantan permeson aŭ la privilegian aldonaĵon.\n\nF-Droid estas instal",
|
||||
"et" to
|
||||
"NB! F-Droid Basic on piiratud funktsionaalsusega klient (nt. puuduvad naabritega jagamine ja paanikarežiimi keelamine). Ta on mõeldud Android 13-le ja saab paigaldada uuendusi iseseisvalt, priviligeeritud laienduse või juurkasutajata.\n\nF-Droid on paigald",
|
||||
"fa-IR" to
|
||||
"نکته: نگارش پایهای کارخواه اف دروید مجموعه ویز؛یهای کمتری دارد (برای نمونه همرسانی نزدیک و دکمهٔ هراس). اندروید ۱۳ را هدف قرار داده و میتواند بهروز رسانیهای پسزمینه را بدون ریشه یا افزونهٔ ممتاز انجام دهد.\n\nافدروید کالانمایی قابل نصب از کارههای",
|
||||
"fr" to
|
||||
"REMARQUE : la version Basic du client F-Droid a un jeu de fonctionnalités réduit (par ex. pas de partage de proximité et aucune fonction \"no panic\"). Elle est destinée à la plateforme Android 13 et peut faire des mises à jour sans extension privilégiée o",
|
||||
"ga" to
|
||||
"NÓTA: Tá sraith gnéithe laghdaithe ag an leagan Bunúsach de Chliant F-Droid (e.g. gan aon chomhroinnt in aice láimhe agus gan aon ghné scaoill). Díríonn sé ar Android 13 agus is féidir leis nuashonruithe gan duine a dhéanamh gan síneadh pribhléideach ná fr",
|
||||
"he" to
|
||||
"הערה: לגרסה הבסיסית של לקוח F-Droid יש מערכת תכונה מופחתת (לדוגמה, אין שיתוף סמוך ואין תכונה פאניקה). הוא מכוון לאנדרואיד 13 ויכול לעשות עדכונים ללא הרחבה מועדפת או root.\n\nF-Droid הוא קטלוג של יישומי תוכנה חופשית עבור אנדרואיד. יישומון לקוח F-Droid מקל ל",
|
||||
"hu-HU" to
|
||||
"MEGJEGYZÉS: Az alap F-Droid verzió csökkentett funkciókészlettel rendelkezik (pl. nincs közeli megosztás és nincs pánik funkció). Az android 13-as rendszert célozza meg, és képes felügyelet nélküli frissítéseket végezni jogosultsági kiterjesztés vagy root ",
|
||||
"is-IS" to
|
||||
"ATHUGAÐU: Grunnútgáfa (Basic) F-Droid forritsins er með færri eiginleika (t.d. ekki deilingu til tækja í nágrenninu og enga neyðaraðgerð). Hún miðast við Android 13 og getur séð um uppfærslur án afskipta notandans án forgangsviðbótarinnar eða rótaraðgangs.",
|
||||
"ja" to
|
||||
"注意:F-DroidクライアントのBasic版は、機能が制限されています(例えば、近くへ共有やパニック機能がありません)。Android 13がターゲットで、特権の拡張やroot無しで更新出来ます。\n\nF-DroidはAndroidのための自由かつインストール可能なソフトウェアアプリの目録です。F-Droidクライアントアプリは、あなたのデバイス上での閲覧、インストール、更新の追跡を簡単にします。\n\nF-Droidは互換性のあるリポジトリへ接続します。標準のリポジトリはf-droid.orgでホスト",
|
||||
"pt-BR" to
|
||||
"AVISO: A versão básica do cliente F-Droid tem um número reduzido de funções (por exemplo, não tem o \"Por perto\" ou a função de Pánico). Ela \"atinge\" o Android 13 e pode fazer atualizações sem intervenção do usuário, sem precisar da extensão privilegiad",
|
||||
"ro" to
|
||||
"NOTĂ: Versiunea de client F-Droid Basic are un set redus de funcții (de exemplu, fără partajare în apropiere și fără funcție de panică). Aceasta vizează Android 13 și poate face actualizări nesupravegheate fără extensia privilegiată sau root.\n\nF-Droid es",
|
||||
"sr" to
|
||||
"Напомена: Основна верзија клијента F-Droid има ограничен сет функција (нпр. нема опцију за дељење у близини и нема функцију за хитне случајеве). Она је намењена за Android 13 и може да обавља ажурирања без повишених привилегија или рута.\n\nF-Droid је ката",
|
||||
"sv-SE" to
|
||||
"OBS: Basic-versionen av F-Droid Client har en reducerad funktionsuppsättning (t.ex. ingen när-delning och ingen panikfunktion). Den riktar sig till Android 13 och kan göra obevakade uppdateringar utan privilegierad förlängning eller root.\n\nF-Droid är en ",
|
||||
"ta-IN" to
|
||||
"குறிப்பு: எஃப்-டிராய்டு கிளையண்டின் அடிப்படை பதிப்பு குறைக்கப்பட்ட அம்சத் தொகுப்பைக் கொண்டுள்ளது (எ.கா. அருகிலுள்ள பங்கு இல்லை மற்றும் அச்சம் நற்பொருத்தம் இல்லை). இது ஆண்ட்ராய்டு 13 ஐ குறிவைக்கிறது மற்றும் சலுகை பெற்ற நீட்டிப்பு அல்லது வேர் இல்லாமல் கவனிக்",
|
||||
"tr" to
|
||||
"NOT: F-Droid İstemcisinin Temel sürümünün düşürülmüş özellikleri mevcuttur (mesela nearby share ve panik özelliği yok). Android 13'ü hedef alır ve özel eklenti veya root gerektirmeden gözetimsiz güncellemeler yapabilir.\nF-Droid, Android için özgür yazılım",
|
||||
"uk" to
|
||||
"ПРИМІТКА. Базова версія F-Droid Client має скорочений набір функцій (наприклад, немає функції спільного доступу поблизу та функції паніки). Він націлений на Android 13 і може виконувати автоматичні оновлення без привілейованого розширення або root-права. ",
|
||||
"zh-CN" to
|
||||
"注意:F-Droid 客户端基础版本的功能不全 (如没有“附近”分享和应急功能)。它针对 Android 13 ,可以在没有特权扩展或 root 的情况下执行无人值守更新。.\n\nF-Droid 是 Android 系统自由软件应用的可安装目录。 F-Droid 客户端应用使得浏览、安装和跟踪设备上的应用更新变得轻而易举。\n\n它可以连接到任何兼容 F-Droid 的存储库。默认存储库托管在 f-droid.org 上,其中只包含真正的自由软件。\n\nAndroid 本身是开放的,意思是你可以从任何地",
|
||||
"zh-TW" to
|
||||
"注意:F-Droid 用戶端基本版的功能集較少(例如,沒有附近共享和恐慌功能)。它以 Android 13 為目標,無需特權擴充或 root 即可進行無人值守更新。\n\nF-Droid 是適用於 Android 的自由軟體應用程式的可安裝目錄。 F-Droid 用戶端應用程式可以輕鬆瀏覽、安裝和追蹤裝置上的更新。\n\n它可以連接到任何與 F-Droid 相容的儲存庫。預設 repo 託管在 f-droid.org,其中僅包含真正的自由軟體。\n\nAndroid 本身是開放的,這意味著您可以自由地從任何",
|
||||
),
|
||||
webSite = "https://f-droid.org",
|
||||
changelog = "https://gitlab.com/fdroid/fdroidclient/-/blob/HEAD/CHANGELOG.md",
|
||||
license = "GPL-3.0-or-later",
|
||||
sourceCode = "https://gitlab.com/fdroid/fdroidclient",
|
||||
issueTracker = "https://gitlab.com/fdroid/fdroidclient/issues",
|
||||
translation = "https://hosted.weblate.org/projects/f-droid/f-droid",
|
||||
preferredSigner = "ef7f822b7653e2011cb8c5a7fc99e8d2ade1717e539ca56d6456295e3bc07312",
|
||||
authorName = "F-Droid",
|
||||
authorEmail = "team@f-droid.org",
|
||||
authorWebSite = null,
|
||||
authorPhone = null,
|
||||
donate = listOf("https://f-droid.org/donate"),
|
||||
liberapayID = null,
|
||||
liberapay = "F-Droid-Data",
|
||||
openCollective = "F-Droid-Euro",
|
||||
bitcoin = "bc1qd8few44yaxc3wv5ceeedhdszl238qkvu50rj4v",
|
||||
litecoin = null,
|
||||
flattrID = null,
|
||||
categories = listOf("App Store & Updater", "System"),
|
||||
isCompatible = true,
|
||||
)
|
||||
|
||||
val appDetailsIcon =
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/icon_CPdcoTY7kZ3ERIZkij9504KbM1eEY05XaLvVQwHkqHI=.png"
|
||||
val appDetailsFeatureGraphic =
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/featureGraphic_8rt-tl-zn9ff1UC0HIBnEBxxqodp18-Ok8l1_gu3EtQ=.jpg"
|
||||
val appDetailsScreenshots =
|
||||
mapOf(
|
||||
"en-US" to
|
||||
listOf(
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/phoneScreenshots/01-latest.png",
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/phoneScreenshots/02-categories.png",
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/phoneScreenshots/03-updates.png",
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/phoneScreenshots/04-settings.png",
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/phoneScreenshots/10-search.png",
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/phoneScreenshots/11-app-details.png",
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/phoneScreenshots/20-repos.png",
|
||||
"https://f-droid.org/repo/org.fdroid.basic/en-US/phoneScreenshots/21-repo-details.png",
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,57 @@
|
||||
package org.fdroid.ui.screenshots
|
||||
|
||||
import androidx.compose.ui.platform.LocalLocaleList
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import org.fdroid.LocaleChooser.getBestLocale
|
||||
import org.fdroid.download.NetworkState
|
||||
import org.fdroid.install.InstallState
|
||||
import org.fdroid.ui.details.AppDetails
|
||||
import org.fdroid.ui.details.AppDetailsItem
|
||||
import org.fdroid.ui.details.VersionItem
|
||||
import org.fdroid.ui.utils.getAppDetailsActions
|
||||
import org.fdroid.ui.utils.testVersion1
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.Parameterized
|
||||
|
||||
@RunWith(Parameterized::class)
|
||||
class DetailsScreenshotTest(localeName: String) : LocalizedScreenshotTest(localeName) {
|
||||
|
||||
companion object {
|
||||
@JvmStatic @Parameterized.Parameters(name = "{0}") fun locales() = locales
|
||||
}
|
||||
|
||||
@Test
|
||||
fun appDetails() =
|
||||
screenshotTest("3_Details", showBottomBar = false) {
|
||||
val localeList =
|
||||
LocaleListCompat.forLanguageTags(
|
||||
LocalLocaleList.current.localeList.map { it.toLanguageTag() }.joinToString(",")
|
||||
)
|
||||
val item =
|
||||
AppDetailsItem(
|
||||
app = appMetadata,
|
||||
actions = getAppDetailsActions(),
|
||||
installState = InstallState.Unknown,
|
||||
networkState = NetworkState(isOnline = true, isMetered = false),
|
||||
name = appMetadata.name.getBestLocale(localeList) ?: "Unknown name",
|
||||
summary = appMetadata.summary.getBestLocale(localeList),
|
||||
description = appMetadata.description.getBestLocale(localeList),
|
||||
icon = appDetailsIcon,
|
||||
featureGraphic = appDetailsFeatureGraphic,
|
||||
phoneScreenshots = appDetailsScreenshots.getBestLocale(localeList) ?: emptyList(),
|
||||
versions =
|
||||
listOf(
|
||||
VersionItem(
|
||||
testVersion1,
|
||||
isInstalled = false,
|
||||
isSuggested = true,
|
||||
isCompatible = true,
|
||||
isSignerCompatible = true,
|
||||
showInstallButton = true,
|
||||
)
|
||||
),
|
||||
)
|
||||
AppDetails(item = item, onNav = {}, onBackNav = {})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,401 @@
|
||||
package org.fdroid.ui.screenshots
|
||||
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import org.fdroid.LocaleChooser.getBestLocale
|
||||
import org.fdroid.ui.discover.AppDiscoverItem
|
||||
|
||||
fun getNewApps(localeList: LocaleListCompat) =
|
||||
listOf(
|
||||
AppDiscoverItem(
|
||||
packageName = "jp.nonbili.noutube",
|
||||
name = mapOf("en-US" to "NouTube").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = true,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/jp.nonbili.noutube/en-US/icon_A1nC0BkAzsvNhws7y1thjfhF8LJJReXVUORApHsstDE=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "net.thunderbird.android",
|
||||
name =
|
||||
mapOf(
|
||||
"ar" to "ثَندَربِرْد: حرّر صندوق بريدك",
|
||||
"be" to "Thunderbird: Вольная Пошта",
|
||||
"bg" to "Thunderbird: Освободете пощата",
|
||||
"br" to "Thunderbird: Dieubit hor boest degemer",
|
||||
"ca" to "Thunderbird: allibereu la vostra safata d'entrada",
|
||||
"co" to "Thunderbird : Messaghjeria libera",
|
||||
"cs-CZ" to "Thunderbird: Svobodná pošta",
|
||||
"cy" to "Thunderbird: Rhyddhau'r Blwch Derbyn",
|
||||
"de-DE" to "Thunderbird: Befreie deinen Posteingang",
|
||||
"el-GR" to "Thunderbird: Ελεύθερα email",
|
||||
"en-GB" to "Thunderbird: Free Your Inbox",
|
||||
"en-US" to "Thunderbird: Free Your Inbox",
|
||||
"eo" to "Thunderbird: Libera retpoŝtilo",
|
||||
"es-ES" to "Thunderbird; libera tu correo",
|
||||
"et" to "Thunderbird: e-post sinu jaoks",
|
||||
"eu-ES" to "Androiderako Thunderbird",
|
||||
"fa-IR" to "تاندربرد: آزادی صندوق ورودی",
|
||||
"fi-FI" to "Thunderbird: Vapauta postilaatikkosi",
|
||||
"fr-FR" to "Thunderbird : Courriel libre",
|
||||
"fy" to "Thunderbird: Befrij jo Postfek",
|
||||
"ga" to "Thunderbird: Saor Do Phost",
|
||||
"gd" to "Thunderbird: Saorsa dhan phost agad",
|
||||
"hi-IN" to "थंडरबर्ड - इन्बॉक्स मुक्त करें",
|
||||
"hr" to "Thunderbird: Oslobodite svoju poštu",
|
||||
"hu-HU" to "Thunderbird: Szabad levelezés",
|
||||
"id" to "Thunderbird: Kosongkan Kotak Masuk Anda",
|
||||
"is-IS" to "Thunderbird: Frjáls póstur",
|
||||
"it-IT" to "Thunderbird: libera la tua casella di posta",
|
||||
"iw-IL" to "ת'אנדרבירד: שחרר את תיבת הדואר שלך",
|
||||
"ja-JP" to "Thunderbird: 受信トレイをもっと自由に",
|
||||
"lt" to "Thunderbird: lais. savo gaut.",
|
||||
"mnw" to "ဂစေံလလဳ: သၠးကဠာလိက်မၞး",
|
||||
"nl-NL" to "Thunderbird: Bevrijd uw e-mail",
|
||||
"nn" to "Thunderbird: Frigjer innboksen",
|
||||
"no-NO" to "Thunderbird: Frigjør innboksen",
|
||||
"pl-PL" to "Thunderbird: Uwolnij pocztę",
|
||||
"pt-BR" to "Thunderbird: Liberte seu email",
|
||||
"pt-PT" to "Thunderbird: Liberte o seu email",
|
||||
"ro" to "Thunderbird: poștă liberă",
|
||||
"ru-RU" to "Thunderbird: свободная почта",
|
||||
"sk" to "Thunderbird: Slobodná Schránka",
|
||||
"sl" to "Thunderbird: sprostite svoj nabiralnik!",
|
||||
"sq" to "Thunderbird: Free Your Inbox",
|
||||
"sr" to "Thunderbird: Ослободите своје сандуче",
|
||||
"sv-SE" to "Thunderbird: Frigör din inkorg",
|
||||
"ta-IN" to "இடிபறவை: உங்கள் உள்பெட்டி விடுவி",
|
||||
"tr-TR" to "Thunderbird: Özgür E-posta",
|
||||
"uk" to "Thunderbird: Вільна е-пошта",
|
||||
"vi" to "Thunderbird: Giải phóng hộp thư của bạn",
|
||||
"zh-CN" to "Thunderbird:解放收件箱",
|
||||
"zh-TW" to "Thunderbird: 釋放你的收件匣",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = true,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/net.thunderbird.android/en-US/icon_llBuXRxsJFITCCuDze-ENOPa1J_HFZLudN5K3gU-xiU=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "io.element.android.x",
|
||||
name =
|
||||
mapOf("en-US" to "Element X - Secure Chat & Call").getBestLocale(localeList)
|
||||
?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/io.element.android.x/en-US/icon_YBz4_OnMHd7E2Bd_oEza9ImLSlHTpL_C-ovHcKljeFA=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "org.breezyweather",
|
||||
name = mapOf("en-US" to "Breezy Weather").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = true,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/org.breezyweather/en-US/icon_e18rWq0tKc__3173BVXmiiasM_F7yrUbs6kh7lQffto=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "helium314.keyboard",
|
||||
name =
|
||||
mapOf(
|
||||
"ar" to "HeliBoard",
|
||||
"bg" to "HeliBoard",
|
||||
"bn" to "হেলিবোর্ড",
|
||||
"ca" to "HeliBoard",
|
||||
"cs-CZ" to "HeliBoard",
|
||||
"de-DE" to "HeliBoard",
|
||||
"en-US" to "HeliBoard",
|
||||
"es-ES" to "HeliBoard",
|
||||
"et" to "HeliBoard",
|
||||
"fi-FI" to "HeliBoard",
|
||||
"fr-FR" to "HeliBoard",
|
||||
"gl-ES" to "HeliBoard",
|
||||
"hu-HU" to "HeliBoard",
|
||||
"id" to "HeliBoard",
|
||||
"is-IS" to "HeliBoard",
|
||||
"it-IT" to "HeliBoard",
|
||||
"iw-IL" to "הליבורד HeliBoard",
|
||||
"lv" to "HeliBoard",
|
||||
"nl-NL" to "HeliBoard",
|
||||
"pa-PK" to "ہیلیبورڈ",
|
||||
"pl-PL" to "HeliBoard",
|
||||
"pt" to "HeliBoard",
|
||||
"pt-BR" to "HeliBoard",
|
||||
"ru-RU" to "HeliBoard",
|
||||
"ta-IN" to "எலிபோர்டு",
|
||||
"tr-TR" to "HeliBoard",
|
||||
"uk" to "HeliBoard",
|
||||
"zh-CN" to "HeliBoard",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = true,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/helium314.keyboard/en-US/icon_-nkf9NO4Zp7Y0YX1AOcQdZMf32R_bPt8AZC2Ycn2v1I=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "dev.imranr.obtainium.fdroid",
|
||||
name =
|
||||
mapOf("de" to "Obtainium", "en-US" to "Obtainium", "ru-RU" to "Obtainium")
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/dev.imranr.obtainium.fdroid/en-US/icon_8o6Dm3kPEr-C-8U1QdRd9B6DrkXPqLJQ7or0KN7ut_4=.png",
|
||||
),
|
||||
)
|
||||
|
||||
fun getRecentlyUpdatedApps(localeList: LocaleListCompat) =
|
||||
listOf(
|
||||
AppDiscoverItem(
|
||||
packageName = "com.fsck.k9",
|
||||
name =
|
||||
mapOf(
|
||||
"ar" to "K-9 Mail",
|
||||
"be" to "Пошта K-9",
|
||||
"bg" to "K-9 Поща",
|
||||
"ca" to "K-9 Mail",
|
||||
"co" to "K-9 Mail",
|
||||
"cs-CZ" to "K-9 Mail",
|
||||
"cy" to "K-9 Mail",
|
||||
"de" to "K-9 Mail",
|
||||
"el-GR" to "K-9 Mail",
|
||||
"en-GB" to "K-9 Mail",
|
||||
"en-US" to "K-9 Mail",
|
||||
"eo" to "K-9 Retpoŝtilo",
|
||||
"es" to "K-9 Mail",
|
||||
"et" to "K-9 Mail",
|
||||
"eu-ES" to "K-9 Mail",
|
||||
"fa-IR" to "نامهٔ کی۹",
|
||||
"fr" to "Courriel K-9 Mail",
|
||||
"fy" to "K-9 Mail",
|
||||
"ga" to "K-9 Mail",
|
||||
"gd" to "Post K-9",
|
||||
"he" to "K-9 דוא\"ל",
|
||||
"hi-IN" to "K-9 Mail",
|
||||
"hr" to "K-9 Mail",
|
||||
"hu-HU" to "K-9 Mail",
|
||||
"id" to "Surel K-9",
|
||||
"is-IS" to "K-9 - Póstur",
|
||||
"it" to "K-9 Mail",
|
||||
"ja" to "K-9 Mail",
|
||||
"kk" to "K-9 Пошта",
|
||||
"ko-KR" to "K-9 메일",
|
||||
"lt" to "K-9 paštas",
|
||||
"mnw" to "တိုက်လိက် K-၉",
|
||||
"nb" to "K-9 E-post",
|
||||
"nl-NL" to "K-9 Mail",
|
||||
"nn" to "K-9 Mail",
|
||||
"pl" to "K-9 Mail",
|
||||
"pt-BR" to "K-9 Mail",
|
||||
"pt-PT" to "K-9 Mail",
|
||||
"ro" to "K-9 Mail",
|
||||
"ru" to "Почта K-9",
|
||||
"sk" to "K-9 Mail",
|
||||
"sl" to "Pošta K-9",
|
||||
"sq" to "K-9 Mail",
|
||||
"sr" to "K-9 Mail",
|
||||
"sv-SE" to "K-9 Mail",
|
||||
"ta-IN" to "கே-9 அஞ்சல்",
|
||||
"tr" to "K-9 Posta",
|
||||
"uk" to "K-9 Mail",
|
||||
"vi" to "K-9 Mail",
|
||||
"zh-CN" to "K-9 Mail",
|
||||
"zh-TW" to "K-9 Mail",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.fsck.k9/en-US/icon_-2bZW0ZnkKqPVher2SxQK8hXGGSjgaBHoa8x6vW0v8w=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "com.github.andreyasadchy.xtra",
|
||||
name = mapOf("en-US" to "Xtra").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.github.andreyasadchy.xtra/en-US/icon_yfnxF0cNrXwFX2a93BUclISVaIQzoRmbOuxtGDAwz28=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "com.github.libretube",
|
||||
name = mapOf("en-US" to "LibreTube").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.github.libretube/en-US/icon_p6_cfoYk-2IlerJpH4rKIQmkI76zXtS3R9-RZp-3Ggk=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "com.inspiredandroid.linuxcommandbibliotheca",
|
||||
name = mapOf("en-US" to "Linux Command Library").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.inspiredandroid.linuxcommandbibliotheca/en-US/icon_DrA_e_52nvGa_kTMSapBw4MCqKpccl8WZqrG5enB7rI=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "com.junkfood.seal",
|
||||
name =
|
||||
mapOf(
|
||||
"ar-SA" to "Seal",
|
||||
"bn" to "সিল",
|
||||
"de-DE" to "Seal",
|
||||
"en-US" to "Seal",
|
||||
"es" to "Seal",
|
||||
"fr-FR" to "Seal",
|
||||
"hi" to "सील",
|
||||
"hr" to "Seal",
|
||||
"id" to "Seal",
|
||||
"it" to "Seal",
|
||||
"ja" to "Seal",
|
||||
"ml" to "സീൽ",
|
||||
"nb-NO" to "Seal",
|
||||
"nl-NL" to "Zeehond",
|
||||
"pt-BR" to "Seal",
|
||||
"ru" to "Seal",
|
||||
"th" to "Seal",
|
||||
"uk" to "Тюлень",
|
||||
"vi" to "Hải Cẩu",
|
||||
"zh-CN" to "Seal",
|
||||
"zh-TW" to "Seal",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.junkfood.seal/en-US/icon_j8mCLA_OX-sJn7TRAdvoaUMW1f6djRv6RMzAnNdaG4I=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "com.kunzisoft.keepass.libre",
|
||||
name =
|
||||
mapOf(
|
||||
"ar" to "KeePassDX Passkey Vault",
|
||||
"cs-CZ" to "Trezor pro klíče KeePassDX",
|
||||
"de-DE" to "KeePassDX Passkey-Tresor",
|
||||
"en-US" to "KeePassDX Passkey Vault",
|
||||
"es-ES" to "KeePassDX Passkey Vault",
|
||||
"et" to "KeePassDX salasõnahoidla",
|
||||
"fr-FR" to "KeePassDX - Passkey local",
|
||||
"hr" to "KeePassDX Passkey Vault",
|
||||
"hu-HU" to "KeePassDX jelszótároló",
|
||||
"id" to "KeePassDX Passkey Vault",
|
||||
"it-IT" to "Cassaforte passkey KeePassDX",
|
||||
"ja-JP" to "KeePassDX パスワード管理ツール",
|
||||
"lt" to "KeePassDX slaptažodžių seifas",
|
||||
"lv" to "KeePassDX: paroļu pārvaldnieks",
|
||||
"mk-MK" to "KeePassDX Passkey Vault",
|
||||
"nl-NL" to "KeePassDX Passkey-kluis",
|
||||
"pl-PL" to "KeePassDX – Bezpieczny sejf",
|
||||
"ru-RU" to "KeePassDX - менеджер паролей",
|
||||
"sq" to "Kasafortë Kyçklm. KeePassDX",
|
||||
"th" to "ตู้นิรภัยพาสคีย์คียพาสดีเอ็กซ์",
|
||||
"tr-TR" to "KeePassDX Passkey Vault",
|
||||
"zh-CN" to "KeePassDX 密码库",
|
||||
"zh-TW" to "KeePassDX 密碼(金鑰/單字)保險庫",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.kunzisoft.keepass.libre/en-US/icon_eLwXEQD9l2URrUS3t8esDXnsKGBaH02E-ddEYhV_i7Q=.png",
|
||||
),
|
||||
)
|
||||
|
||||
fun getMostDownloadedApps(localeList: LocaleListCompat) =
|
||||
listOf(
|
||||
AppDiscoverItem(
|
||||
packageName = "app.organicmaps",
|
||||
name =
|
||||
mapOf(
|
||||
"vi" to "Organic Maps: bản đồ dẫn đường",
|
||||
"km-KH" to "Organic Maps・ផែនទីក្រៅបណ្ដាញ",
|
||||
"pt-PT" to "Organic Maps - Mapas offline",
|
||||
"zh-CN" to "Organic Maps・离线地图与导航 & GPS",
|
||||
"iw-IL" to "Organic Maps・מפת אופליין ו-GPS",
|
||||
"lv" to "Organic Maps・Kartes・Navigācija",
|
||||
"kk" to "Organic Maps: Карталар",
|
||||
"hr" to "Organic Maps: offline karte",
|
||||
"th" to "Organic Maps: แผนที่gps",
|
||||
"si-LK" to "Organic Maps・ඔෆ්ලයින් සිතියම්",
|
||||
"sl" to "Organic Maps・Offline Karte",
|
||||
"ru-RU" to "Organic Maps: GPS карты офлайн",
|
||||
"ne-NP" to "Organic Map・अफलाइन नक्सा & GPS",
|
||||
"fr-FR" to "Organic Maps: gps hors ligne",
|
||||
"es-ES" to "Organic Maps: mapas offline",
|
||||
"mk-MK" to "Organic Maps・Мапи и навигација",
|
||||
"be" to "Organic Maps: GPS карты офлайн",
|
||||
"lt" to "Organic Maps・žemėlapis & GPS",
|
||||
"ms" to "Organic Maps: Peta & Navigasi",
|
||||
"en-US" to "Organic Maps・Offline Map & GPS",
|
||||
"tr-TR" to "Organic Maps: Haritalar ve GPS",
|
||||
"ro" to "Organic Maps: hărți offline",
|
||||
"hi-IN" to "Organic Maps・ऑफ़लाइन मैप",
|
||||
"mr-IN" to "Organic Maps ऑफलाईन नकाशे",
|
||||
"bn-BD" to "Organic Maps・मैप्स और नेविगेशन",
|
||||
"ca" to "Organic Map・Mapa Offline i GPS",
|
||||
"it-IT" to "Organic Maps: Mappe Offline",
|
||||
"uk" to "Organic Maps: GPS карти офлайн",
|
||||
"zh-TW" to "Organic Maps・離線地圖與導航 GPS",
|
||||
"zh-HK" to "Organic Maps: 地圖與導航",
|
||||
"gl-ES" to "Organic Maps・Mapa fóra de liña",
|
||||
"bg" to "Organic Maps: офлайн GPS карти",
|
||||
"cs-CZ" to "Organic Maps・mapy offline, GPS",
|
||||
"ml-IN" to "Organic Maps・ഓഫ്ലൈൻ മാപ്പ്",
|
||||
"nl-NL" to "Organic Maps: offline kaarten",
|
||||
"de-DE" to "Organic Maps Offline Karten",
|
||||
"ja-JP" to "Organic Maps: マップ & ナビゲーション",
|
||||
"da-DK" to "Organic Maps: Offline Kort",
|
||||
"fa" to "Organic Maps・نقشه آفلاین و GPS",
|
||||
"ur" to "Organic Maps・Offline Map & GPS",
|
||||
"ko-KR" to "Organic Maps・GPS 지도 길찾기 앱 & 地图",
|
||||
"id" to "Organic Maps: pemetaan offline",
|
||||
"sr" to "Organic Maps・Mape i navigacija",
|
||||
"el-GR" to "Organic Maps: Χάρτες & GPS",
|
||||
"eu-ES" to "Organic Maps・Offline Map & GPS",
|
||||
"hu-HU" to "Organic Maps offline navigáció",
|
||||
"lo-LA" to "Organic Maps・ແຜນທີ່ອອບໄລນ໌",
|
||||
"no-NO" to "Organic Maps・kart & navigasjon",
|
||||
"sv-SE" to "Organic Maps: kartor & GPS",
|
||||
"et" to "Organic Maps: gps offline",
|
||||
"pl-PL" to "Organic Map・mapy i GPS offline",
|
||||
"kn-IN" to "Organic Maps・ಆಫ್ಲೈನ್ ಮ್ಯಾಪ್",
|
||||
"pt-BR" to "Organic Maps - Mapas offline",
|
||||
"ar" to "Organic Maps・خرائط بدون إنترنت",
|
||||
"ka-GE" to "Organic Map: ნავიგაცია, რუკები",
|
||||
"sk" to "Organic Map・Offline Mapy & GPS",
|
||||
"gu" to "Organic Maps・ઓફલાઇન નકશો",
|
||||
"az-AZ" to "Organic Maps – Xəritə və GPS",
|
||||
"fi-FI" to "Organic Maps: offline kartat",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/app.organicmaps/en-US/icon_dE7f4P95-uKZwu7cI89Q0xSi_-gvU4DD-XnLoDG9RLg=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "at.bitfire.davdroid",
|
||||
name = mapOf("ca" to "DAVx⁵", "en-US" to "DAVx⁵").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/at.bitfire.davdroid/en-US/icon_NexNou7vmaD45rbdc8kjLj0Rv7FW128Mde9OQpHFXPE=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "ch.protonvpn.android",
|
||||
name =
|
||||
mapOf("en-US" to "ProtonVPN - Secure and Free VPN").getBestLocale(localeList)
|
||||
?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/ch.protonvpn.android/en-US/icon_xAphlcwMgx7oE7sxB15sxUFIO8geUokWkG01K1fubas=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "com.aurora.store",
|
||||
name = mapOf("en-US" to "Aurora Store").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.aurora.store/en-US/icon_tbAhwq51NNd0liZcTg0cQNNvazxrWlj7bPCe_1TkCV8=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "com.duckduckgo.mobile.android",
|
||||
name =
|
||||
mapOf("en-US" to "DuckDuckGo Privacy Browser").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.duckduckgo.mobile.android/en-US/icon_QyKhnj_C0Pek3xtJAfPFTvywRXDutsVh7r-9t-doP9E=.png",
|
||||
),
|
||||
AppDiscoverItem(
|
||||
packageName = "com.foobnix.pro.pdf.reader",
|
||||
name = mapOf("en-US" to "Librera Reader").getBestLocale(localeList) ?: "Unknown App",
|
||||
isInstalled = false,
|
||||
imageModel =
|
||||
"https://f-droid.org/repo/com.foobnix.pro.pdf.reader/en-US/icon_y15Jxhzp6YrmjLC-wtc27B6XLTcArf7yK-2WlpNaoe0=.png",
|
||||
),
|
||||
)
|
||||
@@ -0,0 +1,34 @@
|
||||
package org.fdroid.ui.screenshots
|
||||
|
||||
import androidx.compose.foundation.text.input.rememberTextFieldState
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import org.fdroid.ui.discover.Discover
|
||||
import org.fdroid.ui.discover.LoadedDiscoverModel
|
||||
import org.junit.Ignore
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.Parameterized
|
||||
|
||||
@RunWith(Parameterized::class)
|
||||
class DiscoverScreenshotTest(localeName: String) : LocalizedScreenshotTest(localeName) {
|
||||
|
||||
companion object {
|
||||
@JvmStatic @Parameterized.Parameters(name = "{0}") fun locales() = locales
|
||||
}
|
||||
|
||||
@Test
|
||||
fun appDetails() =
|
||||
screenshotTest("1_Discover") {
|
||||
val localeList = LocaleListCompat.getDefault()
|
||||
val model =
|
||||
LoadedDiscoverModel(
|
||||
newApps = getNewApps(localeList),
|
||||
recentlyUpdatedApps = getRecentlyUpdatedApps(localeList),
|
||||
mostDownloadedApps = getMostDownloadedApps(localeList),
|
||||
categories = getCategoryItems(localeList).groupBy { it.group },
|
||||
searchTextFieldState = rememberTextFieldState(),
|
||||
hasRepoIssues = false,
|
||||
)
|
||||
Discover(discoverModel = model, onListTap = {}, onAppTap = {}, onNav = {})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.fdroid.ui.screenshots
|
||||
|
||||
import androidx.compose.ui.test.IdlingResource
|
||||
import coil3.EventListener
|
||||
import coil3.request.ErrorResult
|
||||
import coil3.request.ImageRequest
|
||||
import coil3.request.SuccessResult
|
||||
|
||||
class IdlingEventListener : IdlingResource, EventListener() {
|
||||
private val requests: MutableSet<String> = java.util.concurrent.ConcurrentHashMap.newKeySet()
|
||||
override val isIdleNow: Boolean
|
||||
get() = requests.isEmpty()
|
||||
|
||||
override fun onStart(request: ImageRequest) {
|
||||
requests.add(request.data.toString())
|
||||
}
|
||||
|
||||
override fun onSuccess(request: ImageRequest, result: SuccessResult) {
|
||||
requests.remove(request.data.toString())
|
||||
}
|
||||
|
||||
override fun onError(request: ImageRequest, result: ErrorResult) {
|
||||
requests.remove(request.data.toString())
|
||||
}
|
||||
|
||||
override fun onCancel(request: ImageRequest) {
|
||||
requests.remove(request.data.toString())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package org.fdroid.ui.screenshots
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.test.DeviceConfigurationOverride
|
||||
import androidx.compose.ui.test.Locales
|
||||
import androidx.compose.ui.test.junit4.v2.createComposeRule
|
||||
import androidx.compose.ui.text.intl.LocaleList
|
||||
import androidx.navigation3.runtime.NavKey
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import coil3.SingletonImageLoader
|
||||
import coil3.annotation.DelicateCoilApi
|
||||
import java.io.File
|
||||
import kotlin.test.assertTrue
|
||||
import kotlin.test.fail
|
||||
import org.fdroid.BuildConfig.FLAVOR_variant
|
||||
import org.fdroid.ui.MainContent
|
||||
import org.fdroid.ui.navigation.NavigationKey
|
||||
import org.junit.Assume.assumeTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
|
||||
private const val ENABLED = false
|
||||
|
||||
@OptIn(DelicateCoilApi::class)
|
||||
abstract class LocalizedScreenshotTest(val localeName: String) {
|
||||
@get:Rule val composeRule = createComposeRule()
|
||||
|
||||
companion object {
|
||||
val locales = listOf("en-US", "de-DE", "ar-SA", "he", "zh-CN")
|
||||
}
|
||||
|
||||
private val context = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
private val idlingEventListener = IdlingEventListener()
|
||||
private val uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
|
||||
|
||||
init {
|
||||
val imageLoader =
|
||||
SingletonImageLoader.get(context).newBuilder().eventListener(idlingEventListener).build()
|
||||
SingletonImageLoader.setUnsafe(imageLoader)
|
||||
composeRule.registerIdlingResource(idlingEventListener)
|
||||
}
|
||||
|
||||
@Before
|
||||
fun before() {
|
||||
assumeTrue(ENABLED)
|
||||
}
|
||||
|
||||
protected fun screenshotTest(
|
||||
screenName: String,
|
||||
showBottomBar: Boolean = true,
|
||||
currentNavKey: NavKey = NavigationKey.Discover,
|
||||
numUpdates: Int = 3,
|
||||
hasAppIssues: Boolean = true,
|
||||
content: @Composable (Modifier) -> Unit,
|
||||
) {
|
||||
val localeList = LocaleList(localeName)
|
||||
composeRule.setContent {
|
||||
DeviceConfigurationOverride(
|
||||
override = DeviceConfigurationOverride.Locales(locales = localeList)
|
||||
) {
|
||||
MainContent(
|
||||
isBigScreen = false,
|
||||
dynamicColors = false,
|
||||
showBottomBar = showBottomBar,
|
||||
currentNavKey = currentNavKey,
|
||||
numUpdates = numUpdates,
|
||||
hasAppIssues = hasAppIssues,
|
||||
onNav = {},
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
}
|
||||
composeRule.waitForIdle()
|
||||
|
||||
val dir = context.getExternalFilesDir("screenshots") ?: fail("Could not create screenshots dir")
|
||||
assertTrue(dir.isDirectory)
|
||||
val subDir =
|
||||
File(dir, "${FLAVOR_variant}/fastlane/metadata/$localeName/images/phoneScreenshots")
|
||||
subDir.mkdirs()
|
||||
assertTrue(subDir.isDirectory)
|
||||
|
||||
val file = File(subDir, "${screenName}.png")
|
||||
uiDevice.takeScreenshot(file)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,304 @@
|
||||
package org.fdroid.ui.screenshots
|
||||
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import org.fdroid.LocaleChooser.getBestLocale
|
||||
import org.fdroid.ui.apps.AppUpdateItem
|
||||
import org.fdroid.ui.apps.InstalledAppItem
|
||||
import org.fdroid.ui.utils.getPreviewVersion
|
||||
|
||||
fun getUpdates(localeList: LocaleListCompat) =
|
||||
listOf(
|
||||
AppUpdateItem(
|
||||
repoId = 1L,
|
||||
packageName = "app.organicmaps",
|
||||
name =
|
||||
mapOf(
|
||||
"vi" to "Organic Maps: bản đồ dẫn đường",
|
||||
"km-KH" to "Organic Maps・ផែនទីក្រៅបណ្ដាញ",
|
||||
"pt-PT" to "Organic Maps - Mapas offline",
|
||||
"zh-CN" to "Organic Maps・离线地图与导航 & GPS",
|
||||
"iw-IL" to "Organic Maps・מפת אופליין ו-GPS",
|
||||
"lv" to "Organic Maps・Kartes・Navigācija",
|
||||
"kk" to "Organic Maps: Карталар",
|
||||
"hr" to "Organic Maps: offline karte",
|
||||
"th" to "Organic Maps: แผนที่gps",
|
||||
"si-LK" to "Organic Maps・ඔෆ්ලයින් සිතියම්",
|
||||
"sl" to "Organic Maps・Offline Karte",
|
||||
"ru-RU" to "Organic Maps: GPS карты офлайн",
|
||||
"ne-NP" to "Organic Map・अफलाइन नक्सा & GPS",
|
||||
"fr-FR" to "Organic Maps: gps hors ligne",
|
||||
"es-ES" to "Organic Maps: mapas offline",
|
||||
"mk-MK" to "Organic Maps・Мапи и навигација",
|
||||
"be" to "Organic Maps: GPS карты офлайн",
|
||||
"lt" to "Organic Maps・žemėlapis & GPS",
|
||||
"ms" to "Organic Maps: Peta & Navigasi",
|
||||
"en-US" to "Organic Maps・Offline Map & GPS",
|
||||
"tr-TR" to "Organic Maps: Haritalar ve GPS",
|
||||
"ro" to "Organic Maps: hărți offline",
|
||||
"hi-IN" to "Organic Maps・ऑफ़लाइन मैप",
|
||||
"mr-IN" to "Organic Maps ऑफलाईन नकाशे",
|
||||
"bn-BD" to "Organic Maps・मैप्स और नेविगेशन",
|
||||
"ca" to "Organic Map・Mapa Offline i GPS",
|
||||
"it-IT" to "Organic Maps: Mappe Offline",
|
||||
"uk" to "Organic Maps: GPS карти офлайн",
|
||||
"zh-TW" to "Organic Maps・離線地圖與導航 GPS",
|
||||
"zh-HK" to "Organic Maps: 地圖與導航",
|
||||
"gl-ES" to "Organic Maps・Mapa fóra de liña",
|
||||
"bg" to "Organic Maps: офлайн GPS карти",
|
||||
"cs-CZ" to "Organic Maps・mapy offline, GPS",
|
||||
"ml-IN" to "Organic Maps・ഓഫ്ലൈൻ മാപ്പ്",
|
||||
"nl-NL" to "Organic Maps: offline kaarten",
|
||||
"de-DE" to "Organic Maps Offline Karten",
|
||||
"ja-JP" to "Organic Maps: マップ & ナビゲーション",
|
||||
"da-DK" to "Organic Maps: Offline Kort",
|
||||
"fa" to "Organic Maps・نقشه آفلاین و GPS",
|
||||
"ur" to "Organic Maps・Offline Map & GPS",
|
||||
"ko-KR" to "Organic Maps・GPS 지도 길찾기 앱 & 地图",
|
||||
"id" to "Organic Maps: pemetaan offline",
|
||||
"sr" to "Organic Maps・Mape i navigacija",
|
||||
"el-GR" to "Organic Maps: Χάρτες & GPS",
|
||||
"eu-ES" to "Organic Maps・Offline Map & GPS",
|
||||
"hu-HU" to "Organic Maps offline navigáció",
|
||||
"lo-LA" to "Organic Maps・ແຜນທີ່ອອບໄລນ໌",
|
||||
"no-NO" to "Organic Maps・kart & navigasjon",
|
||||
"sv-SE" to "Organic Maps: kartor & GPS",
|
||||
"et" to "Organic Maps: gps offline",
|
||||
"pl-PL" to "Organic Map・mapy i GPS offline",
|
||||
"kn-IN" to "Organic Maps・ಆಫ್ಲೈನ್ ಮ್ಯಾಪ್",
|
||||
"pt-BR" to "Organic Maps - Mapas offline",
|
||||
"ar" to "Organic Maps・خرائط بدون إنترنت",
|
||||
"ka-GE" to "Organic Map: ნავიგაცია, რუკები",
|
||||
"sk" to "Organic Map・Offline Mapy & GPS",
|
||||
"gu" to "Organic Maps・ઓફલાઇન નકશો",
|
||||
"az-AZ" to "Organic Maps – Xəritə və GPS",
|
||||
"fi-FI" to "Organic Maps: offline kartat",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "2026.02.18-4-FDroid",
|
||||
update = getPreviewVersion(versionName = "2026.02.18-5-FDroid", size = 70355961),
|
||||
whatsNew = "foo bar",
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/app.organicmaps/en-US/icon_dE7f4P95-uKZwu7cI89Q0xSi_-gvU4DD-XnLoDG9RLg=.png",
|
||||
),
|
||||
AppUpdateItem(
|
||||
repoId = 1L,
|
||||
packageName = "at.bitfire.davdroid",
|
||||
name = mapOf("ca" to "DAVx⁵", "en-US" to "DAVx⁵").getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "4.5.8-ose",
|
||||
update = getPreviewVersion(versionName = "4.5.9-ose", size = 15974669),
|
||||
whatsNew = null,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/at.bitfire.davdroid/en-US/icon_NexNou7vmaD45rbdc8kjLj0Rv7FW128Mde9OQpHFXPE=.png",
|
||||
),
|
||||
AppUpdateItem(
|
||||
repoId = 1L,
|
||||
packageName = "ch.protonvpn.android",
|
||||
name =
|
||||
mapOf("en-US" to "ProtonVPN - Secure and Free VPN").getBestLocale(localeList)
|
||||
?: "Unknown App",
|
||||
installedVersionName = "5.16.30.9",
|
||||
update = getPreviewVersion(versionName = "5.16.31.0", size = 54161941),
|
||||
whatsNew = "foo bar",
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/ch.protonvpn.android/en-US/icon_xAphlcwMgx7oE7sxB15sxUFIO8geUokWkG01K1fubas=.png",
|
||||
),
|
||||
)
|
||||
|
||||
fun getInstalledApps(localeList: LocaleListCompat) =
|
||||
listOf(
|
||||
InstalledAppItem(
|
||||
packageName = "com.aurora.store",
|
||||
name = mapOf("en-US" to "Aurora Store").getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "4.8.1",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1771544205000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.aurora.store/en-US/icon_tbAhwq51NNd0liZcTg0cQNNvazxrWlj7bPCe_1TkCV8=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.duckduckgo.mobile.android",
|
||||
name =
|
||||
mapOf("en-US" to "DuckDuckGo Privacy Browser").getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "5.268.1",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1772699310000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.duckduckgo.mobile.android/en-US/icon_QyKhnj_C0Pek3xtJAfPFTvywRXDutsVh7r-9t-doP9E=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.foobnix.pro.pdf.reader",
|
||||
name = mapOf("en-US" to "Librera Reader").getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "9.3.63-fdroid",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1772574994000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.foobnix.pro.pdf.reader/en-US/icon_y15Jxhzp6YrmjLC-wtc27B6XLTcArf7yK-2WlpNaoe0=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.fsck.k9",
|
||||
name =
|
||||
mapOf(
|
||||
"ar" to "K-9 Mail",
|
||||
"be" to "Пошта K-9",
|
||||
"bg" to "K-9 Поща",
|
||||
"ca" to "K-9 Mail",
|
||||
"co" to "K-9 Mail",
|
||||
"cs-CZ" to "K-9 Mail",
|
||||
"cy" to "K-9 Mail",
|
||||
"de" to "K-9 Mail",
|
||||
"el-GR" to "K-9 Mail",
|
||||
"en-GB" to "K-9 Mail",
|
||||
"en-US" to "K-9 Mail",
|
||||
"eo" to "K-9 Retpoŝtilo",
|
||||
"es" to "K-9 Mail",
|
||||
"et" to "K-9 Mail",
|
||||
"eu-ES" to "K-9 Mail",
|
||||
"fa-IR" to "نامهٔ کی۹",
|
||||
"fr" to "Courriel K-9 Mail",
|
||||
"fy" to "K-9 Mail",
|
||||
"ga" to "K-9 Mail",
|
||||
"gd" to "Post K-9",
|
||||
"he" to "K-9 דוא\"ל",
|
||||
"hi-IN" to "K-9 Mail",
|
||||
"hr" to "K-9 Mail",
|
||||
"hu-HU" to "K-9 Mail",
|
||||
"id" to "Surel K-9",
|
||||
"is-IS" to "K-9 - Póstur",
|
||||
"it" to "K-9 Mail",
|
||||
"ja" to "K-9 Mail",
|
||||
"kk" to "K-9 Пошта",
|
||||
"ko-KR" to "K-9 메일",
|
||||
"lt" to "K-9 paštas",
|
||||
"mnw" to "တိုက်လိက် K-၉",
|
||||
"nb" to "K-9 E-post",
|
||||
"nl-NL" to "K-9 Mail",
|
||||
"nn" to "K-9 Mail",
|
||||
"pl" to "K-9 Mail",
|
||||
"pt-BR" to "K-9 Mail",
|
||||
"pt-PT" to "K-9 Mail",
|
||||
"ro" to "K-9 Mail",
|
||||
"ru" to "Почта K-9",
|
||||
"sk" to "K-9 Mail",
|
||||
"sl" to "Pošta K-9",
|
||||
"sq" to "K-9 Mail",
|
||||
"sr" to "K-9 Mail",
|
||||
"sv-SE" to "K-9 Mail",
|
||||
"ta-IN" to "கே-9 அஞ்சல்",
|
||||
"tr" to "K-9 Posta",
|
||||
"uk" to "K-9 Mail",
|
||||
"vi" to "K-9 Mail",
|
||||
"zh-CN" to "K-9 Mail",
|
||||
"zh-TW" to "K-9 Mail",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "16.1",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1770745842000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.fsck.k9/en-US/icon_-2bZW0ZnkKqPVher2SxQK8hXGGSjgaBHoa8x6vW0v8w=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.github.andreyasadchy.xtra",
|
||||
name = mapOf("en-US" to "Xtra").getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "2.54.3",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1772397992000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.github.andreyasadchy.xtra/en-US/icon_yfnxF0cNrXwFX2a93BUclISVaIQzoRmbOuxtGDAwz28=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.github.libretube",
|
||||
name = mapOf("en-US" to "LibreTube").getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "0.30.0",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1769702789000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.github.libretube/en-US/icon_p6_cfoYk-2IlerJpH4rKIQmkI76zXtS3R9-RZp-3Ggk=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.inspiredandroid.linuxcommandbibliotheca",
|
||||
name = mapOf("en-US" to "Linux Command Library").getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "3.5.13",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1772463524000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.inspiredandroid.linuxcommandbibliotheca/en-US/icon_DrA_e_52nvGa_kTMSapBw4MCqKpccl8WZqrG5enB7rI=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.junkfood.seal",
|
||||
name =
|
||||
mapOf(
|
||||
"ar-SA" to "Seal",
|
||||
"bn" to "সিল",
|
||||
"de-DE" to "Seal",
|
||||
"en-US" to "Seal",
|
||||
"es" to "Seal",
|
||||
"fr-FR" to "Seal",
|
||||
"hi" to "सील",
|
||||
"hr" to "Seal",
|
||||
"id" to "Seal",
|
||||
"it" to "Seal",
|
||||
"ja" to "Seal",
|
||||
"ml" to "സീൽ",
|
||||
"nb-NO" to "Seal",
|
||||
"nl-NL" to "Zeehond",
|
||||
"pt-BR" to "Seal",
|
||||
"ru" to "Seal",
|
||||
"th" to "Seal",
|
||||
"uk" to "Тюлень",
|
||||
"vi" to "Hải Cẩu",
|
||||
"zh-CN" to "Seal",
|
||||
"zh-TW" to "Seal",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "1.13.1-(F-Droid)",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1767740580000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.junkfood.seal/en-US/icon_j8mCLA_OX-sJn7TRAdvoaUMW1f6djRv6RMzAnNdaG4I=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.kunzisoft.keepass.libre",
|
||||
name =
|
||||
mapOf(
|
||||
"ar" to "KeePassDX Passkey Vault",
|
||||
"cs-CZ" to "Trezor pro klíče KeePassDX",
|
||||
"de-DE" to "KeePassDX Passkey-Tresor",
|
||||
"en-US" to "KeePassDX Passkey Vault",
|
||||
"es-ES" to "KeePassDX Passkey Vault",
|
||||
"et" to "KeePassDX salasõnahoidla",
|
||||
"fr-FR" to "KeePassDX - Passkey local",
|
||||
"hr" to "KeePassDX Passkey Vault",
|
||||
"hu-HU" to "KeePassDX jelszótároló",
|
||||
"id" to "KeePassDX Passkey Vault",
|
||||
"it-IT" to "Cassaforte passkey KeePassDX",
|
||||
"ja-JP" to "KeePassDX パスワード管理ツール",
|
||||
"lt" to "KeePassDX slaptažodžių seifas",
|
||||
"lv" to "KeePassDX: paroļu pārvaldnieks",
|
||||
"mk-MK" to "KeePassDX Passkey Vault",
|
||||
"nl-NL" to "KeePassDX Passkey-kluis",
|
||||
"pl-PL" to "KeePassDX – Bezpieczny sejf",
|
||||
"ru-RU" to "KeePassDX - менеджер паролей",
|
||||
"sq" to "Kasafortë Kyçklm. KeePassDX",
|
||||
"th" to "ตู้นิรภัยพาสคีย์คียพาสดีเอ็กซ์",
|
||||
"tr-TR" to "KeePassDX Passkey Vault",
|
||||
"zh-CN" to "KeePassDX 密码库",
|
||||
"zh-TW" to "KeePassDX 密碼(金鑰/單字)保險庫",
|
||||
)
|
||||
.getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "4.3.2",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1768680637000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.kunzisoft.keepass.libre/en-US/icon_eLwXEQD9l2URrUS3t8esDXnsKGBaH02E-ddEYhV_i7Q=.png",
|
||||
),
|
||||
InstalledAppItem(
|
||||
packageName = "com.looker.droidify",
|
||||
name = mapOf("en-US" to "Droid-ify").getBestLocale(localeList) ?: "Unknown App",
|
||||
installedVersionName = "0.7.0",
|
||||
installedVersionCode = 1,
|
||||
lastUpdated = 1771667689000L,
|
||||
iconModel =
|
||||
"https://f-droid.org/repo/com.looker.droidify/en-US/icon_lApsnfhrMqGkCaW-IdnYwx86CUjdTutncPvXPJythaM=.png",
|
||||
),
|
||||
)
|
||||
@@ -0,0 +1,35 @@
|
||||
package org.fdroid.ui.screenshots
|
||||
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import org.fdroid.download.NetworkState
|
||||
import org.fdroid.ui.apps.MyApps
|
||||
import org.fdroid.ui.apps.MyAppsModel
|
||||
import org.fdroid.ui.utils.getMyAppsInfo
|
||||
import org.junit.Ignore
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.Parameterized
|
||||
|
||||
@RunWith(Parameterized::class)
|
||||
class MyAppsScreenshotTest(localeName: String) : LocalizedScreenshotTest(localeName) {
|
||||
|
||||
companion object {
|
||||
@JvmStatic @Parameterized.Parameters(name = "{0}") fun locales() = locales
|
||||
}
|
||||
|
||||
@Test
|
||||
fun myApps() =
|
||||
screenshotTest("2_My_Apps", numUpdates = getUpdates(LocaleListCompat.getDefault()).size) {
|
||||
val localeList = LocaleListCompat.getDefault()
|
||||
val model =
|
||||
MyAppsModel(
|
||||
appUpdates = getUpdates(localeList),
|
||||
installingApps = emptyList(),
|
||||
installedApps = getInstalledApps(localeList),
|
||||
showAppIssueHint = false,
|
||||
networkState = NetworkState(isOnline = true, isMetered = false),
|
||||
)
|
||||
val info = getMyAppsInfo(model)
|
||||
MyApps(myAppsInfo = info, currentPackageName = null, onAppItemClick = {}, onNav = {})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user