mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-07 01:51:27 +01:00
refactor(YouTube Music - Custom branding): Resolve startup app crash when patching unsupported newer app versions
This commit is contained in:
@@ -5,6 +5,7 @@ import android.content.ComponentName;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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.
|
* Injection point.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,24 +1,24 @@
|
|||||||
package app.revanced.patches.music.layout.branding
|
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.extensions.InstructionExtensions.getInstruction
|
||||||
import app.revanced.patcher.patch.bytecodePatch
|
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.extension.sharedExtensionPatch
|
||||||
import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME
|
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.Constants.MUSIC_PACKAGE_NAME
|
||||||
import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint
|
import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint
|
||||||
import app.revanced.patches.music.misc.settings.PreferenceScreen
|
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.layout.branding.baseCustomBrandingPatch
|
||||||
import app.revanced.patches.shared.misc.mapping.get
|
import app.revanced.patches.shared.misc.mapping.get
|
||||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||||
import app.revanced.util.getReference
|
import app.revanced.util.getReference
|
||||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
import app.revanced.util.indexOfFirstInstructionReversed
|
|
||||||
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
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 {
|
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
|
// 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).
|
// barely shown. Instead turn off the animation entirely (app will also launch a little faster).
|
||||||
cairoSplashAnimationConfigFingerprint.method.apply {
|
cairoSplashAnimationConfigFingerprint.method.apply {
|
||||||
val mainActivityLaunchAnimation = resourceMappings["layout", "main_activity_launch_animation"]
|
|
||||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(
|
val literalIndex = indexOfFirstLiteralInstructionOrThrow(
|
||||||
mainActivityLaunchAnimation
|
resourceMappings["layout", "main_activity_launch_animation"]
|
||||||
)
|
)
|
||||||
val insertIndex = indexOfFirstInstructionReversed(literalIndex) {
|
val checkCastIndex = indexOfFirstInstructionOrThrow(literalIndex) {
|
||||||
this.opcode == Opcode.INVOKE_VIRTUAL &&
|
opcode == Opcode.CHECK_CAST &&
|
||||||
getReference<MethodReference>()?.name == "setContentView"
|
getReference<TypeReference>()?.type == "Lcom/airbnb/lottie/LottieAnimationView;"
|
||||||
} + 1
|
}
|
||||||
val jumpIndex = indexOfFirstInstructionOrThrow(insertIndex) {
|
val register = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
|
||||||
opcode == Opcode.INVOKE_VIRTUAL &&
|
|
||||||
getReference<MethodReference>()?.parameterTypes?.firstOrNull() == "Ljava/lang/Runnable;"
|
|
||||||
} + 1
|
|
||||||
|
|
||||||
addInstructionsWithLabels(
|
// If using a custom icon then set the lottie animation view to null to bypasses the startup animation.
|
||||||
insertIndex,
|
addInstructions(
|
||||||
"goto :skip_animation",
|
checkCastIndex,
|
||||||
ExternalLabel("skip_animation", getInstruction(jumpIndex))
|
"""
|
||||||
|
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getLottieViewOrNull(Landroid/view/View;)Landroid/view/View;
|
||||||
|
move-result-object v$register
|
||||||
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user