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>