diff --git a/src/main/kotlin/app/revanced/patches/reddit/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/utils/settings/SettingsPatch.kt index 4edff9682..50aacb358 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/utils/settings/SettingsPatch.kt @@ -29,6 +29,7 @@ object SettingsPatch : BaseResourcePatch( description = "The name of the RVX settings menu.", required = true ) + override fun execute(context: ResourceContext) { /** * Replace settings icon and label diff --git a/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt b/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt index 4b4e3afa2..d55d620fb 100644 --- a/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt @@ -85,7 +85,8 @@ abstract class BaseAdsPatch( internal fun MethodFingerprintResult.hookLithoFullscreenAds(context: BytecodeContext) { mutableMethod.apply { val dialogCodeIndex = scanResult.patternScanResult!!.endIndex - val dialogCodeField = getInstruction(dialogCodeIndex).reference as FieldReference + val dialogCodeField = + getInstruction(dialogCodeIndex).reference as FieldReference if (dialogCodeField.type != "I") throw PatchException("Invalid dialogCodeField: $dialogCodeField") @@ -119,7 +120,8 @@ abstract class BaseAdsPatch( method.parameters == listOf("I") && method.returnType == "Landroid/widget/Button;" } - val getButtonCall = dialogDefiningClass + "->" + getButtonMethod.name + "(I)Landroid/widget/Button;" + val getButtonCall = + dialogDefiningClass + "->" + getButtonMethod.name + "(I)Landroid/widget/Button;" val dialogRegister = getInstruction(dialogIndex).registerC val freeIndex = getTargetIndex(dialogIndex, Opcode.IF_EQZ) val freeRegister = getInstruction(freeIndex).registerA diff --git a/src/main/kotlin/app/revanced/patches/shared/translations/TranslationsUtils.kt b/src/main/kotlin/app/revanced/patches/shared/translations/TranslationsUtils.kt index 79f8006ee..18d3251de 100644 --- a/src/main/kotlin/app/revanced/patches/shared/translations/TranslationsUtils.kt +++ b/src/main/kotlin/app/revanced/patches/shared/translations/TranslationsUtils.kt @@ -38,12 +38,13 @@ object TranslationsUtils { // Exception is thrown if an invalid path is used in the patch option. throw PatchException("Invalid custom translations path: $customLang") } - }?: run { + } ?: run { // Process selected translations if no custom translation is set. val selectedTranslationsArray = selectedTranslations?.split(",")?.map { it.trim() }?.toTypedArray() ?: throw PatchException("Invalid selected languages.") - val filteredLanguages = translationsArray.filter { it in selectedTranslationsArray }.toTypedArray() + val filteredLanguages = + translationsArray.filter { it in selectedTranslationsArray }.toTypedArray() copyXml(sourceDirectory, filteredLanguages) } diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt index 5be545921..f77285679 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt @@ -96,7 +96,11 @@ object MiniplayerPatch : BaseBytecodePatch( MiniplayerDimensionsCalculatorParentFingerprint.resultOrThrow().classDef ) MiniplayerOverrideNoContextFingerprint.resultOrThrow().mutableMethod.apply { - findReturnIndicesReversed().forEach { index -> insertLegacyTabletMiniplayerOverride(index) } + findReturnIndicesReversed().forEach { index -> + insertLegacyTabletMiniplayerOverride( + index + ) + } } // endregion @@ -110,7 +114,11 @@ object MiniplayerPatch : BaseBytecodePatch( val walkerMethod = getWalkerMethod(context, appNameStringIndex) walkerMethod.apply { - findReturnIndicesReversed().forEach { index -> insertLegacyTabletMiniplayerOverride(index) } + findReturnIndicesReversed().forEach { index -> + insertLegacyTabletMiniplayerOverride( + index + ) + } } } } @@ -143,7 +151,11 @@ object MiniplayerPatch : BaseBytecodePatch( insertModernMiniplayerTypeOverride(iPutIndex) } else { - findReturnIndicesReversed().forEach { index -> insertModernMiniplayerOverride(index) } + findReturnIndicesReversed().forEach { index -> + insertModernMiniplayerOverride( + index + ) + } } } } @@ -165,7 +177,8 @@ object MiniplayerPatch : BaseBytecodePatch( YtOutlineXWhite to YtOutlinePictureInPictureWhite, ).forEach { (originalResource, replacementResource) -> val imageResourceIndex = indexOfWideLiteralInstructionOrThrow(originalResource) - val register = getInstruction(imageResourceIndex).registerA + val register = + getInstruction(imageResourceIndex).registerA replaceInstruction(imageResourceIndex, "const v$register, $replacementResource") } @@ -178,10 +191,26 @@ object MiniplayerPatch : BaseBytecodePatch( // region Add hooks to hide tablet modern miniplayer buttons. listOf( - Triple(MiniplayerModernExpandButtonFingerprint, ModernMiniPlayerExpand,"hideMiniplayerExpandClose"), - Triple(MiniplayerModernCloseButtonFingerprint, ModernMiniPlayerClose, "hideMiniplayerExpandClose"), - Triple(MiniplayerModernRewindButtonFingerprint, ModernMiniPlayerRewindButton, "hideMiniplayerRewindForward"), - Triple(MiniplayerModernForwardButtonFingerprint, ModernMiniPlayerForwardButton, "hideMiniplayerRewindForward"), + Triple( + MiniplayerModernExpandButtonFingerprint, + ModernMiniPlayerExpand, + "hideMiniplayerExpandClose" + ), + Triple( + MiniplayerModernCloseButtonFingerprint, + ModernMiniPlayerClose, + "hideMiniplayerExpandClose" + ), + Triple( + MiniplayerModernRewindButtonFingerprint, + ModernMiniPlayerRewindButton, + "hideMiniplayerRewindForward" + ), + Triple( + MiniplayerModernForwardButtonFingerprint, + ModernMiniPlayerForwardButton, + "hideMiniplayerRewindForward" + ), Triple(MiniplayerModernOverlayViewFingerprint, ScrimOverlay, "adjustMiniplayerOpacity") ).forEach { (fingerprint, literalValue, methodName) -> fingerprint.resolve( @@ -221,7 +250,11 @@ object MiniplayerPatch : BaseBytecodePatch( listOf( ImmutableMethodParameter("Landroid/view/View;", annotations, null), ImmutableMethodParameter("I", annotations, null), - ImmutableMethodParameter("Landroid/view/ViewGroup\$LayoutParams;", annotations, null), + ImmutableMethodParameter( + "Landroid/view/ViewGroup\$LayoutParams;", + annotations, + null + ), ), "V", AccessFlags.PUBLIC.value, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/branding/icon/CustomBrandingIconPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/branding/icon/CustomBrandingIconPatch.kt index 8dfe71baf..380d07f54 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/branding/icon/CustomBrandingIconPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/branding/icon/CustomBrandingIconPatch.kt @@ -79,11 +79,14 @@ object CustomBrandingIconPatch : BaseResourcePatch( ) } - private val launcherIconResourceGroups = mipmapDirectories.getResourceGroup(launcherIconResourceFileNames) + private val launcherIconResourceGroups = + mipmapDirectories.getResourceGroup(launcherIconResourceFileNames) - private val splashIconResourceGroups = drawableDirectories.getResourceGroup(splashIconResourceFileNames) + private val splashIconResourceGroups = + drawableDirectories.getResourceGroup(splashIconResourceFileNames) - private val oldSplashAnimationResourceGroups = listOf("drawable").getResourceGroup(oldSplashAnimationResourceFileNames) + private val oldSplashAnimationResourceGroups = + listOf("drawable").getResourceGroup(oldSplashAnimationResourceFileNames) // region patch option @@ -178,7 +181,11 @@ object CustomBrandingIconPatch : BaseResourcePatch( } } - context.copyXmlNode("$stockResourcePath/splash", "values-v31/styles.xml", "resources") + context.copyXmlNode( + "$stockResourcePath/splash", + "values-v31/styles.xml", + "resources" + ) } context.updatePatchStatusIcon(appIcon) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/header/ChangeHeaderPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/header/ChangeHeaderPatch.kt index 72c74549e..fd605b4b9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/header/ChangeHeaderPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/header/ChangeHeaderPatch.kt @@ -50,8 +50,10 @@ object ChangeHeaderPatch : BaseResourcePatch( premiumHeaderResourceDirectoryNames.keys.map { directory -> ResourceGroup( directory, - *variants.map { variant -> "${GENERIC_HEADER_FILE_NAME}_$variant.png" }.toTypedArray(), - *variants.map { variant -> "${PREMIUM_HEADER_FILE_NAME}_$variant.png" }.toTypedArray(), + *variants.map { variant -> "${GENERIC_HEADER_FILE_NAME}_$variant.png" } + .toTypedArray(), + *variants.map { variant -> "${PREMIUM_HEADER_FILE_NAME}_$variant.png" } + .toTypedArray(), ) } @@ -82,14 +84,20 @@ object ChangeHeaderPatch : BaseResourcePatch( The image dimensions must be as follows: - ${genericHeaderResourceDirectoryNames.map { (dpi, dim) -> "- $dpi: $dim" }.joinToString("\n")} + ${ + genericHeaderResourceDirectoryNames.map { (dpi, dim) -> "- $dpi: $dim" } + .joinToString("\n") + } [Premium header] ${variants.joinToString("\n") { variant -> "- ${PREMIUM_HEADER_FILE_NAME}_$variant.png" }} The image dimensions must be as follows: - ${premiumHeaderResourceDirectoryNames.map { (dpi, dim) -> "- $dpi: $dim" }.joinToString("\n")} + ${ + premiumHeaderResourceDirectoryNames.map { (dpi, dim) -> "- $dpi: $dim" } + .joinToString("\n") + } """.trimIndentMultiline(), required = true, ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt index 111ed2353..138319677 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt @@ -1,7 +1,6 @@ package app.revanced.patches.youtube.layout.visual import app.revanced.patcher.data.ResourceContext -import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption import app.revanced.patches.youtube.layout.branding.icon.CustomBrandingIconPatch import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/codecs/OpusCodecBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/codecs/OpusCodecBytecodePatch.kt index c14c29b5d..a5f145331 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/codecs/OpusCodecBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/codecs/OpusCodecBytecodePatch.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.misc.codecs -import app.revanced.patches.youtube.utils.integrations.Constants.MISC_PATH import app.revanced.patches.shared.opus.BaseOpusCodecsPatch +import app.revanced.patches.youtube.utils.integrations.Constants.MISC_PATH object OpusCodecBytecodePatch : BaseOpusCodecsPatch( "$MISC_PATH/OpusCodecPatch;->enableOpusCodec()Z" diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt index 613f19ecd..436d8ea8b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt @@ -245,17 +245,17 @@ object SeekbarComponentsPatch : BaseBytecodePatch( PlayerSeekbarColorFingerprint.resultOrThrow().let { parentResult -> TimeCounterFingerprint.also { it.resolve(context, parentResult.classDef) } .resultOrThrow().let { - it.mutableMethod.apply { - addInstructionsWithLabels( - 0, """ + it.mutableMethod.apply { + addInstructionsWithLabels( + 0, """ invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->hideTimeStamp()Z move-result v0 if-eqz v0, :show return-void """, ExternalLabel("show", getInstruction(0)) - ) + ) + } } - } } // endregion diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt index adf54ae83..002685585 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt @@ -27,16 +27,16 @@ object ShortsNavigationBarPatch : BytecodePatch( InitializeButtonsFingerprint.resultOrThrow().let { parentResult -> SetPivotBarFingerprint.also { it.resolve(context, parentResult.classDef) } .resultOrThrow().let { - it.mutableMethod.apply { - val startIndex = it.scanResult.patternScanResult!!.startIndex - val register = getInstruction(startIndex).registerA + it.mutableMethod.apply { + val startIndex = it.scanResult.patternScanResult!!.startIndex + val register = getInstruction(startIndex).registerA - addInstruction( - startIndex + 1, - "invoke-static {v$register}, $SHORTS_CLASS_DESCRIPTOR->setNavigationBar(Ljava/lang/Object;)V" - ) + addInstruction( + startIndex + 1, + "invoke-static {v$register}, $SHORTS_CLASS_DESCRIPTOR->setNavigationBar(Ljava/lang/Object;)V" + ) + } } - } } RenderBottomNavigationBarFingerprint.resultOrThrow().let { diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/client/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/client/SpoofClientPatch.kt index dd1505458..17aa2af42 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/client/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/client/SpoofClientPatch.kt @@ -300,8 +300,10 @@ object SpoofClientPatch : BaseBytecodePatch( it.mutableMethod.apply { // Find the conditional check if the playback speed menu item is not created. - val shouldCreateMenuIndex = indexOfFirstInstructionOrThrow(scanResult.endIndex) { opcode == Opcode.IF_EQZ } - val shouldCreateMenuRegister = getInstruction(shouldCreateMenuIndex).registerA + val shouldCreateMenuIndex = + indexOfFirstInstructionOrThrow(scanResult.endIndex) { opcode == Opcode.IF_EQZ } + val shouldCreateMenuRegister = + getInstruction(shouldCreateMenuIndex).registerA addInstructions( shouldCreateMenuIndex, diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/client/fingerprints/PlayerGestureConfigSyntheticFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/client/fingerprints/PlayerGestureConfigSyntheticFingerprint.kt index 11a135a82..0ae82b307 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/client/fingerprints/PlayerGestureConfigSyntheticFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/client/fingerprints/PlayerGestureConfigSyntheticFingerprint.kt @@ -1,8 +1,8 @@ package app.revanced.patches.youtube.utils.fix.client.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patcher.fingerprint.annotation.FuzzyPatternScanMethod import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags @@ -44,12 +44,12 @@ internal object PlayerGestureConfigSyntheticFingerprint : MethodFingerprint( methodDef.indexOfFirstInstruction { val reference = getReference() reference?.definingClass == "Lcom/google/android/libraries/youtube/innertube/model/media/PlayerConfigModel;" && - reference.parameterTypes.isEmpty() && - reference.returnType == "Z" + reference.parameterTypes.isEmpty() && + reference.returnType == "Z" } // This method is always called "a" because this kind of class always has a single method. methodDef.name == "a" && classDef.methods.count() == 2 && - indexOfDownAndOutAllowedInstruction(methodDef) >= 0 + indexOfDownAndOutAllowedInstruction(methodDef) >= 0 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index 7b8866ce9..4631c4193 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -239,7 +239,10 @@ fun Method.indexOfFirstInstruction(startIndex: Int = 0, predicate: Instruction.( * @throws PatchException * @see indexOfFirstInstruction */ -fun Method.indexOfFirstInstructionOrThrow(startIndex: Int = 0, predicate: Instruction.() -> Boolean): Int { +fun Method.indexOfFirstInstructionOrThrow( + startIndex: Int = 0, + predicate: Instruction.() -> Boolean +): Int { val index = indexOfFirstInstruction(startIndex, predicate) if (index < 0) { throw PatchException("Could not find instruction index") diff --git a/src/main/kotlin/app/revanced/util/ResourceUtils.kt b/src/main/kotlin/app/revanced/util/ResourceUtils.kt index 2592a7519..3f3374a8b 100644 --- a/src/main/kotlin/app/revanced/util/ResourceUtils.kt +++ b/src/main/kotlin/app/revanced/util/ResourceUtils.kt @@ -106,7 +106,10 @@ fun ResourceContext.copyResources( resourceGroup.resources.forEach { resource -> val resourceFile = "${resourceGroup.resourceDirectoryName}/$resource" - inputStreamFromBundledResource(sourceResourceDirectory, resourceFile)?.let { inputStream -> + inputStreamFromBundledResource( + sourceResourceDirectory, + resourceFile + )?.let { inputStream -> Files.copy( inputStream, targetResourceDirectory.resolve(resourceFile).toPath(),