@@ -10,7 +10,10 @@ import io.github.chsbuffer.revancedxposed.fingerprint
1010import io.github.chsbuffer.revancedxposed.youtube.shared.videoQualityChangedFingerprint
1111import org.luckypray.dexkit.query.enums.OpCodeMatchType
1212import org.luckypray.dexkit.query.enums.UsingType
13+ import org.luckypray.dexkit.result.ClassData
14+ import org.luckypray.dexkit.result.FieldData
1315import org.luckypray.dexkit.result.FieldUsingType
16+ import org.luckypray.dexkit.result.MethodData
1417
1518@get:SkipTest
1619val createVideoPlayerSeekbarFingerprint = fingerprint {
@@ -34,25 +37,35 @@ val onPlaybackSpeedItemClickFingerprint = fingerprint {
3437 }
3538}
3639
40+ private fun findFieldUsedByType (method : MethodData , fieldType : ClassData ): FieldData {
41+ val fields = method.usingFields.distinct()
42+ fields.singleOrNull {
43+ it.field.typeName == fieldType.name
44+ }?.let { return it.field }
45+
46+ val interfaceNames = fieldType.interfaces.map { it.name }.toSet()
47+ return fields.single {
48+ it.field.typeName in interfaceNames
49+ }.field
50+ }
51+
3752val setPlaybackSpeedMethodReference = findMethodDirect {
3853 onPlaybackSpeedItemClickFingerprint().invokes.findMethod { matcher { paramTypes(" float" ) } }
3954 .single()
4055}
4156
42- val setPlaybackSpeedClass = findClassDirect {
43- setPlaybackSpeedMethodReference().declaredClass!!
44- }
57+ val setPlaybackSpeedClass = findClassDirect { setPlaybackSpeedMethodReference().declaredClass!! }
4558
4659val setPlaybackSpeedClassFieldReference = findFieldDirect {
47- val setPlaybackSpeedClassName = setPlaybackSpeedClass().name
48- onPlaybackSpeedItemClickFingerprint().usingFields.distinct ()
49- .single { it.field.typeName == setPlaybackSpeedClassName }.field
60+ findFieldUsedByType(
61+ onPlaybackSpeedItemClickFingerprint(), setPlaybackSpeedClass ()
62+ )
5063}
5164
5265val setPlaybackSpeedContainerClassFieldReference = findFieldDirect {
53- val setPlaybackSpeedContainerClassName = setPlaybackSpeedClassFieldReference().declaredClassName
54- onPlaybackSpeedItemClickFingerprint().usingFields.distinct()
55- .single { it.field.typeName == setPlaybackSpeedContainerClassName }.field
66+ findFieldUsedByType(
67+ onPlaybackSpeedItemClickFingerprint(), setPlaybackSpeedClassFieldReference().declaredClass
68+ )
5669}
5770
5871val playerControllerSetTimeReferenceFingerprint = fingerprint {
@@ -200,8 +213,7 @@ private val videoQualityFingerprint = fingerprint {
200213 parameters(
201214 " I" , // Resolution.
202215 " Ljava/lang/String;" , // Human readable resolution: "480p", "1080p Premium", etc
203- " Z" ,
204- " L"
216+ " Z" , " L"
205217 )
206218// custom { _, classDef ->
207219// classDef.type == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE
0 commit comments