summaryrefslogtreecommitdiff
path: root/Source/Android/app
diff options
context:
space:
mode:
authorCharles Lombardo <clombardo169@gmail.com>2023-01-16 03:15:11 -0500
committerCharles Lombardo <clombardo169@gmail.com>2023-01-18 15:58:06 -0500
commitb598b6ec72cde8d7c14c69254aefadce5ccc462c (patch)
tree6fb991d563d51425ac294fb7cafcf7720e37b006 /Source/Android/app
parent30f0051f9c36b94ddd61dbaa8451eac9a6d489a4 (diff)
Android: Add about dialog
Diffstat (limited to 'Source/Android/app')
-rw-r--r--Source/Android/app/build.gradle26
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/AboutDialogFragment.kt94
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncChannelJobService.java2
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java9
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java4
-rw-r--r--Source/Android/app/src/main/res/drawable/ic_dolphin.xml38
-rw-r--r--Source/Android/app/src/main/res/drawable/ic_dolphin_launcher.xml20
-rw-r--r--Source/Android/app/src/main/res/drawable/ic_info_tv.xml10
-rw-r--r--Source/Android/app/src/main/res/layout-w600dp/dialog_about.xml171
-rw-r--r--Source/Android/app/src/main/res/layout-w600dp/dialog_about_tv.xml168
-rw-r--r--Source/Android/app/src/main/res/layout/dialog_about.xml169
-rw-r--r--Source/Android/app/src/main/res/layout/dialog_about_tv.xml170
-rw-r--r--Source/Android/app/src/main/res/layout/tv_title.xml2
-rw-r--r--Source/Android/app/src/main/res/menu/menu_game_grid.xml6
-rw-r--r--Source/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml2
-rw-r--r--Source/Android/app/src/main/res/values-notouch/bools.xml4
-rw-r--r--Source/Android/app/src/main/res/values/bools.xml4
-rw-r--r--Source/Android/app/src/main/res/values/strings.xml13
-rw-r--r--Source/Android/app/src/main/res/values/themes.xml4
19 files changed, 894 insertions, 22 deletions
diff --git a/Source/Android/app/build.gradle b/Source/Android/app/build.gradle
index a67131e6df..7298cc9f60 100644
--- a/Source/Android/app/build.gradle
+++ b/Source/Android/app/build.gradle
@@ -41,6 +41,9 @@ android {
versionName "${getVersion()}"
+ buildConfigField "String", "GIT_HASH", "\"${getGitHash()}\""
+ buildConfigField "String", "BRANCH", "\"${getBranch()}\""
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -162,7 +165,6 @@ def getVersion() {
return versionNumber
}
-
def getBuildVersionCode() {
try {
def versionNumber = 'git rev-list --first-parent --count HEAD'.execute([], project.rootDir).text
@@ -174,3 +176,25 @@ def getBuildVersionCode() {
return 1
}
+
+def getGitHash() {
+ try {
+ def gitHash = 'git rev-parse HEAD'.execute([], project.rootDir).text.trim()
+ return gitHash
+ } catch (Exception e) {
+ logger.error(e + ': Cannot find git, defaulting to dummy build hash')
+ }
+
+ return 0
+}
+
+def getBranch() {
+ try {
+ def branch = 'git rev-parse --abbrev-ref HEAD'.execute([], project.rootDir).text.trim()
+ return branch
+ } catch (Exception e) {
+ logger.error(e + ': Cannot find git, defaulting to dummy build hash')
+ }
+
+ return 'master'
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/AboutDialogFragment.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/AboutDialogFragment.kt
new file mode 100644
index 0000000000..059442ae98
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/AboutDialogFragment.kt
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.fragments
+
+import android.os.Bundle
+import android.text.method.LinkMovementMethod
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment
+import org.dolphinemu.dolphinemu.BuildConfig
+import org.dolphinemu.dolphinemu.R
+import org.dolphinemu.dolphinemu.databinding.DialogAboutBinding
+import org.dolphinemu.dolphinemu.databinding.DialogAboutTvBinding
+
+class AboutDialogFragment : BottomSheetDialogFragment() {
+ private var _bindingMobile: DialogAboutBinding? = null
+ private var _bindingTv: DialogAboutTvBinding? = null
+
+ private val bindingMobile get() = _bindingMobile!!
+ private val bindingTv get() = _bindingTv!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ if (activity is AppCompatActivity) {
+ _bindingMobile = DialogAboutBinding.inflate(layoutInflater)
+ return bindingMobile.root
+ }
+ _bindingTv = DialogAboutTvBinding.inflate(layoutInflater)
+ return bindingTv.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ if (!resources.getBoolean(R.bool.hasTouch)) {
+ BottomSheetBehavior.from<View>(view.parent as View).state =
+ BottomSheetBehavior.STATE_EXPANDED
+ }
+
+ val wark = resources.getString(R.string.wark)
+ val branch = String.format(
+ resources.getString(R.string.about_branch),
+ BuildConfig.BRANCH
+ )
+ val revision = String.format(
+ resources.getString(R.string.about_revision),
+ BuildConfig.GIT_HASH
+ )
+ if (activity is AppCompatActivity) {
+ bindingMobile.dolphinLogo.setOnLongClickListener {
+ Toast.makeText(requireContext(), wark, Toast.LENGTH_SHORT).show()
+ true
+ }
+
+ bindingMobile.websiteText.movementMethod = LinkMovementMethod.getInstance()
+ bindingMobile.githubText.movementMethod = LinkMovementMethod.getInstance()
+ bindingMobile.supportText.movementMethod = LinkMovementMethod.getInstance()
+
+ bindingMobile.versionText.text = BuildConfig.VERSION_NAME
+ bindingMobile.branchText.text = branch
+ bindingMobile.revisionText.text = revision
+ } else {
+ bindingTv.dolphinLogo.setOnLongClickListener {
+ Toast.makeText(requireContext(), wark, Toast.LENGTH_SHORT).show()
+ true
+ }
+
+ bindingTv.websiteText.movementMethod = LinkMovementMethod.getInstance()
+ bindingTv.githubText.movementMethod = LinkMovementMethod.getInstance()
+ bindingTv.supportText.movementMethod = LinkMovementMethod.getInstance()
+
+ bindingTv.versionText.text = BuildConfig.VERSION_NAME
+ bindingTv.branchText.text = branch
+ bindingTv.revisionText.text = revision
+
+ bindingTv.dolphinLogo.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.ic_dolphin))
+ }
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _bindingMobile = null
+ }
+
+ companion object {
+ const val TAG = "AboutDialogFragment"
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncChannelJobService.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncChannelJobService.java
index 2e11049ab2..596f60cd8f 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncChannelJobService.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncChannelJobService.java
@@ -129,7 +129,7 @@ public class SyncChannelJobService extends JobService
builder.build().toContentValues());
channelId = ContentUris.parseId(channelUrl);
- Bitmap bitmap = TvUtil.convertToBitmap(context, R.drawable.ic_dolphin);
+ Bitmap bitmap = TvUtil.convertToBitmap(context, R.drawable.ic_dolphin_launcher);
ChannelLogoUtils.storeChannelLogo(context, channelId, bitmap);
return channelId;
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java
index 0115dba7cc..2e5d9c617f 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java
@@ -21,6 +21,7 @@ import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;
import org.dolphinemu.dolphinemu.features.sysupdate.ui.SystemUpdateProgressBarDialogFragment;
import org.dolphinemu.dolphinemu.features.sysupdate.ui.SystemMenuNotInstalledDialogFragment;
import org.dolphinemu.dolphinemu.features.sysupdate.ui.SystemUpdateViewModel;
+import org.dolphinemu.dolphinemu.fragments.AboutDialogFragment;
import org.dolphinemu.dolphinemu.model.GameFileCache;
import org.dolphinemu.dolphinemu.services.GameFileCacheManager;
import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner;
@@ -135,6 +136,9 @@ public final class MainPresenter
new AfterDirectoryInitializationRunner().runWithLifecycle(activity,
() -> mView.launchOpenFileActivity(REQUEST_NAND_BIN_FILE));
return true;
+
+ case R.id.menu_about:
+ showAboutDialog();
}
return false;
@@ -337,4 +341,9 @@ public final class MainPresenter
}
});
}
+
+ private void showAboutDialog()
+ {
+ new AboutDialogFragment().show(mActivity.getSupportFragmentManager(), AboutDialogFragment.TAG);
+ }
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
index 21a8fc2880..0e1f55154b 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
@@ -406,6 +406,10 @@ public final class TvMainActivity extends FragmentActivity
R.drawable.ic_folder_tv,
R.string.grid_menu_online_system_update));
+ rowItems.add(new TvSettingsItem(R.id.menu_about,
+ R.drawable.ic_info_tv,
+ R.string.grid_menu_about));
+
// Create a header for this row.
HeaderItem header = new HeaderItem(R.string.settings, getString(R.string.settings));
diff --git a/Source/Android/app/src/main/res/drawable/ic_dolphin.xml b/Source/Android/app/src/main/res/drawable/ic_dolphin.xml
index c43d170346..c2defe5980 100644
--- a/Source/Android/app/src/main/res/drawable/ic_dolphin.xml
+++ b/Source/Android/app/src/main/res/drawable/ic_dolphin.xml
@@ -1,19 +1,27 @@
-<vector android:height="192dp" android:viewportHeight="500"
- android:viewportWidth="500" android:width="192dp"
- xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
- <path android:fillColor="#0057AB" android:fillType="nonZero"
- android:pathData="M344.28,301.46C343.6,299.18 339.35,285.41 332.2,272.21C322.77,254.81 314.66,242.38 301.16,229.75C296.81,225.69 292.7,222.06 288.41,218.8L288.42,218.8C288.42,218.8 288.38,218.78 288.32,218.73C288.24,218.67 288.16,218.61 288.08,218.55C286.48,217.32 279.75,211.64 282.15,205.38C282.95,203.28 284.89,201.53 287.19,200.12L299.6,200.02L299.6,195.42L299.6,195.42C299.6,195.42 299.6,195.42 299.6,195.42C299.6,195.42 292.33,192.95 279.62,193.77C267.69,194.53 256.97,201.51 254.96,202.49C248.54,200.65 241.2,199.03 232.63,197.57C202.97,192.54 177.86,200.56 165.27,209.3C148.76,220.76 149.21,231.44 147.85,236.78C147.01,240.09 139.51,246.21 139.6,250.5L139.6,255.02L141.15,256.61L146.99,254.63L147.69,252.19C150.09,251.34 152.72,250.14 155.11,249.16C161.07,246.71 161.53,245.37 177.82,242.94C185.32,241.82 193.21,241.5 199.08,241.45C201.37,246.28 207.05,256.2 216.89,260.96C223.3,264.05 230.47,265.64 236.18,266.45L235.43,270.22L246.8,271.9L246.8,267.3L246.79,267.3C246.79,267.3 246.79,267.3 246.79,267.3C246.79,267.3 237.25,263.34 231.38,257.47C227.38,253.47 226.43,247.4 226.23,243.93L226.26,243.93C235.88,245.76 244.28,247.08 264.38,254.78C268.09,256.2 271.56,257.76 274.72,259.34L274.12,259.67L283.18,266.98L294,275.93L294,271.33L293.96,271.3C293.8,271.1 281.48,255.84 260.78,245.63C243.67,237.19 229.62,233.02 210.16,232.07C188.88,231.04 173.21,233.77 173.21,233.77C173.21,233.77 173.64,224.32 189.71,216.79C203.67,210.23 225.65,209.14 250.86,215.57C286.49,224.66 298.64,240.14 313.96,256.13C323.69,266.27 332.62,280.55 338.26,290.43L337.31,290L340.23,297.54L344.4,306.45L344.4,301.82L344.28,301.46z"
- android:strokeColor="#00000000" android:strokeLineCap="butt"
- android:strokeLineJoin="miter" android:strokeWidth="0.1"/>
- <path android:fillType="nonZero"
- android:pathData="M332.2,276.8C322.77,259.41 314.67,246.97 301.16,234.34C296.82,230.28 292.7,226.65 288.41,223.39L288.42,223.39C288.42,223.39 288.39,223.37 288.32,223.32C288.25,223.27 288.17,223.21 288.09,223.15C286.5,221.92 279.75,216.24 282.15,209.97C284.78,203.09 299.6,200.01 299.6,200.01C299.6,200.01 292.34,197.54 279.62,198.36C267.69,199.12 256.97,206.1 254.96,207.08C248.54,205.24 241.21,203.62 232.63,202.17C202.97,197.13 177.87,205.15 165.27,213.9C148.76,225.36 149.22,236.03 147.86,241.38C146.88,245.22 136.92,252.85 140.3,257.01C142.41,259.61 149.44,256.08 155.11,253.75C161.07,251.3 161.53,249.96 177.83,247.53C185.32,246.42 193.21,246.09 199.08,246.05C201.37,250.87 207.05,260.79 216.9,265.55C230.19,271.97 246.8,271.89 246.8,271.89C246.8,271.89 237.25,267.93 231.38,262.06C227.39,258.06 226.43,251.99 226.23,248.52L226.26,248.53C235.88,250.35 244.29,251.67 264.38,259.37C281.96,266.1 293.97,275.9 293.97,275.9C293.97,275.9 281.62,260.5 260.78,250.22C243.67,241.78 229.63,237.61 210.16,236.67C188.89,235.63 173.21,238.37 173.21,238.37C173.21,238.37 173.65,228.91 189.71,221.38C203.68,214.83 225.65,213.73 250.87,220.16C286.49,229.25 298.64,244.73 313.97,260.72C330.28,277.74 344.38,306.39 344.38,306.39C344.38,306.39 340.03,291.25 332.2,276.8z"
- android:strokeColor="#00000000" android:strokeLineCap="butt"
- android:strokeLineJoin="miter" android:strokeWidth="0.1">
+<vector
+ xmlns:aapt="http://schemas.android.com/aapt"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="192dp"
+ android:height="192dp"
+ android:viewportHeight="2048"
+ android:viewportWidth="2048">
+ <path
+ android:fillColor="#0057ab"
+ android:pathData="m2046.8,1538.7c-6.8,-22.8 -49.3,-160.5 -120.8,-292.6 -94.3,-173.9 -175.3,-298.3 -310.4,-424.6 -43.4,-40.6 -84.6,-76.9 -127.4,-109.5l0,0c0,0 -0.3,-0.2 -0.9,-0.7 -0.8,-0.6 -1.6,-1.2 -2.4,-1.8 -16,-12.4 -83.3,-69.1 -59.4,-131.8 8,-21 27.4,-38.5 50.5,-52.6l124.1,-1v-46l-0,0c0,0 0,-0 0,-0 0,0 -72.7,-24.7 -199.8,-16.5 -119.3,7.7 -226.5,77.4 -246.6,87.2 -64.3,-18.4 -137.6,-34.6 -223.3,-49.2 -296.6,-50.3 -547.6,29.9 -673.6,117.3 -165.1,114.6 -160.5,221.4 -174.1,274.8 -8.4,33.1 -83.4,94.3 -82.5,137.2v45.2l15.5,16 58.4,-19.8 7,-24.4c24,-8.6 50.3,-20.5 74.2,-30.4 59.6,-24.5 64.2,-37.9 227.1,-62.2 75,-11.2 153.8,-14.4 212.6,-14.9 22.9,48.3 79.7,147.5 178.1,195 64,30.9 135.7,46.8 192.9,54.9l-7.5,37.7 113.7,16.8v-46l-0.1,-0c0,0 0,0 0,0 0,0 -95.4,-39.6 -154.1,-98.4 -40,-40 -49.5,-100.6 -51.6,-135.3l0.4,0c96.2,18.3 180.2,31.5 381.2,108.4 37.2,14.2 71.8,29.8 103.4,45.6l-5.9,3.3 90.6,73 108.2,89.5v-46l-0.4,-0.3c-1.6,-2 -124.8,-154.6 -331.8,-256.7 -171.1,-84.4 -311.6,-126.1 -506.2,-135.5 -212.8,-10.3 -369.5,17 -369.5,17 0,0 4.4,-94.5 165,-169.9 139.7,-65.5 359.4,-76.5 611.6,-12.1 356.3,90.9 477.8,245.6 631,405.6 97.2,101.5 186.6,244.2 243,343l-9.5,-4.3 29.2,75.4 41.8,89.1v-46.3l-1.2,-3.6z" />
+ <path android:pathData="m1926,1292c-94.3,-173.9 -175.3,-298.3 -310.4,-424.6 -43.4,-40.6 -84.6,-76.9 -127.4,-109.5l0,0c0,0 -0.3,-0.2 -1,-0.7 -0.8,-0.6 -1.5,-1.2 -2.3,-1.8 -15.9,-12.3 -83.4,-69.1 -59.4,-131.8 26.3,-68.8 174.6,-99.6 174.6,-99.6 0,0 -72.7,-24.7 -199.8,-16.5 -119.3,7.7 -226.5,77.4 -246.6,87.2 -64.3,-18.4 -137.6,-34.6 -223.3,-49.2 -296.6,-50.3 -547.6,29.9 -673.6,117.3 -165.1,114.6 -160.5,221.4 -174.1,274.8 -9.8,38.4 -109.4,114.8 -75.5,156.4 21.1,26 91.4,-9.3 148.1,-32.6 59.6,-24.5 64.2,-37.9 227.1,-62.2 75,-11.2 153.8,-14.4 212.6,-14.9 22.9,48.3 79.7,147.5 178.1,195 132.9,64.2 299,63.4 299,63.4 0,0 -95.4,-39.6 -154.1,-98.4 -40,-40 -49.5,-100.6 -51.6,-135.3l0.4,0c96.2,18.3 180.2,31.5 381.2,108.4 175.8,67.3 295.9,165.3 295.9,165.3 0,0 -123.5,-154 -331.9,-256.8 -171.1,-84.4 -311.6,-126.1 -506.2,-135.5 -212.8,-10.3 -369.5,17 -369.5,17 0,0 4.4,-94.5 165,-169.9 139.7,-65.5 359.4,-76.5 611.6,-12.1 356.3,90.9 477.8,245.6 631,405.6 163.1,170.2 304.1,456.7 304.1,456.7 0,0 -43.5,-151.4 -121.8,-295.9z">
<aapt:attr name="android:fillColor">
- <gradient android:endX="139.6" android:endY="306.4"
- android:startX="139.6" android:startY="198.2" android:type="linear">
- <item android:color="#FF46D4FF" android:offset="0"/>
- <item android:color="#FF1792FF" android:offset="1"/>
+ <gradient
+ android:endX="0"
+ android:endY="1588"
+ android:startX="0"
+ android:startY="506"
+ android:type="linear">
+ <item
+ android:color="#FF46D4FF"
+ android:offset="0" />
+ <item
+ android:color="#FF1792FF"
+ android:offset="1" />
</gradient>
</aapt:attr>
</path>
diff --git a/Source/Android/app/src/main/res/drawable/ic_dolphin_launcher.xml b/Source/Android/app/src/main/res/drawable/ic_dolphin_launcher.xml
new file mode 100644
index 0000000000..c43d170346
--- /dev/null
+++ b/Source/Android/app/src/main/res/drawable/ic_dolphin_launcher.xml
@@ -0,0 +1,20 @@
+<vector android:height="192dp" android:viewportHeight="500"
+ android:viewportWidth="500" android:width="192dp"
+ xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#0057AB" android:fillType="nonZero"
+ android:pathData="M344.28,301.46C343.6,299.18 339.35,285.41 332.2,272.21C322.77,254.81 314.66,242.38 301.16,229.75C296.81,225.69 292.7,222.06 288.41,218.8L288.42,218.8C288.42,218.8 288.38,218.78 288.32,218.73C288.24,218.67 288.16,218.61 288.08,218.55C286.48,217.32 279.75,211.64 282.15,205.38C282.95,203.28 284.89,201.53 287.19,200.12L299.6,200.02L299.6,195.42L299.6,195.42C299.6,195.42 299.6,195.42 299.6,195.42C299.6,195.42 292.33,192.95 279.62,193.77C267.69,194.53 256.97,201.51 254.96,202.49C248.54,200.65 241.2,199.03 232.63,197.57C202.97,192.54 177.86,200.56 165.27,209.3C148.76,220.76 149.21,231.44 147.85,236.78C147.01,240.09 139.51,246.21 139.6,250.5L139.6,255.02L141.15,256.61L146.99,254.63L147.69,252.19C150.09,251.34 152.72,250.14 155.11,249.16C161.07,246.71 161.53,245.37 177.82,242.94C185.32,241.82 193.21,241.5 199.08,241.45C201.37,246.28 207.05,256.2 216.89,260.96C223.3,264.05 230.47,265.64 236.18,266.45L235.43,270.22L246.8,271.9L246.8,267.3L246.79,267.3C246.79,267.3 246.79,267.3 246.79,267.3C246.79,267.3 237.25,263.34 231.38,257.47C227.38,253.47 226.43,247.4 226.23,243.93L226.26,243.93C235.88,245.76 244.28,247.08 264.38,254.78C268.09,256.2 271.56,257.76 274.72,259.34L274.12,259.67L283.18,266.98L294,275.93L294,271.33L293.96,271.3C293.8,271.1 281.48,255.84 260.78,245.63C243.67,237.19 229.62,233.02 210.16,232.07C188.88,231.04 173.21,233.77 173.21,233.77C173.21,233.77 173.64,224.32 189.71,216.79C203.67,210.23 225.65,209.14 250.86,215.57C286.49,224.66 298.64,240.14 313.96,256.13C323.69,266.27 332.62,280.55 338.26,290.43L337.31,290L340.23,297.54L344.4,306.45L344.4,301.82L344.28,301.46z"
+ android:strokeColor="#00000000" android:strokeLineCap="butt"
+ android:strokeLineJoin="miter" android:strokeWidth="0.1"/>
+ <path android:fillType="nonZero"
+ android:pathData="M332.2,276.8C322.77,259.41 314.67,246.97 301.16,234.34C296.82,230.28 292.7,226.65 288.41,223.39L288.42,223.39C288.42,223.39 288.39,223.37 288.32,223.32C288.25,223.27 288.17,223.21 288.09,223.15C286.5,221.92 279.75,216.24 282.15,209.97C284.78,203.09 299.6,200.01 299.6,200.01C299.6,200.01 292.34,197.54 279.62,198.36C267.69,199.12 256.97,206.1 254.96,207.08C248.54,205.24 241.21,203.62 232.63,202.17C202.97,197.13 177.87,205.15 165.27,213.9C148.76,225.36 149.22,236.03 147.86,241.38C146.88,245.22 136.92,252.85 140.3,257.01C142.41,259.61 149.44,256.08 155.11,253.75C161.07,251.3 161.53,249.96 177.83,247.53C185.32,246.42 193.21,246.09 199.08,246.05C201.37,250.87 207.05,260.79 216.9,265.55C230.19,271.97 246.8,271.89 246.8,271.89C246.8,271.89 237.25,267.93 231.38,262.06C227.39,258.06 226.43,251.99 226.23,248.52L226.26,248.53C235.88,250.35 244.29,251.67 264.38,259.37C281.96,266.1 293.97,275.9 293.97,275.9C293.97,275.9 281.62,260.5 260.78,250.22C243.67,241.78 229.63,237.61 210.16,236.67C188.89,235.63 173.21,238.37 173.21,238.37C173.21,238.37 173.65,228.91 189.71,221.38C203.68,214.83 225.65,213.73 250.87,220.16C286.49,229.25 298.64,244.73 313.97,260.72C330.28,277.74 344.38,306.39 344.38,306.39C344.38,306.39 340.03,291.25 332.2,276.8z"
+ android:strokeColor="#00000000" android:strokeLineCap="butt"
+ android:strokeLineJoin="miter" android:strokeWidth="0.1">
+ <aapt:attr name="android:fillColor">
+ <gradient android:endX="139.6" android:endY="306.4"
+ android:startX="139.6" android:startY="198.2" android:type="linear">
+ <item android:color="#FF46D4FF" android:offset="0"/>
+ <item android:color="#FF1792FF" android:offset="1"/>
+ </gradient>
+ </aapt:attr>
+ </path>
+</vector>
diff --git a/Source/Android/app/src/main/res/drawable/ic_info_tv.xml b/Source/Android/app/src/main/res/drawable/ic_info_tv.xml
new file mode 100644
index 0000000000..6fa3a6c4f0
--- /dev/null
+++ b/Source/Android/app/src/main/res/drawable/ic_info_tv.xml
@@ -0,0 +1,10 @@
+<vector
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportHeight="24"
+ android:viewportWidth="24">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z" />
+</vector>
diff --git a/Source/Android/app/src/main/res/layout-w600dp/dialog_about.xml b/Source/Android/app/src/main/res/layout-w600dp/dialog_about.xml
new file mode 100644
index 0000000000..03006aa7cc
--- /dev/null
+++ b/Source/Android/app/src/main/res/layout-w600dp/dialog_about.xml
@@ -0,0 +1,171 @@
+<?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:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.appcompat.widget.LinearLayoutCompat
+ android:id="@+id/about_sheet"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <androidx.core.widget.NestedScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+ android:id="@+id/bottomSheetDragHandleView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <ImageView
+ android:id="@+id/dolphin_logo"
+ android:layout_width="192dp"
+ android:layout_height="192dp"
+ android:layout_marginStart="@dimen/spacing_xtralarge"
+ android:clickable="true"
+ android:contentDescription="@string/about_dolphin_image"
+ android:focusable="true"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/about_linear_layout"
+ app:srcCompat="@drawable/ic_dolphin" />
+
+ <androidx.appcompat.widget.LinearLayoutCompat
+ android:id="@+id/about_linear_layout"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="@dimen/spacing_xtralarge"
+ android:layout_marginBottom="@dimen/spacing_large"
+ android:orientation="vertical"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/dolphin_logo"
+ app:layout_constraintTop_toBottomOf="@+id/bottomSheetDragHandleView">
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/name_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/about_dolphin"
+ android:textAppearance="@style/TextAppearance.AppCompat.Display3"
+ android:textColor="?attr/colorOnSurface" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/version_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:textAppearance="@style/TextAppearance.AppCompat.Large"
+ android:textColor="?attr/colorOnSurface"
+ android:textIsSelectable="true"
+ tools:text="5.0-XXXXX" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/branch_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:textColor="?attr/colorOnSurface"
+ android:textIsSelectable="true"
+ tools:text="Branch:\nmaster" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/revision_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:textColor="?attr/colorOnSurface"
+ android:textIsSelectable="true"
+ tools:text="Revision:\nf4f94396e94dad9cd4d7d7fb6defa096966a4ab8" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/about_dolphin_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:text="@string/about_dolphin_description"
+ android:textColor="?attr/colorOnSurface" />
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large">
+
+ <com.google.android.material.divider.MaterialDivider
+ android:id="@+id/divider_1"
+ android:layout_width="1dp"
+ android:layout_height="0dp"
+ android:focusable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/github_text"
+ app:layout_constraintStart_toEndOf="@+id/website_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <com.google.android.material.divider.MaterialDivider
+ android:id="@+id/divider_2"
+ android:layout_width="1dp"
+ android:layout_height="0dp"
+ android:focusable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/support_text"
+ app:layout_constraintStart_toEndOf="@+id/github_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/website_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/about_website"
+ android:textColor="?attr/colorOnSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/github_text"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/github_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/about_github"
+ android:textColor="?attr/colorOnSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/support_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/about_support"
+ android:textColor="?attr/colorOnSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/github_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ </androidx.appcompat.widget.LinearLayoutCompat>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ </androidx.core.widget.NestedScrollView>
+
+ </androidx.appcompat.widget.LinearLayoutCompat>
+
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/Source/Android/app/src/main/res/layout-w600dp/dialog_about_tv.xml b/Source/Android/app/src/main/res/layout-w600dp/dialog_about_tv.xml
new file mode 100644
index 0000000000..18da059c5f
--- /dev/null
+++ b/Source/Android/app/src/main/res/layout-w600dp/dialog_about_tv.xml
@@ -0,0 +1,168 @@
+<?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:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/dolphin_surface">
+
+ <androidx.appcompat.widget.LinearLayoutCompat
+ android:id="@+id/about_sheet"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <androidx.core.widget.NestedScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ImageView
+ android:id="@+id/dolphin_logo"
+ android:layout_width="192dp"
+ android:layout_height="192dp"
+ android:layout_marginStart="@dimen/spacing_xtralarge"
+ android:clickable="true"
+ android:contentDescription="@string/about_dolphin_image"
+ android:focusable="true"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/about_linear_layout" />
+
+ <androidx.appcompat.widget.LinearLayoutCompat
+ android:id="@+id/about_linear_layout"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="@dimen/spacing_xtralarge"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:paddingBottom="@dimen/spacing_large"
+ android:orientation="vertical"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/dolphin_logo"
+ app:layout_constraintTop_toTopOf="parent">
+
+ <TextView
+ android:id="@+id/name_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:focusable="false"
+ android:text="@string/about_dolphin"
+ android:textAppearance="@style/TextAppearance.AppCompat.Display3"
+ android:textColor="@color/dolphin_onSurface" />
+
+ <TextView
+ android:id="@+id/version_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:textAppearance="@style/TextAppearance.AppCompat.Large"
+ android:textColor="@color/dolphin_onSurface"
+ android:textIsSelectable="true"
+ tools:text="5.0-XXXXX" />
+
+ <TextView
+ android:id="@+id/branch_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:textColor="@color/dolphin_onSurface"
+ android:textIsSelectable="true"
+ tools:text="Branch:\nmaster" />
+
+ <TextView
+ android:id="@+id/revision_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:textColor="@color/dolphin_onSurface"
+ android:textIsSelectable="true"
+ tools:text="Revision:\nf4f94396e94dad9cd4d7d7fb6defa096966a4ab8" />
+
+ <TextView
+ android:id="@+id/about_dolphin_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:text="@string/about_dolphin_description"
+ android:textColor="@color/dolphin_onSurface" />
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large">
+
+ <TextView
+ android:id="@+id/website_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/about_website"
+ android:textColor="@color/dolphin_onSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/github_text"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/github_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/about_github"
+ android:textColor="@color/dolphin_onSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/support_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/about_support"
+ android:textColor="@color/dolphin_onSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/github_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+ <View
+ android:id="@+id/divider_2"
+ android:layout_width="1dp"
+ android:layout_height="0dp"
+ android:background="@color/dolphin_onSurface"
+ android:focusable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/support_text"
+ app:layout_constraintStart_toEndOf="@+id/github_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <View
+ android:id="@+id/divider_1"
+ android:layout_width="1dp"
+ android:layout_height="0dp"
+ android:background="@color/dolphin_onSurface"
+ android:focusable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/github_text"
+ app:layout_constraintStart_toEndOf="@+id/website_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ </androidx.appcompat.widget.LinearLayoutCompat>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ </androidx.core.widget.NestedScrollView>
+
+ </androidx.appcompat.widget.LinearLayoutCompat>
+
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/Source/Android/app/src/main/res/layout/dialog_about.xml b/Source/Android/app/src/main/res/layout/dialog_about.xml
new file mode 100644
index 0000000000..6af5c19ab9
--- /dev/null
+++ b/Source/Android/app/src/main/res/layout/dialog_about.xml
@@ -0,0 +1,169 @@
+<?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:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.appcompat.widget.LinearLayoutCompat
+ android:id="@+id/about_sheet"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <androidx.core.widget.NestedScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <androidx.appcompat.widget.LinearLayoutCompat
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingBottom="24dp"
+ android:paddingHorizontal="24dp"
+ android:orientation="vertical">
+
+ <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal" />
+
+ <ImageView
+ android:id="@+id/dolphin_logo"
+ android:layout_width="132dp"
+ android:layout_height="132dp"
+ android:focusable="true"
+ android:clickable="true"
+ android:contentDescription="@string/about_dolphin_image"
+ android:layout_gravity="center_horizontal"
+ app:srcCompat="@drawable/ic_dolphin" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/name_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:text="@string/about_dolphin"
+ android:textAppearance="@style/TextAppearance.AppCompat.Display3"
+ android:textColor="?attr/colorOnSurface"
+ android:layout_gravity="center_horizontal" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/version_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:gravity="center_horizontal"
+ android:textAppearance="@style/TextAppearance.AppCompat.Large"
+ android:textColor="?attr/colorOnSurface"
+ android:textIsSelectable="true"
+ android:layout_gravity="center_horizontal"
+ tools:text="5.0-XXXXX" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/branch_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:gravity="center_horizontal"
+ android:textColor="?attr/colorOnSurface"
+ android:textIsSelectable="true"
+ android:layout_gravity="center_horizontal"
+ tools:text="Branch:\nmaster" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/revision_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:gravity="center_horizontal"
+ android:textColor="?attr/colorOnSurface"
+ android:textIsSelectable="true"
+ tools:text="Revision:\nf4f94396e94dad9cd4d7d7fb6defa096966a4ab8" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/about_dolphin_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:gravity="center_horizontal"
+ android:text="@string/about_dolphin_description"
+ android:textColor="?attr/colorOnSurface"
+ android:focusable="false"
+ android:layout_gravity="center_horizontal" />
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large">
+
+ <com.google.android.material.divider.MaterialDivider
+ android:id="@+id/divider_1"
+ android:layout_width="1dp"
+ android:layout_height="0dp"
+ android:layout_gravity="center_horizontal"
+ android:focusable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/github_text"
+ app:layout_constraintStart_toEndOf="@+id/website_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <com.google.android.material.divider.MaterialDivider
+ android:id="@+id/divider_2"
+ android:layout_width="1dp"
+ android:layout_height="0dp"
+ android:layout_gravity="center_horizontal"
+ android:focusable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/support_text"
+ app:layout_constraintStart_toEndOf="@+id/github_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/website_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:text="@string/about_website"
+ android:textColor="?attr/colorOnSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/github_text"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/github_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/about_github"
+ android:textColor="?attr/colorOnSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <com.google.android.material.textview.MaterialTextView
+ android:id="@+id/support_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/about_support"
+ android:textColor="?attr/colorOnSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/github_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ </androidx.appcompat.widget.LinearLayoutCompat>
+
+ </androidx.core.widget.NestedScrollView>
+
+ </androidx.appcompat.widget.LinearLayoutCompat>
+
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/Source/Android/app/src/main/res/layout/dialog_about_tv.xml b/Source/Android/app/src/main/res/layout/dialog_about_tv.xml
new file mode 100644
index 0000000000..0282005ca7
--- /dev/null
+++ b/Source/Android/app/src/main/res/layout/dialog_about_tv.xml
@@ -0,0 +1,170 @@
+<?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:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/dolphin_surface">
+
+ <androidx.appcompat.widget.LinearLayoutCompat
+ android:id="@+id/about_sheet"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <androidx.core.widget.NestedScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <androidx.appcompat.widget.LinearLayoutCompat
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingBottom="24dp"
+ android:paddingHorizontal="24dp">
+
+ <ImageView
+ android:id="@+id/dolphin_logo"
+ android:layout_width="132dp"
+ android:layout_height="132dp"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:background="?attr/selectableItemBackground"
+ android:clickable="true"
+ android:contentDescription="@string/about_dolphin_image"
+ android:focusable="true" />
+
+ <TextView
+ android:id="@+id/name_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:focusable="false"
+ android:gravity="center_horizontal"
+ android:text="@string/about_dolphin"
+ android:textAppearance="@style/TextAppearance.AppCompat.Display3"
+ android:textColor="@color/dolphin_onSurface" />
+
+ <TextView
+ android:id="@+id/version_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:gravity="center_horizontal"
+ android:textAppearance="@style/TextAppearance.AppCompat.Large"
+ android:textColor="@color/dolphin_onSurface"
+ android:textIsSelectable="true"
+ tools:text="5.0-XXXXX" />
+
+ <TextView
+ android:id="@+id/branch_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:gravity="center_horizontal"
+ android:textColor="@color/dolphin_onSurface"
+ android:textIsSelectable="true"
+ tools:text="Branch:\nmaster" />
+
+ <TextView
+ android:id="@+id/revision_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:gravity="center_horizontal"
+ android:textColor="@color/dolphin_onSurface"
+ android:textIsSelectable="true"
+ tools:text="Revision:\nf4f94396e94dad9cd4d7d7fb6defa096966a4ab8" />
+
+ <TextView
+ android:id="@+id/about_dolphin_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/spacing_large"
+ android:focusable="false"
+ android:gravity="center_horizontal"
+ android:text="@string/about_dolphin_description"
+ android:textColor="@color/dolphin_onSurface" />
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacing_large">
+
+ <TextView
+ android:id="@+id/website_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:text="@string/about_website"
+ android:textColor="@color/dolphin_onSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/github_text"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/github_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/about_github"
+ android:textColor="@color/dolphin_onSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/support_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/about_support"
+ android:textColor="@color/dolphin_onSurface"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/github_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <View
+ android:id="@+id/divider_2"
+ android:layout_width="1dp"
+ android:layout_height="0dp"
+ android:layout_gravity="center_horizontal"
+ android:background="@color/dolphin_onSurface"
+ android:focusable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/support_text"
+ app:layout_constraintStart_toEndOf="@+id/github_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <View
+ android:id="@+id/divider_1"
+ android:layout_width="1dp"
+ android:layout_height="0dp"
+ android:layout_gravity="center_horizontal"
+ android:background="@color/dolphin_onSurface"
+ android:focusable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/github_text"
+ app:layout_constraintStart_toEndOf="@+id/website_text"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ </androidx.appcompat.widget.LinearLayoutCompat>
+
+ </androidx.core.widget.NestedScrollView>
+
+ </androidx.appcompat.widget.LinearLayoutCompat>
+
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/Source/Android/app/src/main/res/layout/tv_title.xml b/Source/Android/app/src/main/res/layout/tv_title.xml
index 29786d47f5..ebcb9acfbf 100644
--- a/Source/Android/app/src/main/res/layout/tv_title.xml
+++ b/Source/Android/app/src/main/res/layout/tv_title.xml
@@ -25,7 +25,7 @@
android:id="@+id/badge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:src="@drawable/ic_dolphin"/>
+ android:src="@drawable/ic_dolphin_launcher"/>
</RelativeLayout>
</androidx.leanback.widget.TitleView>
diff --git a/Source/Android/app/src/main/res/menu/menu_game_grid.xml b/Source/Android/app/src/main/res/menu/menu_game_grid.xml
index 47c551a51a..0e265097fb 100644
--- a/Source/Android/app/src/main/res/menu/menu_game_grid.xml
+++ b/Source/Android/app/src/main/res/menu/menu_game_grid.xml
@@ -50,6 +50,10 @@
android:id="@+id/menu_online_system_update"
android:title="@string/grid_menu_online_system_update"
app:showAsAction="never"/>
- <group />
+
+ <item
+ android:id="@+id/menu_about"
+ android:title="@string/grid_menu_about"
+ app:showAsAction="never"/>
</menu>
diff --git a/Source/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/Source/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index 202cd6f5ee..fefddc12df 100644
--- a/Source/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/Source/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
- <foreground android:drawable="@drawable/ic_dolphin"/>
+ <foreground android:drawable="@drawable/ic_dolphin_launcher"/>
<monochrome android:drawable="@drawable/ic_dolphin_silhouette"/>
</adaptive-icon> \ No newline at end of file
diff --git a/Source/Android/app/src/main/res/values-notouch/bools.xml b/Source/Android/app/src/main/res/values-notouch/bools.xml
new file mode 100644
index 0000000000..c0b732c323
--- /dev/null
+++ b/Source/Android/app/src/main/res/values-notouch/bools.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <bool name="hasTouch">false</bool>
+</resources>
diff --git a/Source/Android/app/src/main/res/values/bools.xml b/Source/Android/app/src/main/res/values/bools.xml
new file mode 100644
index 0000000000..758a374559
--- /dev/null
+++ b/Source/Android/app/src/main/res/values/bools.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <bool name="hasTouch">true</bool>
+</resources>
diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml
index 7d99d030f0..6e45236228 100644
--- a/Source/Android/app/src/main/res/values/strings.xml
+++ b/Source/Android/app/src/main/res/values/strings.xml
@@ -461,6 +461,7 @@
<string name="grid_menu_load_wii_system_menu">Load Wii System Menu</string>
<string name="grid_menu_load_wii_system_menu_installed">Load Wii System Menu (%s)</string>
<string name="grid_menu_load_vwii_system_menu_installed">Load vWii System Menu (%s)</string>
+ <string name="grid_menu_about">About</string>
<string name="import_in_progress">Importing…</string>
<string name="export_in_progress">Exporting…</string>
<string name="do_not_close_app">Do not close the app!</string>
@@ -858,4 +859,16 @@ It can efficiently compress both junk data and encrypted Wii data.
<string name="compression_lzma2">LZMA2 (slow)</string>
<string name="compression_zstandard">Zstandard (recommended)</string>
+ <!-- About dialog -->
+ <string name="about_dolphin">Dolphin</string>
+ <string name="wark">WARK WARK WARK</string>
+ <string name="about_dolphin_image">Dolphin logo</string>
+ <string name="about_branch">Branch:\n%s</string>
+ <string name="about_revision">Revision:\n%s</string>
+ <string name="about_dolphin_description">Dolphin is a free and open-source GameCube and Wii emulator.\n\nThis software should not be used to play games you do not legally own.</string>
+ <string name="about_website"><a href="https://dolphin-emu.org/">Website</a></string>
+ <string name="about_github"><a href="https://github.com/dolphin-emu/dolphin">GitHub</a></string>
+ <string name="about_support"><a href="https://forums.dolphin-emu.org/">Support</a></string>
+ <string name="about_copyright_warning">\u00A9 2003–2015+ Dolphin Team. \u201cGameCube\u201d and \u201cWii\u201d are trademarks of Nintendo. Dolphin is not affiliated with Nintendo in any way.</string>
+
</resources>
diff --git a/Source/Android/app/src/main/res/values/themes.xml b/Source/Android/app/src/main/res/values/themes.xml
index 3a361c693c..e2e24397b9 100644
--- a/Source/Android/app/src/main/res/values/themes.xml
+++ b/Source/Android/app/src/main/res/values/themes.xml
@@ -2,13 +2,13 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.Dolphin.Splash.Main" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/dolphin_surface</item>
- <item name="windowSplashScreenAnimatedIcon">@drawable/ic_dolphin</item>
+ <item name="windowSplashScreenAnimatedIcon">@drawable/ic_dolphin_launcher</item>
<item name="postSplashScreenTheme">@style/Theme.Dolphin.Main</item>
</style>
<style name="Theme.Dolphin.Splash.TV" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/dolphin_surface</item>
- <item name="windowSplashScreenAnimatedIcon">@drawable/ic_dolphin</item>
+ <item name="windowSplashScreenAnimatedIcon">@drawable/ic_dolphin_launcher</item>
<item name="postSplashScreenTheme">@style/Theme.Dolphin.TV</item>
</style>