summaryrefslogtreecommitdiff
path: root/src/android
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-05-01 16:33:21 -0400
committerGravatar bunnei2023-06-03 00:05:58 -0700
commit21e8a8277ad8697576a2b1a4e230a68649c17812 (patch)
tree9f5b865fe7f7494d4776c1bf9e6d9eca27682708 /src/android
parentandroid: Use x-axis animation for navigation rail (diff)
downloadyuzu-21e8a8277ad8697576a2b1a4e230a68649c17812.tar.gz
yuzu-21e8a8277ad8697576a2b1a4e230a68649c17812.tar.xz
yuzu-21e8a8277ad8697576a2b1a4e230a68649c17812.zip
android: About fragment
Diffstat (limited to 'src/android')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt120
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt26
-rw-r--r--src/android/app/src/main/res/drawable/ic_back.xml10
-rw-r--r--src/android/app/src/main/res/drawable/ic_discord.xml10
-rw-r--r--src/android/app/src/main/res/drawable/ic_github.xml10
-rw-r--r--src/android/app/src/main/res/drawable/ic_info_outline.xml9
-rw-r--r--src/android/app/src/main/res/drawable/ic_website.xml9
-rw-r--r--src/android/app/src/main/res/layout/fragment_about.xml199
-rw-r--r--src/android/app/src/main/res/navigation/home_navigation.xml11
-rw-r--r--src/android/app/src/main/res/values/strings.xml14
10 files changed, 415 insertions, 3 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt
new file mode 100644
index 000000000..fc7c782a6
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt
@@ -0,0 +1,120 @@
1// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4package org.yuzu.yuzu_emu.fragments
5
6import android.content.ClipData
7import android.content.ClipboardManager
8import android.content.Context
9import android.content.Intent
10import android.net.Uri
11import android.os.Build
12import android.os.Bundle
13import android.view.LayoutInflater
14import android.view.View
15import android.view.ViewGroup
16import android.view.ViewGroup.MarginLayoutParams
17import android.widget.Toast
18import androidx.core.view.ViewCompat
19import androidx.core.view.WindowInsetsCompat
20import androidx.core.view.updatePadding
21import androidx.fragment.app.Fragment
22import androidx.fragment.app.activityViewModels
23import androidx.navigation.fragment.findNavController
24import com.google.android.material.transition.MaterialSharedAxis
25import org.yuzu.yuzu_emu.BuildConfig
26import org.yuzu.yuzu_emu.R
27import org.yuzu.yuzu_emu.databinding.FragmentAboutBinding
28import org.yuzu.yuzu_emu.model.HomeViewModel
29
30class AboutFragment : Fragment() {
31 private var _binding: FragmentAboutBinding? = null
32 private val binding get() = _binding!!
33
34 private val homeViewModel: HomeViewModel by activityViewModels()
35
36 override fun onCreate(savedInstanceState: Bundle?) {
37 super.onCreate(savedInstanceState)
38 enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
39 returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
40 }
41
42 override fun onCreateView(
43 inflater: LayoutInflater,
44 container: ViewGroup?,
45 savedInstanceState: Bundle?
46 ): View {
47 _binding = FragmentAboutBinding.inflate(layoutInflater)
48 return binding.root
49 }
50
51 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
52 homeViewModel.setNavigationVisibility(visible = false, animated = true)
53 homeViewModel.setStatusBarShadeVisibility(visible = false)
54
55 binding.toolbarAbout.setNavigationOnClickListener {
56 parentFragmentManager.primaryNavigationFragment?.findNavController()?.popBackStack()
57 }
58
59 binding.imageLogo.setOnLongClickListener {
60 Toast.makeText(
61 requireContext(),
62 R.string.gaia_is_not_real,
63 Toast.LENGTH_SHORT
64 ).show()
65 true
66 }
67
68 binding.buttonContributors.setOnClickListener { openLink(getString(R.string.contributors_link)) }
69
70 binding.textBuildHash.text = BuildConfig.GIT_HASH
71 binding.buttonBuildHash.setOnClickListener {
72 val clipBoard =
73 requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
74 val clip = ClipData.newPlainText(getString(R.string.build), BuildConfig.GIT_HASH)
75 clipBoard.setPrimaryClip(clip)
76
77 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
78 Toast.makeText(
79 requireContext(),
80 R.string.copied_to_clipboard,
81 Toast.LENGTH_SHORT
82 ).show()
83 }
84 }
85
86 binding.buttonDiscord.setOnClickListener { openLink(getString(R.string.support_link)) }
87 binding.buttonWebsite.setOnClickListener { openLink(getString(R.string.website_link)) }
88 binding.buttonGithub.setOnClickListener { openLink(getString(R.string.github_link)) }
89
90 setInsets()
91 }
92
93 private fun openLink(link: String) {
94 val intent = Intent(Intent.ACTION_VIEW, Uri.parse(link))
95 startActivity(intent)
96 }
97
98 private fun setInsets() =
99 ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _: View, windowInsets: WindowInsetsCompat ->
100 val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
101 val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout())
102
103 val leftInsets = barInsets.left + cutoutInsets.left
104 val rightInsets = barInsets.right + cutoutInsets.right
105
106 val mlpAppBar = binding.appbarAbout.layoutParams as MarginLayoutParams
107 mlpAppBar.leftMargin = leftInsets
108 mlpAppBar.rightMargin = rightInsets
109 binding.appbarAbout.layoutParams = mlpAppBar
110
111 val mlpScrollAbout = binding.scrollAbout.layoutParams as MarginLayoutParams
112 mlpScrollAbout.leftMargin = leftInsets
113 mlpScrollAbout.rightMargin = rightInsets
114 binding.scrollAbout.layoutParams = mlpScrollAbout
115
116 binding.contentAbout.updatePadding(bottom = barInsets.bottom)
117
118 windowInsets
119 }
120}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt
index 875dce676..c7427e151 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt
@@ -23,8 +23,10 @@ import androidx.core.view.WindowInsetsCompat
23import androidx.core.view.updatePadding 23import androidx.core.view.updatePadding
24import androidx.fragment.app.Fragment 24import androidx.fragment.app.Fragment
25import androidx.fragment.app.activityViewModels 25import androidx.fragment.app.activityViewModels
26import androidx.navigation.fragment.findNavController
26import androidx.recyclerview.widget.LinearLayoutManager 27import androidx.recyclerview.widget.LinearLayoutManager
27import com.google.android.material.dialog.MaterialAlertDialogBuilder 28import com.google.android.material.dialog.MaterialAlertDialogBuilder
29import com.google.android.material.transition.MaterialSharedAxis
28import org.yuzu.yuzu_emu.R 30import org.yuzu.yuzu_emu.R
29import org.yuzu.yuzu_emu.adapters.HomeSettingAdapter 31import org.yuzu.yuzu_emu.adapters.HomeSettingAdapter
30import org.yuzu.yuzu_emu.databinding.FragmentHomeSettingsBinding 32import org.yuzu.yuzu_emu.databinding.FragmentHomeSettingsBinding
@@ -44,6 +46,11 @@ class HomeSettingsFragment : Fragment() {
44 46
45 private val homeViewModel: HomeViewModel by activityViewModels() 47 private val homeViewModel: HomeViewModel by activityViewModels()
46 48
49 override fun onCreate(savedInstanceState: Bundle?) {
50 super.onCreate(savedInstanceState)
51 reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
52 }
53
47 override fun onCreateView( 54 override fun onCreateView(
48 inflater: LayoutInflater, 55 inflater: LayoutInflater,
49 container: ViewGroup?, 56 container: ViewGroup?,
@@ -54,7 +61,6 @@ class HomeSettingsFragment : Fragment() {
54 } 61 }
55 62
56 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 63 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
57 homeViewModel.setNavigationVisibility(visible = true, animated = false)
58 mainActivity = requireActivity() as MainActivity 64 mainActivity = requireActivity() as MainActivity
59 65
60 val optionsList: List<HomeSetting> = listOf( 66 val optionsList: List<HomeSetting> = listOf(
@@ -87,7 +93,16 @@ class HomeSettingsFragment : Fragment() {
87 R.string.install_prod_keys, 93 R.string.install_prod_keys,
88 R.string.install_prod_keys_description, 94 R.string.install_prod_keys_description,
89 R.drawable.ic_unlock 95 R.drawable.ic_unlock
90 ) { mainActivity.getProdKey.launch(arrayOf("*/*")) } 96 ) { mainActivity.getProdKey.launch(arrayOf("*/*")) },
97 HomeSetting(
98 R.string.about,
99 R.string.about_description,
100 R.drawable.ic_info_outline
101 ) {
102 exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
103 parentFragmentManager.primaryNavigationFragment?.findNavController()
104 ?.navigate(R.id.action_homeSettingsFragment_to_aboutFragment)
105 }
91 ) 106 )
92 107
93 binding.homeSettingsList.apply { 108 binding.homeSettingsList.apply {
@@ -98,6 +113,13 @@ class HomeSettingsFragment : Fragment() {
98 setInsets() 113 setInsets()
99 } 114 }
100 115
116 override fun onStart() {
117 super.onStart()
118 exitTransition = null
119 homeViewModel.setNavigationVisibility(visible = true, animated = true)
120 homeViewModel.setStatusBarShadeVisibility(visible = true)
121 }
122
101 override fun onDestroyView() { 123 override fun onDestroyView() {
102 super.onDestroyView() 124 super.onDestroyView()
103 _binding = null 125 _binding = null
diff --git a/src/android/app/src/main/res/drawable/ic_back.xml b/src/android/app/src/main/res/drawable/ic_back.xml
new file mode 100644
index 000000000..f99fea719
--- /dev/null
+++ b/src/android/app/src/main/res/drawable/ic_back.xml
@@ -0,0 +1,10 @@
1<vector xmlns:android="http://schemas.android.com/apk/res/android"
2 android:width="24dp"
3 android:height="24dp"
4 android:autoMirrored="true"
5 android:viewportWidth="24"
6 android:viewportHeight="24">
7 <path
8 android:fillColor="?attr/colorControlNormal"
9 android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
10</vector>
diff --git a/src/android/app/src/main/res/drawable/ic_discord.xml b/src/android/app/src/main/res/drawable/ic_discord.xml
new file mode 100644
index 000000000..7a9c6ba79
--- /dev/null
+++ b/src/android/app/src/main/res/drawable/ic_discord.xml
@@ -0,0 +1,10 @@
1<vector xmlns:android="http://schemas.android.com/apk/res/android"
2 android:width="200dp"
3 android:height="200dp"
4 android:viewportWidth="256"
5 android:viewportHeight="256">
6 <path
7 android:fillColor="#5865F2"
8 android:fillType="nonZero"
9 android:pathData="M216.86,45.1C200.29,37.34 182.57,31.71 164.04,28.5C161.77,32.61 159.11,38.15 157.28,42.55C137.58,39.58 118.07,39.58 98.74,42.55C96.91,38.15 94.19,32.61 91.9,28.5C73.35,31.71 55.61,37.36 39.04,45.14C5.62,95.65 -3.44,144.9 1.09,193.46C23.26,210.01 44.74,220.07 65.86,226.65C71.08,219.47 75.73,211.84 79.74,203.8C72.1,200.9 64.79,197.32 57.89,193.17C59.72,191.81 61.51,190.39 63.24,188.93C105.37,208.63 151.13,208.63 192.75,188.93C194.51,190.39 196.3,191.81 198.11,193.17C191.18,197.34 183.85,200.92 176.22,203.82C180.23,211.84 184.86,219.49 190.1,226.67C211.24,220.09 232.74,210.03 254.91,193.46C260.23,137.17 245.83,88.37 216.86,45.1ZM85.47,163.59C72.83,163.59 62.46,151.79 62.46,137.41C62.46,123.04 72.61,111.21 85.47,111.21C98.34,111.21 108.71,123.02 108.49,137.41C108.51,151.79 98.34,163.59 85.47,163.59ZM170.53,163.59C157.88,163.59 147.51,151.79 147.51,137.41C147.51,123.04 157.66,111.21 170.53,111.21C183.39,111.21 193.76,123.02 193.54,137.41C193.54,151.79 183.39,163.59 170.53,163.59Z" />
10</vector>
diff --git a/src/android/app/src/main/res/drawable/ic_github.xml b/src/android/app/src/main/res/drawable/ic_github.xml
new file mode 100644
index 000000000..c2ee43803
--- /dev/null
+++ b/src/android/app/src/main/res/drawable/ic_github.xml
@@ -0,0 +1,10 @@
1<vector xmlns:android="http://schemas.android.com/apk/res/android"
2 android:width="98dp"
3 android:height="96dp"
4 android:viewportWidth="98"
5 android:viewportHeight="96">
6 <path
7 android:fillColor="?attr/colorControlNormal"
8 android:fillType="evenOdd"
9 android:pathData="M48.854,0C21.839,0 0,22 0,49.217c0,21.756 13.993,40.172 33.405,46.69 2.427,0.49 3.316,-1.059 3.316,-2.362 0,-1.141 -0.08,-5.052 -0.08,-9.127 -13.59,2.934 -16.42,-5.867 -16.42,-5.867 -2.184,-5.704 -5.42,-7.17 -5.42,-7.17 -4.448,-3.015 0.324,-3.015 0.324,-3.015 4.934,0.326 7.523,5.052 7.523,5.052 4.367,7.496 11.404,5.378 14.235,4.074 0.404,-3.178 1.699,-5.378 3.074,-6.6 -10.839,-1.141 -22.243,-5.378 -22.243,-24.283 0,-5.378 1.94,-9.778 5.014,-13.2 -0.485,-1.222 -2.184,-6.275 0.486,-13.038 0,0 4.125,-1.304 13.426,5.052a46.97,46.97 0,0 1,12.214 -1.63c4.125,0 8.33,0.571 12.213,1.63 9.302,-6.356 13.427,-5.052 13.427,-5.052 2.67,6.763 0.97,11.816 0.485,13.038 3.155,3.422 5.015,7.822 5.015,13.2 0,18.905 -11.404,23.06 -22.324,24.283 1.78,1.548 3.316,4.481 3.316,9.126 0,6.6 -0.08,11.897 -0.08,13.526 0,1.304 0.89,2.853 3.316,2.364 19.412,-6.52 33.405,-24.935 33.405,-46.691C97.707,22 75.788,0 48.854,0z" />
10</vector>
diff --git a/src/android/app/src/main/res/drawable/ic_info_outline.xml b/src/android/app/src/main/res/drawable/ic_info_outline.xml
new file mode 100644
index 000000000..92ae0eeaf
--- /dev/null
+++ b/src/android/app/src/main/res/drawable/ic_info_outline.xml
@@ -0,0 +1,9 @@
1<vector xmlns:android="http://schemas.android.com/apk/res/android"
2 android:width="24dp"
3 android:height="24dp"
4 android:viewportWidth="24"
5 android:viewportHeight="24">
6 <path
7 android:fillColor="?attr/colorControlNormal"
8 android:pathData="M11,7h2v2h-2zM11,11h2v6h-2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z" />
9</vector>
diff --git a/src/android/app/src/main/res/drawable/ic_website.xml b/src/android/app/src/main/res/drawable/ic_website.xml
new file mode 100644
index 000000000..f35b84a7c
--- /dev/null
+++ b/src/android/app/src/main/res/drawable/ic_website.xml
@@ -0,0 +1,9 @@
1<vector xmlns:android="http://schemas.android.com/apk/res/android"
2 android:width="24dp"
3 android:height="24dp"
4 android:viewportWidth="24"
5 android:viewportHeight="24">
6 <path
7 android:fillColor="?attr/colorControlNormal"
8 android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM11,19.93c-3.95,-0.49 -7,-3.85 -7,-7.93 0,-0.62 0.08,-1.21 0.21,-1.79L9,15v1c0,1.1 0.9,2 2,2v1.93zM17.9,17.39c-0.26,-0.81 -1,-1.39 -1.9,-1.39h-1v-3c0,-0.55 -0.45,-1 -1,-1L8,12v-2h2c0.55,0 1,-0.45 1,-1L11,7h2c1.1,0 2,-0.9 2,-2v-0.41c2.93,1.19 5,4.06 5,7.41 0,2.08 -0.8,3.97 -2.1,5.39z" />
9</vector>
diff --git a/src/android/app/src/main/res/layout/fragment_about.xml b/src/android/app/src/main/res/layout/fragment_about.xml
new file mode 100644
index 000000000..549f00aa5
--- /dev/null
+++ b/src/android/app/src/main/res/layout/fragment_about.xml
@@ -0,0 +1,199 @@
1<?xml version="1.0" encoding="utf-8"?>
2<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools"
5 android:id="@+id/coordinator_about"
6 android:layout_width="match_parent"
7 android:layout_height="match_parent"
8 android:background="?attr/colorSurface">
9
10 <com.google.android.material.appbar.AppBarLayout
11 android:id="@+id/appbar_about"
12 android:layout_width="match_parent"
13 android:layout_height="wrap_content"
14 android:fitsSystemWindows="true">
15
16 <com.google.android.material.appbar.MaterialToolbar
17 android:id="@+id/toolbar_about"
18 android:layout_width="match_parent"
19 android:layout_height="?attr/actionBarSize"
20 app:title="@string/about"
21 app:navigationIcon="@drawable/ic_back" />
22
23 </com.google.android.material.appbar.AppBarLayout>
24
25 <androidx.core.widget.NestedScrollView
26 android:id="@+id/scroll_about"
27 android:layout_width="match_parent"
28 android:layout_height="match_parent"
29 android:scrollbars="vertical"
30 android:fadeScrollbars="false"
31 app:layout_behavior="@string/appbar_scrolling_view_behavior">
32
33 <LinearLayout
34 android:id="@+id/content_about"
35 android:layout_width="match_parent"
36 android:layout_height="match_parent"
37 android:orientation="vertical">
38
39 <ImageView
40 android:id="@+id/image_logo"
41 android:layout_width="250dp"
42 android:layout_height="250dp"
43 android:layout_marginTop="20dp"
44 android:layout_gravity="center_horizontal"
45 android:src="@drawable/ic_yuzu_title" />
46
47 <com.google.android.material.divider.MaterialDivider
48 android:layout_width="match_parent"
49 android:layout_height="wrap_content"
50 android:layout_marginHorizontal="20dp"
51 android:layout_marginTop="28dp" />
52
53 <LinearLayout
54 android:layout_width="match_parent"
55 android:layout_height="wrap_content"
56 android:paddingVertical="16dp"
57 android:paddingHorizontal="16dp"
58 android:orientation="vertical">
59
60 <com.google.android.material.textview.MaterialTextView
61 style="@style/TextAppearance.Material3.TitleMedium"
62 android:layout_width="match_parent"
63 android:layout_height="wrap_content"
64 android:layout_marginHorizontal="24dp"
65 android:textAlignment="viewStart"
66 android:text="@string/about" />
67
68 <com.google.android.material.textview.MaterialTextView
69 style="@style/TextAppearance.Material3.BodyMedium"
70 android:layout_width="match_parent"
71 android:layout_height="wrap_content"
72 android:layout_marginHorizontal="24dp"
73 android:layout_marginTop="6dp"
74 android:textAlignment="viewStart"
75 android:text="@string/about_app_description" />
76
77 </LinearLayout>
78
79 <com.google.android.material.divider.MaterialDivider
80 android:layout_width="match_parent"
81 android:layout_height="wrap_content"
82 android:layout_marginHorizontal="20dp" />
83
84 <LinearLayout
85 android:id="@+id/button_contributors"
86 android:layout_width="match_parent"
87 android:layout_height="wrap_content"
88 android:paddingVertical="16dp"
89 android:paddingHorizontal="16dp"
90 android:background="?attr/selectableItemBackground"
91 android:orientation="vertical">
92
93 <com.google.android.material.textview.MaterialTextView
94 style="@style/TextAppearance.Material3.TitleMedium"
95 android:layout_width="match_parent"
96 android:layout_height="wrap_content"
97 android:layout_marginHorizontal="24dp"
98 android:textAlignment="viewStart"
99 android:text="@string/contributors" />
100
101 <com.google.android.material.textview.MaterialTextView
102 style="@style/TextAppearance.Material3.BodyMedium"
103 android:layout_width="match_parent"
104 android:layout_height="wrap_content"
105 android:layout_marginHorizontal="24dp"
106 android:layout_marginTop="6dp"
107 android:textAlignment="viewStart"
108 android:text="@string/contributors_description" />
109
110 </LinearLayout>
111
112 <com.google.android.material.divider.MaterialDivider
113 android:layout_width="match_parent"
114 android:layout_height="wrap_content"
115 android:layout_marginHorizontal="20dp" />
116
117 <LinearLayout
118 android:id="@+id/button_build_hash"
119 android:layout_width="match_parent"
120 android:layout_height="wrap_content"
121 android:paddingVertical="16dp"
122 android:paddingHorizontal="16dp"
123 android:background="?attr/selectableItemBackground"
124 android:orientation="vertical">
125
126 <com.google.android.material.textview.MaterialTextView
127 style="@style/TextAppearance.Material3.TitleMedium"
128 android:layout_width="match_parent"
129 android:layout_height="wrap_content"
130 android:layout_marginHorizontal="24dp"
131 android:textAlignment="viewStart"
132 android:text="@string/build" />
133
134 <com.google.android.material.textview.MaterialTextView
135 android:id="@+id/text_build_hash"
136 style="@style/TextAppearance.Material3.BodyMedium"
137 android:layout_width="match_parent"
138 android:layout_height="wrap_content"
139 android:layout_marginHorizontal="24dp"
140 android:layout_marginTop="6dp"
141 android:textAlignment="viewStart"
142 tools:text="abc123" />
143
144 </LinearLayout>
145
146 <com.google.android.material.divider.MaterialDivider
147 android:layout_width="match_parent"
148 android:layout_height="wrap_content"
149 android:layout_marginHorizontal="20dp" />
150
151 <LinearLayout
152 android:layout_width="match_parent"
153 android:layout_height="wrap_content"
154 android:orientation="horizontal"
155 android:gravity="center_horizontal"
156 android:layout_marginTop="12dp"
157 android:layout_marginBottom="16dp"
158 android:layout_marginHorizontal="40dp">
159
160 <Button
161 style="?attr/materialIconButtonStyle"
162 android:id="@+id/button_discord"
163 android:layout_width="0dp"
164 android:layout_height="wrap_content"
165 android:layout_weight="1"
166 app:icon="@drawable/ic_discord"
167 app:iconTint="?attr/colorOnSurface"
168 app:iconSize="24dp"
169 app:iconGravity="textEnd" />
170
171 <Button
172 style="?attr/materialIconButtonStyle"
173 android:id="@+id/button_website"
174 android:layout_width="0dp"
175 android:layout_height="wrap_content"
176 android:layout_weight="1"
177 app:icon="@drawable/ic_website"
178 app:iconTint="?attr/colorOnSurface"
179 app:iconSize="24dp"
180 app:iconGravity="textEnd" />
181
182 <Button
183 android:id="@+id/button_github"
184 style="?attr/materialIconButtonStyle"
185 android:layout_width="0dp"
186 android:layout_height="wrap_content"
187 android:layout_weight="1"
188 app:icon="@drawable/ic_github"
189 app:iconTint="?attr/colorOnSurface"
190 app:iconSize="24dp"
191 app:iconGravity="textEnd" />
192
193 </LinearLayout>
194
195 </LinearLayout>
196
197 </androidx.core.widget.NestedScrollView>
198
199</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/src/android/app/src/main/res/navigation/home_navigation.xml b/src/android/app/src/main/res/navigation/home_navigation.xml
index 0f43ba556..f44eb3fed 100644
--- a/src/android/app/src/main/res/navigation/home_navigation.xml
+++ b/src/android/app/src/main/res/navigation/home_navigation.xml
@@ -12,7 +12,11 @@
12 <fragment 12 <fragment
13 android:id="@+id/homeSettingsFragment" 13 android:id="@+id/homeSettingsFragment"
14 android:name="org.yuzu.yuzu_emu.fragments.HomeSettingsFragment" 14 android:name="org.yuzu.yuzu_emu.fragments.HomeSettingsFragment"
15 android:label="HomeSettingsFragment" /> 15 android:label="HomeSettingsFragment" >
16 <action
17 android:id="@+id/action_homeSettingsFragment_to_aboutFragment"
18 app:destination="@id/aboutFragment" />
19 </fragment>
16 20
17 <fragment 21 <fragment
18 android:id="@+id/firstTimeSetupFragment" 22 android:id="@+id/firstTimeSetupFragment"
@@ -30,4 +34,9 @@
30 android:name="org.yuzu.yuzu_emu.fragments.SearchFragment" 34 android:name="org.yuzu.yuzu_emu.fragments.SearchFragment"
31 android:label="SearchFragment" /> 35 android:label="SearchFragment" />
32 36
37 <fragment
38 android:id="@+id/aboutFragment"
39 android:name="org.yuzu.yuzu_emu.fragments.AboutFragment"
40 android:label="AboutFragment" />
41
33</navigation> 42</navigation>
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 9c7ab3c26..629b21e08 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -48,6 +48,8 @@
48 <string name="install_prod_keys_warning">Skip adding keys?</string> 48 <string name="install_prod_keys_warning">Skip adding keys?</string>
49 <string name="install_prod_keys_warning_description">Valid keys are required to emulate retail games. Only homebrew apps will function if you continue.</string> 49 <string name="install_prod_keys_warning_description">Valid keys are required to emulate retail games. Only homebrew apps will function if you continue.</string>
50 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string> 50 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
51 <string name="about">About</string>
52 <string name="about_description">Build version, credits, and more</string>
51 <string name="warning_help">Help</string> 53 <string name="warning_help">Help</string>
52 <string name="warning_skip">Skip</string> 54 <string name="warning_skip">Skip</string>
53 <string name="warning_cancel">Cancel</string> 55 <string name="warning_cancel">Cancel</string>
@@ -71,6 +73,18 @@
71 <string name="notification_no_directory_link">Couldn\'t open yuzu directory</string> 73 <string name="notification_no_directory_link">Couldn\'t open yuzu directory</string>
72 <string name="notification_no_directory_link_description">Please locate the user folder with the file manager\'s side panel manually.</string> 74 <string name="notification_no_directory_link_description">Please locate the user folder with the file manager\'s side panel manually.</string>
73 75
76 <!-- About screen strings -->
77 <string name="gaia_is_not_real">Gaia isn\'t real</string>
78 <string name="copied_to_clipboard">Copied to clipboard</string>
79 <string name="about_app_description">An open-source Switch emulator</string>
80 <string name="contributors">Contributors</string>
81 <string name="contributors_description">Made with \u2764 from the yuzu team</string>
82 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
83 <string name="build">Build</string>
84 <string name="support_link">https://discord.gg/u77vRWY</string>
85 <string name="website_link">https://yuzu-emu.org/</string>
86 <string name="github_link">https://github.com/yuzu-emu</string>
87
74 <!-- General settings strings --> 88 <!-- General settings strings -->
75 <string name="frame_limit_enable">Enable limit speed</string> 89 <string name="frame_limit_enable">Enable limit speed</string>
76 <string name="frame_limit_enable_description">When enabled, emulation speed will be limited to a specified percentage of normal speed.</string> 90 <string name="frame_limit_enable_description">When enabled, emulation speed will be limited to a specified percentage of normal speed.</string>