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