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 48b5028..7566f5f 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Functions.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Functions.kt @@ -3,6 +3,8 @@ package de.jrpie.android.launcher import android.app.Activity import android.app.Service import android.app.role.RoleManager +import android.content.ClipData +import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.content.pm.LauncherApps @@ -151,3 +153,21 @@ fun saveListActivityChoice(data: Intent?) { Gesture.byId(forGesture)?.let { Action.setActionForGesture(it, Action.fromIntent(data)) } } + +// used for the bug report button +fun getDeviceInfo(): String { + return """ + µLauncher version: ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE}) + Android version: ${Build.VERSION.RELEASE} (sdk ${Build.VERSION.SDK_INT}) + Model: ${Build.MODEL} + Device: ${Build.DEVICE} + Brand: ${Build.BRAND} + Manufacturer: ${Build.MANUFACTURER} + """.trimIndent() +} + +fun copyToClipboard(context: Context, text: String) { + val clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clipData = ClipData.newPlainText("Debug Info", text) + clipboardManager.setPrimaryClip(clipData); +} \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt index d53ea99..fd3a738 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt @@ -7,9 +7,14 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button +import android.widget.TextView import androidx.fragment.app.Fragment +import de.jrpie.android.launcher.BuildConfig import de.jrpie.android.launcher.R +import de.jrpie.android.launcher.copyToClipboard import de.jrpie.android.launcher.databinding.SettingsMetaBinding +import de.jrpie.android.launcher.getDeviceInfo import de.jrpie.android.launcher.openInBrowser import de.jrpie.android.launcher.preferences.resetPreferences import de.jrpie.android.launcher.ui.LegalInfoActivity @@ -88,13 +93,37 @@ class SettingsFragmentMeta : Fragment(), UIObject { // report a bug binding.settingsMetaButtonReportBug.setOnClickListener { - openInBrowser( - getString(R.string.settings_meta_report_bug_link), - requireContext() - ) + val deviceInfo = getDeviceInfo() + AlertDialog.Builder(context, R.style.AlertDialogCustom).apply { + setView(R.layout.dialog_report_bug) + setTitle(R.string.dialog_report_bug_title) + setPositiveButton(R.string.dialog_report_bug_create_report) { _, _ -> + openInBrowser( + getString(R.string.settings_meta_report_bug_link), + requireContext() + ) + } + setNegativeButton(R.string.dialog_cancel) { _, _ -> } + }.create().also { it.show() }.apply { + val info = findViewById<TextView>(R.id.dialog_report_bug_device_info) + val buttonClipboard = findViewById<Button>(R.id.dialog_report_bug_button_clipboard) + val buttonSecurity = findViewById<Button>(R.id.dialog_report_bug_button_security) + info.text = deviceInfo + buttonClipboard.setOnClickListener { + copyToClipboard(requireContext(), deviceInfo) + } + info.setOnClickListener { + copyToClipboard(requireContext(), deviceInfo) + } + buttonSecurity.setOnClickListener { + openInBrowser( + getString(R.string.settings_meta_report_vulnerability_link), + requireContext() + ) + } + } } - // join chat binding.settingsMetaButtonJoinChat.setOnClickListener { openInBrowser( @@ -104,7 +133,6 @@ class SettingsFragmentMeta : Fragment(), UIObject { } - // contact developer binding.settingsMetaButtonContact.setOnClickListener { openInBrowser( @@ -134,5 +162,7 @@ class SettingsFragmentMeta : Fragment(), UIObject { startActivity(Intent(this.context, LegalInfoActivity::class.java)) } + binding.settingsMetaTextVersion.text = BuildConfig.VERSION_NAME + } } diff --git a/app/src/main/res/layout/dialog_report_bug.xml b/app/src/main/res/layout/dialog_report_bug.xml new file mode 100644 index 0000000..7ef37d2 --- /dev/null +++ b/app/src/main/res/layout/dialog_report_bug.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + style="@style/AlertDialogDanger" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="20dp"> + + <TextView + android:id="@+id/dialog_report_bug_info" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/dialog_report_bug_info" /> + + <Space + android:layout_width="match_parent" + android:layout_height="20dp" /> + + <TextView + android:id="@+id/dialog_report_bug_device_info" + android:padding="10dp" + android:layout_width="match_parent" + android:layout_height="wrap_content" + tools:text="Version: ?\nAndroid Version: ?" /> + + <Button + android:id="@+id/dialog_report_bug_button_clipboard" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/dialog_report_bug_button_clipboard" /> + + <Space + android:layout_width="match_parent" + android:layout_height="20dp" /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/dialog_report_bug_security_info"/> + <Button + android:id="@+id/dialog_report_bug_button_security" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/dialog_report_bug_button_security" /> + + + </LinearLayout> +</ScrollView> \ No newline at end of file diff --git a/app/src/main/res/layout/settings_meta.xml b/app/src/main/res/layout/settings_meta.xml index aa1350d..a5876e6 100644 --- a/app/src/main/res/layout/settings_meta.xml +++ b/app/src/main/res/layout/settings_meta.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> -<ScrollView - xmlns:android="http://schemas.android.com/apk/res/android" +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/settings_meta_container" android:layout_width="match_parent" android:layout_height="wrap_content" tools:context=".ui.settings.meta.SettingsFragmentMeta"> + <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" @@ -91,5 +91,16 @@ android:text="@string/settings_meta_licenses" android:textAllCaps="false" /> + <Space + android:layout_width="match_parent" + android:layout_height="32sp" /> + + <TextView + android:id="@+id/settings_meta_text_version" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAlignment="textEnd" + tools:text="v1.2.3" /> + </LinearLayout> </ScrollView> \ No newline at end of file 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> diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 9505db7..1f05552 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,13 +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">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> <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> @@ -257,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 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> diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index b2e69a1..6a28185 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -154,7 +154,8 @@ - --> <string name="settings_meta_link_github" translatable="false">https://github.com/jrpie/Launcher</string> - <string name="settings_meta_report_bug_link" translatable="false">https://github.com/jrpie/Launcher/issues/new/choose</string> + <string name="settings_meta_report_bug_link" translatable="false">https://github.com/jrpie/Launcher/issues/new?template=bug_report.md</string> + <string name="settings_meta_report_vulnerability_link" translatable="false">https://github.com/jrpie/Launcher/security/policy</string> <string name="settings_meta_fork_contact_url" translatable="false">https://s.jrpie.de/contact</string> <string name="settings_meta_privacy_url" translatable="false">https://s.jrpie.de/android-legal</string> <string name="settings_meta_contact_url" translatable="false">https://www.finnmglas.com/contact/</string> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4cdebb1..0910170 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -169,6 +169,13 @@ <string name="settings_meta_view_code">View source code</string> <string name="settings_meta_report_bug">Report a bug</string> + <string name="dialog_report_bug_title">Report a bug</string> + <string name="dialog_report_bug_info">Thank you for helping to improve µLauncher!\nPlease consider adding the following information to your bug report:</string> + <string name="dialog_report_bug_button_clipboard">Copy to clipboard</string> + <string name="dialog_report_bug_security_info">Please do not report security vulnerabilities publicly on GitHub, but use the following instead:</string> + <string name="dialog_report_bug_button_security">Report a security vulnerability</string> + <string name="dialog_report_bug_create_report">Create report</string> + <string name="settings_meta_fork_contact">Contact the developer of the fork</string> <string name="settings_meta_join_chat">Join µLauncher chat</string>