diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofClientPatch.kt
index 1c097fa49e..f9ad8dd766 100644
--- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofClientPatch.kt
+++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofClientPatch.kt
@@ -14,6 +14,8 @@ import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.all.misc.resources.AddResourcesPatch
+import app.revanced.patches.shared.misc.settings.preference.ListPreference
+import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.backgroundplayback.BackgroundPlaybackPatch
@@ -118,9 +120,16 @@ object SpoofClientPatch : BytecodePatch(
sorting = PreferenceScreen.Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_spoof_client"),
- SwitchPreference("revanced_spoof_client_use_ios"),
- ),
- ),
+ ListPreference("revanced_spoof_client_type",
+ summaryKey = null,
+ entriesKey = "revanced_spoof_client_type_entries",
+ entryValuesKey = "revanced_spoof_client_type_entry_values"
+ ),
+ SwitchPreference("revanced_spoof_client_ios_force_avc"),
+ NonInteractivePreference("revanced_spoof_client_about_android_ios"),
+ NonInteractivePreference("revanced_spoof_client_about_android_vr")
+ )
+ )
)
// region Block /initplayback requests to fall back to /get_watch requests.
diff --git a/src/main/resources/addresources/values/arrays.xml b/src/main/resources/addresources/values/arrays.xml
index f8f2b42183..f1700555f4 100644
--- a/src/main/resources/addresources/values/arrays.xml
+++ b/src/main/resources/addresources/values/arrays.xml
@@ -97,6 +97,18 @@
- END
+
+
+
+ - iOS
+ - Android VR
+
+
+
+ - IOS
+ - ANDROID_VR
+
+
- @string/revanced_video_quality_default_entry_1
diff --git a/src/main/resources/addresources/values/strings.xml b/src/main/resources/addresources/values/strings.xml
index 863f956c08..a696e7a4ba 100644
--- a/src/main/resources/addresources/values/strings.xml
+++ b/src/main/resources/addresources/values/strings.xml
@@ -1138,9 +1138,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
Client is spoofed
Client is not spoofed\n\nVideo playback may not work
Turning off this setting may cause video playback issues.
- Spoof client to iOS
- Client is currently spoofed to iOS\n\nSide effects include:\n• HDR video may not be available\n• Watch history does not work with a brand account
- Client is currently spoofed to Android VR\n\nSide effects include:\n• No HDR video\n• Kids videos do not playback\n• Paused videos can randomly resume\n• Low quality Shorts seekbar thumbnails\n• Download action button is hidden\n• End screen cards are hidden
+ Spoof client type
+ Force iOS AVC (H.264)
+ iOS video codec is AVC
+ iOS video codec is AVC, VP9, or AV1
+ Enabling this might improve battery life and fix playback stuttering.\n\nAVC has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1.
+ iOS spoofing side effects
+ • HDR is supported only with AV1 codec\n• Watch history does not work with a brand account
+ Android VR spoofing side effects
+ • No HDR video\n• Kids videos do not playback\n• Paused videos can randomly resume\n• Low quality Shorts seekbar thumbnails\n• Download action button is hidden\n• End screen cards are hidden
Spoof client thumbnails not available (API timed out)
Spoof client thumbnails temporarily not available: %s