diff --git a/patches/src/main/kotlin/app/twitter/patches/DisableOutdatedVersionScreenPatch.kt b/patches/src/main/kotlin/app/twitter/patches/DisableOutdatedVersionScreenPatch.kt index 6c43cba..99b145d 100644 --- a/patches/src/main/kotlin/app/twitter/patches/DisableOutdatedVersionScreenPatch.kt +++ b/patches/src/main/kotlin/app/twitter/patches/DisableOutdatedVersionScreenPatch.kt @@ -92,6 +92,19 @@ private val playCoreUpdateManagerFingerprint = Fingerprint( strings = listOf("x_lite_in_app_update_enabled") ) +private val serverDrivenCoverRendererFingerprint = Fingerprint( + definingClass = "Lcom/x/urt/cover/ui/j;", + name = "a", + returnType = "V", + parameters = listOf( + "Lcom/x/urt/cover/component/e;", + "Landroidx/compose/ui/Modifier;", + "Landroidx/compose/runtime/Composer;", + "I" + ), + strings = listOf("component") +) + private const val APP_UPDATE_ACTIVITY = "com.twitter.clientshutdown.update.AppUpdateActivity" private val disableOutdatedVersionActivityPatch = resourcePatch { @@ -195,6 +208,40 @@ val disableOutdatedVersionScreenPatch = bytecodePatch( return-object v0 """ ) + + serverDrivenCoverRendererFingerprint.method.addInstructions( + 0, + """ + move-object/from16 v0, p0 + invoke-interface {v0}, Lcom/x/urt/cover/component/e;->a()Lcom/x/models/timelines/instructions/cover/URTCover; + move-result-object v0 + instance-of v1, v0, Lcom/x/models/timelines/instructions/cover/URTCover${'$'}FullCover; + if-eqz v1, :check_outdated_half_cover + check-cast v0, Lcom/x/models/timelines/instructions/cover/URTCover${'$'}FullCover; + invoke-virtual {v0}, Lcom/x/models/timelines/instructions/cover/URTCover${'$'}FullCover;->getData()Lcom/x/models/timelines/instructions/cover/URTFullCover; + move-result-object v0 + invoke-virtual {v0}, Lcom/x/models/timelines/instructions/cover/URTFullCover;->getPrimaryText()Lcom/x/models/text/RichText; + move-result-object v0 + goto :check_outdated_cover_title + :check_outdated_half_cover + instance-of v1, v0, Lcom/x/models/timelines/instructions/cover/URTCover${'$'}HalfCover; + if-eqz v1, :outdated_server_cover_allowed + check-cast v0, Lcom/x/models/timelines/instructions/cover/URTCover${'$'}HalfCover; + invoke-virtual {v0}, Lcom/x/models/timelines/instructions/cover/URTCover${'$'}HalfCover;->getData()Lcom/x/models/timelines/instructions/cover/URTHalfCover; + move-result-object v0 + invoke-virtual {v0}, Lcom/x/models/timelines/instructions/cover/URTHalfCover;->getPrimaryText()Lcom/x/models/text/RichText; + move-result-object v0 + :check_outdated_cover_title + invoke-virtual {v0}, Lcom/x/models/text/RichText;->getText()Ljava/lang/String; + move-result-object v0 + const-string v1, "This app is out of date." + invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + move-result v0 + if-eqz v0, :outdated_server_cover_allowed + return-void + :outdated_server_cover_allowed + """ + ) } }