From 6842c2769537a7a87843b8442f7f19214246333e Mon Sep 17 00:00:00 2001
From: Anonymous <toolate@othing.xyz>
Date: Sun, 12 Jan 2025 00:07:17 +0000
Subject: [PATCH 01/12] Translated using Weblate (French)

Currently translated at 95.0% (192 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/fr/
---
 app/src/main/res/values-fr/strings.xml | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 37483f3..388e089 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -107,7 +107,7 @@
     <string name="tutorial_start_text">Prenez quelques instants pour apprendre à utiliser ce \'launcher\' !</string>
     <string name="tutorial_concept_title">Concept</string>
     <string name="tutorial_concept_text">Launcher vous offre un environnement minimaliste, efficace et sans distraction.\n\nIl ne vous coûte rien, ne contient aucune publicité, ne recueille pas de données personnelles.</string>
-    <string name="tutorial_concept_text_2">L\'application est open-source (sous licence MIT) et disponible sur GitHub !\n\nN\'hésitez pas à y faire un tour !</string>
+    <string name="tutorial_concept_text_2">L\'application est open-source (sous licence MIT) et disponible sur GitHub !\n\nN\'hésitez pas à y faire un tour !</string>
     <string name="tutorial_usage_title">Utilisation</string>
     <string name="tutorial_usage_text">Sur votre écran d\'accueil vous ne trouverez rien d\'autre que la date et l\'heure : rien qui pourrait vous distraire.</string>
     <string name="tutorial_usage_text_2">Vous pouvez ouvrir des applications en effectuant des mouvelents latéraux sur l\'écran ou en appuyant sur les touches de volume. Vous pourrez en définir le comportement dans le panneau suivant.</string>
@@ -115,12 +115,7 @@
     <string name="tutorial_setup_text">Voici quelques paramètres par défaut. Vous pouvez les changer dès à présent :</string>
     <string name="tutorial_setup_text_2">Vous pourrez bien sûr tout reconfigurer plus tard.</string>
     <string name="tutorial_finish_title">C\'est parti !</string>
-    <string name="tutorial_finish_text">Vous êtes prêt à démarrer !
-\n
-\nJ\'espère que cette application vous sera précieuse !
-\n
-\n- Finn M Glas
-\n(le développeur originel) et Josia (le développeur de la branche μLauncher)</string>
+    <string name="tutorial_finish_text">Vous êtes prêt à démarrer ! \n \nJ\'espère que cette application vous sera précieuse ! \n \n- Finn M Glas \n(le développeur originel) et Josia (le développeur de la branche μLauncher)</string>
     <string name="tutorial_finish_button">Démarrer</string>
     <string name="settings">Réglages</string>
     <string name="ic_menu_alt">Plus d\'options</string>
@@ -154,8 +149,7 @@
     <string name="list_other_list_favorites">Applications Favorites</string>
     <string name="snackbar_app_hidden">Appli cachée. Vous pouvez l\'afficher à nouveau depuis les réglages.</string>
     <string name="undo">Défaire</string>
-    <string name="alert_cant_expand_status_bar_panel">Erreur : impossible d\'afficher la barre de statut.
-\nCette action utilise des fonctionalités qui ne sont pas officiellement dans l\'API Android. Malheuresement ça ne semble pas fonctionner sur votre appareil.</string>
+    <string name="alert_cant_expand_status_bar_panel">Erreur : impossible d\'afficher la barre de statut. \nCette action utilise des fonctionalités qui ne sont pas officiellement dans l\'API Android. Malheuresement ça ne semble pas fonctionner sur votre appareil.</string>
     <string name="list_other_expand_settings_panel">Réglages rapides</string>
     <string name="list_other_torch">Basculer l\'état de la lampe</string>
     <string name="settings_theme_color_theme_item_dynamic">Dynamique</string>

From 83904a100e588149bcf754858fa2c38314c7596b Mon Sep 17 00:00:00 2001
From: Anonymous <toolate@othing.xyz>
Date: Sun, 12 Jan 2025 00:07:18 +0000
Subject: [PATCH 02/12] Translated using Weblate (Chinese (Simplified Han
 script))

Currently translated at 84.1% (170 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
---
 app/src/main/res/values-zh-rCN/strings.xml | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 1ca8ba6..2add7e6 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -64,9 +64,7 @@
     <string name="list_title_pick">选择应用</string>
     <string name="tutorial_start_text">花几秒时间学下咋用这个启动器吧!</string>
     <string name="tutorial_concept_title">概念</string>
-    <string name="tutorial_concept_text_2">该应用是开源的(MIT许可),并在 GitHub 上可用!
-\n
-\n一定要来看看代码仓库!</string>
+    <string name="tutorial_concept_text_2">该应用是开源的(MIT许可),并在 GitHub 上可用! \n \n一定要来看看代码仓库!</string>
     <string name="tutorial_usage_title">使用方法</string>
     <string name="tutorial_usage_text">您的主屏幕仅包含本地日期和时间,没有其它纷纷扰扰。</string>
     <string name="tutorial_setup_title">设置</string>
@@ -87,17 +85,10 @@
     <string name="list_other_track_next">音乐:下一首</string>
     <string name="list_other_nop">啥也不干</string>
     <string name="tutorial_title">教程</string>
-    <string name="tutorial_concept_text">μLauncher 的设计是最小、高效且无干扰。
-\n
-\n它不付费、无广告、不追踪。</string>
+    <string name="tutorial_concept_text">μLauncher 的设计是最小、高效且无干扰。 \n \n它不付费、无广告、不追踪。</string>
     <string name="tutorial_usage_text_2">您只需滑动屏幕或按下按钮即可启动应用程序。在下一步向导中选择一些应用程序。</string>
     <string name="settings_general_choose_home_screen">将 μLauncher 设为默认桌面</string>
-    <string name="tutorial_finish_text">您已经准备好开始了!
-\n
-\n我希望这对你有很大的价值!
-\n
-\n- Finn (Launcher 的作者)
-\n以及 Josia(做了一些改进并维护了 μLauncher 分支)</string>
+    <string name="tutorial_finish_text">您已经准备好开始了! \n \n我希望这对你有很大的价值! \n \n- Finn (Launcher 的作者) \n以及 Josia(做了一些改进并维护了 μLauncher 分支)</string>
     <string name="settings_enabled_gestures_double_swipe">双滑动作</string>
     <string name="settings_clock_localized">使用本地日期格式</string>
     <string name="settings_clock_time_visible">显示时间</string>
@@ -110,8 +101,7 @@
     <string name="settings_display_rotate_screen">旋转屏幕</string>
     <string name="settings_launcher_section_apps">应用</string>
     <string name="list_other_expand_notifications_panel">展开通知面板</string>
-    <string name="alert_cant_expand_status_bar_panel">错误:无法打开通知栏。
-\n这个动作使用的功能并非现有的 Android API的一部分。不幸的是,它似乎不适用于您的设备。</string>
+    <string name="alert_cant_expand_status_bar_panel">错误:无法打开通知栏。 \n这个动作使用的功能并非现有的 Android API的一部分。不幸的是,它似乎不适用于您的设备。</string>
     <string name="list_other_torch">开关手电筒</string>
     <string name="alert_no_torch_found">未检测到带闪光灯的摄像头。</string>
     <string name="alert_torch_access_exception">错误:无法访问闪光灯。</string>

From 1945b7881864d7e2251767a1b25e5daf3b5a472d Mon Sep 17 00:00:00 2001
From: Anonymous <toolate@othing.xyz>
Date: Sun, 12 Jan 2025 00:07:17 +0000
Subject: [PATCH 03/12] Translated using Weblate (Portuguese (Brazil))

Currently translated at 97.0% (196 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
---
 app/src/main/res/values-pt-rBR/strings.xml | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 9505db7..8bdaa34 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -132,8 +132,7 @@
     <string name="settings">Configurações</string>
     <string name="ic_menu_alt">Mais opções</string>
     <string name="list_app_favorite_remove">Remover dos favoritos</string>
-    <string name="alert_cant_expand_status_bar_panel">Erro: Não foi possível expandir a barra de status.
-\nEssa ação usa uma funcionalidade que não faz parte da API do Android publicada. Infelizmente, ela não vai funcionar no seu dispositivo.</string>
+    <string name="alert_cant_expand_status_bar_panel">Erro: Não foi possível expandir a barra de status. \nEssa ação usa uma funcionalidade que não faz parte da API do Android publicada. Infelizmente, ela não vai funcionar no seu dispositivo.</string>
     <string name="settings_theme_background">Fundo (lista de apps e configurações)</string>
     <string name="settings_theme_font">Fonte</string>
     <string name="settings_theme_monochrome_icons">Ícones de apps monocromáticos</string>

From 79461be11528869dc551d881f225586ffa1541d7 Mon Sep 17 00:00:00 2001
From: Vossa Excelencia <nationalistic.tention@hele.win>
Date: Mon, 13 Jan 2025 18:04:13 +0000
Subject: [PATCH 04/12] Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (202 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
---
 app/src/main/res/values-pt-rBR/strings.xml | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 8bdaa34..af143b7 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -118,8 +118,8 @@
     <string name="tutorial_title">Tutorial</string>
     <string name="tutorial_start_text">Tire alguns segundos para aprender a usar este Launcher!</string>
     <string name="tutorial_concept_title">Conceito</string>
-    <string name="tutorial_concept_text">O Launcher foi projetado para ser minimalista, eficiente e livre de distrações.\n\nEle é livre de pagamentos, anúncios e serviços de rastreamento.</string>
-    <string name="tutorial_concept_text_2">O aplicativo é de código aberto (licença MIT) e está disponível no GitHub!\n\nNão deixe de conferir o repositório!</string>
+    <string name="tutorial_concept_text">O Launcher foi criado para ser minimalista, eficiente e livre de distrações. Ele é livre de pagamentos, anúncios e serviços de rastreamento.</string>
+    <string name="tutorial_concept_text_2">O app é de código aberto (licença MIT) e está disponível no GitHub! Não deixe de conferir o repositório!</string>
     <string name="tutorial_usage_title">Uso</string>
     <string name="tutorial_usage_text">Sua tela inicial contém a data e hora local. Sem distração.</string>
     <string name="tutorial_usage_text_2">Você pode iniciar seus aplicativos com um toque único ou pressionando um botão. Escolha algumas ações no próximo slide.</string>
@@ -127,12 +127,12 @@
     <string name="tutorial_setup_text">Selecionamos alguns aplicativos padrão para você. Se quiser, você pode alterá-los agora:</string>
     <string name="tutorial_setup_text_2">Você também pode alterar suas escolhas mais tarde.</string>
     <string name="tutorial_finish_title">Vamos lá!</string>
-    <string name="tutorial_finish_text">Você está pronto para começar!\n\nEspero que isso seja de grande valor para você!\n\n- Finn (que criou o Launcher)\n\te Josia (que fez algumas melhorias e mantém o fork μLauncher)</string>
+    <string name="tutorial_finish_text">Está todo pronto para começar! Espero que isso seja de grande valor para você! - Finn (que criou o Launcherr) \te Josia (que fez algumas melhorias e mantém o fork do μLauncher)</string>
     <string name="tutorial_finish_button">Começar</string>
     <string name="settings">Configurações</string>
     <string name="ic_menu_alt">Mais opções</string>
     <string name="list_app_favorite_remove">Remover dos favoritos</string>
-    <string name="alert_cant_expand_status_bar_panel">Erro: Não foi possível expandir a barra de status. \nEssa ação usa uma funcionalidade que não faz parte da API do Android publicada. Infelizmente, ela não vai funcionar no seu dispositivo.</string>
+    <string name="alert_cant_expand_status_bar_panel">Erro: Não foi possível expandir a barra de status. Essa ação usa uma funcionalidade que não faz parte da API do Android publicado. Infelizmente, isto não vai funcionar no seu dispositivo.</string>
     <string name="settings_theme_background">Fundo (lista de apps e configurações)</string>
     <string name="settings_theme_font">Fonte</string>
     <string name="settings_theme_monochrome_icons">Ícones de apps monocromáticos</string>
@@ -256,4 +256,6 @@
     <string name="settings_functionality_search_web">Pesquise na internet</string>
     <string name="settings_functionality_search_web_summary">Ao buscar na lista de apps toque no Enter para iniciar uma pesquisa na internet.</string>
     <string name="list_apps_search_hint_no_auto_launch">Busca (sem inicialização automática)</string>
+    <string name="settings_meta_licenses">Licenças de código aberto</string>
+    <string name="legal_info_title">Licenças de código aberto</string>
 </resources>
\ No newline at end of file

From c5c81e1dc1139cd3be221825ff2b14b3142a071b Mon Sep 17 00:00:00 2001
From: Vossa Excelencia <nationalistic.tention@hele.win>
Date: Tue, 14 Jan 2025 20:52:11 +0000
Subject: [PATCH 05/12] Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.5% (201 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
---
 app/src/main/res/values-pt-rBR/strings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index af143b7..1f05552 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -127,7 +127,7 @@
     <string name="tutorial_setup_text">Selecionamos alguns aplicativos padrão para você. Se quiser, você pode alterá-los agora:</string>
     <string name="tutorial_setup_text_2">Você também pode alterar suas escolhas mais tarde.</string>
     <string name="tutorial_finish_title">Vamos lá!</string>
-    <string name="tutorial_finish_text">Está todo pronto para começar! Espero que isso seja de grande valor para você! - Finn (que criou o Launcherr) \te Josia (que fez algumas melhorias e mantém o fork do μLauncher)</string>
+    <string name="tutorial_finish_text">Tá todo pronto para começar! Espero que isso seja de grande valor para você! - Finn (que criou o Launcher) \te Josia (que fez algumas melhorias e tb mantém o fork do μLauncher)</string>
     <string name="tutorial_finish_button">Começar</string>
     <string name="settings">Configurações</string>
     <string name="ic_menu_alt">Mais opções</string>

From 785e024ddb81735cd91e538959ad87bcadc732e8 Mon Sep 17 00:00:00 2001
From: Josia Pietsch <git@jrpie.de>
Date: Wed, 22 Jan 2025 01:44:51 +0100
Subject: [PATCH 06/12] basic support for private space (#98)

* add an action to toggle private space lock
* hide apps from private space if private space is locked
---
 .../de/jrpie/android/launcher/Application.kt  | 28 +++++++++
 .../de/jrpie/android/launcher/Functions.kt    | 61 +++++++++++++------
 .../launcher/actions/LauncherAction.kt        | 56 ++++++++++++++++-
 .../LauncherPreferences$Config.java           |  3 +-
 .../launcher/preferences/theme/ColorTheme.kt  |  2 +-
 .../jrpie/android/launcher/ui/HomeActivity.kt |  4 --
 .../ui/list/other/OtherRecyclerAdapter.kt     |  3 +-
 .../launcher/SettingsFragmentLauncher.kt      |  5 ++
 .../res/drawable/baseline_security_24.xml     | 12 ++++
 app/src/main/res/values/donottranslate.xml    |  1 +
 app/src/main/res/values/strings.xml           |  7 +++
 app/src/main/res/xml/preferences.xml          |  5 ++
 12 files changed, 159 insertions(+), 28 deletions(-)
 create mode 100644 app/src/main/res/drawable/baseline_security_24.xml

diff --git a/app/src/main/java/de/jrpie/android/launcher/Application.kt b/app/src/main/java/de/jrpie/android/launcher/Application.kt
index e3e5f7c..6e924c2 100644
--- a/app/src/main/java/de/jrpie/android/launcher/Application.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/Application.kt
@@ -1,5 +1,9 @@
 package de.jrpie.android.launcher
 
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
 import android.content.SharedPreferences
 import android.content.pm.LauncherApps
 import android.content.pm.ShortcutInfo
@@ -7,6 +11,7 @@ import android.os.AsyncTask
 import android.os.Build
 import android.os.Build.VERSION_CODES
 import android.os.UserHandle
+import androidx.core.content.ContextCompat
 import androidx.lifecycle.MutableLiveData
 import androidx.preference.PreferenceManager
 import de.jrpie.android.launcher.actions.TorchManager
@@ -19,6 +24,14 @@ import de.jrpie.android.launcher.preferences.resetPreferences
 class Application : android.app.Application() {
     val apps = MutableLiveData<List<DetailedAppInfo>>()
 
+    private val profileAvailabilityBroadcastReceiver = object : BroadcastReceiver() {
+        override fun onReceive(context: Context?, intent: Intent?) {
+            // TODO: only update specific apps
+            // use Intent.EXTRA_USER
+            loadApps()
+        }
+    }
+
     // TODO: only update specific apps
     private val launcherAppsCallback = object : LauncherApps.Callback() {
         override fun onPackageRemoved(p0: String?, p1: UserHandle?) {
@@ -107,6 +120,21 @@ class Application : android.app.Application() {
         val launcherApps = getSystemService(LAUNCHER_APPS_SERVICE) as LauncherApps
         launcherApps.registerCallback(launcherAppsCallback)
 
+        if (Build.VERSION.SDK_INT >= VERSION_CODES.N) {
+            val filter = IntentFilter().also {
+                if (Build.VERSION.SDK_INT >= VERSION_CODES.VANILLA_ICE_CREAM) {
+                    it.addAction(Intent.ACTION_PROFILE_AVAILABLE)
+                    it.addAction(Intent.ACTION_PROFILE_UNAVAILABLE)
+                } else {
+                    it.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE)
+                    it.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)
+                }
+            }
+            ContextCompat.registerReceiver(this, profileAvailabilityBroadcastReceiver, filter,
+                ContextCompat.RECEIVER_EXPORTED
+            )
+        }
+
         loadApps()
     }
 
diff --git a/app/src/main/java/de/jrpie/android/launcher/Functions.kt b/app/src/main/java/de/jrpie/android/launcher/Functions.kt
index e8d3851..48b5028 100644
--- a/app/src/main/java/de/jrpie/android/launcher/Functions.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/Functions.kt
@@ -18,6 +18,7 @@ import de.jrpie.android.launcher.actions.Action
 import de.jrpie.android.launcher.actions.Gesture
 import de.jrpie.android.launcher.apps.AppInfo
 import de.jrpie.android.launcher.apps.DetailedAppInfo
+import de.jrpie.android.launcher.preferences.LauncherPreferences
 import de.jrpie.android.launcher.ui.tutorial.TutorialActivity
 
 
@@ -30,31 +31,36 @@ const val REQUEST_SET_DEFAULT_HOME = 42
 
 const val LOG_TAG = "Launcher"
 
-fun setDefaultHomeScreen(context: Context, checkDefault: Boolean = false) {
-
-    if (checkDefault
-        && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
-        && context is Activity
-    ) {
+fun isDefaultHomeScreen(context: Context): Boolean {
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
         val roleManager = context.getSystemService(RoleManager::class.java)
-        if (!roleManager.isRoleHeld(RoleManager.ROLE_HOME)) {
-            context.startActivityForResult(
-                roleManager.createRequestRoleIntent(RoleManager.ROLE_HOME),
-                REQUEST_SET_DEFAULT_HOME
-            )
-        }
-        return
-    }
-
-    if (checkDefault) {
+        return roleManager.isRoleHeld(RoleManager.ROLE_HOME)
+    } else {
         val testIntent = Intent(Intent.ACTION_MAIN)
         testIntent.addCategory(Intent.CATEGORY_HOME)
         val defaultHome = testIntent.resolveActivity(context.packageManager)?.packageName
-        if (defaultHome == context.packageName) {
-            // Launcher is already the default home app
-            return
-        }
+        return defaultHome == context.packageName
     }
+}
+
+fun setDefaultHomeScreen(context: Context, checkDefault: Boolean = false) {
+    if (checkDefault && isDefaultHomeScreen(context)) {
+        // Launcher is already the default home app
+        return
+    }
+
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
+        && context is Activity
+        && checkDefault // using role manager only works when µLauncher is not already the default.
+    ) {
+        val roleManager = context.getSystemService(RoleManager::class.java)
+        context.startActivityForResult(
+            roleManager.createRequestRoleIntent(RoleManager.ROLE_HOME),
+            REQUEST_SET_DEFAULT_HOME
+        )
+        return
+    }
+
     val intent = Intent(Settings.ACTION_HOME_SETTINGS)
     context.startActivity(intent)
 }
@@ -94,6 +100,21 @@ fun getApps(packageManager: PackageManager, context: Context): MutableList<Detai
     // TODO: shortcuts - launcherApps.getShortcuts()
     val users = userManager.userProfiles
     for (user in users) {
+        // don't load apps from a user profile that has quiet mode enabled
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            if (userManager.isQuietModeEnabled(user)) {
+                // hide paused apps
+                if (LauncherPreferences.apps().hidePausedApps()) {
+                    continue
+                }
+                // hide apps from private space
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM &&
+                    launcherApps.getLauncherUserInfo(user)?.userType == UserManager.USER_TYPE_PROFILE_PRIVATE
+                ) {
+                    continue
+                }
+            }
+        }
         launcherApps.getActivityList(null, user).forEach {
             loadList.add(DetailedAppInfo(it))
         }
diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt
index 3c641ff..2eddf16 100644
--- a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt
@@ -1,17 +1,22 @@
 package de.jrpie.android.launcher.actions
 
+import android.content.ActivityNotFoundException
 import android.content.Context
 import android.content.Intent
+import android.content.pm.LauncherApps
 import android.graphics.Rect
 import android.graphics.drawable.Drawable
 import android.media.AudioManager
 import android.os.Build
 import android.os.SystemClock
+import android.os.UserManager
+import android.provider.Settings
 import android.view.KeyEvent
 import android.widget.Toast
 import de.jrpie.android.launcher.Application
 import de.jrpie.android.launcher.R
 import de.jrpie.android.launcher.apps.AppFilter
+import de.jrpie.android.launcher.isDefaultHomeScreen
 import de.jrpie.android.launcher.preferences.LauncherPreferences
 import de.jrpie.android.launcher.ui.list.ListActivity
 import de.jrpie.android.launcher.ui.settings.SettingsActivity
@@ -33,7 +38,8 @@ enum class LauncherAction(
     val id: String,
     val label: Int,
     val icon: Int,
-    val launch: (Context) -> Unit
+    val launch: (Context) -> Unit,
+    val available: (Context) -> Boolean = { true }
 ) : Action {
     SETTINGS(
         "settings",
@@ -53,6 +59,13 @@ enum class LauncherAction(
         R.drawable.baseline_favorite_24,
         { context -> openAppsList(context, true) }
     ),
+    TOGGLE_PRIVATE_SPACE_LOCK(
+        "toggle_private_space_lock",
+        R.string.list_other_toggle_private_space_lock,
+        R.drawable.baseline_security_24,
+        ::togglePrivateSpaceLock,
+        available = { Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM }
+    ),
     VOLUME_UP(
         "volume_up",
         R.string.list_other_volume_up,
@@ -207,6 +220,46 @@ private fun expandNotificationsPanel(context: Context) {
     }
 }
 
+private fun togglePrivateSpaceLock(context: Context) {
+    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) {
+        Toast.makeText(
+            context,
+            context.getString(R.string.alert_requires_android_v),
+            Toast.LENGTH_LONG
+        ).show()
+        return
+    }
+    val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager
+    val launcherApps = context.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
+    val privateSpaceUser = userManager.userProfiles.firstOrNull { u ->
+        launcherApps.getLauncherUserInfo(u)?.userType == UserManager.USER_TYPE_PROFILE_PRIVATE
+    }
+    if (privateSpaceUser == null) {
+        Toast.makeText(context, context.getString(R.string.toast_private_space_not_available), Toast.LENGTH_LONG).show()
+
+        if (!isDefaultHomeScreen(context)) {
+            Toast.makeText(context, context.getString(R.string.toast_private_space_default_home_screen), Toast.LENGTH_LONG).show()
+            return
+        }
+
+        try {
+            context.startActivity(Intent(Settings.ACTION_PRIVACY_SETTINGS))
+        } catch (_: ActivityNotFoundException) {}
+        return
+    }
+    if (userManager.isQuietModeEnabled(privateSpaceUser)) {
+        userManager.requestQuietModeEnabled(false, privateSpaceUser)
+            Toast.makeText(
+                context,
+                context.getString(R.string.toast_private_space_unlocked),
+                Toast.LENGTH_LONG
+            ).show()
+        return
+    }
+    userManager.requestQuietModeEnabled(true, privateSpaceUser)
+    Toast.makeText(context, context.getString(R.string.toast_private_space_locked), Toast.LENGTH_LONG).show()
+}
+
 private fun expandSettingsPanel(context: Context) {
     /* https://stackoverflow.com/a/31898506 */
     try {
@@ -260,6 +313,7 @@ private class LauncherActionSerializer : KSerializer<LauncherAction> {
     ) {
         element("value", String.serializer().descriptor)
     }
+
     override fun deserialize(decoder: Decoder): LauncherAction {
         val s = decoder.decodeStructure(descriptor) {
             decodeElementIndex(descriptor)
diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
index 640e6ce..98496ce 100644
--- a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
@@ -5,8 +5,8 @@ import java.util.Set;
 
 import de.jrpie.android.launcher.R;
 import de.jrpie.android.launcher.actions.lock.LockMethod;
-import de.jrpie.android.launcher.preferences.serialization.SetAppInfoPreferenceSerializer;
 import de.jrpie.android.launcher.preferences.serialization.MapAppInfoStringPreferenceSerializer;
+import de.jrpie.android.launcher.preferences.serialization.SetAppInfoPreferenceSerializer;
 import de.jrpie.android.launcher.preferences.theme.Background;
 import de.jrpie.android.launcher.preferences.theme.ColorTheme;
 import de.jrpie.android.launcher.preferences.theme.Font;
@@ -29,6 +29,7 @@ import eu.jonahbauer.android.preference.annotations.Preferences;
                         @Preference(name = "hidden", type = Set.class, serializer = SetAppInfoPreferenceSerializer.class),
                         @Preference(name = "custom_names", type = HashMap.class, serializer = MapAppInfoStringPreferenceSerializer.class),
                         @Preference(name = "hide_bound_apps", type = boolean.class, defaultValue = "false"),
+                        @Preference(name = "hide_paused_apps", type = boolean.class, defaultValue = "false"),
                 }),
                 @PreferenceGroup(name = "list", prefix = "settings_list_", suffix = "_key", value = {
                         @Preference(name = "layout", type = ListLayout.class, defaultValue = "DEFAULT")
diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt
index 8cef124..816d94f 100644
--- a/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt
@@ -2,8 +2,8 @@ package de.jrpie.android.launcher.preferences.theme
 
 import android.content.Context
 import android.content.res.Resources
-import de.jrpie.android.launcher.R
 import com.google.android.material.color.DynamicColors
+import de.jrpie.android.launcher.R
 
 @Suppress("unused")
 enum class ColorTheme(
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
index 5633113..b1a5cc0 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
@@ -3,7 +3,6 @@ package de.jrpie.android.launcher.ui
 import android.annotation.SuppressLint
 import android.content.SharedPreferences
 import android.content.res.Resources
-import android.os.AsyncTask
 import android.os.Build
 import android.os.Bundle
 import android.util.DisplayMetrics
@@ -20,10 +19,7 @@ import de.jrpie.android.launcher.actions.Action
 import de.jrpie.android.launcher.actions.Gesture
 import de.jrpie.android.launcher.actions.LauncherAction
 import de.jrpie.android.launcher.databinding.HomeBinding
-import de.jrpie.android.launcher.openTutorial
 import de.jrpie.android.launcher.preferences.LauncherPreferences
-import de.jrpie.android.launcher.preferences.migratePreferencesToNewVersion
-import de.jrpie.android.launcher.preferences.resetPreferences
 import de.jrpie.android.launcher.ui.tutorial.TutorialActivity
 import java.text.SimpleDateFormat
 import java.util.Date
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/other/OtherRecyclerAdapter.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/other/OtherRecyclerAdapter.kt
index ddfcfd1..97d1c84 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/list/other/OtherRecyclerAdapter.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/other/OtherRecyclerAdapter.kt
@@ -23,7 +23,8 @@ import de.jrpie.android.launcher.ui.list.forGesture
 class OtherRecyclerAdapter(val activity: Activity) :
     RecyclerView.Adapter<OtherRecyclerAdapter.ViewHolder>() {
 
-    private val othersList: Array<LauncherAction> = LauncherAction.values()
+    private val othersList: Array<LauncherAction> =
+        LauncherAction.entries.filter { it.isAvailable(activity) }.toTypedArray()
 
     inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
         View.OnClickListener {
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/launcher/SettingsFragmentLauncher.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/launcher/SettingsFragmentLauncher.kt
index 0b054ce..a8efb43 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/launcher/SettingsFragmentLauncher.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/launcher/SettingsFragmentLauncher.kt
@@ -40,6 +40,11 @@ class SettingsFragmentLauncher : PreferenceFragmentCompat() {
         )
         val lightTheme = LauncherPreferences.theme().colorTheme() == ColorTheme.LIGHT
         background?.isVisible = !lightTheme
+
+        val hidePausedApps = findPreference<androidx.preference.Preference>(
+            LauncherPreferences.apps().keys().hidePausedApps()
+        )
+        hidePausedApps?.isVisible = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
     }
 
     override fun onStart() {
diff --git a/app/src/main/res/drawable/baseline_security_24.xml b/app/src/main/res/drawable/baseline_security_24.xml
new file mode 100644
index 0000000..3c260ff
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_security_24.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:tint="?attr/colorControlNormal"
+    android:viewportHeight="24"
+    android:viewportWidth="24"
+    android:width="24dp">
+
+    <path
+        android:fillColor="?android:textColor"
+        android:pathData="M12,1L3,5v6c0,5.55 3.84,10.74 9,12 5.16,-1.26 9,-6.45 9,-12L21,5l-9,-4zM12,11.99h7c-0.53,4.12 -3.28,7.79 -7,8.94L12,12L5,12L5,6.3l7,-3.11v8.8z" />
+
+</vector>
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 0a30fac..b2e69a1 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -13,6 +13,7 @@
         <string name="settings_apps_hidden_key" translatable="false">apps.hidden</string>
         <string name="settings_apps_custom_names_key" translatable="false">apps.custom_names</string>
         <string name="settings_apps_hide_bound_apps_key" translatable="false">apps.hide_bound_apps</string>
+        <string name="settings_apps_hide_paused_apps_key" translatable="false">apps.hide_paused_apps</string>
         <string name="settings_list_layout_key" translatable="false">list.layout</string>
         <string name="settings_general_choose_home_screen_key" translatable="false">general.select_launcher</string>
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5bb2c61..4cdebb1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -145,6 +145,7 @@
     <string name="settings_launcher_section_apps">Apps</string>
     <string name="settings_apps_hidden">Hidden apps</string>
     <string name="settings_apps_hide_bound_apps">Don\'t show apps that are bound to a gesture in the app list</string>
+    <string name="settings_apps_hide_paused_apps">Hide paused apps</string>
     <string name="settings_list_layout">Layout of app list</string>
 
     <string name="settings_list_layout_item_default">Default</string>
@@ -207,6 +208,7 @@
     <string name="list_other_settings">µLauncher Settings</string>
     <string name="list_other_list">All Applications</string>
     <string name="list_other_list_favorites">Favorite Applications</string>
+    <string name="list_other_toggle_private_space_lock">Toggle Private Space Lock</string>
     <string name="list_other_volume_up">Music: Louder</string>
     <string name="list_other_volume_down">Music: Quieter</string>
     <string name="list_other_track_next">Music: Next</string>
@@ -245,6 +247,7 @@
     <string name="ic_menu_alt">More options</string>
     <string name="alert_cant_expand_status_bar_panel">Error: Can\'t expand status bar. This action is using functionality that is not part of the published Android API. Unfortunately, it does not seem to work on your device.</string>
     <string name="alert_requires_android_m">This functionality requires Android 6.0 or later.</string>
+    <string name="alert_requires_android_v">This functionality requires Android 15.0 or later.</string>
     <string name="snackbar_app_hidden">App hidden. You can make it visible again in settings.</string>
     <string name="undo">Undo</string>
     <string name="list_other_expand_settings_panel">Quick Settings</string>
@@ -255,6 +258,10 @@
     <string name="alert_torch_access_exception">Error: Can\'t access torch.</string>
     <string name="alert_lock_screen_failed">Error: Failed to lock screen. (If you just upgraded the app, try to disable and re-enable the accessibility service in phone settings)</string>
     <string name="toast_accessibility_service_not_enabled">μLauncher\'s accessibility service is not enabled. Please enable it in settings</string>
+    <string name="toast_private_space_locked">Private space locked</string>
+    <string name="toast_private_space_unlocked">Private space unlocked</string>
+    <string name="toast_private_space_not_available">Private space is not available</string>
+    <string name="toast_private_space_default_home_screen">µLauncher needs to be the default home screen to access private space.</string>
     <string name="toast_lock_screen_not_supported">Error: Locking the screen using accessibility is not supported on this device. Please use device admin instead.</string>
     <string name="accessibility_service_name">µLauncher - lock screen</string>
     <string name="accessibility_service_description">
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index d1dcbe6..57e50df 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -145,6 +145,11 @@
             android:title="@string/settings_apps_hide_bound_apps"
             android:defaultValue="false" />
 
+        <SwitchPreference
+            android:key="@string/settings_apps_hide_paused_apps_key"
+            android:title="@string/settings_apps_hide_paused_apps"
+            android:defaultValue="false" />
+
         <DropDownPreference
             android:key="@string/settings_list_layout_key"
             android:title="@string/settings_list_layout"

From 6d385e4e87927313f964028c2593eb0adbea9dd9 Mon Sep 17 00:00:00 2001
From: Josia Pietsch <git@jrpie.de>
Date: Wed, 22 Jan 2025 02:17:46 +0100
Subject: [PATCH 07/12] use TextClock instead of custom solution

---
 .../jrpie/android/launcher/ui/HomeActivity.kt | 44 ++++---------------
 app/src/main/res/layout/home.xml              |  4 +-
 2 files changed, 11 insertions(+), 37 deletions(-)

diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
index b1a5cc0..1d5381d 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
@@ -21,8 +21,6 @@ import de.jrpie.android.launcher.actions.LauncherAction
 import de.jrpie.android.launcher.databinding.HomeBinding
 import de.jrpie.android.launcher.preferences.LauncherPreferences
 import de.jrpie.android.launcher.ui.tutorial.TutorialActivity
-import java.text.SimpleDateFormat
-import java.util.Date
 import java.util.Locale
 import java.util.Timer
 import kotlin.concurrent.fixedRateTimer
@@ -65,8 +63,6 @@ class HomeActivity : UIObject, AppCompatActivity(),
 
     private lateinit var mDetector: GestureDetectorCompat
 
-    // timers
-    private var clockTimer = Timer()
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super<AppCompatActivity>.onCreate(savedInstanceState)
@@ -100,30 +96,24 @@ class HomeActivity : UIObject, AppCompatActivity(),
 
     }
 
-    private fun updateClock() {
-        clockTimer.cancel()
+    private fun initClock() {
         val locale = Locale.getDefault()
         val dateVisible = LauncherPreferences.clock().dateVisible()
         val timeVisible = LauncherPreferences.clock().timeVisible()
 
         var dateFMT = "yyyy-MM-dd"
         var timeFMT = "HH:mm"
-        val period = 100L
         if (LauncherPreferences.clock().showSeconds()) {
             timeFMT += ":ss"
         }
-        /*
-         I thought about adding an option to show microseconds as well ( timeFMT += ".SSS" ).
-         However setting period ot 1L (or even 10L) causes high CPU load,
-         so that doesn't seem to be a good idea.
-         */
+
         if (LauncherPreferences.clock().localized()) {
             dateFMT = android.text.format.DateFormat.getBestDateTimePattern(locale, dateFMT)
             timeFMT = android.text.format.DateFormat.getBestDateTimePattern(locale, timeFMT)
         }
 
-        var upperFormat = SimpleDateFormat(dateFMT, locale)
-        var lowerFormat = SimpleDateFormat(timeFMT, locale)
+        var upperFormat = dateFMT
+        var lowerFormat = timeFMT
         var upperVisible = dateVisible
         var lowerVisible = timeVisible
 
@@ -138,21 +128,10 @@ class HomeActivity : UIObject, AppCompatActivity(),
         binding.homeUpperView.setTextColor(LauncherPreferences.clock().color())
         binding.homeLowerView.setTextColor(LauncherPreferences.clock().color())
 
-
-        clockTimer = fixedRateTimer("clockTimer", true, 0L, period) {
-            this@HomeActivity.runOnUiThread {
-                if (lowerVisible) {
-                    val t = lowerFormat.format(Date())
-                    if (binding.homeLowerView.text != t)
-                        binding.homeLowerView.text = t
-                }
-                if (upperVisible) {
-                    val d = upperFormat.format(Date())
-                    if (binding.homeUpperView.text != d)
-                        binding.homeUpperView.text = d
-                }
-            }
-        }
+        binding.homeLowerView.format24Hour = lowerFormat
+        binding.homeUpperView.format24Hour = upperFormat
+        binding.homeLowerView.format12Hour = lowerFormat
+        binding.homeUpperView.format12Hour = upperFormat
     }
 
     override fun getTheme(): Resources.Theme {
@@ -172,12 +151,7 @@ class HomeActivity : UIObject, AppCompatActivity(),
 
         edgeWidth = LauncherPreferences.enabled_gestures().edgeSwipeEdgeWidth() / 100f
 
-        updateClock()
-    }
-
-    override fun onPause() {
-        super.onPause()
-        clockTimer.cancel()
+        initClock()
     }
 
     override fun onDestroy() {
diff --git a/app/src/main/res/layout/home.xml b/app/src/main/res/layout/home.xml
index 5f34412..f59b211 100644
--- a/app/src/main/res/layout/home.xml
+++ b/app/src/main/res/layout/home.xml
@@ -10,7 +10,7 @@
     android:fitsSystemWindows="true"
     tools:context=".ui.HomeActivity">
 
-    <TextView
+    <TextClock
         android:id="@+id/home_upper_view"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -23,7 +23,7 @@
         app:layout_constraintVertical_bias="0.45"
         tools:text="2024-12-24" />
 
-    <TextView
+    <TextClock
         android:id="@+id/home_lower_view"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"

From f5567f8b71e60e1dc4d3dadda26a2ff0ccba7c06 Mon Sep 17 00:00:00 2001
From: Anonymous <toolate@othing.xyz>
Date: Sun, 12 Jan 2025 00:07:17 +0000
Subject: [PATCH 08/12] Translated using Weblate (French)

Currently translated at 95.0% (192 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/fr/
---
 app/src/main/res/values-fr/strings.xml | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 37483f3..388e089 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -107,7 +107,7 @@
     <string name="tutorial_start_text">Prenez quelques instants pour apprendre à utiliser ce \'launcher\' !</string>
     <string name="tutorial_concept_title">Concept</string>
     <string name="tutorial_concept_text">Launcher vous offre un environnement minimaliste, efficace et sans distraction.\n\nIl ne vous coûte rien, ne contient aucune publicité, ne recueille pas de données personnelles.</string>
-    <string name="tutorial_concept_text_2">L\'application est open-source (sous licence MIT) et disponible sur GitHub !\n\nN\'hésitez pas à y faire un tour !</string>
+    <string name="tutorial_concept_text_2">L\'application est open-source (sous licence MIT) et disponible sur GitHub !\n\nN\'hésitez pas à y faire un tour !</string>
     <string name="tutorial_usage_title">Utilisation</string>
     <string name="tutorial_usage_text">Sur votre écran d\'accueil vous ne trouverez rien d\'autre que la date et l\'heure : rien qui pourrait vous distraire.</string>
     <string name="tutorial_usage_text_2">Vous pouvez ouvrir des applications en effectuant des mouvelents latéraux sur l\'écran ou en appuyant sur les touches de volume. Vous pourrez en définir le comportement dans le panneau suivant.</string>
@@ -115,12 +115,7 @@
     <string name="tutorial_setup_text">Voici quelques paramètres par défaut. Vous pouvez les changer dès à présent :</string>
     <string name="tutorial_setup_text_2">Vous pourrez bien sûr tout reconfigurer plus tard.</string>
     <string name="tutorial_finish_title">C\'est parti !</string>
-    <string name="tutorial_finish_text">Vous êtes prêt à démarrer !
-\n
-\nJ\'espère que cette application vous sera précieuse !
-\n
-\n- Finn M Glas
-\n(le développeur originel) et Josia (le développeur de la branche μLauncher)</string>
+    <string name="tutorial_finish_text">Vous êtes prêt à démarrer ! \n \nJ\'espère que cette application vous sera précieuse ! \n \n- Finn M Glas \n(le développeur originel) et Josia (le développeur de la branche μLauncher)</string>
     <string name="tutorial_finish_button">Démarrer</string>
     <string name="settings">Réglages</string>
     <string name="ic_menu_alt">Plus d\'options</string>
@@ -154,8 +149,7 @@
     <string name="list_other_list_favorites">Applications Favorites</string>
     <string name="snackbar_app_hidden">Appli cachée. Vous pouvez l\'afficher à nouveau depuis les réglages.</string>
     <string name="undo">Défaire</string>
-    <string name="alert_cant_expand_status_bar_panel">Erreur : impossible d\'afficher la barre de statut.
-\nCette action utilise des fonctionalités qui ne sont pas officiellement dans l\'API Android. Malheuresement ça ne semble pas fonctionner sur votre appareil.</string>
+    <string name="alert_cant_expand_status_bar_panel">Erreur : impossible d\'afficher la barre de statut. \nCette action utilise des fonctionalités qui ne sont pas officiellement dans l\'API Android. Malheuresement ça ne semble pas fonctionner sur votre appareil.</string>
     <string name="list_other_expand_settings_panel">Réglages rapides</string>
     <string name="list_other_torch">Basculer l\'état de la lampe</string>
     <string name="settings_theme_color_theme_item_dynamic">Dynamique</string>

From 0719d28401f1bec214b6d3848a5b74bd2084beb1 Mon Sep 17 00:00:00 2001
From: Anonymous <toolate@othing.xyz>
Date: Sun, 12 Jan 2025 00:07:18 +0000
Subject: [PATCH 09/12] Translated using Weblate (Chinese (Simplified Han
 script))

Currently translated at 84.1% (170 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
---
 app/src/main/res/values-zh-rCN/strings.xml | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 1ca8ba6..2add7e6 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -64,9 +64,7 @@
     <string name="list_title_pick">选择应用</string>
     <string name="tutorial_start_text">花几秒时间学下咋用这个启动器吧!</string>
     <string name="tutorial_concept_title">概念</string>
-    <string name="tutorial_concept_text_2">该应用是开源的(MIT许可),并在 GitHub 上可用!
-\n
-\n一定要来看看代码仓库!</string>
+    <string name="tutorial_concept_text_2">该应用是开源的(MIT许可),并在 GitHub 上可用! \n \n一定要来看看代码仓库!</string>
     <string name="tutorial_usage_title">使用方法</string>
     <string name="tutorial_usage_text">您的主屏幕仅包含本地日期和时间,没有其它纷纷扰扰。</string>
     <string name="tutorial_setup_title">设置</string>
@@ -87,17 +85,10 @@
     <string name="list_other_track_next">音乐:下一首</string>
     <string name="list_other_nop">啥也不干</string>
     <string name="tutorial_title">教程</string>
-    <string name="tutorial_concept_text">μLauncher 的设计是最小、高效且无干扰。
-\n
-\n它不付费、无广告、不追踪。</string>
+    <string name="tutorial_concept_text">μLauncher 的设计是最小、高效且无干扰。 \n \n它不付费、无广告、不追踪。</string>
     <string name="tutorial_usage_text_2">您只需滑动屏幕或按下按钮即可启动应用程序。在下一步向导中选择一些应用程序。</string>
     <string name="settings_general_choose_home_screen">将 μLauncher 设为默认桌面</string>
-    <string name="tutorial_finish_text">您已经准备好开始了!
-\n
-\n我希望这对你有很大的价值!
-\n
-\n- Finn (Launcher 的作者)
-\n以及 Josia(做了一些改进并维护了 μLauncher 分支)</string>
+    <string name="tutorial_finish_text">您已经准备好开始了! \n \n我希望这对你有很大的价值! \n \n- Finn (Launcher 的作者) \n以及 Josia(做了一些改进并维护了 μLauncher 分支)</string>
     <string name="settings_enabled_gestures_double_swipe">双滑动作</string>
     <string name="settings_clock_localized">使用本地日期格式</string>
     <string name="settings_clock_time_visible">显示时间</string>
@@ -110,8 +101,7 @@
     <string name="settings_display_rotate_screen">旋转屏幕</string>
     <string name="settings_launcher_section_apps">应用</string>
     <string name="list_other_expand_notifications_panel">展开通知面板</string>
-    <string name="alert_cant_expand_status_bar_panel">错误:无法打开通知栏。
-\n这个动作使用的功能并非现有的 Android API的一部分。不幸的是,它似乎不适用于您的设备。</string>
+    <string name="alert_cant_expand_status_bar_panel">错误:无法打开通知栏。 \n这个动作使用的功能并非现有的 Android API的一部分。不幸的是,它似乎不适用于您的设备。</string>
     <string name="list_other_torch">开关手电筒</string>
     <string name="alert_no_torch_found">未检测到带闪光灯的摄像头。</string>
     <string name="alert_torch_access_exception">错误:无法访问闪光灯。</string>

From 7061da22c5b562b26d51b2a8af8a32d477b71df1 Mon Sep 17 00:00:00 2001
From: Anonymous <toolate@othing.xyz>
Date: Sun, 12 Jan 2025 00:07:17 +0000
Subject: [PATCH 10/12] Translated using Weblate (Portuguese (Brazil))

Currently translated at 97.0% (196 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
---
 app/src/main/res/values-pt-rBR/strings.xml | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 9505db7..8bdaa34 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -132,8 +132,7 @@
     <string name="settings">Configurações</string>
     <string name="ic_menu_alt">Mais opções</string>
     <string name="list_app_favorite_remove">Remover dos favoritos</string>
-    <string name="alert_cant_expand_status_bar_panel">Erro: Não foi possível expandir a barra de status.
-\nEssa ação usa uma funcionalidade que não faz parte da API do Android publicada. Infelizmente, ela não vai funcionar no seu dispositivo.</string>
+    <string name="alert_cant_expand_status_bar_panel">Erro: Não foi possível expandir a barra de status. \nEssa ação usa uma funcionalidade que não faz parte da API do Android publicada. Infelizmente, ela não vai funcionar no seu dispositivo.</string>
     <string name="settings_theme_background">Fundo (lista de apps e configurações)</string>
     <string name="settings_theme_font">Fonte</string>
     <string name="settings_theme_monochrome_icons">Ícones de apps monocromáticos</string>

From 813ed1f9f5726215ca7a304d5b7feddf7dc004b1 Mon Sep 17 00:00:00 2001
From: Vossa Excelencia <nationalistic.tention@hele.win>
Date: Mon, 13 Jan 2025 18:04:13 +0000
Subject: [PATCH 11/12] Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (202 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
---
 app/src/main/res/values-pt-rBR/strings.xml | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 8bdaa34..af143b7 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -118,8 +118,8 @@
     <string name="tutorial_title">Tutorial</string>
     <string name="tutorial_start_text">Tire alguns segundos para aprender a usar este Launcher!</string>
     <string name="tutorial_concept_title">Conceito</string>
-    <string name="tutorial_concept_text">O Launcher foi projetado para ser minimalista, eficiente e livre de distrações.\n\nEle é livre de pagamentos, anúncios e serviços de rastreamento.</string>
-    <string name="tutorial_concept_text_2">O aplicativo é de código aberto (licença MIT) e está disponível no GitHub!\n\nNão deixe de conferir o repositório!</string>
+    <string name="tutorial_concept_text">O Launcher foi criado para ser minimalista, eficiente e livre de distrações. Ele é livre de pagamentos, anúncios e serviços de rastreamento.</string>
+    <string name="tutorial_concept_text_2">O app é de código aberto (licença MIT) e está disponível no GitHub! Não deixe de conferir o repositório!</string>
     <string name="tutorial_usage_title">Uso</string>
     <string name="tutorial_usage_text">Sua tela inicial contém a data e hora local. Sem distração.</string>
     <string name="tutorial_usage_text_2">Você pode iniciar seus aplicativos com um toque único ou pressionando um botão. Escolha algumas ações no próximo slide.</string>
@@ -127,12 +127,12 @@
     <string name="tutorial_setup_text">Selecionamos alguns aplicativos padrão para você. Se quiser, você pode alterá-los agora:</string>
     <string name="tutorial_setup_text_2">Você também pode alterar suas escolhas mais tarde.</string>
     <string name="tutorial_finish_title">Vamos lá!</string>
-    <string name="tutorial_finish_text">Você está pronto para começar!\n\nEspero que isso seja de grande valor para você!\n\n- Finn (que criou o Launcher)\n\te Josia (que fez algumas melhorias e mantém o fork μLauncher)</string>
+    <string name="tutorial_finish_text">Está todo pronto para começar! Espero que isso seja de grande valor para você! - Finn (que criou o Launcherr) \te Josia (que fez algumas melhorias e mantém o fork do μLauncher)</string>
     <string name="tutorial_finish_button">Começar</string>
     <string name="settings">Configurações</string>
     <string name="ic_menu_alt">Mais opções</string>
     <string name="list_app_favorite_remove">Remover dos favoritos</string>
-    <string name="alert_cant_expand_status_bar_panel">Erro: Não foi possível expandir a barra de status. \nEssa ação usa uma funcionalidade que não faz parte da API do Android publicada. Infelizmente, ela não vai funcionar no seu dispositivo.</string>
+    <string name="alert_cant_expand_status_bar_panel">Erro: Não foi possível expandir a barra de status. Essa ação usa uma funcionalidade que não faz parte da API do Android publicado. Infelizmente, isto não vai funcionar no seu dispositivo.</string>
     <string name="settings_theme_background">Fundo (lista de apps e configurações)</string>
     <string name="settings_theme_font">Fonte</string>
     <string name="settings_theme_monochrome_icons">Ícones de apps monocromáticos</string>
@@ -256,4 +256,6 @@
     <string name="settings_functionality_search_web">Pesquise na internet</string>
     <string name="settings_functionality_search_web_summary">Ao buscar na lista de apps toque no Enter para iniciar uma pesquisa na internet.</string>
     <string name="list_apps_search_hint_no_auto_launch">Busca (sem inicialização automática)</string>
+    <string name="settings_meta_licenses">Licenças de código aberto</string>
+    <string name="legal_info_title">Licenças de código aberto</string>
 </resources>
\ No newline at end of file

From e8d2be4494563a196c241945735b4a4d0690743a Mon Sep 17 00:00:00 2001
From: Vossa Excelencia <nationalistic.tention@hele.win>
Date: Tue, 14 Jan 2025 20:52:11 +0000
Subject: [PATCH 12/12] Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.5% (201 of 202 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
---
 app/src/main/res/values-pt-rBR/strings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index af143b7..1f05552 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -127,7 +127,7 @@
     <string name="tutorial_setup_text">Selecionamos alguns aplicativos padrão para você. Se quiser, você pode alterá-los agora:</string>
     <string name="tutorial_setup_text_2">Você também pode alterar suas escolhas mais tarde.</string>
     <string name="tutorial_finish_title">Vamos lá!</string>
-    <string name="tutorial_finish_text">Está todo pronto para começar! Espero que isso seja de grande valor para você! - Finn (que criou o Launcherr) \te Josia (que fez algumas melhorias e mantém o fork do μLauncher)</string>
+    <string name="tutorial_finish_text">Tá todo pronto para começar! Espero que isso seja de grande valor para você! - Finn (que criou o Launcher) \te Josia (que fez algumas melhorias e tb mantém o fork do μLauncher)</string>
     <string name="tutorial_finish_button">Começar</string>
     <string name="settings">Configurações</string>
     <string name="ic_menu_alt">Mais opções</string>