fix(YouTube/Remove viewer discretion dialog): Remove viewer discretion dialog settings close unintended dialog

This commit is contained in:
inotia00 2023-12-31 08:01:22 +09:00
parent bca9ca9570
commit 3b69d92980
3 changed files with 13 additions and 7 deletions

View File

@ -21,20 +21,26 @@ abstract class AbstractRemoveViewerDiscretionDialogPatch(
additionalFingerprints.let(::addAll)
}
) {
private fun MutableMethod.invoke() {
private fun MutableMethod.invoke(isAgeVerified: Boolean) {
val showDialogIndex = implementation!!.instructions.indexOfFirst { instruction ->
((instruction as? ReferenceInstruction)?.reference as? MethodReference)?.name == "show"
}
val dialogRegister = getInstruction<FiveRegisterInstruction>(showDialogIndex).registerC
val methodName =
if (isAgeVerified)
"confirmDialogAgeVerified"
else
"confirmDialog"
addInstruction(
showDialogIndex + 1,
"invoke-static { v$dialogRegister }, $classDescriptor->confirmDialog(Landroid/app/AlertDialog;)V",
"invoke-static { v$dialogRegister }, $classDescriptor->$methodName(Landroid/app/AlertDialog;)V"
)
}
override fun execute(context: BytecodeContext) {
CreateDialogFingerprint.result?.mutableMethod?.invoke()
CreateDialogFingerprint.result?.mutableMethod?.invoke(false)
?: throw CreateDialogFingerprint.exception
if (additionalFingerprints.isNotEmpty()) {
@ -44,7 +50,7 @@ abstract class AbstractRemoveViewerDiscretionDialogPatch(
.nextMethod(it.scanResult.patternScanResult!!.endIndex - 1, true)
.getMethod() as MutableMethod
targetMethod.invoke()
targetMethod.invoke(true)
} ?: throw fingerprint.exception
}
}

View File

@ -4,7 +4,7 @@ import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.shared.patch.dialog.AbstractRemoveViewerDiscretionDialogPatch
import app.revanced.patches.youtube.general.dialog.fingerprints.AgeRestrictionFingerprint
import app.revanced.patches.youtube.general.dialog.fingerprints.AgeVerifiedFingerprint
import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL
import app.revanced.patches.youtube.utils.settings.SettingsPatch
@ -43,7 +43,7 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch
@Suppress("unused")
object RemoveViewerDiscretionDialogPatch : AbstractRemoveViewerDiscretionDialogPatch(
GENERAL,
setOf(AgeRestrictionFingerprint)
setOf(AgeVerifiedFingerprint)
) {
override fun execute(context: BytecodeContext) {
super.execute(context)

View File

@ -5,7 +5,7 @@ import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
object AgeRestrictionFingerprint : MethodFingerprint(
object AgeVerifiedFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("L", "Ljava/util/Map;"),