From 6ce9f29331db4ad553447b17b5108a78945ad6b9 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Thu, 2 Nov 2023 21:50:49 +0200 Subject: [PATCH 1/7] Fix settings top bar on TV (#738) --- .../cloudstream3/ui/settings/SettingsAccount.kt | 2 ++ .../cloudstream3/ui/settings/SettingsFragment.kt | 10 ++++++++++ .../cloudstream3/ui/settings/SettingsGeneral.kt | 3 ++- .../cloudstream3/ui/settings/SettingsPlayer.kt | 2 ++ .../cloudstream3/ui/settings/SettingsProviders.kt | 2 ++ .../lagradost/cloudstream3/ui/settings/SettingsUI.kt | 2 ++ .../cloudstream3/ui/settings/SettingsUpdates.kt | 2 ++ 7 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index b3225d5c..aa5a3182 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -30,6 +30,7 @@ import com.lagradost.cloudstream3.syncproviders.OAuth2API import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe @@ -248,6 +249,7 @@ class SettingsAccount : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_account) setPaddingBottom() + setToolBarScrollFlags() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index a4d19eba..cb48b086 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -12,10 +12,12 @@ import android.widget.ImageView import androidx.annotation.StringRes import androidx.core.view.children import androidx.core.view.isVisible +import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.MaterialToolbar import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.MainSettingsBinding @@ -54,7 +56,15 @@ class SettingsFragment : Fragment() { listView?.setPadding(0, 0, 0, 100.toPx) } } + fun PreferenceFragmentCompat.setToolBarScrollFlags() { + if (isTvSettings()) { + val settingsAppbar = view?.findViewById(R.id.settings_toolbar) + settingsAppbar?.updateLayoutParams { + scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL + } + } + } fun Fragment?.setUpToolbar(title: String) { if (this == null) return val settingsToolbar = view?.findViewById(R.id.settings_toolbar) ?: return diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt index 17efd276..224ca74a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt @@ -28,6 +28,7 @@ import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.ui.EasterEggMonke import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog @@ -115,6 +116,7 @@ class SettingsGeneral : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_general) setPaddingBottom() + setToolBarScrollFlags() } data class CustomSite( @@ -192,7 +194,6 @@ class SettingsGeneral : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } - fun showAdd() { val providers = synchronized(allProviders) { allProviders.distinctBy { it.javaClass }.sortedBy { it.name } } activity?.showDialog( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsPlayer.kt index e10a5a1a..3d0bcb1f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsPlayer.kt @@ -10,6 +10,7 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getFolderSize import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.subtitles.ChromecastSubtitlesFragment import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment @@ -23,6 +24,7 @@ class SettingsPlayer : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_player) setPaddingBottom() + setToolBarScrollFlags() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { hideKeyboard() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt index 7e57fc5b..7dc73a46 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt @@ -13,6 +13,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog @@ -25,6 +26,7 @@ class SettingsProviders : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_providers) setPaddingBottom() + setToolBarScrollFlags() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt index e2fd24ca..8c720313 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt @@ -11,6 +11,7 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.updateTv import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog @@ -23,6 +24,7 @@ class SettingsUI : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_ui) setPaddingBottom() + setToolBarScrollFlags() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index 2f796801..9f72c1d5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -22,6 +22,7 @@ import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.services.BackupWorkManager import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.BackupUtils import com.lagradost.cloudstream3.utils.BackupUtils.restorePrompt @@ -42,6 +43,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_updates) setPaddingBottom() + setToolBarScrollFlags() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { From 199f5b3a9d23297cb8f772e102619339452e9ff2 Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Thu, 2 Nov 2023 20:58:52 +0100 Subject: [PATCH 2/7] Translations update from Hosted Weblate (#681) Co-authored-by: Ahmed Abd El-Fattah Co-authored-by: Fjuro Co-authored-by: Fqwe1 Co-authored-by: Giuseppe Terrana Co-authored-by: Luna712 <142361265+Luna712@users.noreply.github.com> Co-authored-by: Rex_sa Co-authored-by: gallegonovato Co-authored-by: ngocanhtve --- app/src/main/res/values-ar/strings.xml | 50 ++++++++++++---- app/src/main/res/values-cs/strings.xml | 49 ++++++++++++---- app/src/main/res/values-es/strings.xml | 58 ++++++++++++++----- app/src/main/res/values-it/strings.xml | 34 +++++++++-- app/src/main/res/values-uk/strings.xml | 54 ++++++++++++----- app/src/main/res/values-vi/strings.xml | 33 ++++++++++- app/src/main/res/values/strings.xml | 6 +- .../metadata/android/es-ES/changelogs/2.txt | 1 + .../android/es-ES/full_description.txt | 10 ++++ .../android/es-ES/short_description.txt | 1 + fastlane/metadata/android/es-ES/title.txt | 1 + 11 files changed, 234 insertions(+), 63 deletions(-) create mode 100644 fastlane/metadata/android/es-ES/changelogs/2.txt create mode 100644 fastlane/metadata/android/es-ES/full_description.txt create mode 100644 fastlane/metadata/android/es-ES/short_description.txt create mode 100644 fastlane/metadata/android/es-ES/title.txt diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index f73081f7..15d22412 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -12,8 +12,8 @@ سرعة (%.2fx) تقييم: %.1f - !تم العثور على تحديث جديد -\n%s -> %s + يوجد تحديث جديد! +\n%1$s -> %2$s %d دقيقة CloudStream تشغيل بواسطة CloudStream @@ -319,7 +319,7 @@ Kitsu Trakt --> - %s %s + %1$s %2$s حساب تسجيل الخروج تسجيل الدخول @@ -418,8 +418,8 @@ تم إزالة الإضافة تعذر التحميل %s 18+ - بدأ تنزيل %d %s … - تم التنزيل %d %s + بدأ تنزيل %1$d %2$s… + تم تنزيل %1$d %2$s جميع %s محملة بالفعل تحميل مكثف إضافة @@ -461,11 +461,11 @@ السجل عرض زر تخطي المقدمة/الخاتمة طاقم العمل: %s - %d يوم %d ساعة %d دقيقة - %d ساعة %d دقيقة + %1$d يوم %2$d ساعة %3$d دقيقة + %1$d ساعة %2$d دقيقة الفيلير فتح(تشغيل) - %s %d%s + %1$s %2$d%3$s المكونات الإضافية المحدثة %d VLC MPV @@ -482,7 +482,7 @@ علّمه كفيديو تمت مشاهدته نعم - %s الحلقة %d + %1$s الحلقة %2$d سيتم إصدار الحلقة %d في تعذر تثبيت الإصدار الجديد من التطبيق تثبيت الإضافة أولا @@ -493,8 +493,8 @@ ‌تنزيل تحديث التطبيق… ‏تثبيت تحديث التطبيق… %d دقيقة - %d-%d - %d %s + %1$d-%2$d + %1$d %2$s هل أنت متأكد أنك تريد الخروج؟ قم بتثبيت جميع المكونات الإضافية التي لم يتم تثبيتها بعد تلقائيا من المستودعات المضافة. مثبت الحزم @@ -584,4 +584,30 @@ المستودع لم يتم العثور عليه، تحقق من العنوان اوجرب شبكة افتراضية خاصة(vpn) لقد صوتت بالفعل معدل النسخ الإحتياطي - + تمت إزالة %s من المفضلة + المفضلة + تمت إضافة %s إلى المفضلة + احتمال وجود تكرارات في مكتبتك. +\n +\n%s +\n +\nهل تريد الاضافة على اي حال مستبدلاً النسخة الموجودة بالفعل, أم تفضل إلغاء العملية؟ + احتمال أن يكون موجود بالفعل + قفل الحساب + اضافة الى المفضلة + تبديل الكل + رقم PIN غير صحيح. برجاء المحاولة مرة اخرى. + إلغاء الاشتراك + رقم ال PIN يجب ان يكون 4 ارقام + استبدال + اضافة + إشترك + إزالة من المفضلة + اختار حساب + من الظاهر أن \"%1$s\" موجود بالفعل في مكتبتك. +\n +\nهل تريد الاضافة على أي حال مستبدلاً القديم أو إلغاء العملية؟ + ادخال ال PIN + PIN + أدخل ال PIN الحالي + \ No newline at end of file diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 8bdc1a27..ae93803d 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -2,7 +2,7 @@ - %s Ep %d + %1$s Ep %2$d Hrají: %s Plakát @@ -17,7 +17,7 @@ Rychlost (%.2fx) Hodnocení: %.1f Nalezena nová aktualizace! -\n%s -> %s +\n%1$s -> %2$s Výplň %d min CloudStream @@ -292,7 +292,7 @@ Kitsu Trakt --> - %s %s + %1$s %2$s účet Odhlásit se Přihlásit se @@ -410,17 +410,17 @@ Příliš mnoho textu. Nepodařilo se uložit do schránky. Ano Prohlížeč - %d-%d + %1$d-%2$d Knihovna Zobrazit plakáty z Kitsu Automaticky stahovat doplňky Znovu provést proces nastavení Instalátor APK - %d %s + %1$d %2$s Některé telefony nepodporují nový instalátor balíčků. Pokud se aktualizace nenainstalují, zkuste použít starší možnost. Mezipaměť Epizoda %d bude vydána za - %dh %dm + %1$dh %2$dm Přehrát přímý přenos Rozšíření Akce @@ -436,7 +436,7 @@ Co chcete vidět Doplněk stažen 18+ - Spuštěno stahování %d %s… + Spuštěno stahování %1$d %2$s… CloudStream nemá ve výchozím nastavení nainstalované žádné weby. Stránky je třeba nainstalovat z úložišť. \n \nKvůli nesmyslnému podání stížnosti DMCA společností Sky UK Limited 🤮 nemůžeme v aplikaci propojit stránky repozitářů. @@ -505,12 +505,12 @@ Aktualizace aplikace Hotovo Podporováno - %s %d%s + %1$s %2$d%3$s Živý přenos NSFW Rozšíření Přehrát trailer - %dd %dh %dm + %1$dd %2$dh %3$dm Zobrazit komunitní repozitáře Aktualizace zahájena Stream @@ -520,7 +520,7 @@ Referent Další Sledovat videa v těchto jazycích - Staženo %d %s + Staženo %1$d %2$s Všechny %s jsou již staženy Hromadné stahování doplněk @@ -575,4 +575,31 @@ V repozitáři nebyly nalezeny žádné doplňky Repozitář nenalezen, zkontrolujte adresu URL a zkuste použít VPN Již jste hlasovali - + %s odebráno z oblíbených + Oblíbené + %s přidáno do oblíbených + Ve vaší knihovně byl nalezen potenciální duplikát: +\n +\n%s +\n +\nChcete přesto přidat tuto položku, nahradit existující nebo zrušit akci\? + Frekvence záloh + Nalezena potenciální duplicita + Zamknout profil + Přidat do oblíbených + Nahradit vše + Nesprávný PIN. Zkuste to prosím znovu. + Zrušit odběr + PIN musí obsahovat 4 znaky + Nahradit + Přidat + Odebírat + Odebrat z oblíbených + Vyberte účet + Vypadá to, že ve vaší knihovně již existuje potenciální duplikát: „%1$s“. +\n +\nChcete přesto přidat tuto položku, nahradit existující nebo zrušit akci\? + Zadejte PIN + PIN + Zadejte současný PIN + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 69086840..e292e0ba 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -4,10 +4,10 @@ Descargue la lista de sitios que quiera utilizar Descargado:%d Descargado - Descargado %d %s + Descargado %1$d %2$s Borrar repositorio El episodio %d se lanzará en - %dh %dm + %1$dh %2$dm %dm Poster Extensiones @@ -97,12 +97,12 @@ Poster Siguiente al azar Todos los Idiomas - Volver + Regresar Cambiar proveedor Vista previa del fondo Nota:%.1f - Nueva actualización encontrada! -\n%s -> %s + ¡Nueva actualización encontrada! +\n%1$s -> %2$s Descargar Pausar Descarga Formato de fuente @@ -110,8 +110,8 @@ Tamaño de Fuente Velocidad (%.2fx) Omitir carga - %s Ep %d - %dd %dh %dm + %1$s Ep. %2$d + %1$dd %2$dh %3$dm Elenco %s Relleno %d min @@ -145,7 +145,7 @@ Transmitir Torrent Fuentes Reintentar conexión… - Volver + Regresar Descargando Descarga pausada Descarga iniciada @@ -218,8 +218,8 @@ Reproducir Episodio Episodio Episodios - %d-%d - %d %s + %1$d-%2$d + %1$d %2$s E Falló la restauración de los datos desde el archivo %s Datos guardados @@ -233,7 +233,7 @@ Mostrar los resultados de la búsqueda por proveedor Solo envíar los datos si la App se cierra / falla inesperadamente No enviar datos - Mostrar Trailers (avances) + Mostrar los trailers Mostrar pósters de Kitsu Actualizar a las versiones preliminares Buscar actualizaciones preliminares (beta) en lugar de solo versiones completas (stable releases) @@ -249,7 +249,7 @@ Reiniciar a valores predefinidos Lo sentimos, la aplicación se bloqueó. Se enviará un informe de error anónimo a los desarrolladores Temporada - %s %d%s + %1$s %2$d%3$s Ninguna Temporada T Borrar Archivo @@ -311,7 +311,7 @@ Cambiar cuenta Añadir cuenta Sincronizar - Calificación + Clasificado %s autenticado No se pudo autenticar a %s Recomendado @@ -345,7 +345,7 @@ Color primario Tema de la aplicación hola@mundo.com - %s %s + %1$s %2$s Todo 1000ms Sin retraso de subtítulos @@ -448,7 +448,7 @@ Hecho Plugin Cargado 18+ - Iniciada la descarga %d %s… + Comenzó la descarga de %1$d %2$s… Descarga por lotes plugin plugins @@ -552,4 +552,30 @@ Repositorio no encontrado, comprueba la URL y prueba la VPN Ya has votado Frecuencia de la copia de seguridad - + %s eliminado de favoritos + Favoritos + %s añadido a favoritos + Se han encontrado posibles elementos duplicados en su biblioteca: +\n +\n%s +\n +\n¿Desea añadir este elemento de todos modos, sustituir los existentes o cancelar la acción\? + Posible duplicado encontrado + Perfil de bloqueo + Añadido a favoritos + Sustituir todo + PIN incorrecto. Por favor, inténtelo de nuevo. + Cancelar la suscripción + El PIN debe tener 4 caracteres + Sustituir + Añadir + Suscríbase + Eliminar de favoritos + Seleccione una cuenta + Parece que ya existe un elemento potencialmente duplicado en su biblioteca: \'%s.\' +\n +\n¿Desea añadir este elemento de todos modos, sustituir el existente o cancelar la acción\? + Introducir el PIN + PIN + Introduzca el PIN actual + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 933ac77f..72db056c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -20,7 +20,7 @@ Velocità (%.2fx) Valutato: %.1f Nuovo aggiornamento trovato! -\n%s -> %s +\n%1$s -> %2$s Filler %d min @@ -409,8 +409,8 @@ Plugin eliminato Impossibile caricare %s 18+ - Download iniziato %d %s… - Scaricato %d %s + Download iniziato %1$d %2$s… + Scaricato %1$d %2$s Tutti %s già scaricati Download in blocco plugin @@ -573,4 +573,30 @@ Seleziona la modalità per filtrare il download dei plugin Disabilita Hai già votato - + %s rimosso dai preferiti + Preferiti + %s aggiunto ai preferiti + Dei possibili duplicati sono stati trovati nella tua libreria: +\n +\n%s +\n +\nVorresti aggiungere l\'oggetto alla libreria comunque, rimpiazzare l\'esistente, o cancellare l\'azione\? + Frequenza di backup + Trovato Possibile Duplicato + Aggiungi ai preferiti + Rimpiazza tutti + PIN non corretto. Riprova. + Disiscriviti + Il PIN deve essere almeno di 4 caratteri + Rimpiazza + Aggiungi + Iscriviti + Rimuovi dai preferiti + Seleziona un Account + Sembra che un oggetto potenziale duplicato sia già presente nella tua libreria: \'%1$s.\' +\n +\nVorresti aggiungere l\'oggetto lo stesso, rimpiazzare l\'esistente, o cancellare l\'azione\? + Inserisci PIN + PIN + Inserisci PIN Corrente + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 57b128de..c53de272 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -9,16 +9,16 @@ Актори: %s Епізод %d вийде через Poster - %s Еп. %d - %dд %dгод %dхв - %dгод %dхв + %1$s Еп. %2$d + %1$dд %2$dгод %3$dхв + %1$dгод %2$dхв %dхв Головний постер Наступний випадковий Попередній перегляд фону Швидкість (%.2fx) Знайдено нове оновлення! -\n%s –> %s +\n%1$s –> %2$s Пошук Завантаження %d хв @@ -112,7 +112,7 @@ Переглянути файл Детальніше Фільтр закладок - Очистити + Очистити Налаштування субтитрів Колір фону Висота субтитрів @@ -167,7 +167,7 @@ Скинути до значення за замовчуванням Немає сезону епізодів - %d %s + %1$d %2$s С Е Видалити файл @@ -238,9 +238,9 @@ Рік +30 Вибачте, у застосунку стався збій. Анонімне повідомлення про помилку буде відправлено розробникам - %s %d%s + %1$s %2$d%3$s Епізод - %d-%d + %1$d-%2$d Епізодів не знайдено Пауза Сезон @@ -364,7 +364,7 @@ Макет Постачальники example.com - %s %s + %2$s %1$s Депресивний обліковий запис Створити @@ -414,8 +414,8 @@ Плагін завантажено Плагін завантажено Не вдалося завантажити %s - Почалося завантаження %d %s… - Завантажено %d %s + Почалося завантаження %1$d %2$s… + Завантажено %1$d %2$s Всі %s вже завантажено Завантажити пакети плагін @@ -499,7 +499,7 @@ Ваша бібліотека порожня :( \nУвійдіть в обліковий запис бібліотеки або додайте фільми до вашої локальної бібліотеки. Алфавітом (від Я до А) - Виберіть бібліотеку + Оберіть бібліотеку Відкрити Браузер Цей список порожній. Спробуйте перейти до іншого. @@ -546,10 +546,36 @@ Якості Фон профілю Не вдалося створити UI коректно, це ВАЖЛИВА ПОМИЛКА, про яку слід негайно повідомити %s - Виберіть режим для фільтрації завантаження плагінів + Оберіть режим для фільтрації завантаження плагінів Вимкнути Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN Не знайдено жодних плагінів у репозиторії Ви вже проголосували Частота резервного копіювання - + %s вилучено з обраного + Обране + %s додано до обраного + У вашій бібліотеці знайдено потенційні дублікати: +\n +\n%s +\n +\nВсе одно хочете додати цей елемент, замінити наявні чи скасувати дію\? + Знайдено потенційний дублікат + Розблокувати профіль + Додати до обраного + Замінити усе + Неправильний PIN-код. Спробуйте ще раз. + Відписатись + PIN-код повинен складатися з 4 символів + Замінити + Додати + Підписатись + Вилучити з обраного + Оберіть обліковий запис + Виявилося, що у вашій бібліотеці вже є потенційно повторюваний елемент: \'%1$s.\' +\n +\nВсе одно хочете додати цей елемент, замінити наявний чи скасувати дію\? + Введіть PIN-код + PIN-код + Введіть поточний PIN-код + \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 8186d6ed..81575604 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -409,8 +409,8 @@ Plugin đã xoá Không tải được %s 18+ - Bắt đầu tải %d %s… - Tải xuống %d %s thành công + Đã bắt đầu tải xuống %1$d %2$s… + Đã tải xuống %1$d %2$s Toàn bộ %s đã được tải xuống Tải hàng loạt plugin @@ -566,4 +566,31 @@ Không tìm thấy plugin Không thể khởi tạo UI, đây là một LỖI LỚN và cần được báo cáo ngay lập tức tới %s Chọn chế độ để lọc plugin tải xuống - + %s đã loại bỏ khỏi mục yêu thích + Yêu thích + %s đã thêm vào mục yêu thích + Các mục có thể trùng lặp đã được tìm thấy trong thư viện của bạn: +\n +\n%s +\n +\nBạn vẫn muốn thêm mục này, thay thế những mục hiện có hay hủy hành động\? + Tần suất sao lưu + Đã tìm thấy bản sao tiềm năng + Khóa hồ sơ + Thêm vào mục yêu thích + Thay thế tất cả + Mã PIN không chính xác. Vui lòng thử lại. + Hủy đăng ký + Mã PIN phải có 4 ký tự + Thay thế + Thêm vào + Đăng ký + Loại bỏ khỏi mục yêu thích + Chọn một tài khoản + Có vẻ như một mục có khả năng trùng lặp đã tồn tại trong thư viện của bạn: \'%1$s.\' +\n +\nBạn vẫn muốn thêm mục này, thay thế mục hiện có hay hủy hành động\? + Nhập PIN + PIN + Nhập mã PIN hiện tại + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 351315f4..9e0575da 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -701,9 +701,9 @@ Add Replace Replace All - @string/sort_cancel - - It appears that a potentially duplicate item already exists in your library: \'%1$s.\' + @string/cancel + + It appears that a potentially duplicate item already exists in your library: \'%s.\' \n\nWould you like to add this item anyway, replace the existing one, or cancel the action? diff --git a/fastlane/metadata/android/es-ES/changelogs/2.txt b/fastlane/metadata/android/es-ES/changelogs/2.txt new file mode 100644 index 00000000..68e0b99b --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/2.txt @@ -0,0 +1 @@ +- ¡Cambios añadidos! diff --git a/fastlane/metadata/android/es-ES/full_description.txt b/fastlane/metadata/android/es-ES/full_description.txt new file mode 100644 index 00000000..9f6accba --- /dev/null +++ b/fastlane/metadata/android/es-ES/full_description.txt @@ -0,0 +1,10 @@ +CloudStream-3 te permite ver y descargar películas, series de TV y anime. + +La aplicación viene sin ningún tipo de anuncios y análisis y +soporta múltiples tráilers y páginas de películas, y más, por ejemplo + +Marcadores + +Descargas de subtítulos + +Compatible con Chromecast diff --git a/fastlane/metadata/android/es-ES/short_description.txt b/fastlane/metadata/android/es-ES/short_description.txt new file mode 100644 index 00000000..eb1d11e8 --- /dev/null +++ b/fastlane/metadata/android/es-ES/short_description.txt @@ -0,0 +1 @@ +Vea y descargue películas, series de televisión y anime. diff --git a/fastlane/metadata/android/es-ES/title.txt b/fastlane/metadata/android/es-ES/title.txt new file mode 100644 index 00000000..dde89d58 --- /dev/null +++ b/fastlane/metadata/android/es-ES/title.txt @@ -0,0 +1 @@ +CloudStream From 6f40d2750f1ae5b04aa4c75a93e6ef1baedeea1b Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 19:59:11 +0000 Subject: [PATCH 3/7] chore(locales): fix locale issues --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 15d22412..56e19280 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -610,4 +610,4 @@ ادخال ال PIN PIN أدخل ال PIN الحالي - \ No newline at end of file + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index ae93803d..275553a9 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -602,4 +602,4 @@ Zadejte PIN PIN Zadejte současný PIN - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index e292e0ba..32e2b61d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -578,4 +578,4 @@ Introducir el PIN PIN Introduzca el PIN actual - \ No newline at end of file + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 72db056c..d6be0eed 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -599,4 +599,4 @@ Inserisci PIN PIN Inserisci PIN Corrente - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index c53de272..425c5257 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -578,4 +578,4 @@ Введіть PIN-код PIN-код Введіть поточний PIN-код - \ No newline at end of file + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 81575604..d27660c7 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -593,4 +593,4 @@ Nhập PIN PIN Nhập mã PIN hiện tại - \ No newline at end of file + From 908f83c50ea960b939ab2d7561a66eff180e0c6e Mon Sep 17 00:00:00 2001 From: KingLucius Date: Thu, 2 Nov 2023 22:03:00 +0200 Subject: [PATCH 4/7] Fix scroll for Library TV layout (#695) * Fix scroll for Library TV layout * Fixed without NestedScrollView --- .../ui/library/LibraryFragment.kt | 10 ++++++++ .../ui/library/ViewpagerAdapter.kt | 17 +++++++++++-- .../main/res/layout/fragment_library_tv.xml | 25 ++++++++++--------- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index 7cc57f5d..864ca065 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -27,6 +27,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.viewpager2.widget.ViewPager2 import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import com.lagradost.cloudstream3.APIHolder @@ -137,6 +138,10 @@ class LibraryFragment : Fragment() { binding?.libraryRoot?.findViewById(R.id.search_src_text)?.apply { tag = "tv_no_focus_tag" + //Expand the Appbar when search bar is focused, fixing scroll up issue + setOnFocusChangeListener { _, _ -> + binding?.searchBar?.setExpanded(true) + } } // Set the color for the search exit icon to the correct theme text color @@ -342,6 +347,7 @@ class LibraryFragment : Fragment() { binding?.apply { viewpager.offscreenPageLimit = 2 viewpager.reduceDragSensitivity() + searchBar.setExpanded(true) } val startLoading = Runnable { @@ -441,6 +447,10 @@ class LibraryFragment : Fragment() { val distance = abs(position - currentItem) hideViewpager(distance) } + //Expand the appBar on tab focus + tab.view.setOnFocusChangeListener { view, b -> + binding?.searchBar?.setExpanded(true) + } }.attach() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt index 76028487..6731eae2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt @@ -1,14 +1,18 @@ package com.lagradost.cloudstream3.ui.library import android.os.Build +import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.view.doOnAttach import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.OnFlingListener +import com.google.android.material.appbar.AppBarLayout +import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.LibraryViewpagerPageBinding import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.search.SearchClickCallback +import com.lagradost.cloudstream3.ui.settings.SettingsFragment import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount class ViewpagerAdapter( @@ -67,6 +71,17 @@ class ViewpagerAdapter( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> val diff = scrollY - oldScrollY + + //Expand the top Appbar based on scroll direction up/down, simulate phone behavior + if (SettingsFragment.isTvSettings()) { + binding.root.rootView.findViewById(R.id.search_bar) + .apply { + if (diff <= 0) + setExpanded(true) + else + setExpanded(false) + } + } if (diff == 0) return@setOnScrollChangeListener scrollCallback.invoke(diff > 0) @@ -80,8 +95,6 @@ class ViewpagerAdapter( } } } - - } } diff --git a/app/src/main/res/layout/fragment_library_tv.xml b/app/src/main/res/layout/fragment_library_tv.xml index 22b9feb1..6d2198e9 100644 --- a/app/src/main/res/layout/fragment_library_tv.xml +++ b/app/src/main/res/layout/fragment_library_tv.xml @@ -27,7 +27,8 @@ android:id="@+id/search_status_bar_padding" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="horizontal"> + android:orientation="horizontal" + app:layout_scrollFlags="scroll|enterAlways"> + - + - Date: Fri, 3 Nov 2023 01:37:34 +0530 Subject: [PATCH 5/7] bump navigation lib (#749) --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b82d26e1..e0e4bb1d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -164,8 +164,8 @@ dependencies { implementation("com.google.android.material:material:1.10.0") implementation("androidx.constraintlayout:constraintlayout:2.1.4") - implementation("androidx.navigation:navigation-fragment-ktx:2.7.4") - implementation("androidx.navigation:navigation-ui-ktx:2.7.4") + implementation("androidx.navigation:navigation-fragment-ktx:2.7.5") + implementation("androidx.navigation:navigation-ui-ktx:2.7.5") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") From 5b0cbbf09f7632af4eea8c14265e2859d0cf6f6b Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Thu, 2 Nov 2023 14:14:16 -0600 Subject: [PATCH 6/7] Use nicer grid layout for account select on TV (#737) --- .../cloudstream3/ui/account/AccountAdapter.kt | 8 ------ .../ui/account/AccountSelectActivity.kt | 18 ++++++------- .../res/layout/activity_account_select.xml | 2 +- .../res/layout/activity_account_select_tv.xml | 27 ------------------- 4 files changed, 10 insertions(+), 45 deletions(-) delete mode 100644 app/src/main/res/layout/activity_account_select_tv.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountAdapter.kt index 72551199..aea55392 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountAdapter.kt @@ -43,14 +43,6 @@ class AccountAdapter( LayoutInflater.from(parent.context), parent, false ) - if (isTvSettings()) { - val layoutParams = binding.root.layoutParams as RecyclerView.LayoutParams - val marginInDp = 5 // Set the margin to 5dp - val marginInPixels = (marginInDp * parent.resources.displayMetrics.density).toInt() - layoutParams.setMargins(marginInPixels, marginInPixels, marginInPixels, marginInPixels) - binding.root.layoutParams = layoutParams - } - return AccountViewHolder(binding) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt index a2c34bf0..457d4b81 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt @@ -4,14 +4,12 @@ import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.CommonActivity.loadThemes import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.ActivityAccountSelectBinding -import com.lagradost.cloudstream3.databinding.ActivityAccountSelectTvBinding import com.lagradost.cloudstream3.ui.account.AccountDialog.showPinInputDialog import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.DataStoreHelper @@ -36,13 +34,11 @@ class AccountSelectActivity : AppCompatActivity() { window.navigationBarColor = colorFromAttribute(R.attr.primaryBlackBackground) - val binding = if (isTvSettings()) { - ActivityAccountSelectTvBinding.inflate(layoutInflater) - } else ActivityAccountSelectBinding.inflate(layoutInflater) + val binding = ActivityAccountSelectBinding.inflate(layoutInflater) setContentView(binding.root) - val recyclerView: RecyclerView = binding.root.findViewById(R.id.account_recycler_view) + val recyclerView: RecyclerView = binding.accountRecyclerView val adapter = AccountAdapter(accounts) { selectedAccount -> @@ -51,9 +47,13 @@ class AccountSelectActivity : AppCompatActivity() { } recyclerView.adapter = adapter - recyclerView.layoutManager = if (isTvSettings()) { - LinearLayoutManager(this) - } else GridLayoutManager(this, 2) + if (isTvSettings()) { + val spanSize = if (accounts.count() <= 6) { + accounts.count() + } else 6 + + recyclerView.layoutManager = GridLayoutManager(this, spanSize) + } } private fun onAccountSelected(selectedAccount: DataStoreHelper.Account) { diff --git a/app/src/main/res/layout/activity_account_select.xml b/app/src/main/res/layout/activity_account_select.xml index 9138f82d..d5870f24 100644 --- a/app/src/main/res/layout/activity_account_select.xml +++ b/app/src/main/res/layout/activity_account_select.xml @@ -17,7 +17,7 @@ android:layout_marginTop="16dp" android:layout_marginBottom="16dp" /> - - - - - - - - - \ No newline at end of file From a6786aaf9860df0992e704bc3b3f1bed50360203 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Thu, 2 Nov 2023 17:28:25 -0600 Subject: [PATCH 7/7] Add done button for when creating new PINs (#742) * Add done button for when creating new PINs * Cleanup --- .../cloudstream3/ui/account/AccountDialog.kt | 101 ++++++++++-------- 1 file changed, 59 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountDialog.kt index dfd8831b..76686aef 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountDialog.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountDialog.kt @@ -1,18 +1,17 @@ package com.lagradost.cloudstream3.ui.account import android.content.Context -import android.text.Editable -import android.text.TextWatcher import android.view.LayoutInflater -import android.view.View import android.view.inputmethod.EditorInfo -import android.view.inputmethod.InputMethodManager import android.widget.TextView import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog +import androidx.core.view.isVisible +import androidx.core.widget.doOnTextChanged import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.LockPinDialogBinding import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import com.lagradost.cloudstream3.utils.UIHelper.showInputMethod object AccountDialog { // TODO add account creation dialog to allow creating accounts directly from AccountSelectActivity @@ -21,14 +20,18 @@ object AccountDialog { context: Context, currentPin: String?, editAccount: Boolean, + errorText: String? = null, callback: (String?) -> Unit ) { fun TextView.visibleWithText(@StringRes textRes: Int) { - visibility = View.VISIBLE + isVisible = true setText(textRes) } - fun View.isVisible() = visibility == View.VISIBLE + fun TextView.visibleWithText(text: String?) { + isVisible = true + setText(text) + } val binding = LockPinDialogBinding.inflate(LayoutInflater.from(context)) @@ -38,7 +41,9 @@ object AccountDialog { val titleRes = if (isEditPin) R.string.enter_current_pin else R.string.enter_pin - val dialog = AlertDialog.Builder(context, R.style.AlertDialogCustom) + var isPinValid = false + + val builder = AlertDialog.Builder(context, R.style.AlertDialogCustom) .setView(binding.root) .setTitle(titleRes) .setNegativeButton(R.string.cancel) { _, _ -> @@ -48,46 +53,59 @@ object AccountDialog { callback.invoke(null) } .setOnDismissListener { - if (binding.pinEditTextError.isVisible()) { + if (!isPinValid) { callback.invoke(null) } } - .create() - var isPinValid = false - - binding.pinEditText.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} - - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - val enteredPin = s.toString() - val isEnteredPinValid = enteredPin.length == 4 - - if (isEnteredPinValid) { - if (isPinSet) { - if (enteredPin != currentPin) { - binding.pinEditTextError.visibleWithText(R.string.pin_error_incorrect) - binding.pinEditText.text = null - isPinValid = false - } else { - binding.pinEditTextError.visibility = View.GONE - isPinValid = true - - callback.invoke(enteredPin) - dialog.dismissSafe() - } - } else { - binding.pinEditTextError.visibility = View.GONE - isPinValid = true - } - } else if (isNewPin) { - binding.pinEditTextError.visibleWithText(R.string.pin_error_length) - isPinValid = false + if (isNewPin) { + if (errorText != null) binding.pinEditTextError.visibleWithText(errorText) + builder.setPositiveButton(R.string.setup_done) { _, _ -> + if (!isPinValid) { + // If the done button is pressed and there is an error, + // ask again, and mention the error that caused this. + showPinInputDialog( + context = binding.root.context, + currentPin = null, + editAccount = true, + errorText = binding.pinEditTextError.text.toString(), + callback = callback + ) + } else { + val enteredPin = binding.pinEditText.text.toString() + callback.invoke(enteredPin) } } + } - override fun afterTextChanged(s: Editable?) {} - }) + val dialog = builder.create() + + binding.pinEditText.doOnTextChanged { text, _, _, _ -> + val enteredPin = text.toString() + val isEnteredPinValid = enteredPin.length == 4 + + if (isEnteredPinValid) { + if (isPinSet) { + if (enteredPin != currentPin) { + binding.pinEditTextError.visibleWithText(R.string.pin_error_incorrect) + binding.pinEditText.text = null + isPinValid = false + } else { + binding.pinEditTextError.isVisible = false + isPinValid = true + + callback.invoke(enteredPin) + dialog.dismissSafe() + } + } else { + binding.pinEditTextError.isVisible = false + isPinValid = true + } + } else if (isNewPin) { + binding.pinEditTextError.visibleWithText(R.string.pin_error_length) + isPinValid = false + } + } // Detect IME_ACTION_DONE binding.pinEditText.setOnEditorActionListener { _, actionId, _ -> @@ -108,8 +126,7 @@ object AccountDialog { // Auto focus on PIN input and show keyboard binding.pinEditText.requestFocus() binding.pinEditText.postDelayed({ - val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager - imm.showSoftInput(binding.pinEditText, InputMethodManager.SHOW_IMPLICIT) + showInputMethod(binding.pinEditText) }, 200) } } \ No newline at end of file