feat(YouTube/Seekbar components): add Enable Cairo seekbar settings (YouTube 19.23.40+) https://github.com/inotia00/ReVanced_Extended/issues/2178

This commit is contained in:
inotia00
2024-06-23 14:24:11 +09:00
parent 22aa0f353e
commit 0cb3f0f9db
4 changed files with 42 additions and 17 deletions

View File

@ -8,6 +8,7 @@ import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.shared.drawable.DrawableColorPatch
import app.revanced.patches.youtube.player.seekbar.fingerprints.CairoSeekbarConfigFingerprint
import app.revanced.patches.youtube.player.seekbar.fingerprints.ControlsOverlayStyleFingerprint
import app.revanced.patches.youtube.player.seekbar.fingerprints.SeekbarTappingFingerprint
import app.revanced.patches.youtube.player.seekbar.fingerprints.ShortsSeekbarColorFingerprint
@ -58,6 +59,7 @@ object SeekbarComponentsPatch : BaseBytecodePatch(
),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(
CairoSeekbarConfigFingerprint,
ControlsOverlayStyleFingerprint,
PlayerButtonsResourcesFingerprint,
PlayerSeekbarColorFingerprint,
@ -71,6 +73,11 @@ object SeekbarComponentsPatch : BaseBytecodePatch(
) {
override fun execute(context: BytecodeContext) {
var settingArray = arrayOf(
"PREFERENCE_SCREEN: PLAYER",
"SETTINGS: SEEKBAR_COMPONENTS"
)
// region patch for enable seekbar tapping patch
SeekbarTappingFingerprint.resultOrThrow().let {
@ -132,7 +139,8 @@ object SeekbarComponentsPatch : BaseBytecodePatch(
TotalTimeFingerprint.resultOrThrow().let {
it.mutableMethod.apply {
val charSequenceIndex = getTargetIndexWithMethodReferenceNameOrThrow("getString") + 1
val charSequenceIndex =
getTargetIndexWithMethodReferenceNameOrThrow("getString") + 1
val charSequenceRegister =
getInstruction<OneRegisterInstruction>(charSequenceIndex).registerA
val textViewIndex = getTargetIndexWithMethodReferenceNameOrThrow("getText")
@ -268,30 +276,29 @@ object SeekbarComponentsPatch : BaseBytecodePatch(
"$PLAYER_CLASS_DESCRIPTOR->restoreOldSeekbarThumbnails()Z"
)
/**
* Add settings
*/
SettingsPatch.addPreference(
arrayOf(
"PREFERENCE_SCREEN: PLAYER",
"SETTINGS: SEEKBAR_COMPONENTS",
"SETTINGS: RESTORE_OLD_SEEKBAR_THUMBNAILS"
)
)
settingArray += "SETTINGS: RESTORE_OLD_SEEKBAR_THUMBNAILS"
}
?: println("WARNING: Restore old seekbar thumbnails setting is not supported in this version. Use YouTube 19.16.39 or earlier.")
// endregion
// region patch for enable cairo seekbar
if (SettingsPatch.upward1923) {
CairoSeekbarConfigFingerprint.literalInstructionBooleanHook(
45617850,
"$PLAYER_CLASS_DESCRIPTOR->enableCairoSeekbar()Z"
)
settingArray += "SETTINGS: ENABLE_CAIRO_SEEKBAR"
}
// endregion
/**
* Add settings
*/
SettingsPatch.addPreference(
arrayOf(
"PREFERENCE_SCREEN: PLAYER",
"SETTINGS: SEEKBAR_COMPONENTS"
)
)
SettingsPatch.addPreference(settingArray)
SettingsPatch.updatePatchStatus(this)
}

View File

@ -0,0 +1,9 @@
package app.revanced.patches.youtube.player.seekbar.fingerprints
import app.revanced.util.fingerprint.LiteralValueFingerprint
internal object CairoSeekbarConfigFingerprint : LiteralValueFingerprint(
returnType = "Z",
parameters = emptyList(),
literalSupplier = { 45617850 }
)

View File

@ -924,6 +924,11 @@ Please download %2$s from the website."</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">Restore old seekbar thumbnails</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Seekbar thumbnails will appear above the seekbar.</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Seekbar thumbnails will appear in fullscreen.</string>
<string name="revanced_enable_cairo_seekbar_title">Enable Cairo seekbar</string>
<string name="revanced_enable_cairo_seekbar_summary_on">"Cairo seekbar is enabled.
Side effect: Cairo theme is also applied to notification dots."</string>
<string name="revanced_enable_cairo_seekbar_summary_off">Cairo seekbar is disabled.</string>
<!-- PreferenceScreen: Player, PreferenceCategory: Player, PreferenceScreen: Video description -->
<string name="revanced_preference_screen_video_description_title">Video description</string>

View File

@ -391,6 +391,10 @@
<!-- SETTINGS: RESTORE_OLD_SEEKBAR_THUMBNAILS
<SwitchPreference android:title="@string/revanced_restore_old_seekbar_thumbnails_title" android:key="revanced_restore_old_seekbar_thumbnails" android:summaryOn="@string/revanced_restore_old_seekbar_thumbnails_summary_on" android:summaryOff="@string/revanced_restore_old_seekbar_thumbnails_summary_off" />SETTINGS: RESTORE_OLD_SEEKBAR_THUMBNAILS -->
<!-- SETTINGS: ENABLE_CAIRO_SEEKBAR
<PreferenceCategory android:title="@string/revanced_preference_category_experimental_flag" android:layout="@layout/revanced_settings_preferences_category"/>
<SwitchPreference android:title="@string/revanced_enable_cairo_seekbar_title" android:key="revanced_enable_cairo_seekbar" android:summaryOn="@string/revanced_enable_cairo_seekbar_summary_on" android:summaryOff="@string/revanced_enable_cairo_seekbar_summary_off" />SETTINGS: ENABLE_CAIRO_SEEKBAR -->
<!-- SETTINGS: SEEKBAR_COMPONENTS
</PreferenceScreen>SETTINGS: SEEKBAR_COMPONENTS -->