From a7519d4f96fae147a3388cb9b5c0c0062be71e34 Mon Sep 17 00:00:00 2001 From: rainxchzed Date: Tue, 5 May 2026 15:31:24 +0500 Subject: [PATCH 1/2] feat(search): add Recently Updated sort option backed by GitHub sort=updated --- .../rainxch/search/data/repository/SearchRepositoryImpl.kt | 6 ++++-- .../commonMain/kotlin/zed/rainxch/domain/model/SortBy.kt | 2 ++ .../rainxch/search/presentation/mappers/SortByMappers.kt | 1 + .../zed/rainxch/search/presentation/model/SortByUi.kt | 1 + .../zed/rainxch/search/presentation/utils/SortByMapper.kt | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/feature/search/data/src/commonMain/kotlin/zed/rainxch/search/data/repository/SearchRepositoryImpl.kt b/feature/search/data/src/commonMain/kotlin/zed/rainxch/search/data/repository/SearchRepositoryImpl.kt index d8da52ee9..8a712898b 100644 --- a/feature/search/data/src/commonMain/kotlin/zed/rainxch/search/data/repository/SearchRepositoryImpl.kt +++ b/feature/search/data/src/commonMain/kotlin/zed/rainxch/search/data/repository/SearchRepositoryImpl.kt @@ -112,8 +112,9 @@ class SearchRepositoryImpl( ): PaginatedDiscoveryRepositories? { if (query.isBlank()) return null - // Backend doesn't support forks sorting — fall through to GitHub REST - if (sortBy == SortBy.MostForks) return null + // Backend doesn't support forks or recently-updated sorting — + // fall through to GitHub REST which honors both natively. + if (sortBy == SortBy.MostForks || sortBy == SortBy.RecentlyUpdated) return null val platformSlug = when (platform) { DiscoveryPlatform.Android -> "android" @@ -127,6 +128,7 @@ class SearchRepositoryImpl( SortBy.MostStars -> "stars" SortBy.BestMatch -> "relevance" SortBy.MostForks -> null // unreachable, guarded above + SortBy.RecentlyUpdated -> null // unreachable, guarded above } val offset = (page - 1) * BACKEND_PAGE_SIZE diff --git a/feature/search/domain/src/commonMain/kotlin/zed/rainxch/domain/model/SortBy.kt b/feature/search/domain/src/commonMain/kotlin/zed/rainxch/domain/model/SortBy.kt index e4599dc58..0e3593ef9 100644 --- a/feature/search/domain/src/commonMain/kotlin/zed/rainxch/domain/model/SortBy.kt +++ b/feature/search/domain/src/commonMain/kotlin/zed/rainxch/domain/model/SortBy.kt @@ -4,6 +4,7 @@ enum class SortBy { MostStars, MostForks, BestMatch, + RecentlyUpdated, ; fun toGithubSortParam(): String? = @@ -11,5 +12,6 @@ enum class SortBy { MostStars -> "stars" MostForks -> "forks" BestMatch -> null + RecentlyUpdated -> "updated" } } diff --git a/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/mappers/SortByMappers.kt b/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/mappers/SortByMappers.kt index 7fc9072dc..66a1bf8a9 100644 --- a/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/mappers/SortByMappers.kt +++ b/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/mappers/SortByMappers.kt @@ -9,5 +9,6 @@ fun SortByUi.toDomain(): SortBy { SortByUi.MostStars -> MostStars SortByUi.MostForks -> MostForks SortByUi.BestMatch -> BestMatch + SortByUi.RecentlyUpdated -> RecentlyUpdated } } diff --git a/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/model/SortByUi.kt b/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/model/SortByUi.kt index 185b17994..d5f0d23d0 100644 --- a/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/model/SortByUi.kt +++ b/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/model/SortByUi.kt @@ -4,4 +4,5 @@ enum class SortByUi { MostStars, MostForks, BestMatch, + RecentlyUpdated, } diff --git a/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/utils/SortByMapper.kt b/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/utils/SortByMapper.kt index 933cd58b6..2d2c32943 100644 --- a/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/utils/SortByMapper.kt +++ b/feature/search/presentation/src/commonMain/kotlin/zed/rainxch/search/presentation/utils/SortByMapper.kt @@ -10,4 +10,5 @@ fun SortByUi.label(): StringResource = MostStars -> Res.string.sort_most_stars MostForks -> Res.string.sort_most_forks BestMatch -> Res.string.sort_best_match + RecentlyUpdated -> Res.string.sort_recently_updated } From cd66b98815512aaab570b46b1601e28e493b3ee2 Mon Sep 17 00:00:00 2001 From: rainxchzed Date: Tue, 5 May 2026 15:31:24 +0500 Subject: [PATCH 2/2] chore(strings): note Recently Updated sort in 1.8.1 what's-new across locales --- .../src/commonMain/composeResources/files/whatsnew/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/ar/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/bn/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/es/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/fr/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/hi/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/it/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/ja/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/ko/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/pl/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/ru/16.json | 3 ++- .../src/commonMain/composeResources/files/whatsnew/tr/16.json | 3 ++- .../commonMain/composeResources/files/whatsnew/zh-CN/16.json | 3 ++- 13 files changed, 26 insertions(+), 13 deletions(-) diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/16.json index 5961aac77..991814d78 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/16.json @@ -15,7 +15,8 @@ "Obtainium import/export — bring your library over from Obtainium with one tap, or export to Obtainium any time.", "Add from starred — surface APK-shipping repos from your GitHub stars and jump straight into installing.", "Installer attribution — set what installer name silent installs claim, so apps that gate on installer source can be coaxed into running.", - "Manual refresh on details — pull-to-refresh on Android, overflow-menu Refresh on every platform, Ctrl/Cmd+R on desktop." + "Manual refresh on details — pull-to-refresh on Android, overflow-menu Refresh on every platform, Ctrl/Cmd+R on desktop.", + "Search now sorts by Recently Updated — find repos with fresh stable releases first." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/ar/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/ar/16.json index 9b39990e4..f7acf806b 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/ar/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/ar/16.json @@ -15,7 +15,8 @@ "استيراد/تصدير Obtainium: انقل مكتبتك من Obtainium بنقرة واحدة، أو صدّر إلى صيغة Obtainium في أي وقت.", "إضافة من المُنجَّمة: استعرض المستودعات التي تشحن APK ضمن نجوم GitHub لديك وانتقل مباشرة إلى التثبيت.", "تخصيص هوية المثبّت: عيّن اسم المثبّت الذي تدّعيه التثبيتات الصامتة، حتى تعمل التطبيقات التي تتحقّق من مصدر التثبيت.", - "تحديث يدوي على شاشة التفاصيل: السحب للتحديث على Android، وعنصر «تحديث» في قائمة الخيارات على كل المنصات، واختصار Ctrl/Cmd+R على سطح المكتب." + "تحديث يدوي على شاشة التفاصيل: السحب للتحديث على Android، وعنصر «تحديث» في قائمة الخيارات على كل المنصات، واختصار Ctrl/Cmd+R على سطح المكتب.", + "البحث يدعم الآن الترتيب حسب «المحدّث مؤخراً» — اعثر على المستودعات ذات أحدث الإصدارات المستقرّة أولاً." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/bn/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/bn/16.json index c02f9ea36..d5a6ac6bb 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/bn/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/bn/16.json @@ -15,7 +15,8 @@ "Obtainium ইম্পোর্ট/এক্সপোর্ট — এক ট্যাপে Obtainium থেকে লাইব্রেরি আনুন, বা যেকোনো সময় Obtainium ফরম্যাটে এক্সপোর্ট করুন।", "Add from starred — আপনার GitHub স্টার করা যেসব রিপো APK পাঠায় সেগুলো দেখুন আর সরাসরি ইনস্টলে যান।", "Installer attribution — সাইলেন্ট ইনস্টল কোন ইনস্টলার নাম দাবি করবে তা সেট করুন, যাতে যেসব অ্যাপ ইনস্টলার সোর্স দেখে সেগুলোও চলতে পারে।", - "ডিটেইলস স্ক্রিনে ম্যানুয়াল রিফ্রেশ — Android-এ পুল-টু-রিফ্রেশ, সব প্ল্যাটফর্মে ওভারফ্লো মেনুতে রিফ্রেশ, ডেস্কটপে Ctrl/Cmd+R।" + "ডিটেইলস স্ক্রিনে ম্যানুয়াল রিফ্রেশ — Android-এ পুল-টু-রিফ্রেশ, সব প্ল্যাটফর্মে ওভারফ্লো মেনুতে রিফ্রেশ, ডেস্কটপে Ctrl/Cmd+R।", + "সার্চ এখন «সাম্প্রতিক আপডেট» দিয়ে সাজানো যায় — সর্বশেষ স্থিতিশীল রিলিজ আছে এমন রিপো প্রথমে দেখুন।" ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/es/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/es/16.json index 2d4d8faca..9bdf17867 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/es/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/es/16.json @@ -15,7 +15,8 @@ "Importar/Exportar Obtainium: trae tu biblioteca desde Obtainium con un toque, o exporta a formato Obtainium cuando quieras.", "Añadir desde estrellas: descubre los repos de tus estrellas en GitHub que envían APK y salta directo a instalar.", "Atribución del instalador: define qué nombre de instalador declaran las instalaciones silenciosas, para que las apps que filtran por origen del instalador funcionen.", - "Actualización manual en detalles: deslizar para actualizar en Android, opción «Actualizar» en el menú de opciones en todas las plataformas, Ctrl/Cmd+R en escritorio." + "Actualización manual en detalles: deslizar para actualizar en Android, opción «Actualizar» en el menú de opciones en todas las plataformas, Ctrl/Cmd+R en escritorio.", + "Búsqueda ordena ahora por «Actualizados recientemente» — encuentra primero los repos con releases estables más recientes." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/fr/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/fr/16.json index a9f5b6486..9008d7d52 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/fr/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/fr/16.json @@ -15,7 +15,8 @@ "Import/Export Obtainium : récupérez votre bibliothèque depuis Obtainium en un toucher, ou exportez vers Obtainium quand vous voulez.", "Ajouter depuis les étoiles : repérez parmi vos repos étoilés sur GitHub ceux qui livrent un APK, puis installez-les directement.", "Attribution de l’installateur : choisissez le nom d’installateur que les installations silencieuses revendiquent, pour que les apps qui filtrent par source d’installation fonctionnent.", - "Actualisation manuelle dans les détails : tirer pour actualiser sur Android, entrée « Actualiser » dans le menu sur toutes les plateformes, Ctrl/Cmd+R sur le bureau." + "Actualisation manuelle dans les détails : tirer pour actualiser sur Android, entrée « Actualiser » dans le menu sur toutes les plateformes, Ctrl/Cmd+R sur le bureau.", + "La recherche peut désormais trier par « Récemment mis à jour » — trouvez d’abord les dépôts avec les releases stables les plus récentes." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/hi/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/hi/16.json index 6557ee300..737ba7ac8 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/hi/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/hi/16.json @@ -15,7 +15,8 @@ "Obtainium इम्पोर्ट/एक्सपोर्ट — एक टैप से Obtainium से अपनी लाइब्रेरी लाएँ, या जब चाहें Obtainium फ़ॉर्मैट में एक्सपोर्ट करें।", "Add from starred — अपने GitHub स्टार किए हुए रेपो में से APK वाले को सामने लाएँ और सीधे इंस्टॉल पर जाएँ।", "Installer attribution — साइलेंट इंस्टॉल किस इंस्टॉलर नाम का दावा करेंगे, इसे सेट करें ताकि इंस्टॉलर सोर्स पर निर्भर ऐप्स भी चल सकें।", - "विवरण स्क्रीन पर मैन्युअल रीफ़्रेश — Android पर पुल-टू-रीफ़्रेश, हर प्लेटफ़ॉर्म पर ओवरफ़्लो मेन्यू में 'रीफ़्रेश', डेस्कटॉप पर Ctrl/Cmd+R।" + "विवरण स्क्रीन पर मैन्युअल रीफ़्रेश — Android पर पुल-टू-रीफ़्रेश, हर प्लेटफ़ॉर्म पर ओवरफ़्लो मेन्यू में 'रीफ़्रेश', डेस्कटॉप पर Ctrl/Cmd+R।", + "सर्च अब 'हाल ही में अपडेट किया गया' के अनुसार सॉर्ट कर सकती है — सबसे नई स्थिर रिलीज़ वाले रेपो पहले देखें।" ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/it/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/it/16.json index 2fe51d6a3..9d89f63bf 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/it/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/it/16.json @@ -15,7 +15,8 @@ "Import/Export Obtainium: porta la tua libreria da Obtainium con un tocco, o esporta verso il formato Obtainium quando vuoi.", "Aggiungi dalle stelle: scopri i repo che spediscono APK fra le tue stelle GitHub e vai dritto all'installazione.", "Attribuzione installatore: scegli quale nome di installatore dichiarano le installazioni silenziose, così le app che filtrano sull'origine funzionano.", - "Aggiornamento manuale nei dettagli: trascina per aggiornare su Android, voce «Aggiorna» nel menu su tutte le piattaforme, Ctrl/Cmd+R su desktop." + "Aggiornamento manuale nei dettagli: trascina per aggiornare su Android, voce «Aggiorna» nel menu su tutte le piattaforme, Ctrl/Cmd+R su desktop.", + "La ricerca può ora ordinare per «Aggiornati di recente» — trova prima i repo con le release stabili più recenti." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/ja/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/ja/16.json index 30c615f0a..3d403982d 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/ja/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/ja/16.json @@ -15,7 +15,8 @@ "Obtainium インポート/エクスポート — Obtainium のライブラリをワンタップで取り込み、いつでも Obtainium 形式で書き出し。", "スター付きから追加 — GitHub のスター付きリポから APK を配布しているものを表示し、そのままインストールに進めます。", "インストーラー属性 — サイレントインストール時に名乗るインストーラー名を変更でき、インストール元を見るアプリも動かせるようにします。", - "詳細画面で手動更新 — Android はプルして更新、全プラットフォームでオーバーフローメニューに「更新」、デスクトップは Ctrl/Cmd+R に対応。" + "詳細画面で手動更新 — Android はプルして更新、全プラットフォームでオーバーフローメニューに「更新」、デスクトップは Ctrl/Cmd+R に対応。", + "検索で「最近更新」順の並べ替えに対応 — 最新の安定版リリースがあるリポジトリを先に表示します。" ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/ko/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/ko/16.json index 5b9e25dad..3a1ac5d2d 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/ko/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/ko/16.json @@ -15,7 +15,8 @@ "Obtainium 가져오기/내보내기 — Obtainium 라이브러리를 한 번에 가져오거나, 언제든지 Obtainium 형식으로 내보낼 수 있습니다.", "별표한 저장소에서 추가 — GitHub 별표 저장소 중 APK를 배포하는 곳을 보여주고, 바로 설치 단계로 넘어갈 수 있습니다.", "설치자 속성 — 무음 설치가 어떤 설치자 이름을 사용할지 지정해서, 설치 출처를 확인하는 앱도 실행될 수 있도록 합니다.", - "세부 정보 화면에서 수동 새로 고침 — Android에서 당겨서 새로 고침, 모든 플랫폼의 오버플로 메뉴에 ‘새로 고침’, 데스크톱에서 Ctrl/Cmd+R." + "세부 정보 화면에서 수동 새로 고침 — Android에서 당겨서 새로 고침, 모든 플랫폼의 오버플로 메뉴에 ‘새로 고침’, 데스크톱에서 Ctrl/Cmd+R.", + "검색에서 ‘최근 업데이트’ 정렬을 추가했습니다 — 최신 안정 릴리스가 있는 저장소를 먼저 보여줍니다." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/pl/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/pl/16.json index 609fb9ef7..9f80cf77c 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/pl/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/pl/16.json @@ -15,7 +15,8 @@ "Import/Eksport Obtainium — przenieś bibliotekę z Obtainium jednym dotknięciem albo wyeksportuj do formatu Obtainium kiedy chcesz.", "Dodaj z oznaczonych gwiazdką — zobacz, które z twoich oznaczonych repo GitHub publikują APK, i przejdź wprost do instalacji.", "Atrybucja instalatora — ustaw nazwę instalatora, którą deklarują ciche instalacje, by aplikacje filtrujące po źródle instalacji działały.", - "Ręczne odświeżanie w szczegółach — pociągnij, aby odświeżyć na Androidzie, pozycja „Odśwież” w menu na każdej platformie, Ctrl/Cmd+R na pulpicie." + "Ręczne odświeżanie w szczegółach — pociągnij, aby odświeżyć na Androidzie, pozycja „Odśwież” w menu na każdej platformie, Ctrl/Cmd+R na pulpicie.", + "Wyszukiwarka sortuje teraz po „Ostatnio zaktualizowane” — najpierw repozytoria z najświeższymi stabilnymi wydaniami." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/ru/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/ru/16.json index fa4aac431..7d0e0f384 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/ru/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/ru/16.json @@ -15,7 +15,8 @@ "Импорт/Экспорт Obtainium — перенесите библиотеку из Obtainium одним касанием или выгрузите в формат Obtainium в любой момент.", "Добавление из звёзд — видите среди ваших звёзд GitHub репозитории с APK и сразу переходите к установке.", "Атрибуция установщика — задайте имя установщика, которым представляются тихие установки, чтобы работали приложения, проверяющие источник установки.", - "Ручное обновление на экране деталей — потяните вниз для обновления на Android, пункт «Обновить» в меню на всех платформах, Ctrl/Cmd+R на десктопе." + "Ручное обновление на экране деталей — потяните вниз для обновления на Android, пункт «Обновить» в меню на всех платформах, Ctrl/Cmd+R на десктопе.", + "Поиск теперь умеет сортировать по «Недавно обновлённым» — репозитории с самыми свежими стабильными релизами выводятся первыми." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/tr/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/tr/16.json index 5321740d6..5f25a8762 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/tr/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/tr/16.json @@ -15,7 +15,8 @@ "Obtainium içe/dışa aktarma — Obtainium kütüphanenizi tek dokunuşla getirin ya da istediğiniz zaman Obtainium biçiminde dışa aktarın.", "Yıldızlananlardan ekle — GitHub'da yıldızladıklarınız arasından APK gönderenleri görüp doğrudan kuruluma geçin.", "Yükleyici atfı — sessiz kurulumların hangi yükleyici adını taşıyacağını ayarlayın; kurulum kaynağını kontrol eden uygulamalar yine çalışsın.", - "Detaylar ekranında manuel yenileme — Android'de aşağı çek-yenile, her platformda taşma menüsünde 'Yenile' seçeneği, masaüstünde Ctrl/Cmd+R." + "Detaylar ekranında manuel yenileme — Android'de aşağı çek-yenile, her platformda taşma menüsünde 'Yenile' seçeneği, masaüstünde Ctrl/Cmd+R.", + "Arama artık 'Yeni Güncellenmiş' sırasıyla sıralanabiliyor — en yeni kararlı sürümlere sahip depoları önce görün." ] }, { diff --git a/core/presentation/src/commonMain/composeResources/files/whatsnew/zh-CN/16.json b/core/presentation/src/commonMain/composeResources/files/whatsnew/zh-CN/16.json index 09f2da2ed..ccbb08041 100644 --- a/core/presentation/src/commonMain/composeResources/files/whatsnew/zh-CN/16.json +++ b/core/presentation/src/commonMain/composeResources/files/whatsnew/zh-CN/16.json @@ -15,7 +15,8 @@ "Obtainium 导入/导出:一键从 Obtainium 迁移你的应用库,也可以随时导出为 Obtainium 格式。", "从星标添加:列出你 GitHub 星标里发布 APK 的仓库,直接跳到安装环节。", "安装来源伪装:可设置静默安装时声明的安装器名称,让那些根据安装来源做判断的应用也能正常运行。", - "详情页手动刷新:Android 下拉刷新,所有平台的溢出菜单都加入「刷新」,桌面端支持 Ctrl/Cmd+R。" + "详情页手动刷新:Android 下拉刷新,所有平台的溢出菜单都加入「刷新」,桌面端支持 Ctrl/Cmd+R。", + "搜索新增「最近更新」排序 — 优先展示有最新稳定版本的仓库。" ] }, {