diff options
| author | 2023-06-02 03:10:08 -0400 | |
|---|---|---|
| committer | 2023-06-05 14:34:23 -0400 | |
| commit | cba5865afe025b954b24b0ae8562f94c0b2a62af (patch) | |
| tree | bf4a6ffb2896d19439818ef120248f6f5e228e69 /src/android | |
| parent | Merge pull request #10605 from 8bitDream/kotlin (diff) | |
| download | yuzu-cba5865afe025b954b24b0ae8562f94c0b2a62af.tar.gz yuzu-cba5865afe025b954b24b0ae8562f94c0b2a62af.tar.xz yuzu-cba5865afe025b954b24b0ae8562f94c0b2a62af.zip | |
android: Create licenses page
Diffstat (limited to 'src/android')
10 files changed, 918 insertions, 4 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/LicenseAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/LicenseAdapter.kt new file mode 100644 index 000000000..7006651d0 --- /dev/null +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/LicenseAdapter.kt | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | // SPDX-FileCopyrightText: 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | package org.yuzu.yuzu_emu.adapters | ||
| 5 | |||
| 6 | import android.view.LayoutInflater | ||
| 7 | import android.view.View | ||
| 8 | import android.view.ViewGroup | ||
| 9 | import androidx.appcompat.app.AppCompatActivity | ||
| 10 | import androidx.recyclerview.widget.RecyclerView | ||
| 11 | import androidx.recyclerview.widget.RecyclerView.ViewHolder | ||
| 12 | import org.yuzu.yuzu_emu.YuzuApplication | ||
| 13 | import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding | ||
| 14 | import org.yuzu.yuzu_emu.fragments.LicenseBottomSheetDialogFragment | ||
| 15 | import org.yuzu.yuzu_emu.model.License | ||
| 16 | |||
| 17 | class LicenseAdapter(private val activity: AppCompatActivity, var licenses: List<License>) : | ||
| 18 | RecyclerView.Adapter<LicenseAdapter.LicenseViewHolder>(), | ||
| 19 | View.OnClickListener { | ||
| 20 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LicenseViewHolder { | ||
| 21 | val binding = | ||
| 22 | ListItemSettingBinding.inflate(LayoutInflater.from(parent.context), parent, false) | ||
| 23 | binding.root.setOnClickListener(this) | ||
| 24 | return LicenseViewHolder(binding) | ||
| 25 | } | ||
| 26 | |||
| 27 | override fun getItemCount(): Int = licenses.size | ||
| 28 | |||
| 29 | override fun onBindViewHolder(holder: LicenseViewHolder, position: Int) { | ||
| 30 | holder.bind(licenses[position]) | ||
| 31 | } | ||
| 32 | |||
| 33 | override fun onClick(view: View) { | ||
| 34 | val license = (view.tag as LicenseViewHolder).license | ||
| 35 | LicenseBottomSheetDialogFragment.newInstance(license) | ||
| 36 | .show(activity.supportFragmentManager, LicenseBottomSheetDialogFragment.TAG) | ||
| 37 | } | ||
| 38 | |||
| 39 | inner class LicenseViewHolder(val binding: ListItemSettingBinding) : ViewHolder(binding.root) { | ||
| 40 | lateinit var license: License | ||
| 41 | |||
| 42 | init { | ||
| 43 | itemView.tag = this | ||
| 44 | } | ||
| 45 | |||
| 46 | fun bind(license: License) { | ||
| 47 | this.license = license | ||
| 48 | |||
| 49 | val context = YuzuApplication.appContext | ||
| 50 | binding.textSettingName.text = context.getString(license.titleId) | ||
| 51 | binding.textSettingDescription.text = context.getString(license.descriptionId) | ||
| 52 | } | ||
| 53 | } | ||
| 54 | } | ||
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 index 0314feff6..c92e2755c 100644 --- 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 | |||
| @@ -15,13 +15,12 @@ import android.view.View | |||
| 15 | import android.view.ViewGroup | 15 | import android.view.ViewGroup |
| 16 | import android.view.ViewGroup.MarginLayoutParams | 16 | import android.view.ViewGroup.MarginLayoutParams |
| 17 | import android.widget.Toast | 17 | import android.widget.Toast |
| 18 | import androidx.core.content.ContextCompat | ||
| 19 | import androidx.core.view.ViewCompat | 18 | import androidx.core.view.ViewCompat |
| 20 | import androidx.core.view.WindowInsetsCompat | 19 | import androidx.core.view.WindowInsetsCompat |
| 21 | import androidx.core.view.updatePadding | 20 | import androidx.core.view.updatePadding |
| 22 | import androidx.fragment.app.Fragment | 21 | import androidx.fragment.app.Fragment |
| 23 | import androidx.fragment.app.activityViewModels | 22 | import androidx.fragment.app.activityViewModels |
| 24 | import androidx.navigation.fragment.findNavController | 23 | import androidx.navigation.findNavController |
| 25 | import com.google.android.material.transition.MaterialSharedAxis | 24 | import com.google.android.material.transition.MaterialSharedAxis |
| 26 | import org.yuzu.yuzu_emu.BuildConfig | 25 | import org.yuzu.yuzu_emu.BuildConfig |
| 27 | import org.yuzu.yuzu_emu.R | 26 | import org.yuzu.yuzu_emu.R |
| @@ -38,6 +37,7 @@ class AboutFragment : Fragment() { | |||
| 38 | super.onCreate(savedInstanceState) | 37 | super.onCreate(savedInstanceState) |
| 39 | enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) | 38 | enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) |
| 40 | returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) | 39 | returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) |
| 40 | reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) | ||
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | override fun onCreateView( | 43 | override fun onCreateView( |
| @@ -54,7 +54,7 @@ class AboutFragment : Fragment() { | |||
| 54 | homeViewModel.setStatusBarShadeVisibility(visible = false) | 54 | homeViewModel.setStatusBarShadeVisibility(visible = false) |
| 55 | 55 | ||
| 56 | binding.toolbarAbout.setNavigationOnClickListener { | 56 | binding.toolbarAbout.setNavigationOnClickListener { |
| 57 | parentFragmentManager.primaryNavigationFragment?.findNavController()?.popBackStack() | 57 | binding.root.findNavController().popBackStack() |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | binding.imageLogo.setOnLongClickListener { | 60 | binding.imageLogo.setOnLongClickListener { |
| @@ -67,6 +67,10 @@ class AboutFragment : Fragment() { | |||
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | binding.buttonContributors.setOnClickListener { openLink(getString(R.string.contributors_link)) } | 69 | binding.buttonContributors.setOnClickListener { openLink(getString(R.string.contributors_link)) } |
| 70 | binding.buttonLicenses.setOnClickListener { | ||
| 71 | exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) | ||
| 72 | binding.root.findNavController().navigate(R.id.action_aboutFragment_to_licensesFragment) | ||
| 73 | } | ||
| 70 | 74 | ||
| 71 | binding.textBuildHash.text = BuildConfig.GIT_HASH | 75 | binding.textBuildHash.text = BuildConfig.GIT_HASH |
| 72 | binding.buttonBuildHash.setOnClickListener { | 76 | binding.buttonBuildHash.setOnClickListener { |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LicenseBottomSheetDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LicenseBottomSheetDialogFragment.kt new file mode 100644 index 000000000..78419191c --- /dev/null +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LicenseBottomSheetDialogFragment.kt | |||
| @@ -0,0 +1,59 @@ | |||
| 1 | // SPDX-FileCopyrightText: 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | package org.yuzu.yuzu_emu.fragments | ||
| 5 | |||
| 6 | import android.os.Bundle | ||
| 7 | import android.view.LayoutInflater | ||
| 8 | import android.view.View | ||
| 9 | import android.view.ViewGroup | ||
| 10 | import com.google.android.material.bottomsheet.BottomSheetBehavior | ||
| 11 | import com.google.android.material.bottomsheet.BottomSheetDialogFragment | ||
| 12 | import org.yuzu.yuzu_emu.databinding.DialogLicenseBinding | ||
| 13 | import org.yuzu.yuzu_emu.model.License | ||
| 14 | import org.yuzu.yuzu_emu.utils.SerializableHelper.parcelable | ||
| 15 | |||
| 16 | class LicenseBottomSheetDialogFragment : BottomSheetDialogFragment() { | ||
| 17 | private var _binding: DialogLicenseBinding? = null | ||
| 18 | private val binding get() = _binding!! | ||
| 19 | |||
| 20 | override fun onCreateView( | ||
| 21 | inflater: LayoutInflater, | ||
| 22 | container: ViewGroup?, | ||
| 23 | savedInstanceState: Bundle? | ||
| 24 | ): View { | ||
| 25 | _binding = DialogLicenseBinding.inflate(layoutInflater) | ||
| 26 | return binding.root | ||
| 27 | } | ||
| 28 | |||
| 29 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||
| 30 | super.onViewCreated(view, savedInstanceState) | ||
| 31 | BottomSheetBehavior.from<View>(view.parent as View).state = | ||
| 32 | BottomSheetBehavior.STATE_HALF_EXPANDED | ||
| 33 | |||
| 34 | val license = requireArguments().parcelable<License>(LICENSE)!! | ||
| 35 | |||
| 36 | binding.apply { | ||
| 37 | textTitle.setText(license.titleId) | ||
| 38 | textLink.setText(license.linkId) | ||
| 39 | textCopyright.setText(license.copyrightId) | ||
| 40 | textLicense.setText(license.licenseId) | ||
| 41 | } | ||
| 42 | } | ||
| 43 | |||
| 44 | companion object { | ||
| 45 | const val TAG = "LicenseBottomSheetDialogFragment" | ||
| 46 | |||
| 47 | const val LICENSE = "License" | ||
| 48 | |||
| 49 | fun newInstance( | ||
| 50 | license: License | ||
| 51 | ): LicenseBottomSheetDialogFragment { | ||
| 52 | val dialog = LicenseBottomSheetDialogFragment() | ||
| 53 | val bundle = Bundle() | ||
| 54 | bundle.putParcelable(LICENSE, license) | ||
| 55 | dialog.arguments = bundle | ||
| 56 | return dialog | ||
| 57 | } | ||
| 58 | } | ||
| 59 | } | ||
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LicensesFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LicensesFragment.kt new file mode 100644 index 000000000..59141e823 --- /dev/null +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LicensesFragment.kt | |||
| @@ -0,0 +1,137 @@ | |||
| 1 | // SPDX-FileCopyrightText: 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | package org.yuzu.yuzu_emu.fragments | ||
| 5 | |||
| 6 | import android.os.Bundle | ||
| 7 | import android.view.LayoutInflater | ||
| 8 | import android.view.View | ||
| 9 | import android.view.ViewGroup | ||
| 10 | import android.view.ViewGroup.MarginLayoutParams | ||
| 11 | import androidx.appcompat.app.AppCompatActivity | ||
| 12 | import androidx.core.view.ViewCompat | ||
| 13 | import androidx.core.view.WindowInsetsCompat | ||
| 14 | import androidx.core.view.updatePadding | ||
| 15 | import androidx.fragment.app.Fragment | ||
| 16 | import androidx.fragment.app.activityViewModels | ||
| 17 | import androidx.navigation.findNavController | ||
| 18 | import androidx.recyclerview.widget.LinearLayoutManager | ||
| 19 | import com.google.android.material.transition.MaterialSharedAxis | ||
| 20 | import org.yuzu.yuzu_emu.R | ||
| 21 | import org.yuzu.yuzu_emu.adapters.LicenseAdapter | ||
| 22 | import org.yuzu.yuzu_emu.databinding.FragmentLicensesBinding | ||
| 23 | import org.yuzu.yuzu_emu.model.HomeViewModel | ||
| 24 | import org.yuzu.yuzu_emu.model.License | ||
| 25 | |||
| 26 | class LicensesFragment : Fragment() { | ||
| 27 | private var _binding: FragmentLicensesBinding? = null | ||
| 28 | private val binding get() = _binding!! | ||
| 29 | |||
| 30 | private val homeViewModel: HomeViewModel by activityViewModels() | ||
| 31 | |||
| 32 | override fun onCreate(savedInstanceState: Bundle?) { | ||
| 33 | super.onCreate(savedInstanceState) | ||
| 34 | enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) | ||
| 35 | returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) | ||
| 36 | } | ||
| 37 | |||
| 38 | override fun onCreateView( | ||
| 39 | inflater: LayoutInflater, | ||
| 40 | container: ViewGroup?, | ||
| 41 | savedInstanceState: Bundle? | ||
| 42 | ): View { | ||
| 43 | _binding = FragmentLicensesBinding.inflate(layoutInflater) | ||
| 44 | return binding.root | ||
| 45 | } | ||
| 46 | |||
| 47 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||
| 48 | homeViewModel.setNavigationVisibility(visible = false, animated = true) | ||
| 49 | homeViewModel.setStatusBarShadeVisibility(visible = false) | ||
| 50 | |||
| 51 | binding.toolbarLicenses.setNavigationOnClickListener { | ||
| 52 | binding.root.findNavController().popBackStack() | ||
| 53 | } | ||
| 54 | |||
| 55 | val licenses = listOf( | ||
| 56 | License( | ||
| 57 | R.string.license_fidelityfx_fsr, | ||
| 58 | R.string.license_fidelityfx_fsr_description, | ||
| 59 | R.string.license_fidelityfx_fsr_link, | ||
| 60 | R.string.license_fidelityfx_fsr_copyright, | ||
| 61 | R.string.license_fidelityfx_fsr_text | ||
| 62 | ), | ||
| 63 | License( | ||
| 64 | R.string.license_cubeb, | ||
| 65 | R.string.license_cubeb_description, | ||
| 66 | R.string.license_cubeb_link, | ||
| 67 | R.string.license_cubeb_copyright, | ||
| 68 | R.string.license_cubeb_text | ||
| 69 | ), | ||
| 70 | License( | ||
| 71 | R.string.license_dynarmic, | ||
| 72 | R.string.license_dynarmic_description, | ||
| 73 | R.string.license_dynarmic_link, | ||
| 74 | R.string.license_dynarmic_copyright, | ||
| 75 | R.string.license_dynarmic_text | ||
| 76 | ), | ||
| 77 | License( | ||
| 78 | R.string.license_ffmpeg, | ||
| 79 | R.string.license_ffmpeg_description, | ||
| 80 | R.string.license_ffmpeg_link, | ||
| 81 | R.string.license_ffmpeg_copyright, | ||
| 82 | R.string.license_ffmpeg_text | ||
| 83 | ), | ||
| 84 | License( | ||
| 85 | R.string.license_opus, | ||
| 86 | R.string.license_opus_description, | ||
| 87 | R.string.license_opus_link, | ||
| 88 | R.string.license_opus_copyright, | ||
| 89 | R.string.license_opus_text | ||
| 90 | ), | ||
| 91 | License( | ||
| 92 | R.string.license_sirit, | ||
| 93 | R.string.license_sirit_description, | ||
| 94 | R.string.license_sirit_link, | ||
| 95 | R.string.license_sirit_copyright, | ||
| 96 | R.string.license_sirit_text | ||
| 97 | ), | ||
| 98 | License( | ||
| 99 | R.string.license_adreno_tools, | ||
| 100 | R.string.license_adreno_tools_description, | ||
| 101 | R.string.license_adreno_tools_link, | ||
| 102 | R.string.license_adreno_tools_copyright, | ||
| 103 | R.string.license_adreno_tools_text | ||
| 104 | ) | ||
| 105 | ) | ||
| 106 | |||
| 107 | binding.listLicenses.apply { | ||
| 108 | layoutManager = LinearLayoutManager(requireContext()) | ||
| 109 | adapter = LicenseAdapter(requireActivity() as AppCompatActivity, licenses) | ||
| 110 | } | ||
| 111 | |||
| 112 | setInsets() | ||
| 113 | } | ||
| 114 | |||
| 115 | private fun setInsets() = | ||
| 116 | ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _: View, windowInsets: WindowInsetsCompat -> | ||
| 117 | val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) | ||
| 118 | val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout()) | ||
| 119 | |||
| 120 | val leftInsets = barInsets.left + cutoutInsets.left | ||
| 121 | val rightInsets = barInsets.right + cutoutInsets.right | ||
| 122 | |||
| 123 | val mlpAppBar = binding.appbarLicenses.layoutParams as MarginLayoutParams | ||
| 124 | mlpAppBar.leftMargin = leftInsets | ||
| 125 | mlpAppBar.rightMargin = rightInsets | ||
| 126 | binding.appbarLicenses.layoutParams = mlpAppBar | ||
| 127 | |||
| 128 | val mlpScrollAbout = binding.listLicenses.layoutParams as MarginLayoutParams | ||
| 129 | mlpScrollAbout.leftMargin = leftInsets | ||
| 130 | mlpScrollAbout.rightMargin = rightInsets | ||
| 131 | binding.listLicenses.layoutParams = mlpScrollAbout | ||
| 132 | |||
| 133 | binding.listLicenses.updatePadding(bottom = barInsets.bottom) | ||
| 134 | |||
| 135 | windowInsets | ||
| 136 | } | ||
| 137 | } | ||
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/License.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/License.kt new file mode 100644 index 000000000..f24d5cf34 --- /dev/null +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/License.kt | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // SPDX-FileCopyrightText: 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | package org.yuzu.yuzu_emu.model | ||
| 5 | |||
| 6 | import android.os.Parcelable | ||
| 7 | import kotlinx.parcelize.Parcelize | ||
| 8 | |||
| 9 | @Parcelize | ||
| 10 | data class License( | ||
| 11 | val titleId: Int, | ||
| 12 | val descriptionId: Int, | ||
| 13 | val linkId: Int, | ||
| 14 | val copyrightId: Int, | ||
| 15 | val licenseId: Int | ||
| 16 | ) : Parcelable | ||
diff --git a/src/android/app/src/main/res/layout/dialog_license.xml b/src/android/app/src/main/res/layout/dialog_license.xml new file mode 100644 index 000000000..866857562 --- /dev/null +++ b/src/android/app/src/main/res/layout/dialog_license.xml | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | android:layout_width="match_parent" | ||
| 4 | android:layout_height="match_parent" | ||
| 5 | xmlns:tools="http://schemas.android.com/tools"> | ||
| 6 | |||
| 7 | <androidx.core.widget.NestedScrollView | ||
| 8 | android:layout_width="match_parent" | ||
| 9 | android:layout_height="wrap_content"> | ||
| 10 | |||
| 11 | <LinearLayout | ||
| 12 | android:layout_width="match_parent" | ||
| 13 | android:layout_height="wrap_content" | ||
| 14 | android:orientation="vertical" | ||
| 15 | android:layout_marginHorizontal="16dp"> | ||
| 16 | |||
| 17 | <com.google.android.material.bottomsheet.BottomSheetDragHandleView | ||
| 18 | android:layout_width="wrap_content" | ||
| 19 | android:layout_height="wrap_content" | ||
| 20 | android:layout_gravity="center_horizontal"/> | ||
| 21 | |||
| 22 | <com.google.android.material.textview.MaterialTextView | ||
| 23 | style="@style/TextAppearance.Material3.HeadlineLarge" | ||
| 24 | android:id="@+id/text_title" | ||
| 25 | android:layout_width="match_parent" | ||
| 26 | android:layout_height="wrap_content" | ||
| 27 | android:gravity="center" | ||
| 28 | tools:text="@string/license_adreno_tools" /> | ||
| 29 | |||
| 30 | <com.google.android.material.textview.MaterialTextView | ||
| 31 | style="@style/TextAppearance.Material3.BodyLarge" | ||
| 32 | android:id="@+id/text_link" | ||
| 33 | android:layout_width="match_parent" | ||
| 34 | android:layout_height="wrap_content" | ||
| 35 | android:gravity="center" | ||
| 36 | android:layout_marginTop="16dp" | ||
| 37 | android:autoLink="all" | ||
| 38 | tools:text="@string/license_adreno_tools_link" /> | ||
| 39 | |||
| 40 | <com.google.android.material.textview.MaterialTextView | ||
| 41 | style="@style/TextAppearance.Material3.BodyLarge" | ||
| 42 | android:id="@+id/text_copyright" | ||
| 43 | android:layout_width="match_parent" | ||
| 44 | android:layout_height="wrap_content" | ||
| 45 | android:gravity="center" | ||
| 46 | android:layout_marginTop="16dp" | ||
| 47 | android:textStyle="bold" | ||
| 48 | tools:text="@string/license_adreno_tools_copyright" /> | ||
| 49 | |||
| 50 | <com.google.android.material.textview.MaterialTextView | ||
| 51 | style="@style/TextAppearance.Material3.BodyMedium" | ||
| 52 | android:id="@+id/text_license" | ||
| 53 | android:layout_width="match_parent" | ||
| 54 | android:layout_height="wrap_content" | ||
| 55 | android:layout_gravity="center" | ||
| 56 | android:layout_marginVertical="16dp" | ||
| 57 | android:autoLink="all" | ||
| 58 | tools:text="@string/license_adreno_tools_text" /> | ||
| 59 | |||
| 60 | </LinearLayout> | ||
| 61 | |||
| 62 | </androidx.core.widget.NestedScrollView> | ||
| 63 | |||
| 64 | </androidx.coordinatorlayout.widget.CoordinatorLayout> | ||
diff --git a/src/android/app/src/main/res/layout/fragment_about.xml b/src/android/app/src/main/res/layout/fragment_about.xml index 549f00aa5..3e1d98451 100644 --- a/src/android/app/src/main/res/layout/fragment_about.xml +++ b/src/android/app/src/main/res/layout/fragment_about.xml | |||
| @@ -115,6 +115,39 @@ | |||
| 115 | android:layout_marginHorizontal="20dp" /> | 115 | android:layout_marginHorizontal="20dp" /> |
| 116 | 116 | ||
| 117 | <LinearLayout | 117 | <LinearLayout |
| 118 | android:id="@+id/button_licenses" | ||
| 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/licenses" /> | ||
| 133 | |||
| 134 | <com.google.android.material.textview.MaterialTextView | ||
| 135 | style="@style/TextAppearance.Material3.BodyMedium" | ||
| 136 | android:layout_width="match_parent" | ||
| 137 | android:layout_height="wrap_content" | ||
| 138 | android:layout_marginHorizontal="24dp" | ||
| 139 | android:layout_marginTop="6dp" | ||
| 140 | android:textAlignment="viewStart" | ||
| 141 | android:text="@string/licenses_description" /> | ||
| 142 | |||
| 143 | </LinearLayout> | ||
| 144 | |||
| 145 | <com.google.android.material.divider.MaterialDivider | ||
| 146 | android:layout_width="match_parent" | ||
| 147 | android:layout_height="wrap_content" | ||
| 148 | android:layout_marginHorizontal="20dp" /> | ||
| 149 | |||
| 150 | <LinearLayout | ||
| 118 | android:id="@+id/button_build_hash" | 151 | android:id="@+id/button_build_hash" |
| 119 | android:layout_width="match_parent" | 152 | android:layout_width="match_parent" |
| 120 | android:layout_height="wrap_content" | 153 | android:layout_height="wrap_content" |
diff --git a/src/android/app/src/main/res/layout/fragment_licenses.xml b/src/android/app/src/main/res/layout/fragment_licenses.xml new file mode 100644 index 000000000..6b31ff5b4 --- /dev/null +++ b/src/android/app/src/main/res/layout/fragment_licenses.xml | |||
| @@ -0,0 +1,30 @@ | |||
| 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 | android:id="@+id/coordinator_licenses" | ||
| 5 | android:layout_width="match_parent" | ||
| 6 | android:layout_height="match_parent" | ||
| 7 | android:background="?attr/colorSurface"> | ||
| 8 | |||
| 9 | <com.google.android.material.appbar.AppBarLayout | ||
| 10 | android:id="@+id/appbar_licenses" | ||
| 11 | android:layout_width="match_parent" | ||
| 12 | android:layout_height="wrap_content" | ||
| 13 | android:fitsSystemWindows="true"> | ||
| 14 | |||
| 15 | <com.google.android.material.appbar.MaterialToolbar | ||
| 16 | android:id="@+id/toolbar_licenses" | ||
| 17 | android:layout_width="match_parent" | ||
| 18 | android:layout_height="?attr/actionBarSize" | ||
| 19 | app:title="@string/licenses" | ||
| 20 | app:navigationIcon="@drawable/ic_back" /> | ||
| 21 | |||
| 22 | </com.google.android.material.appbar.AppBarLayout> | ||
| 23 | |||
| 24 | <androidx.recyclerview.widget.RecyclerView | ||
| 25 | android:id="@+id/list_licenses" | ||
| 26 | android:layout_width="match_parent" | ||
| 27 | android:layout_height="match_parent" | ||
| 28 | app:layout_behavior="@string/appbar_scrolling_view_behavior" /> | ||
| 29 | |||
| 30 | </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 2275ddc32..48072683e 100644 --- a/src/android/app/src/main/res/navigation/home_navigation.xml +++ b/src/android/app/src/main/res/navigation/home_navigation.xml | |||
| @@ -40,11 +40,20 @@ | |||
| 40 | <fragment | 40 | <fragment |
| 41 | android:id="@+id/aboutFragment" | 41 | android:id="@+id/aboutFragment" |
| 42 | android:name="org.yuzu.yuzu_emu.fragments.AboutFragment" | 42 | android:name="org.yuzu.yuzu_emu.fragments.AboutFragment" |
| 43 | android:label="AboutFragment" /> | 43 | android:label="AboutFragment" > |
| 44 | <action | ||
| 45 | android:id="@+id/action_aboutFragment_to_licensesFragment" | ||
| 46 | app:destination="@id/licensesFragment" /> | ||
| 47 | </fragment> | ||
| 44 | 48 | ||
| 45 | <fragment | 49 | <fragment |
| 46 | android:id="@+id/earlyAccessFragment" | 50 | android:id="@+id/earlyAccessFragment" |
| 47 | android:name="org.yuzu.yuzu_emu.fragments.EarlyAccessFragment" | 51 | android:name="org.yuzu.yuzu_emu.fragments.EarlyAccessFragment" |
| 48 | android:label="EarlyAccessFragment" /> | 52 | android:label="EarlyAccessFragment" /> |
| 49 | 53 | ||
| 54 | <fragment | ||
| 55 | android:id="@+id/licensesFragment" | ||
| 56 | android:name="org.yuzu.yuzu_emu.fragments.LicensesFragment" | ||
| 57 | android:label="LicensesFragment" /> | ||
| 58 | |||
| 50 | </navigation> | 59 | </navigation> |
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index fc24e27f5..704b12a23 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml | |||
| @@ -104,6 +104,7 @@ | |||
| 104 | <string name="contributors">Contributors</string> | 104 | <string name="contributors">Contributors</string> |
| 105 | <string name="contributors_description">Made with \u2764 from the yuzu team</string> | 105 | <string name="contributors_description">Made with \u2764 from the yuzu team</string> |
| 106 | <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string> | 106 | <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string> |
| 107 | <string name="licenses_description">Projects that make yuzu for Android possible</string> | ||
| 107 | <string name="build">Build</string> | 108 | <string name="build">Build</string> |
| 108 | <string name="support_link">https://discord.gg/u77vRWY</string> | 109 | <string name="support_link">https://discord.gg/u77vRWY</string> |
| 109 | <string name="website_link">https://yuzu-emu.org/</string> | 110 | <string name="website_link">https://yuzu-emu.org/</string> |
| @@ -346,4 +347,511 @@ | |||
| 346 | <string name="use_black_backgrounds">Use Black Backgrounds</string> | 347 | <string name="use_black_backgrounds">Use Black Backgrounds</string> |
| 347 | <string name="use_black_backgrounds_description">When using the dark theme, apply black backgrounds.</string> | 348 | <string name="use_black_backgrounds_description">When using the dark theme, apply black backgrounds.</string> |
| 348 | 349 | ||
| 350 | <!-- Licenses screen strings --> | ||
| 351 | <string name="licenses">Licenses</string> | ||
| 352 | <string name="license_fidelityfx_fsr" translatable="false">FidelityFX-FSR</string> | ||
| 353 | <string name="license_fidelityfx_fsr_description">High-quality upscaling from AMD</string> | ||
| 354 | <string name="license_fidelityfx_fsr_link" translatable="false">https://github.com/GPUOpen-Effects/FidelityFX-FSR</string> | ||
| 355 | <string name="license_fidelityfx_fsr_copyright" translatable="false">Copyright © 2021 Advanced Micro Devices, Inc.</string> | ||
| 356 | <string name="license_fidelityfx_fsr_text" translatable="false"> | ||
| 357 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 358 | of this software and associated documentation files (the \"Software"), to deal | ||
| 359 | in the Software without restriction, including without limitation the rights | ||
| 360 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 361 | copies of the Software, and to permit persons to whom the Software is | ||
| 362 | furnished to do so, subject to the following conditions:\n\n | ||
| 363 | |||
| 364 | The above copyright notice and this permission notice shall be included in | ||
| 365 | all copies or substantial portions of the Software.\n\n | ||
| 366 | |||
| 367 | THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 368 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 369 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 370 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 371 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 372 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 373 | THE SOFTWARE. | ||
| 374 | </string> | ||
| 375 | <string name="license_cubeb" translatable="false">cubeb</string> | ||
| 376 | <string name="license_cubeb_description" translatable="false">Cross platform audio library</string> | ||
| 377 | <string name="license_cubeb_link" translatable="false">https://github.com/mozilla/cubeb</string> | ||
| 378 | <string name="license_cubeb_copyright" translatable="false">Copyright © 2011 Mozilla Foundation</string> | ||
| 379 | <string name="license_cubeb_text" translatable="false"> | ||
| 380 | Permission to use, copy, modify, and distribute this software for any | ||
| 381 | purpose with or without fee is hereby granted, provided that the above | ||
| 382 | copyright notice and this permission notice appear in all copies.\n\n | ||
| 383 | |||
| 384 | THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 385 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 386 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 387 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 388 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 389 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 390 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 391 | </string> | ||
| 392 | <string name="license_dynarmic" translatable="false">Dynarmic</string> | ||
| 393 | <string name="license_dynarmic_description" translatable="false">An ARM dynamic recompiler</string> | ||
| 394 | <string name="license_dynarmic_link" translatable="false">https://github.com/merryhime/dynarmic</string> | ||
| 395 | <string name="license_dynarmic_copyright" translatable="false">Copyright © 2017 merryhime</string> | ||
| 396 | <string name="license_dynarmic_text" translatable="false"> | ||
| 397 | Permission to use, copy, modify, and/or distribute this software for | ||
| 398 | any purpose with or without fee is hereby granted.\n\n | ||
| 399 | |||
| 400 | THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 401 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 402 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 403 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 404 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN | ||
| 405 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | ||
| 406 | OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 407 | </string> | ||
| 408 | <string name="license_ffmpeg" translatable="false">FFmpeg</string> | ||
| 409 | <string name="license_ffmpeg_description" translatable="false">FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.</string> | ||
| 410 | <string name="license_ffmpeg_link" translatable="false">https://github.com/FFmpeg/FFmpeg</string> | ||
| 411 | <string name="license_ffmpeg_copyright" translatable="false">Copyright © 1991, 1999 Free Software Foundation, Inc.</string> | ||
| 412 | <string name="license_ffmpeg_text" translatable="false"> | ||
| 413 | GNU LESSER GENERAL PUBLIC LICENSE\n | ||
| 414 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n | ||
| 415 | |||
| 416 | 0. This License Agreement applies to any software library or other | ||
| 417 | program which contains a notice placed by the copyright holder or | ||
| 418 | other authorized party saying it may be distributed under the terms of | ||
| 419 | this Lesser General Public License (also called \"this License\"). | ||
| 420 | Each licensee is addressed as \"you\".\n\n | ||
| 421 | |||
| 422 | A \"library\" means a collection of software functions and/or data | ||
| 423 | prepared so as to be conveniently linked with application programs | ||
| 424 | (which use some of those functions and data) to form executables.\n\n | ||
| 425 | |||
| 426 | The \"Library\", below, refers to any such software library or work | ||
| 427 | which has been distributed under these terms. A \"work based on the | ||
| 428 | Library\" means either the Library or any derivative work under | ||
| 429 | copyright law: that is to say, a work containing the Library or a | ||
| 430 | portion of it, either verbatim or with modifications and/or translated | ||
| 431 | straightforwardly into another language. (Hereinafter, translation is | ||
| 432 | included without limitation in the term \"modification\".)\n\n | ||
| 433 | |||
| 434 | \"Source code\" for a work means the preferred form of the work for | ||
| 435 | making modifications to it. For a library, complete source code means | ||
| 436 | all the source code for all modules it contains, plus any associated | ||
| 437 | interface definition files, plus the scripts used to control compilation | ||
| 438 | and installation of the library.\n\n | ||
| 439 | |||
| 440 | Activities other than copying, distribution and modification are not | ||
| 441 | covered by this License; they are outside its scope. The act of | ||
| 442 | running a program using the Library is not restricted, and output from | ||
| 443 | such a program is covered only if its contents constitute a work based | ||
| 444 | on the Library (independent of the use of the Library in a tool for | ||
| 445 | writing it). Whether that is true depends on what the Library does | ||
| 446 | and what the program that uses the Library does.\n\n | ||
| 447 | |||
| 448 | 1. You may copy and distribute verbatim copies of the Library\'s | ||
| 449 | complete source code as you receive it, in any medium, provided that | ||
| 450 | you conspicuously and appropriately publish on each copy an | ||
| 451 | appropriate copyright notice and disclaimer of warranty; keep intact | ||
| 452 | all the notices that refer to this License and to the absence of any | ||
| 453 | warranty; and distribute a copy of this License along with the | ||
| 454 | Library.\n\n | ||
| 455 | |||
| 456 | You may charge a fee for the physical act of transferring a copy, | ||
| 457 | and you may at your option offer warranty protection in exchange for a | ||
| 458 | fee.\n\n | ||
| 459 | |||
| 460 | 2. You may modify your copy or copies of the Library or any portion | ||
| 461 | of it, thus forming a work based on the Library, and copy and | ||
| 462 | distribute such modifications or work under the terms of Section 1 | ||
| 463 | above, provided that you also meet all of these conditions:\n\n | ||
| 464 | |||
| 465 | a) The modified work must itself be a software library.\n\n | ||
| 466 | |||
| 467 | b) You must cause the files modified to carry prominent notices | ||
| 468 | stating that you changed the files and the date of any change.\n\n | ||
| 469 | |||
| 470 | c) You must cause the whole of the work to be licensed at no | ||
| 471 | charge to all third parties under the terms of this License.\n\n | ||
| 472 | |||
| 473 | d) If a facility in the modified Library refers to a function or a | ||
| 474 | table of data to be supplied by an application program that uses | ||
| 475 | the facility, other than as an argument passed when the facility | ||
| 476 | is invoked, then you must make a good faith effort to ensure that, | ||
| 477 | in the event an application does not supply such function or | ||
| 478 | table, the facility still operates, and performs whatever part of | ||
| 479 | its purpose remains meaningful.\n\n | ||
| 480 | |||
| 481 | (For example, a function in a library to compute square roots has | ||
| 482 | a purpose that is entirely well-defined independent of the | ||
| 483 | application. Therefore, Subsection 2d requires that any | ||
| 484 | application-supplied function or table used by this function must | ||
| 485 | be optional: if the application does not supply it, the square | ||
| 486 | root function must still compute square roots.)\n\n | ||
| 487 | |||
| 488 | These requirements apply to the modified work as a whole. If | ||
| 489 | identifiable sections of that work are not derived from the Library, | ||
| 490 | and can be reasonably considered independent and separate works in | ||
| 491 | themselves, then this License, and its terms, do not apply to those | ||
| 492 | sections when you distribute them as separate works. But when you | ||
| 493 | distribute the same sections as part of a whole which is a work based | ||
| 494 | on the Library, the distribution of the whole must be on the terms of | ||
| 495 | this License, whose permissions for other licensees extend to the | ||
| 496 | entire whole, and thus to each and every part regardless of who wrote | ||
| 497 | it.\n\n | ||
| 498 | |||
| 499 | Thus, it is not the intent of this section to claim rights or contest | ||
| 500 | your rights to work written entirely by you; rather, the intent is to | ||
| 501 | exercise the right to control the distribution of derivative or | ||
| 502 | collective works based on the Library.\n\n | ||
| 503 | |||
| 504 | In addition, mere aggregation of another work not based on the Library | ||
| 505 | with the Library (or with a work based on the Library) on a volume of | ||
| 506 | a storage or distribution medium does not bring the other work under | ||
| 507 | the scope of this License.\n\n | ||
| 508 | |||
| 509 | 3. You may opt to apply the terms of the ordinary GNU General Public | ||
| 510 | License instead of this License to a given copy of the Library. To do | ||
| 511 | this, you must alter all the notices that refer to this License, so | ||
| 512 | that they refer to the ordinary GNU General Public License, version 2, | ||
| 513 | instead of to this License. (If a newer version than version 2 of the | ||
| 514 | ordinary GNU General Public License has appeared, then you can specify | ||
| 515 | that version instead if you wish.) Do not make any other change in | ||
| 516 | these notices.\n\n | ||
| 517 | |||
| 518 | Once this change is made in a given copy, it is irreversible for | ||
| 519 | that copy, so the ordinary GNU General Public License applies to all | ||
| 520 | subsequent copies and derivative works made from that copy.\n\n | ||
| 521 | |||
| 522 | This option is useful when you wish to copy part of the code of | ||
| 523 | the Library into a program that is not a library.\n\n | ||
| 524 | |||
| 525 | 4. You may copy and distribute the Library (or a portion or | ||
| 526 | derivative of it, under Section 2) in object code or executable form | ||
| 527 | under the terms of Sections 1 and 2 above provided that you accompany | ||
| 528 | it with the complete corresponding machine-readable source code, which | ||
| 529 | must be distributed under the terms of Sections 1 and 2 above on a | ||
| 530 | medium customarily used for software interchange.\n\n | ||
| 531 | |||
| 532 | If distribution of object code is made by offering access to copy | ||
| 533 | from a designated place, then offering equivalent access to copy the | ||
| 534 | source code from the same place satisfies the requirement to | ||
| 535 | distribute the source code, even though third parties are not | ||
| 536 | compelled to copy the source along with the object code.\n\n | ||
| 537 | |||
| 538 | 5. A program that contains no derivative of any portion of the | ||
| 539 | Library, but is designed to work with the Library by being compiled or | ||
| 540 | linked with it, is called a \"work that uses the Library\". Such a | ||
| 541 | work, in isolation, is not a derivative work of the Library, and | ||
| 542 | therefore falls outside the scope of this License.\n\n | ||
| 543 | |||
| 544 | However, linking a \"work that uses the Library\" with the Library | ||
| 545 | creates an executable that is a derivative of the Library (because it | ||
| 546 | contains portions of the Library), rather than a \"work that uses the | ||
| 547 | library\". The executable is therefore covered by this License. | ||
| 548 | Section 6 states terms for distribution of such executables.\n\n | ||
| 549 | |||
| 550 | When a \"work that uses the Library\" uses material from a header file | ||
| 551 | that is part of the Library, the object code for the work may be a | ||
| 552 | derivative work of the Library even though the source code is not. | ||
| 553 | Whether this is true is especially significant if the work can be | ||
| 554 | linked without the Library, or if the work is itself a library. The | ||
| 555 | threshold for this to be true is not precisely defined by law.\n\n | ||
| 556 | |||
| 557 | If such an object file uses only numerical parameters, data | ||
| 558 | structure layouts and accessors, and small macros and small inline | ||
| 559 | functions (ten lines or less in length), then the use of the object | ||
| 560 | file is unrestricted, regardless of whether it is legally a derivative | ||
| 561 | work. (Executables containing this object code plus portions of the | ||
| 562 | Library will still fall under Section 6.)\n\n | ||
| 563 | |||
| 564 | Otherwise, if the work is a derivative of the Library, you may | ||
| 565 | distribute the object code for the work under the terms of Section 6. | ||
| 566 | Any executables containing that work also fall under Section 6, | ||
| 567 | whether or not they are linked directly with the Library itself.\n\n | ||
| 568 | |||
| 569 | 6. As an exception to the Sections above, you may also combine or | ||
| 570 | link a \"work that uses the Library\" with the Library to produce a | ||
| 571 | work containing portions of the Library, and distribute that work | ||
| 572 | under terms of your choice, provided that the terms permit | ||
| 573 | modification of the work for the customer\'s own use and reverse | ||
| 574 | engineering for debugging such modifications.\n\n | ||
| 575 | |||
| 576 | You must give prominent notice with each copy of the work that the | ||
| 577 | Library is used in it and that the Library and its use are covered by | ||
| 578 | this License. You must supply a copy of this License. If the work | ||
| 579 | during execution displays copyright notices, you must include the | ||
| 580 | copyright notice for the Library among them, as well as a reference | ||
| 581 | directing the user to the copy of this License. Also, you must do one | ||
| 582 | of these things:\n\n | ||
| 583 | |||
| 584 | a) Accompany the work with the complete corresponding | ||
| 585 | machine-readable source code for the Library including whatever | ||
| 586 | changes were used in the work (which must be distributed under | ||
| 587 | Sections 1 and 2 above); and, if the work is an executable linked | ||
| 588 | with the Library, with the complete machine-readable \"work that | ||
| 589 | uses the Library\", as object code and/or source code, so that the | ||
| 590 | user can modify the Library and then relink to produce a modified | ||
| 591 | executable containing the modified Library. (It is understood | ||
| 592 | that the user who changes the contents of definitions files in the | ||
| 593 | Library will not necessarily be able to recompile the application | ||
| 594 | to use the modified definitions.)\n\n | ||
| 595 | |||
| 596 | b) Use a suitable shared library mechanism for linking with the | ||
| 597 | Library. A suitable mechanism is one that (1) uses at run time a | ||
| 598 | copy of the library already present on the user\'s computer system, | ||
| 599 | rather than copying library functions into the executable, and (2) | ||
| 600 | will operate properly with a modified version of the library, if | ||
| 601 | the user installs one, as long as the modified version is | ||
| 602 | interface-compatible with the version that the work was made with.\n\n | ||
| 603 | |||
| 604 | c) Accompany the work with a written offer, valid for at | ||
| 605 | least three years, to give the same user the materials | ||
| 606 | specified in Subsection 6a, above, for a charge no more | ||
| 607 | than the cost of performing this distribution.\n\n | ||
| 608 | |||
| 609 | d) If distribution of the work is made by offering access to copy | ||
| 610 | from a designated place, offer equivalent access to copy the above | ||
| 611 | specified materials from the same place.\n\n | ||
| 612 | |||
| 613 | e) Verify that the user has already received a copy of these | ||
| 614 | materials or that you have already sent this user a copy.\n\n | ||
| 615 | |||
| 616 | For an executable, the required form of the \"work that uses the | ||
| 617 | Library\" must include any data and utility programs needed for | ||
| 618 | reproducing the executable from it. However, as a special exception, | ||
| 619 | the materials to be distributed need not include anything that is | ||
| 620 | normally distributed (in either source or binary form) with the major | ||
| 621 | components (compiler, kernel, and so on) of the operating system on | ||
| 622 | which the executable runs, unless that component itself accompanies | ||
| 623 | the executable.\n\n | ||
| 624 | |||
| 625 | It may happen that this requirement contradicts the license | ||
| 626 | restrictions of other proprietary libraries that do not normally | ||
| 627 | accompany the operating system. Such a contradiction means you cannot | ||
| 628 | use both them and the Library together in an executable that you | ||
| 629 | distribute.\n\n | ||
| 630 | |||
| 631 | 7. You may place library facilities that are a work based on the | ||
| 632 | Library side-by-side in a single library together with other library | ||
| 633 | facilities not covered by this License, and distribute such a combined | ||
| 634 | library, provided that the separate distribution of the work based on | ||
| 635 | the Library and of the other library facilities is otherwise | ||
| 636 | permitted, and provided that you do these two things:\n\n | ||
| 637 | |||
| 638 | a) Accompany the combined library with a copy of the same work | ||
| 639 | based on the Library, uncombined with any other library | ||
| 640 | facilities. This must be distributed under the terms of the | ||
| 641 | Sections above.\n\n | ||
| 642 | |||
| 643 | b) Give prominent notice with the combined library of the fact | ||
| 644 | that part of it is a work based on the Library, and explaining | ||
| 645 | where to find the accompanying uncombined form of the same work.\n\n | ||
| 646 | |||
| 647 | 8. You may not copy, modify, sublicense, link with, or distribute | ||
| 648 | the Library except as expressly provided under this License. Any | ||
| 649 | attempt otherwise to copy, modify, sublicense, link with, or | ||
| 650 | distribute the Library is void, and will automatically terminate your | ||
| 651 | rights under this License. However, parties who have received copies, | ||
| 652 | or rights, from you under this License will not have their licenses | ||
| 653 | terminated so long as such parties remain in full compliance.\n\n | ||
| 654 | |||
| 655 | 9. You are not required to accept this License, since you have not | ||
| 656 | signed it. However, nothing else grants you permission to modify or | ||
| 657 | distribute the Library or its derivative works. These actions are | ||
| 658 | prohibited by law if you do not accept this License. Therefore, by | ||
| 659 | modifying or distributing the Library (or any work based on the | ||
| 660 | Library), you indicate your acceptance of this License to do so, and | ||
| 661 | all its terms and conditions for copying, distributing or modifying | ||
| 662 | the Library or works based on it.\n\n | ||
| 663 | |||
| 664 | 10. Each time you redistribute the Library (or any work based on the | ||
| 665 | Library), the recipient automatically receives a license from the | ||
| 666 | original licensor to copy, distribute, link with or modify the Library | ||
| 667 | subject to these terms and conditions. You may not impose any further | ||
| 668 | restrictions on the recipients\' exercise of the rights granted herein. | ||
| 669 | You are not responsible for enforcing compliance by third parties with | ||
| 670 | this License.\n\n | ||
| 671 | |||
| 672 | 11. If, as a consequence of a court judgment or allegation of patent | ||
| 673 | infringement or for any other reason (not limited to patent issues), | ||
| 674 | conditions are imposed on you (whether by court order, agreement or | ||
| 675 | otherwise) that contradict the conditions of this License, they do not | ||
| 676 | excuse you from the conditions of this License. If you cannot | ||
| 677 | distribute so as to satisfy simultaneously your obligations under this | ||
| 678 | License and any other pertinent obligations, then as a consequence you | ||
| 679 | may not distribute the Library at all. For example, if a patent | ||
| 680 | license would not permit royalty-free redistribution of the Library by | ||
| 681 | all those who receive copies directly or indirectly through you, then | ||
| 682 | the only way you could satisfy both it and this License would be to | ||
| 683 | refrain entirely from distribution of the Library.\n\n | ||
| 684 | |||
| 685 | If any portion of this section is held invalid or unenforceable under any | ||
| 686 | particular circumstance, the balance of the section is intended to apply, | ||
| 687 | and the section as a whole is intended to apply in other circumstances.\n\n | ||
| 688 | |||
| 689 | It is not the purpose of this section to induce you to infringe any | ||
| 690 | patents or other property right claims or to contest validity of any | ||
| 691 | such claims; this section has the sole purpose of protecting the | ||
| 692 | integrity of the free software distribution system which is | ||
| 693 | implemented by public license practices. Many people have made | ||
| 694 | generous contributions to the wide range of software distributed | ||
| 695 | through that system in reliance on consistent application of that | ||
| 696 | system; it is up to the author/donor to decide if he or she is willing | ||
| 697 | to distribute software through any other system and a licensee cannot | ||
| 698 | impose that choice.\n\n | ||
| 699 | |||
| 700 | This section is intended to make thoroughly clear what is believed to | ||
| 701 | be a consequence of the rest of this License.\n\n | ||
| 702 | |||
| 703 | 12. If the distribution and/or use of the Library is restricted in | ||
| 704 | certain countries either by patents or by copyrighted interfaces, the | ||
| 705 | original copyright holder who places the Library under this License may add | ||
| 706 | an explicit geographical distribution limitation excluding those countries, | ||
| 707 | so that distribution is permitted only in or among countries not thus | ||
| 708 | excluded. In such case, this License incorporates the limitation as if | ||
| 709 | written in the body of this License.\n\n | ||
| 710 | |||
| 711 | 13. The Free Software Foundation may publish revised and/or new | ||
| 712 | versions of the Lesser General Public License from time to time. | ||
| 713 | Such new versions will be similar in spirit to the present version, | ||
| 714 | but may differ in detail to address new problems or concerns.\n\n | ||
| 715 | |||
| 716 | Each version is given a distinguishing version number. If the Library | ||
| 717 | specifies a version number of this License which applies to it and | ||
| 718 | "any later version\", you have the option of following the terms and | ||
| 719 | conditions either of that version or of any later version published by | ||
| 720 | the Free Software Foundation. If the Library does not specify a | ||
| 721 | license version number, you may choose any version ever published by | ||
| 722 | the Free Software Foundation.\n\n | ||
| 723 | |||
| 724 | 14. If you wish to incorporate parts of the Library into other free | ||
| 725 | programs whose distribution conditions are incompatible with these, | ||
| 726 | write to the author to ask for permission. For software which is | ||
| 727 | copyrighted by the Free Software Foundation, write to the Free | ||
| 728 | Software Foundation; we sometimes make exceptions for this. Our | ||
| 729 | decision will be guided by the two goals of preserving the free status | ||
| 730 | of all derivatives of our free software and of promoting the sharing | ||
| 731 | and reuse of software generally.\n\n | ||
| 732 | |||
| 733 | NO WARRANTY\n\n | ||
| 734 | |||
| 735 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO | ||
| 736 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. | ||
| 737 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR | ||
| 738 | OTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY | ||
| 739 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 740 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| 741 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE | ||
| 742 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME | ||
| 743 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n | ||
| 744 | |||
| 745 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN | ||
| 746 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY | ||
| 747 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU | ||
| 748 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR | ||
| 749 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE | ||
| 750 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING | ||
| 751 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A | ||
| 752 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF | ||
| 753 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | ||
| 754 | DAMAGES. | ||
| 755 | </string> | ||
| 756 | <string name="license_opus" translatable="false">Opus</string> | ||
| 757 | <string name="license_opus_description" translatable="false">Modern audio compression for the internet</string> | ||
| 758 | <string name="license_opus_link" translatable="false">https://github.com/xiph/opus</string> | ||
| 759 | <string name="license_opus_copyright" translatable="false">Copyright 2001–2011 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin, Timothy B. Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding, Erik de Castro Lopo</string> | ||
| 760 | <string name="license_opus_text" translatable="false"> | ||
| 761 | Redistribution and use in source and binary forms, with or without | ||
| 762 | modification, are permitted provided that the following conditions | ||
| 763 | are met:\n\n | ||
| 764 | |||
| 765 | - Redistributions of source code must retain the above copyright | ||
| 766 | notice, this list of conditions and the following disclaimer.\n\n | ||
| 767 | |||
| 768 | - Redistributions in binary form must reproduce the above copyright | ||
| 769 | notice, this list of conditions and the following disclaimer in the | ||
| 770 | documentation and/or other materials provided with the distribution.\n\n | ||
| 771 | |||
| 772 | - Neither the name of Internet Society, IETF or IETF Trust, nor the | ||
| 773 | names of specific contributors, may be used to endorse or promote | ||
| 774 | products derived from this software without specific prior written | ||
| 775 | permission.\n\n | ||
| 776 | |||
| 777 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| 778 | ``AS IS\'\' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| 779 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
| 780 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER | ||
| 781 | OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
| 782 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
| 783 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
| 784 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
| 785 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
| 786 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
| 787 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n | ||
| 788 | |||
| 789 | Opus is subject to the royalty-free patent licenses which are | ||
| 790 | specified at:\n\n | ||
| 791 | |||
| 792 | Xiph.Org Foundation: | ||
| 793 | https://datatracker.ietf.org/ipr/1524/ \n\n | ||
| 794 | |||
| 795 | Microsoft Corporation: | ||
| 796 | https://datatracker.ietf.org/ipr/1914/ \n\n | ||
| 797 | |||
| 798 | Broadcom Corporation: | ||
| 799 | https://datatracker.ietf.org/ipr/1526/ | ||
| 800 | </string> | ||
| 801 | <string name="license_sirit" translatable="false">Sirit</string> | ||
| 802 | <string name="license_sirit_description" translatable="false">A runtime SPIR-V assembler</string> | ||
| 803 | <string name="license_sirit_link" translatable="false">https://github.com/ReinUsesLisp/sirit</string> | ||
| 804 | <string name="license_sirit_copyright" translatable="false">Copyright © 2019, sirit All rights reserved.</string> | ||
| 805 | <string name="license_sirit_text" translatable="false"> | ||
| 806 | Redistribution and use in source and binary forms, with or without | ||
| 807 | modification, are permitted provided that the following conditions are met:\n | ||
| 808 | * Redistributions of source code must retain the above copyright | ||
| 809 | notice, this list of conditions and the following disclaimer.\n | ||
| 810 | * Redistributions in binary form must reproduce the above copyright | ||
| 811 | notice, this list of conditions and the following disclaimer in the | ||
| 812 | documentation and/or other materials provided with the distribution.\n | ||
| 813 | * Neither the name of the organization nor the | ||
| 814 | names of its contributors may be used to endorse or promote products | ||
| 815 | derived from this software without specific prior written permission.\n\n | ||
| 816 | |||
| 817 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND | ||
| 818 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
| 819 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
| 820 | DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY | ||
| 821 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
| 822 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 823 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
| 824 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 825 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
| 826 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 827 | </string> | ||
| 828 | <string name="license_adreno_tools" translatable="false">Adreno Tools</string> | ||
| 829 | <string name="license_adreno_tools_description" translatable="false">A library for applying rootless Adreno GPU driver modifications/replacements</string> | ||
| 830 | <string name="license_adreno_tools_link" translatable="false">https://github.com/bylaws/libadrenotools</string> | ||
| 831 | <string name="license_adreno_tools_copyright" translatable="false">Copyright © 2021, Billy Laws</string> | ||
| 832 | <string name="license_adreno_tools_text" translatable="false"> | ||
| 833 | BSD 2-Clause License\n\n | ||
| 834 | |||
| 835 | Redistribution and use in source and binary forms, with or without | ||
| 836 | modification, are permitted provided that the following conditions are met:\n\n | ||
| 837 | |||
| 838 | 1. Redistributions of source code must retain the above copyright notice, this | ||
| 839 | list of conditions and the following disclaimer.\n\n | ||
| 840 | |||
| 841 | 2. Redistributions in binary form must reproduce the above copyright notice, | ||
| 842 | this list of conditions and the following disclaimer in the documentation | ||
| 843 | and/or other materials provided with the distribution.\n\n | ||
| 844 | |||
| 845 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" | ||
| 846 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 847 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
| 848 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||
| 849 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| 850 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
| 851 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
| 852 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
| 853 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| 854 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 855 | </string> | ||
| 856 | |||
| 349 | </resources> | 857 | </resources> |