implement #102 - show version in settings and add bug report dialog
Some checks failed
Android CI / build (push) Has been cancelled

This commit is contained in:
Josia Pietsch 2025-01-24 23:45:19 +01:00
parent 6d385e4e87
commit 23f8cfb70e
Signed by: jrpie
GPG key ID: E70B571D66986A2D
6 changed files with 131 additions and 9 deletions

View file

@ -3,6 +3,8 @@ package de.jrpie.android.launcher
import android.app.Activity import android.app.Activity
import android.app.Service import android.app.Service
import android.app.role.RoleManager import android.app.role.RoleManager
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.LauncherApps import android.content.pm.LauncherApps
@ -151,3 +153,21 @@ fun saveListActivityChoice(data: Intent?) {
Gesture.byId(forGesture)?.let { Action.setActionForGesture(it, Action.fromIntent(data)) } 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);
}

View file

@ -7,9 +7,14 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import de.jrpie.android.launcher.BuildConfig
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.copyToClipboard
import de.jrpie.android.launcher.databinding.SettingsMetaBinding import de.jrpie.android.launcher.databinding.SettingsMetaBinding
import de.jrpie.android.launcher.getDeviceInfo
import de.jrpie.android.launcher.openInBrowser import de.jrpie.android.launcher.openInBrowser
import de.jrpie.android.launcher.preferences.resetPreferences import de.jrpie.android.launcher.preferences.resetPreferences
import de.jrpie.android.launcher.ui.LegalInfoActivity import de.jrpie.android.launcher.ui.LegalInfoActivity
@ -88,12 +93,36 @@ class SettingsFragmentMeta : Fragment(), UIObject {
// report a bug // report a bug
binding.settingsMetaButtonReportBug.setOnClickListener { binding.settingsMetaButtonReportBug.setOnClickListener {
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( openInBrowser(
getString(R.string.settings_meta_report_bug_link), getString(R.string.settings_meta_report_bug_link),
requireContext() 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 // join chat
binding.settingsMetaButtonJoinChat.setOnClickListener { binding.settingsMetaButtonJoinChat.setOnClickListener {
@ -104,7 +133,6 @@ class SettingsFragmentMeta : Fragment(), UIObject {
} }
// contact developer // contact developer
binding.settingsMetaButtonContact.setOnClickListener { binding.settingsMetaButtonContact.setOnClickListener {
openInBrowser( openInBrowser(
@ -134,5 +162,7 @@ class SettingsFragmentMeta : Fragment(), UIObject {
startActivity(Intent(this.context, LegalInfoActivity::class.java)) startActivity(Intent(this.context, LegalInfoActivity::class.java))
} }
binding.settingsMetaTextVersion.text = BuildConfig.VERSION_NAME
} }
} }

View file

@ -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>

View file

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ScrollView <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/settings_meta_container" android:id="@+id/settings_meta_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:context=".ui.settings.meta.SettingsFragmentMeta"> tools:context=".ui.settings.meta.SettingsFragmentMeta">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -91,5 +91,16 @@
android:text="@string/settings_meta_licenses" android:text="@string/settings_meta_licenses"
android:textAllCaps="false" /> 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> </LinearLayout>
</ScrollView> </ScrollView>

View file

@ -154,7 +154,8 @@
- -
--> -->
<string name="settings_meta_link_github" translatable="false">https://github.com/jrpie/Launcher</string> <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_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_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> <string name="settings_meta_contact_url" translatable="false">https://www.finnmglas.com/contact/</string>

View file

@ -169,6 +169,13 @@
<string name="settings_meta_view_code">View source code</string> <string name="settings_meta_view_code">View source code</string>
<string name="settings_meta_report_bug">Report a bug</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_fork_contact">Contact the developer of the fork</string>
<string name="settings_meta_join_chat">Join µLauncher chat</string> <string name="settings_meta_join_chat">Join µLauncher chat</string>