diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index ca4a8ff61..9908c0be7 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -5,6 +5,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Color; +import android.view.View; import java.util.ArrayList; import java.util.List; @@ -71,6 +72,17 @@ public class CustomBrandingPatch { } } + /** + * Injection point. + */ + public static View getLottieViewOrNull(View lottieStartupView) { + if (BaseSettings.CUSTOM_BRANDING_ICON.get() == BrandingTheme.ORIGINAL) { + return lottieStartupView; + } + + return null; + } + /** * Injection point. */ diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 7f7b49ca9..a537078e8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -1,24 +1,24 @@ package app.revanced.patches.music.layout.branding -import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.bytecodePatch -import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.misc.extension.sharedExtensionPatch import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint import app.revanced.patches.music.misc.settings.PreferenceScreen +import app.revanced.patches.shared.layout.branding.EXTENSION_CLASS_DESCRIPTOR import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch import app.revanced.patches.shared.misc.mapping.get import app.revanced.patches.shared.misc.mapping.resourceMappingPatch import app.revanced.patches.shared.misc.mapping.resourceMappings import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.indexOfFirstInstructionReversed import app.revanced.util.indexOfFirstLiteralInstructionOrThrow import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.TypeReference private val disableSplashAnimationPatch = bytecodePatch { @@ -33,23 +33,22 @@ private val disableSplashAnimationPatch = bytecodePatch { // but the animation is not always the same size as the launch screen and it's still // barely shown. Instead turn off the animation entirely (app will also launch a little faster). cairoSplashAnimationConfigFingerprint.method.apply { - val mainActivityLaunchAnimation = resourceMappings["layout", "main_activity_launch_animation"] val literalIndex = indexOfFirstLiteralInstructionOrThrow( - mainActivityLaunchAnimation + resourceMappings["layout", "main_activity_launch_animation"] ) - val insertIndex = indexOfFirstInstructionReversed(literalIndex) { - this.opcode == Opcode.INVOKE_VIRTUAL && - getReference()?.name == "setContentView" - } + 1 - val jumpIndex = indexOfFirstInstructionOrThrow(insertIndex) { - opcode == Opcode.INVOKE_VIRTUAL && - getReference()?.parameterTypes?.firstOrNull() == "Ljava/lang/Runnable;" - } + 1 + val checkCastIndex = indexOfFirstInstructionOrThrow(literalIndex) { + opcode == Opcode.CHECK_CAST && + getReference()?.type == "Lcom/airbnb/lottie/LottieAnimationView;" + } + val register = getInstruction(checkCastIndex).registerA - addInstructionsWithLabels( - insertIndex, - "goto :skip_animation", - ExternalLabel("skip_animation", getInstruction(jumpIndex)) + // If using a custom icon then set the lottie animation view to null to bypasses the startup animation. + addInstructions( + checkCastIndex, + """ + invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getLottieViewOrNull(Landroid/view/View;)Landroid/view/View; + move-result-object v$register + """ ) } }