Skip to content

Commit f7fcde6

Browse files
committed
YouTube: Fix SponsorBlock on Android 9 and older
On Android versions older than R (Android 10), the `drawCircle` method is located in `android.view.DisplayListCanvas` instead of `android.graphics.RecordingCanvas`.
1 parent 191539e commit f7fcde6

File tree

1 file changed

+8
-2
lines changed
  • app/src/main/java/io/github/chsbuffer/revancedxposed/youtube/layout/sponsorblock

1 file changed

+8
-2
lines changed

app/src/main/java/io/github/chsbuffer/revancedxposed/youtube/layout/sponsorblock/SponsorBlockPatch.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.github.chsbuffer.revancedxposed.youtube.layout.sponsorblock
22

33
import android.graphics.Canvas
44
import android.graphics.Rect
5+
import android.os.Build
56
import android.view.ViewGroup
67
import app.revanced.extension.shared.Utils
78
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController
@@ -81,6 +82,11 @@ fun YoutubeHook.SponsorBlock() {
8182
SegmentPlaybackController.setSponsorBarRect(sponsorBarRectField.get(param.thisObject) as Rect)
8283
}
8384
}
85+
val drawCircle =
86+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
87+
"Landroid/view/DisplayListCanvas;->drawCircle(FFFLandroid/graphics/Paint;)V"
88+
else
89+
"Landroid/graphics/RecordingCanvas;->drawCircle(FFFLandroid/graphics/Paint;)V"
8490
::seekbarOnDrawFingerprint.hookMethod(
8591
scopedHook(
8692
// Set the thickness of the segment.
@@ -93,7 +99,7 @@ fun YoutubeHook.SponsorBlock() {
9399
}
94100
},
95101
// Find the drawCircle call and draw the segment before it.
96-
DexMethod("Landroid/graphics/RecordingCanvas;->drawCircle(FFFLandroid/graphics/Paint;)V").toMethod() to {
102+
DexMethod(drawCircle).toMethod() to {
97103
before { param ->
98104
SegmentPlaybackController.drawSponsorTimeBars(
99105
param.thisObject as Canvas, param.args[1] as Float
@@ -141,7 +147,7 @@ fun YoutubeHook.SponsorBlock() {
141147
}
142148
})
143149

144-
::adProgressTextViewVisibilityFingerprint.hookMethod(scopedHook(::AdProgressTextVisibility.method){
150+
::adProgressTextViewVisibilityFingerprint.hookMethod(scopedHook(::AdProgressTextVisibility.method) {
145151
before {
146152
SegmentPlaybackController.setAdProgressTextVisibility(it.args[0] as Int)
147153
}

0 commit comments

Comments
 (0)