diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/timestamps/fingerprints/TimeStampsContainerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/timestamps/fingerprints/TimeStampsContainerFingerprint.kt new file mode 100644 index 000000000..992588262 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/timestamps/fingerprints/TimeStampsContainerFingerprint.kt @@ -0,0 +1,16 @@ +package app.revanced.patches.youtube.layout.seekbar.timestamps.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.patches.youtube.misc.resourceid.patch.SharedResourcdIdPatch +import org.jf.dexlib2.Opcode +import org.jf.dexlib2.iface.instruction.WideLiteralInstruction + +object TimeStampsContainerFingerprint : MethodFingerprint( + returnType = "V", + customFingerprint = { methodDef -> + methodDef.implementation?.instructions?.any { + it.opcode.ordinal == Opcode.CONST.ordinal && + (it as? WideLiteralInstruction)?.wideLiteral == SharedResourcdIdPatch.timeStampsContainerLabelId + } == true + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/timestamps/patch/HideTimeStampPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/timestamps/patch/HideTimeStampPatch.kt new file mode 100644 index 000000000..bdcb1be01 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/timestamps/patch/HideTimeStampPatch.kt @@ -0,0 +1,66 @@ +package app.revanced.patches.youtube.layout.seekbar.timestamps.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.extensions.instruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.shared.annotation.YouTubeCompatibility +import app.revanced.patches.youtube.layout.seekbar.timestamps.fingerprints.TimeStampsContainerFingerprint +import app.revanced.patches.youtube.misc.resourceid.patch.SharedResourcdIdPatch +import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch +import app.revanced.util.integrations.Constants.SEEKBAR_LAYOUT + +@Patch +@Name("hide-time-stamp") +@Description("Hides the time counter above the seekbar.") +@DependsOn( + [ + SettingsPatch::class, + SharedResourcdIdPatch::class + ] +) +@YouTubeCompatibility +@Version("0.0.1") +class HideTimeStampPatch : BytecodePatch( + listOf( + TimeStampsContainerFingerprint + ) +) { + override fun execute(context: BytecodeContext): PatchResult { + + TimeStampsContainerFingerprint.result?.mutableMethod?.let { + it.addInstructions( + 0, """ + invoke-static {}, $SEEKBAR_LAYOUT->hideTimeStamp()Z + move-result v0 + if-eqz v0, :show_time_stamp + return-void + """, listOf(ExternalLabel("show_time_stamp", it.instruction(0))) + ) + } ?: return TimeStampsContainerFingerprint.toErrorResult() + + /* + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE: OTHER_LAYOUT_SETTINGS", + "PREFERENCE_HEADER: SEEKBAR", + "SETTINGS: HIDE_TIME_STAMP" + ) + ) + + SettingsPatch.updatePatchStatus("hide-time-stamp") + + return PatchResultSuccess() + } +} diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index a8c0eea2a..4fb82a9e2 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -287,6 +287,8 @@ + @@ -422,6 +424,7 @@ +