committed by
bunnei
10 changed files with 415 additions and 3 deletions
-
120src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt
-
26src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt
-
10src/android/app/src/main/res/drawable/ic_back.xml
-
10src/android/app/src/main/res/drawable/ic_discord.xml
-
10src/android/app/src/main/res/drawable/ic_github.xml
-
9src/android/app/src/main/res/drawable/ic_info_outline.xml
-
9src/android/app/src/main/res/drawable/ic_website.xml
-
199src/android/app/src/main/res/layout/fragment_about.xml
-
11src/android/app/src/main/res/navigation/home_navigation.xml
-
14src/android/app/src/main/res/values/strings.xml
@ -0,0 +1,120 @@ |
|||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
package org.yuzu.yuzu_emu.fragments |
|||
|
|||
import android.content.ClipData |
|||
import android.content.ClipboardManager |
|||
import android.content.Context |
|||
import android.content.Intent |
|||
import android.net.Uri |
|||
import android.os.Build |
|||
import android.os.Bundle |
|||
import android.view.LayoutInflater |
|||
import android.view.View |
|||
import android.view.ViewGroup |
|||
import android.view.ViewGroup.MarginLayoutParams |
|||
import android.widget.Toast |
|||
import androidx.core.view.ViewCompat |
|||
import androidx.core.view.WindowInsetsCompat |
|||
import androidx.core.view.updatePadding |
|||
import androidx.fragment.app.Fragment |
|||
import androidx.fragment.app.activityViewModels |
|||
import androidx.navigation.fragment.findNavController |
|||
import com.google.android.material.transition.MaterialSharedAxis |
|||
import org.yuzu.yuzu_emu.BuildConfig |
|||
import org.yuzu.yuzu_emu.R |
|||
import org.yuzu.yuzu_emu.databinding.FragmentAboutBinding |
|||
import org.yuzu.yuzu_emu.model.HomeViewModel |
|||
|
|||
class AboutFragment : Fragment() { |
|||
private var _binding: FragmentAboutBinding? = null |
|||
private val binding get() = _binding!! |
|||
|
|||
private val homeViewModel: HomeViewModel by activityViewModels() |
|||
|
|||
override fun onCreate(savedInstanceState: Bundle?) { |
|||
super.onCreate(savedInstanceState) |
|||
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) |
|||
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) |
|||
} |
|||
|
|||
override fun onCreateView( |
|||
inflater: LayoutInflater, |
|||
container: ViewGroup?, |
|||
savedInstanceState: Bundle? |
|||
): View { |
|||
_binding = FragmentAboutBinding.inflate(layoutInflater) |
|||
return binding.root |
|||
} |
|||
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { |
|||
homeViewModel.setNavigationVisibility(visible = false, animated = true) |
|||
homeViewModel.setStatusBarShadeVisibility(visible = false) |
|||
|
|||
binding.toolbarAbout.setNavigationOnClickListener { |
|||
parentFragmentManager.primaryNavigationFragment?.findNavController()?.popBackStack() |
|||
} |
|||
|
|||
binding.imageLogo.setOnLongClickListener { |
|||
Toast.makeText( |
|||
requireContext(), |
|||
R.string.gaia_is_not_real, |
|||
Toast.LENGTH_SHORT |
|||
).show() |
|||
true |
|||
} |
|||
|
|||
binding.buttonContributors.setOnClickListener { openLink(getString(R.string.contributors_link)) } |
|||
|
|||
binding.textBuildHash.text = BuildConfig.GIT_HASH |
|||
binding.buttonBuildHash.setOnClickListener { |
|||
val clipBoard = |
|||
requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager |
|||
val clip = ClipData.newPlainText(getString(R.string.build), BuildConfig.GIT_HASH) |
|||
clipBoard.setPrimaryClip(clip) |
|||
|
|||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { |
|||
Toast.makeText( |
|||
requireContext(), |
|||
R.string.copied_to_clipboard, |
|||
Toast.LENGTH_SHORT |
|||
).show() |
|||
} |
|||
} |
|||
|
|||
binding.buttonDiscord.setOnClickListener { openLink(getString(R.string.support_link)) } |
|||
binding.buttonWebsite.setOnClickListener { openLink(getString(R.string.website_link)) } |
|||
binding.buttonGithub.setOnClickListener { openLink(getString(R.string.github_link)) } |
|||
|
|||
setInsets() |
|||
} |
|||
|
|||
private fun openLink(link: String) { |
|||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(link)) |
|||
startActivity(intent) |
|||
} |
|||
|
|||
private fun setInsets() = |
|||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _: View, windowInsets: WindowInsetsCompat -> |
|||
val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) |
|||
val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout()) |
|||
|
|||
val leftInsets = barInsets.left + cutoutInsets.left |
|||
val rightInsets = barInsets.right + cutoutInsets.right |
|||
|
|||
val mlpAppBar = binding.appbarAbout.layoutParams as MarginLayoutParams |
|||
mlpAppBar.leftMargin = leftInsets |
|||
mlpAppBar.rightMargin = rightInsets |
|||
binding.appbarAbout.layoutParams = mlpAppBar |
|||
|
|||
val mlpScrollAbout = binding.scrollAbout.layoutParams as MarginLayoutParams |
|||
mlpScrollAbout.leftMargin = leftInsets |
|||
mlpScrollAbout.rightMargin = rightInsets |
|||
binding.scrollAbout.layoutParams = mlpScrollAbout |
|||
|
|||
binding.contentAbout.updatePadding(bottom = barInsets.bottom) |
|||
|
|||
windowInsets |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|||
android:width="24dp" |
|||
android:height="24dp" |
|||
android:autoMirrored="true" |
|||
android:viewportWidth="24" |
|||
android:viewportHeight="24"> |
|||
<path |
|||
android:fillColor="?attr/colorControlNormal" |
|||
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" /> |
|||
</vector> |
|||
@ -0,0 +1,10 @@ |
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|||
android:width="200dp" |
|||
android:height="200dp" |
|||
android:viewportWidth="256" |
|||
android:viewportHeight="256"> |
|||
<path |
|||
android:fillColor="#5865F2" |
|||
android:fillType="nonZero" |
|||
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" /> |
|||
</vector> |
|||
@ -0,0 +1,10 @@ |
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|||
android:width="98dp" |
|||
android:height="96dp" |
|||
android:viewportWidth="98" |
|||
android:viewportHeight="96"> |
|||
<path |
|||
android:fillColor="?attr/colorControlNormal" |
|||
android:fillType="evenOdd" |
|||
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" /> |
|||
</vector> |
|||
@ -0,0 +1,9 @@ |
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|||
android:width="24dp" |
|||
android:height="24dp" |
|||
android:viewportWidth="24" |
|||
android:viewportHeight="24"> |
|||
<path |
|||
android:fillColor="?attr/colorControlNormal" |
|||
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" /> |
|||
</vector> |
|||
@ -0,0 +1,9 @@ |
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|||
android:width="24dp" |
|||
android:height="24dp" |
|||
android:viewportWidth="24" |
|||
android:viewportHeight="24"> |
|||
<path |
|||
android:fillColor="?attr/colorControlNormal" |
|||
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" /> |
|||
</vector> |
|||
@ -0,0 +1,199 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:app="http://schemas.android.com/apk/res-auto" |
|||
xmlns:tools="http://schemas.android.com/tools" |
|||
android:id="@+id/coordinator_about" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent" |
|||
android:background="?attr/colorSurface"> |
|||
|
|||
<com.google.android.material.appbar.AppBarLayout |
|||
android:id="@+id/appbar_about" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:fitsSystemWindows="true"> |
|||
|
|||
<com.google.android.material.appbar.MaterialToolbar |
|||
android:id="@+id/toolbar_about" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="?attr/actionBarSize" |
|||
app:title="@string/about" |
|||
app:navigationIcon="@drawable/ic_back" /> |
|||
|
|||
</com.google.android.material.appbar.AppBarLayout> |
|||
|
|||
<androidx.core.widget.NestedScrollView |
|||
android:id="@+id/scroll_about" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent" |
|||
android:scrollbars="vertical" |
|||
android:fadeScrollbars="false" |
|||
app:layout_behavior="@string/appbar_scrolling_view_behavior"> |
|||
|
|||
<LinearLayout |
|||
android:id="@+id/content_about" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent" |
|||
android:orientation="vertical"> |
|||
|
|||
<ImageView |
|||
android:id="@+id/image_logo" |
|||
android:layout_width="250dp" |
|||
android:layout_height="250dp" |
|||
android:layout_marginTop="20dp" |
|||
android:layout_gravity="center_horizontal" |
|||
android:src="@drawable/ic_yuzu_title" /> |
|||
|
|||
<com.google.android.material.divider.MaterialDivider |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="20dp" |
|||
android:layout_marginTop="28dp" /> |
|||
|
|||
<LinearLayout |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:paddingVertical="16dp" |
|||
android:paddingHorizontal="16dp" |
|||
android:orientation="vertical"> |
|||
|
|||
<com.google.android.material.textview.MaterialTextView |
|||
style="@style/TextAppearance.Material3.TitleMedium" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="24dp" |
|||
android:textAlignment="viewStart" |
|||
android:text="@string/about" /> |
|||
|
|||
<com.google.android.material.textview.MaterialTextView |
|||
style="@style/TextAppearance.Material3.BodyMedium" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="24dp" |
|||
android:layout_marginTop="6dp" |
|||
android:textAlignment="viewStart" |
|||
android:text="@string/about_app_description" /> |
|||
|
|||
</LinearLayout> |
|||
|
|||
<com.google.android.material.divider.MaterialDivider |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="20dp" /> |
|||
|
|||
<LinearLayout |
|||
android:id="@+id/button_contributors" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:paddingVertical="16dp" |
|||
android:paddingHorizontal="16dp" |
|||
android:background="?attr/selectableItemBackground" |
|||
android:orientation="vertical"> |
|||
|
|||
<com.google.android.material.textview.MaterialTextView |
|||
style="@style/TextAppearance.Material3.TitleMedium" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="24dp" |
|||
android:textAlignment="viewStart" |
|||
android:text="@string/contributors" /> |
|||
|
|||
<com.google.android.material.textview.MaterialTextView |
|||
style="@style/TextAppearance.Material3.BodyMedium" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="24dp" |
|||
android:layout_marginTop="6dp" |
|||
android:textAlignment="viewStart" |
|||
android:text="@string/contributors_description" /> |
|||
|
|||
</LinearLayout> |
|||
|
|||
<com.google.android.material.divider.MaterialDivider |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="20dp" /> |
|||
|
|||
<LinearLayout |
|||
android:id="@+id/button_build_hash" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:paddingVertical="16dp" |
|||
android:paddingHorizontal="16dp" |
|||
android:background="?attr/selectableItemBackground" |
|||
android:orientation="vertical"> |
|||
|
|||
<com.google.android.material.textview.MaterialTextView |
|||
style="@style/TextAppearance.Material3.TitleMedium" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="24dp" |
|||
android:textAlignment="viewStart" |
|||
android:text="@string/build" /> |
|||
|
|||
<com.google.android.material.textview.MaterialTextView |
|||
android:id="@+id/text_build_hash" |
|||
style="@style/TextAppearance.Material3.BodyMedium" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="24dp" |
|||
android:layout_marginTop="6dp" |
|||
android:textAlignment="viewStart" |
|||
tools:text="abc123" /> |
|||
|
|||
</LinearLayout> |
|||
|
|||
<com.google.android.material.divider.MaterialDivider |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginHorizontal="20dp" /> |
|||
|
|||
<LinearLayout |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:orientation="horizontal" |
|||
android:gravity="center_horizontal" |
|||
android:layout_marginTop="12dp" |
|||
android:layout_marginBottom="16dp" |
|||
android:layout_marginHorizontal="40dp"> |
|||
|
|||
<Button |
|||
style="?attr/materialIconButtonStyle" |
|||
android:id="@+id/button_discord" |
|||
android:layout_width="0dp" |
|||
android:layout_height="wrap_content" |
|||
android:layout_weight="1" |
|||
app:icon="@drawable/ic_discord" |
|||
app:iconTint="?attr/colorOnSurface" |
|||
app:iconSize="24dp" |
|||
app:iconGravity="textEnd" /> |
|||
|
|||
<Button |
|||
style="?attr/materialIconButtonStyle" |
|||
android:id="@+id/button_website" |
|||
android:layout_width="0dp" |
|||
android:layout_height="wrap_content" |
|||
android:layout_weight="1" |
|||
app:icon="@drawable/ic_website" |
|||
app:iconTint="?attr/colorOnSurface" |
|||
app:iconSize="24dp" |
|||
app:iconGravity="textEnd" /> |
|||
|
|||
<Button |
|||
android:id="@+id/button_github" |
|||
style="?attr/materialIconButtonStyle" |
|||
android:layout_width="0dp" |
|||
android:layout_height="wrap_content" |
|||
android:layout_weight="1" |
|||
app:icon="@drawable/ic_github" |
|||
app:iconTint="?attr/colorOnSurface" |
|||
app:iconSize="24dp" |
|||
app:iconGravity="textEnd" /> |
|||
|
|||
</LinearLayout> |
|||
|
|||
</LinearLayout> |
|||
|
|||
</androidx.core.widget.NestedScrollView> |
|||
|
|||
</androidx.coordinatorlayout.widget.CoordinatorLayout> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue