diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/updatescreen/UpdateScreenPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/updatescreen/UpdateScreenPatch.kt new file mode 100644 index 000000000..a98488657 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/updatescreen/UpdateScreenPatch.kt @@ -0,0 +1,79 @@ +package app.revanced.patches.youtube.misc.updatescreen + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.CompatiblePackage +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.youtube.misc.updatescreen.fingerprints.AppBlockingCheckResultToStringFingerprint +import app.revanced.patches.youtube.utils.integrations.Constants.MISC_PATH +import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.exception +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.util.MethodUtil + +@Patch( + name = "Disable update screen", + description = "Adds an option to disable the \"Update your app\" screen that appears when using an outdated client.", + dependencies = [SettingsPatch::class], + compatiblePackages = [ + CompatiblePackage( + "com.google.android.youtube", + [ + "18.25.40", + "18.27.36", + "18.29.38", + "18.30.37", + "18.31.40", + "18.32.39", + "18.33.40", + "18.34.38", + "18.35.36", + "18.36.39", + "18.37.36", + "18.38.44", + "18.39.41", + "18.40.34", + "18.41.39", + "18.42.41", + "18.43.45", + "18.44.41", + "18.45.43" + ] + ) + ] +) +@Suppress("unused") +object UpdateScreenPatch : BytecodePatch( + setOf(AppBlockingCheckResultToStringFingerprint) +) { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$MISC_PATH/UpdateScreenPatch;" + + override fun execute(context: BytecodeContext) { + AppBlockingCheckResultToStringFingerprint.result?.mutableClass?.methods?.first { method -> + MethodUtil.isConstructor(method) + && method.parameters == listOf("Landroid/content/Intent;", "Z") + }?.addInstructions( + 1, """ + invoke-static {}, $INTEGRATIONS_CLASS_DESCRIPTOR->disableUpdateScreen(Landroid/content/Intent;)Landroid/content/Intent; + move-result-object p1 + """ + ) ?: throw AppBlockingCheckResultToStringFingerprint.exception + + /** + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "SETTINGS: DISABLE_UPDATE_SCREEN" + ) + ) + + SettingsPatch.updatePatchStatus("Disable update screen") + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/updatescreen/fingerprints/AppBlockingCheckResultToStringFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/updatescreen/fingerprints/AppBlockingCheckResultToStringFingerprint.kt new file mode 100644 index 000000000..376fac4f7 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/updatescreen/fingerprints/AppBlockingCheckResultToStringFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.youtube.misc.updatescreen.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +object AppBlockingCheckResultToStringFingerprint : MethodFingerprint( + returnType = "Ljava/lang/String;", + strings = listOf("AppBlockingCheckResult{intent=") +) diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 422edc11c..5d22f53b8 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -136,6 +136,8 @@ Note: Disabling the speed overlay restores the 'Slide to seek' behavior of the o Shorts player is enabled at app startup. Shorts player is disabled at app startup. Disable shorts player at app startup + Disables the \"Update your app\" screen that appears when using an outdated client. + Disable update screen The amount of seconds the double press back to exit. Double back timeout Entering fullscreen when swiping down below the video player is disabled. diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index ee31bb186..b6189eddd 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -315,6 +315,9 @@ SETTINGS: AMBIENT_MODE_SWITCH --> + + @@ -443,6 +446,7 @@ +