diff --git a/android/app/src/main/java/com/izzy2lost/x1box/GameLibraryActivity.kt b/android/app/src/main/java/com/izzy2lost/x1box/GameLibraryActivity.kt
index bd0721c113..9ab4edbd5b 100644
--- a/android/app/src/main/java/com/izzy2lost/x1box/GameLibraryActivity.kt
+++ b/android/app/src/main/java/com/izzy2lost/x1box/GameLibraryActivity.kt
@@ -6,6 +6,7 @@ import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
+import android.widget.ImageButton
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.ProgressBar
@@ -18,6 +19,7 @@ import androidx.documentfile.provider.DocumentFile
import coil.load
import com.google.android.material.button.MaterialButton
import com.google.android.material.button.MaterialButtonToggleGroup
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.materialswitch.MaterialSwitch
import java.net.URLEncoder
import java.util.ArrayDeque
@@ -57,6 +59,7 @@ class GameLibraryActivity : AppCompatActivity() {
private lateinit var gamesListContainer: LinearLayout
private lateinit var gamesGridContainer: LinearLayout
private lateinit var btnChangeFolder: MaterialButton
+ private lateinit var btnAbout: ImageButton
private lateinit var viewModeToggle: MaterialButtonToggleGroup
private lateinit var switchBoxArtLookup: MaterialSwitch
@@ -89,6 +92,7 @@ class GameLibraryActivity : AppCompatActivity() {
gamesListContainer = findViewById(R.id.library_games_container)
gamesGridContainer = findViewById(R.id.library_games_grid_container)
btnChangeFolder = findViewById(R.id.btn_change_games_folder)
+ btnAbout = findViewById(R.id.btn_library_about)
viewModeToggle = findViewById(R.id.library_view_mode_toggle)
switchBoxArtLookup = findViewById(R.id.switch_box_art_lookup)
@@ -103,6 +107,9 @@ class GameLibraryActivity : AppCompatActivity() {
btnChangeFolder.setOnClickListener {
pickGamesFolder.launch(gamesFolderUri)
}
+ btnAbout.setOnClickListener {
+ showAboutDialog()
+ }
viewModeToggle.addOnButtonCheckedListener { _, checkedId, isChecked ->
if (!isChecked) {
return@addOnButtonCheckedListener
@@ -619,5 +626,42 @@ class GameLibraryActivity : AppCompatActivity() {
private fun dp(value: Int): Int {
return (value * resources.displayMetrics.density).toInt()
}
+
+ private fun showAboutDialog() {
+ val labels = arrayOf(
+ getString(R.string.library_about_link_source),
+ getString(R.string.library_about_link_privacy),
+ getString(R.string.library_about_link_fork),
+ getString(R.string.library_about_link_license),
+ getString(R.string.library_about_link_disclaimer)
+ )
+ val urls = arrayOf(
+ getString(R.string.library_about_url_source),
+ getString(R.string.library_about_url_privacy),
+ getString(R.string.library_about_url_fork),
+ getString(R.string.library_about_url_license),
+ getString(R.string.library_about_url_disclaimer)
+ )
+
+ MaterialAlertDialogBuilder(this)
+ .setTitle(R.string.library_about_title)
+ .setMessage(R.string.library_about_message)
+ .setItems(labels) { _, which ->
+ openExternalLink(urls[which])
+ }
+ .setNegativeButton(android.R.string.cancel, null)
+ .show()
+ }
+
+ private fun openExternalLink(url: String) {
+ val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
+ addCategory(Intent.CATEGORY_BROWSABLE)
+ }
+ try {
+ startActivity(intent)
+ } catch (_: Exception) {
+ Toast.makeText(this, getString(R.string.library_about_open_failed), Toast.LENGTH_SHORT).show()
+ }
+ }
}
diff --git a/android/app/src/main/res/layout/activity_game_library.xml b/android/app/src/main/res/layout/activity_game_library.xml
index 99181171c0..4ea66e79f4 100644
--- a/android/app/src/main/res/layout/activity_game_library.xml
+++ b/android/app/src/main/res/layout/activity_game_library.xml
@@ -39,19 +39,29 @@
android:orientation="vertical"
android:padding="24dp">
-
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
-
+
+
+
+
Games Folder: %1$s
Game Library
- Pick a game to launch in xemu.
Change Folder
List
Cover Grid
@@ -40,4 +39,18 @@
Size: %1$s
Path: %1$s
Open
+ About X1 BOX
+ About X1 BOX
+ X1 BOX is a community project based on xemu. Select a link below:
+ Unable to open link.
+ Source Code (X1 BOX)
+ Privacy Policy
+ Forked From (xemu)
+ License (LICENSE)
+ License Disclaimer (COPYING)
+ https://github.com/izzy2lost/xemu
+ https://www.izzy2lost.com/x1box-privacy
+ https://github.com/xemu-project/xemu
+ https://github.com/izzy2lost/xemu/blob/master/LICENSE
+ https://github.com/izzy2lost/xemu/blob/master/COPYING