This commit is contained in:
LisoUseInAIKyrios 2025-05-10 22:39:15 +04:00 committed by GitHub
commit 4084c7439a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
335 changed files with 2594 additions and 3240 deletions

View file

@ -23,7 +23,7 @@ public final class DownloadsPatch {
/**
* Injection point.
*/
public static void activityCreated(Activity mainActivity) {
public static void setMainActivity(Activity mainActivity) {
activityRef = new WeakReference<>(mainActivity);
}

View file

@ -20,15 +20,6 @@ public class OpenShortsInRegularPlayerPatch {
REGULAR_PLAYER_FULLSCREEN
}
static {
if (!VersionCheckPatch.IS_19_46_OR_GREATER
&& Settings.SHORTS_PLAYER_TYPE.get() == ShortsPlayerType.REGULAR_PLAYER_FULLSCREEN) {
// User imported newer settings to an older app target.
Logger.printInfo(() -> "Resetting " + Settings.SHORTS_PLAYER_TYPE);
Settings.SHORTS_PLAYER_TYPE.resetToDefault();
}
}
private static WeakReference<Activity> mainActivityRef = new WeakReference<>(null);
/**

View file

@ -24,18 +24,20 @@ public class OpenVideosFullscreenHookPatch {
/**
* Injection point.
*
* Returns negated value.
*/
public static boolean openVideoFullscreenPortrait(boolean original) {
public static boolean doNotOpenVideoFullscreenPortrait(boolean original) {
Boolean openFullscreen = openNextVideoFullscreen;
if (openFullscreen != null) {
openNextVideoFullscreen = null;
return openFullscreen;
return !openFullscreen;
}
if (!isFullScreenPatchIncluded()) {
return false;
return original;
}
return Settings.OPEN_VIDEOS_FULLSCREEN_PORTRAIT.get();
return !Settings.OPEN_VIDEOS_FULLSCREEN_PORTRAIT.get();
}
}

View file

@ -2,8 +2,6 @@ package app.revanced.extension.youtube.patches;
import android.app.Activity;
import androidx.annotation.Nullable;
import java.lang.ref.WeakReference;
import java.util.Objects;
@ -78,7 +76,7 @@ public class ShortsAutoplayPatch {
/**
* Injection point.
*/
public static Enum<?> changeShortsRepeatBehavior(@Nullable Enum<?> original) {
public static Enum<?> changeShortsRepeatBehavior(Enum<?> original) {
try {
final boolean autoplay;
@ -95,19 +93,19 @@ public class ShortsAutoplayPatch {
autoplay = Settings.SHORTS_AUTOPLAY.get();
}
final ShortsLoopBehavior behavior = autoplay
Enum<?> overrideBehavior = (autoplay
? ShortsLoopBehavior.SINGLE_PLAY
: ShortsLoopBehavior.REPEAT;
: ShortsLoopBehavior.REPEAT).ytEnumValue;
if (behavior.ytEnumValue != null) {
if (overrideBehavior != null) {
Logger.printDebug(() -> {
String name = (original == null ? "unknown (null)" : original.name());
return behavior == original
return overrideBehavior == original
? "Behavior setting is same as original. Using original: " + name
: "Changing Shorts repeat behavior from: " + name + " to: " + behavior.name();
: "Changing Shorts repeat behavior from: " + name + " to: " + overrideBehavior.name();
});
return behavior.ytEnumValue;
return overrideBehavior;
}
if (original == null) {
@ -118,13 +116,12 @@ public class ShortsAutoplayPatch {
return unknown;
}
} catch (Exception ex) {
Logger.printException(() -> "changeShortsRepeatBehavior failure", ex);
Logger.printException(() -> "changeShortsRepeatState failure", ex);
}
return original;
}
/**
* Injection point.
*/

View file

@ -13,5 +13,5 @@ public class VersionCheckPatch {
public static final boolean IS_19_26_OR_GREATER = isVersionOrGreater("19.26.00");
public static final boolean IS_19_29_OR_GREATER = isVersionOrGreater("19.29.00");
public static final boolean IS_19_34_OR_GREATER = isVersionOrGreater("19.34.00");
public static final boolean IS_19_46_OR_GREATER = isVersionOrGreater("19.46.00");
public static final boolean IS_20_07_OR_GREATER = isVersionOrGreater("20.07.00");
}

View file

@ -380,17 +380,6 @@ public final class ShortsFilter extends Filter {
};
}
/**
* Injection point. Only used if patching older than 19.03.
* This hook may be obsolete even for old versions
* as they now use a litho layout like newer versions.
*/
public static void hideShortsShelf(final View shortsShelfView) {
if (shouldHideShortsFeedItems()) {
Utils.hideViewByLayoutParams(shortsShelfView);
}
}
public static int getSoundButtonSize(int original) {
if (Settings.HIDE_SHORTS_SOUND_BUTTON.get()) {
return 0;

View file

@ -201,16 +201,16 @@ public final class SeekbarColorPatch {
}
if (BaseSettings.DEBUG.get() && (!json.contains(originalPrimary) || !json.contains(originalAccent))) {
String jsonFinal = json;
Logger.printException(() -> "Could not replace launch animation colors: " + jsonFinal);
Logger.printException(() -> "Could not replace launch animation colors: " + json);
}
Logger.printDebug(() -> "Replacing Lottie animation JSON");
json = json.replace(originalPrimary, replacementPrimary);
json = json.replace(originalAccent, replacementAccent);
String replacementJson = json
.replace(originalPrimary, replacementPrimary)
.replace(originalAccent, replacementAccent);
// cacheKey is not needed since the animation will not be reused.
view.patch_setAnimation(new ByteArrayInputStream(json.getBytes()), null);
view.patch_setAnimation(new ByteArrayInputStream(replacementJson.getBytes()), null);
} catch (Exception ex) {
Logger.printException(() -> "setSplashAnimationLottie failure", ex);
}

View file

@ -259,7 +259,8 @@ public class ReturnYouTubeDislike {
// middle separator
String middleSeparatorString = compactLayout
? " " + MIDDLE_SEPARATOR_CHARACTER + " "
: " \u2009" + MIDDLE_SEPARATOR_CHARACTER + "\u2009 "; // u2009 = 'narrow space' character
: " \u2009\u2009" + MIDDLE_SEPARATOR_CHARACTER + "\u2009\u2009 "; // u2009 = 'narrow space'
final int shapeInsertionIndex = middleSeparatorString.length() / 2;
Spannable middleSeparatorSpan = new SpannableString(middleSeparatorString);
ShapeDrawable shapeDrawable = new ShapeDrawable(new OvalShape());

View file

@ -11,6 +11,7 @@ import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.Change
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
import static app.revanced.extension.youtube.patches.ExitFullscreenPatch.FullscreenMode;
import static app.revanced.extension.youtube.patches.ForceOriginalAudioPatch.ForceOriginalAudioAvailability;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideOverlayButtonsAvailability;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType;
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MINIMAL;
@ -42,7 +43,6 @@ import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.DeArrow
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillImagesAvailability;
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailOption;
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailStillTime;
import app.revanced.extension.youtube.patches.MiniplayerPatch;
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
public class Settings extends BaseSettings {
@ -160,8 +160,8 @@ public class Settings extends BaseSettings {
public static final BooleanSetting MINIPLAYER_DOUBLE_TAP_ACTION = new BooleanSetting("revanced_miniplayer_double_tap_action", TRUE, true, MINIPLAYER_ANY_MODERN);
public static final BooleanSetting MINIPLAYER_DRAG_AND_DROP = new BooleanSetting("revanced_miniplayer_drag_and_drop", TRUE, true, MINIPLAYER_ANY_MODERN);
public static final BooleanSetting MINIPLAYER_HORIZONTAL_DRAG = new BooleanSetting("revanced_miniplayer_horizontal_drag", FALSE, true, new MiniplayerHorizontalDragAvailability());
public static final BooleanSetting MINIPLAYER_HIDE_OVERLAY_BUTTONS = new BooleanSetting("revanced_miniplayer_hide_overlay_buttons", FALSE, true, new MiniplayerPatch.MiniplayerHideOverlayButtonsAvailability());
public static final BooleanSetting MINIPLAYER_HIDE_SUBTEXT = new BooleanSetting("revanced_miniplayer_hide_subtext", FALSE, true, MINIPLAYER_TYPE.availability(MODERN_1, MODERN_3));
public static final BooleanSetting MINIPLAYER_HIDE_OVERLAY_BUTTONS = new BooleanSetting("revanced_miniplayer_hide_overlay_buttons", FALSE, true, new MiniplayerHideOverlayButtonsAvailability());
public static final BooleanSetting MINIPLAYER_HIDE_SUBTEXT = new BooleanSetting("revanced_miniplayer_hide_subtext", FALSE, true, MINIPLAYER_TYPE.availability(MODERN_1, MODERN_3, MODERN_4));
public static final BooleanSetting MINIPLAYER_HIDE_REWIND_FORWARD = new BooleanSetting("revanced_miniplayer_hide_rewind_forward", TRUE, true, MINIPLAYER_TYPE.availability(MODERN_1));
public static final BooleanSetting MINIPLAYER_ROUNDED_CORNERS = new BooleanSetting("revanced_miniplayer_rounded_corners", TRUE, true, MINIPLAYER_ANY_MODERN);
public static final IntegerSetting MINIPLAYER_WIDTH_DIP = new IntegerSetting("revanced_miniplayer_width_dip", 192, true, MINIPLAYER_ANY_MODERN);

View file

@ -2,7 +2,6 @@ package app.revanced.extension.youtube.shared
import app.revanced.extension.shared.Logger
import app.revanced.extension.youtube.Event
import app.revanced.extension.youtube.patches.VideoInformation
/**
* Regular player type.

View file

@ -10,7 +10,6 @@ import android.util.TypedValue;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.lang.reflect.Field;
import java.util.*;
import app.revanced.extension.shared.Logger;
@ -100,9 +99,9 @@ public class SegmentPlaybackController {
@Nullable
private static String timeWithoutSegments;
private static int sponsorBarAbsoluteLeft;
private static int sponsorAbsoluteBarRight;
private static int sponsorBarThickness;
private static int seekbarAbsoluteLeft;
private static int seekbarAbsoluteRight;
private static int seekbarThickness;
@Nullable
static SponsorSegment[] getSegments() {
@ -629,31 +628,17 @@ public class SegmentPlaybackController {
* Injection point
*/
@SuppressWarnings("unused")
public static void setSponsorBarRect(final Object self) {
try {
Field field = self.getClass().getDeclaredField("replaceMeWithsetSponsorBarRect");
field.setAccessible(true);
Rect rect = (Rect) Objects.requireNonNull(field.get(self));
setSponsorBarAbsoluteLeft(rect);
setSponsorBarAbsoluteRight(rect);
} catch (Exception ex) {
Logger.printException(() -> "setSponsorBarRect failure", ex);
public static void setSeekbarRectangle(Rect seekbarRect) {
final int left = seekbarRect.left;
if (seekbarAbsoluteLeft != left) {
Logger.printDebug(() -> "setSeekbarRectangle left: " + left);
seekbarAbsoluteLeft = left;
}
}
private static void setSponsorBarAbsoluteLeft(Rect rect) {
final int left = rect.left;
if (sponsorBarAbsoluteLeft != left) {
Logger.printDebug(() -> "setSponsorBarAbsoluteLeft: " + left);
sponsorBarAbsoluteLeft = left;
}
}
private static void setSponsorBarAbsoluteRight(Rect rect) {
final int right = rect.right;
if (sponsorAbsoluteBarRight != right) {
Logger.printDebug(() -> "setSponsorBarAbsoluteRight: " + right);
sponsorAbsoluteBarRight = right;
final int right = seekbarRect.right;
if (seekbarAbsoluteRight != right) {
Logger.printDebug(() -> "setSeekbarRectangle right: " + right);
seekbarAbsoluteRight = right;
}
}
@ -661,8 +646,8 @@ public class SegmentPlaybackController {
* Injection point
*/
@SuppressWarnings("unused")
public static void setSponsorBarThickness(int thickness) {
sponsorBarThickness = thickness;
public static void setSeekbarThickness(int thickness) {
seekbarThickness = thickness;
}
/**
@ -741,17 +726,17 @@ public class SegmentPlaybackController {
* Injection point.
*/
@SuppressWarnings("unused")
public static void drawSponsorTimeBars(final Canvas canvas, final float posY) {
public static void drawSegmentTimeBars(final Canvas canvas, final float posY) {
try {
if (segments == null) return;
final long videoLength = VideoInformation.getVideoLength();
if (videoLength <= 0) return;
final int thicknessDiv2 = sponsorBarThickness / 2; // rounds down
final float top = posY - (sponsorBarThickness - thicknessDiv2);
final int thicknessDiv2 = seekbarThickness / 2; // rounds down
final float top = posY - (seekbarThickness - thicknessDiv2);
final float bottom = posY + thicknessDiv2;
final float videoMillisecondsToPixels = (1f / videoLength) * (sponsorAbsoluteBarRight - sponsorBarAbsoluteLeft);
final float leftPadding = sponsorBarAbsoluteLeft;
final float videoMillisecondsToPixels = (1f / videoLength) * (seekbarAbsoluteRight - seekbarAbsoluteLeft);
final float leftPadding = seekbarAbsoluteLeft;
for (SponsorSegment segment : segments) {
final float left = leftPadding + segment.start * videoMillisecondsToPixels;

View file

@ -1,8 +1,8 @@
[versions]
revanced-patcher = "21.0.0"
revanced-patcher = "22.0.0"
# Tracking https://github.com/google/smali/issues/64.
#noinspection GradleDependency
smali = "3.0.5"
smali = "3.0.8"
# 8.3.0 causes java verifier error: https://github.com/ReVanced/revanced-patches/issues/2818.
#noinspection GradleDependency
agp = "8.2.2"

View file

@ -60,10 +60,6 @@ public final class app/revanced/patches/all/misc/debugging/EnableAndroidDebuggin
public static final fun getEnableAndroidDebuggingPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/all/misc/directory/ChangeDataDirectoryLocationPatchKt {
public static final fun getChangeDataDirectoryLocationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/all/misc/directory/documentsprovider/ExportInternalDataDocumentsProviderPatchKt {
public static final fun getExportInternalDataDocumentsProviderPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
@ -208,10 +204,6 @@ public final class app/revanced/patches/googlephotos/misc/gms/GmsCoreSupportPatc
public static final fun getGmsCoreSupportPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/googlephotos/misc/preferences/RestoreHiddenBackUpWhileChargingTogglePatchKt {
public static final fun getRestoreHiddenBackUpWhileChargingTogglePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/googlerecorder/restrictions/RemoveDeviceRestrictionsKt {
public static final fun getRemoveDeviceRestrictionsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -304,10 +296,6 @@ public final class app/revanced/patches/music/interaction/permanentrepeat/Perman
public static final fun getPermanentRepeatPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/interaction/permanentshuffle/PermanentShufflePatchKt {
public static final fun getPermanentShufflePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/music/layout/compactheader/HideCategoryBarKt {
public static final fun getHideCategoryBar ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -372,10 +360,6 @@ public final class app/revanced/patches/nunl/firebase/SpoofCertificatePatchKt {
public static final fun getSpoofCertificatePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/nyx/misc/pro/UnlockProPatchKt {
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/openinghours/misc/fix/crash/FixCrashPatchKt {
public static final fun getFixCrashPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -559,10 +543,6 @@ public final class app/revanced/patches/reddit/customclients/sync/syncforreddit/
public static final fun getFixVideoDownloadsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/reddit/customclients/syncforreddit/fix/video/FixVideoDownloadsPatchKt {
public static final fun getFixVideoDownloadsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/reddit/layout/disablescreenshotpopup/DisableScreenshotPopupPatchKt {
public static final fun getDisableScreenshotPopupPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -593,26 +573,22 @@ public final class app/revanced/patches/shared/misc/extension/ExtensionHook {
public final class app/revanced/patches/shared/misc/extension/SharedExtensionPatchKt {
public static final fun extensionHook (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lapp/revanced/patcher/Fingerprint;)Lapp/revanced/patches/shared/misc/extension/ExtensionHook;
public static final fun extensionHook (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patches/shared/misc/extension/ExtensionHook;
public static final fun extensionHook (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function0;
public static synthetic fun extensionHook$default (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lapp/revanced/patcher/Fingerprint;ILjava/lang/Object;)Lapp/revanced/patches/shared/misc/extension/ExtensionHook;
public static synthetic fun extensionHook$default (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patches/shared/misc/extension/ExtensionHook;
public static final fun sharedExtensionPatch (Ljava/lang/String;[Lapp/revanced/patches/shared/misc/extension/ExtensionHook;)Lapp/revanced/patcher/patch/BytecodePatch;
public static final fun sharedExtensionPatch ([Lapp/revanced/patches/shared/misc/extension/ExtensionHook;)Lapp/revanced/patcher/patch/BytecodePatch;
public static synthetic fun extensionHook$default (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlin/jvm/functions/Function0;
public static final fun sharedExtensionPatch (Ljava/lang/String;[Lkotlin/jvm/functions/Function0;)Lapp/revanced/patcher/patch/BytecodePatch;
public static final fun sharedExtensionPatch ([Lkotlin/jvm/functions/Function0;)Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/shared/misc/fix/verticalscroll/VerticalScrollPatchKt {
public static final fun getVerticalScrollPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/shared/misc/gms/FingerprintsKt {
public static final field GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME Ljava/lang/String;
}
public final class app/revanced/patches/shared/misc/gms/GmsCoreSupportPatchKt {
public static final fun gmsCoreSupportPatch (Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/Fingerprint;Ljava/util/Set;Lapp/revanced/patcher/Fingerprint;Lapp/revanced/patcher/patch/Patch;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/BytecodePatch;
public static synthetic fun gmsCoreSupportPatch$default (Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/Fingerprint;Ljava/util/Set;Lapp/revanced/patcher/Fingerprint;Lapp/revanced/patcher/patch/Patch;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/BytecodePatch;
public static final fun gmsCoreSupportResourcePatch (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/patch/Option;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/ResourcePatch;
public static synthetic fun gmsCoreSupportResourcePatch$default (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/patch/Option;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/ResourcePatch;
public static final fun gmsCoreSupportResourcePatch (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/patch/Option;ZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/ResourcePatch;
public static synthetic fun gmsCoreSupportResourcePatch$default (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/patch/Option;ZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/shared/misc/hex/HexPatchKt {
@ -629,6 +605,7 @@ public final class app/revanced/patches/shared/misc/hex/Replacement$Companion {
}
public final class app/revanced/patches/shared/misc/mapping/ResourceElement {
public fun <init> (Ljava/lang/String;Ljava/lang/String;J)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()J
@ -643,14 +620,16 @@ public final class app/revanced/patches/shared/misc/mapping/ResourceElement {
}
public final class app/revanced/patches/shared/misc/mapping/ResourceMappingPatchKt {
public static final fun get (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)J
public static final fun getResourceElements ()Ljava/util/Collection;
public static final fun getResourceId (Ljava/lang/String;Ljava/lang/String;)J
public static final fun getResourceMappingPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
public static final fun getResourceMappings ()Ljava/util/List;
public static final fun hasResourceId (Ljava/lang/String;Ljava/lang/String;)Z
public static final fun resourceLiteral (Ljava/lang/String;Ljava/lang/String;I)Lapp/revanced/patcher/LiteralFilter;
public static synthetic fun resourceLiteral$default (Ljava/lang/String;Ljava/lang/String;IILjava/lang/Object;)Lapp/revanced/patcher/LiteralFilter;
}
public final class app/revanced/patches/shared/misc/settings/SettingsPatchKt {
public static final fun settingsPatch (Ljava/util/List;Ljava/util/Set;)Lapp/revanced/patcher/patch/ResourcePatch;
public static final fun settingsPatch (Lkotlin/Pair;Ljava/util/Set;)Lapp/revanced/patcher/patch/ResourcePatch;
public static synthetic fun settingsPatch$default (Ljava/util/List;Ljava/util/Set;ILjava/lang/Object;)Lapp/revanced/patcher/patch/ResourcePatch;
}
@ -872,10 +851,6 @@ public final class app/revanced/patches/spotify/misc/privacy/SanitizeSharingLink
public static final fun getSanitizeSharingLinksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/spotify/navbar/PremiumNavbarTabPatchKt {
public static final fun getPremiumNavbarTabPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/stocard/layout/HideOffersTabPatchKt {
public static final fun getHideOffersTabPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
@ -1088,10 +1063,6 @@ public final class app/revanced/patches/twitter/misc/links/SanitizeSharingLinksP
public static final fun getSanitizeSharingLinksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/vsco/misc/pro/UnlockProPatchKt {
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/warnwetter/misc/firebasegetcert/FirebaseGetCertPatchKt {
public static final fun getFirebaseGetCertPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -1100,10 +1071,6 @@ public final class app/revanced/patches/warnwetter/misc/promocode/PromoCodeUnloc
public static final fun getPromoCodeUnlockPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/windyapp/misc/unlockpro/UnlockProPatchKt {
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/ad/general/HideAdsPatchKt {
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -1197,15 +1164,7 @@ public final class app/revanced/patches/youtube/layout/hide/fullscreenambientmod
}
public final class app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatchKt {
public static final fun getAlbumCardId ()J
public static final fun getBarContainerHeightId ()J
public static final fun getCrowdfundingBoxId ()J
public static final fun getExpandButtonDownId ()J
public static final fun getFabButtonId ()J
public static final fun getFilterBarHeightId ()J
public static final fun getHideLayoutComponentsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
public static final fun getRelatedChipCloudMarginId ()J
public static final fun getYouTubeLogo ()J
}
public final class app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatchKt {
@ -1220,18 +1179,10 @@ public final class app/revanced/patches/youtube/layout/hide/rollingnumber/Disabl
public static final fun getDisableRollingNumberAnimationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatchKt {
public static final fun getHideSeekbarPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatchKt {
public static final fun getHideShortsComponentsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatchKt {
public static final fun getDisableSuggestedVideoEndScreenPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/hide/time/HideTimestampPatchKt {
public static final fun getHideTimestampPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -1248,10 +1199,6 @@ public final class app/revanced/patches/youtube/layout/player/background/PlayerC
public static final fun getPlayerControlsBackgroundPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
}
public final class app/revanced/patches/youtube/layout/player/fullscreen/OpenVideosFullscreenKt {
public static final fun getOpenVideosFullscreen ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/player/fullscreen/OpenVideosFullscreenPatchKt {
public static final fun getOpenVideosFullscreenPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -1306,10 +1253,6 @@ public final class app/revanced/patches/youtube/layout/startupshortsreset/Disabl
public static final fun getDisableResumingShortsOnStartupPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatchKt {
public static final fun getEnableTabletLayoutPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/theme/LithoColorHookPatchKt {
public static final fun getLithoColorHookPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
public static final fun getLithoColorOverrideHook ()Lkotlin/jvm/functions/Function2;
@ -1355,14 +1298,6 @@ public final class app/revanced/patches/youtube/misc/extension/SharedExtensionPa
public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatchKt {
public static final fun getSpoofVideoStreamsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/misc/fix/playback/UserAgentClientSpoofPatchKt {
public static final fun getUserAgentClientSpoofPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/misc/fix/playbackspeed/FIxPlaybackSpeedWhilePlayingPatchKt {
public static final fun getFixPlaybackSpeedWhilePlayingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@ -1413,9 +1348,6 @@ public final class app/revanced/patches/youtube/misc/playertype/PlayerTypeHookPa
public final class app/revanced/patches/youtube/misc/playservice/VersionCheckPatchKt {
public static final fun getVersionCheckPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
public static final fun is_19_03_or_greater ()Z
public static final fun is_19_04_or_greater ()Z
public static final fun is_19_16_or_greater ()Z
public static final fun is_19_17_or_greater ()Z
public static final fun is_19_18_or_greater ()Z
public static final fun is_19_23_or_greater ()Z
@ -1440,6 +1372,7 @@ public final class app/revanced/patches/youtube/misc/playservice/VersionCheckPat
public static final fun is_20_10_or_greater ()Z
public static final fun is_20_14_or_greater ()Z
public static final fun is_20_15_or_greater ()Z
public static final fun is_20_19_or_greater ()Z
}
public final class app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatchKt {
@ -1544,10 +1477,6 @@ public final class app/revanced/patches/youtube/video/videoid/VideoIdPatchKt {
public static final fun hookVideoId (Ljava/lang/String;)V
}
public final class app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatchKt {
public static final fun getRestoreOldVideoQualityMenuPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/yuka/misc/unlockpremium/UnlockPremiumPatchKt {
public static final fun getUnlockPremiumPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}

View file

@ -12,6 +12,12 @@ patches {
}
}
repositories {
mavenLocal()
gradlePluginPortal()
google()
}
dependencies {
// Required due to smali, or build fails. Can be removed once smali is bumped.
implementation(libs.guava)

View file

@ -1,19 +0,0 @@
package app.revanced.patches.all.misc.directory
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.directory.documentsprovider.exportInternalDataDocumentsProviderPatch
@Suppress("unused")
@Deprecated(
"Superseded by internalDataDocumentsProviderPatch",
ReplaceWith("internalDataDocumentsProviderPatch"),
)
val changeDataDirectoryLocationPatch = bytecodePatch(
// name = "Change data directory location",
description = "Changes the data directory in the application from " +
"the app internal storage directory to /sdcard/android/data accessible by root-less devices." +
"Using this patch can cause unexpected issues with some apps.",
use = false,
) {
dependsOn(exportInternalDataDocumentsProviderPatch)
}

View file

@ -36,7 +36,7 @@ fun <T> transformInstructionsPatch(
}
}.forEach { (classDef, methods) ->
// And finally transform the methods...
val mutableClass = proxy(classDef).mutableClass
val mutableClass = mutableClassBy(classDef)
methods.map(mutableClass::findMutableMethodOf).forEach methods@{ mutableMethod ->
val patchIndices = findPatchIndices(mutableClass, mutableMethod)?.toCollection(ArrayDeque())

View file

@ -3,7 +3,7 @@ package app.revanced.patches.amazon
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val deepLinkingFingerprint = fingerprint {
internal val deepLinkingFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE)
returns("Z")
parameters("L")

View file

@ -11,7 +11,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
// This fingerprint targets a method that returns the daily measurement count.
// This method is used to determine if the user has reached the daily limit of measurements.
internal val getDailyMeasurementCountFingerprint = fingerprint {
internal val getDailyMeasurementCountFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE)
returns("I")
strings("dailyMeasurementCount")

View file

@ -3,7 +3,7 @@ package app.revanced.patches.backdrops.misc.pro
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
internal val proUnlockFingerprint = fingerprint {
internal val proUnlockFingerprint by fingerprint {
opcodes(
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,

View file

@ -12,12 +12,12 @@ val proUnlockPatch = bytecodePatch(
compatibleWith("com.backdrops.wallpapers")
execute {
val registerIndex = proUnlockFingerprint.patternMatch!!.endIndex - 1
val registerIndex = proUnlockFingerprint.instructionMatches.last().index - 1
proUnlockFingerprint.method.apply {
val register = getInstruction<OneRegisterInstruction>(registerIndex).registerA
addInstruction(
proUnlockFingerprint.patternMatch!!.endIndex,
proUnlockFingerprint.instructionMatches.last().index,
"const/4 v$register, 0x1",
)
}

View file

@ -2,6 +2,6 @@ package app.revanced.patches.bandcamp.limitations
import app.revanced.patcher.fingerprint
internal val handlePlaybackLimitsFingerprint = fingerprint {
internal val handlePlaybackLimitsFingerprint by fingerprint {
strings("play limits processing track", "found play_count")
}

View file

@ -2,7 +2,7 @@ package app.revanced.patches.cieid.restrictions.root
import app.revanced.patcher.fingerprint
internal val checkRootFingerprint = fingerprint {
internal val checkRootFingerprint by fingerprint {
custom { method, _ ->
method.name == "onResume" && method.definingClass == "Lit/ipzs/cieid/BaseActivity;"
}

View file

@ -20,7 +20,7 @@ val disableAdsPatch = bytecodePatch(
//
// MonetizationDebugSettings seems to be the most general setting to work fine.
initializeMonetizationDebugSettingsFingerprint.method.apply {
val insertIndex = initializeMonetizationDebugSettingsFingerprint.patternMatch!!.startIndex
val insertIndex = initializeMonetizationDebugSettingsFingerprint.instructionMatches.first().index
val register = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
addInstructions(

View file

@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val initializeMonetizationDebugSettingsFingerprint = fingerprint {
internal val initializeMonetizationDebugSettingsFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
returns("V")
parameters(

View file

@ -14,7 +14,7 @@ val enableDebugMenuPatch = bytecodePatch(
execute {
initializeBuildConfigProviderFingerprint.method.apply {
val insertIndex = initializeBuildConfigProviderFingerprint.patternMatch!!.startIndex
val insertIndex = initializeBuildConfigProviderFingerprint.instructionMatches.first().index
val register = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
addInstructions(

View file

@ -11,9 +11,8 @@ import com.android.tools.smali.dexlib2.Opcode
* - `isDebug`: compares "release" with "debug" <-- we want to force this to `true`
*/
internal val initializeBuildConfigProviderFingerprint = fingerprint {
internal val initializeBuildConfigProviderFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
returns("V")
opcodes(Opcode.IPUT_BOOLEAN)
strings("debug", "release", "china")
}

View file

@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val baseModelMapperFingerprint = fingerprint {
internal val baseModelMapperFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Lcom/facebook/graphql/modelutil/BaseModelWithTree;")
parameters("Ljava/lang/Class", "I", "I")
@ -17,7 +17,7 @@ internal val baseModelMapperFingerprint = fingerprint {
)
}
internal val getSponsoredDataModelTemplateFingerprint = fingerprint {
internal val getSponsoredDataModelTemplateFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("L")
parameters()
@ -33,7 +33,7 @@ internal val getSponsoredDataModelTemplateFingerprint = fingerprint {
}
}
internal val getStoryVisibilityFingerprint = fingerprint {
internal val getStoryVisibilityFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("Ljava/lang/String;")
opcodes(

View file

@ -67,7 +67,7 @@ val hideSponsoredStoriesPatch = bytecodePatch(
// Check if the parameter type is GraphQLStory and if sponsoredDataModelGetter returns a non-null value.
// If so, hide the story by setting the visibility to StoryVisibility.GONE.
getStoryVisibilityFingerprint.method.addInstructionsWithLabels(
getStoryVisibilityFingerprint.patternMatch!!.startIndex,
getStoryVisibilityFingerprint.instructionMatches.first().index,
"""
instance-of v0, p0, $graphQlStoryClassDescriptor
if-eqz v0, :resume_normal

View file

@ -3,11 +3,11 @@ package app.revanced.patches.facebook.ads.story
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.iface.value.StringEncodedValue
internal val adsInsertionFingerprint = fieldFingerprint(
internal val adsInsertionFingerprint by fieldFingerprint(
fieldValue = "AdBucketDataSourceUtil\$attemptAdsInsertion\$1",
)
internal val fetchMoreAdsFingerprint = fieldFingerprint(
internal val fetchMoreAdsFingerprint by fieldFingerprint(
fieldValue = "AdBucketDataSourceUtil\$attemptFetchMoreAds\$1",
)

View file

@ -5,7 +5,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
// Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.AttestationHelper#isBootStateOk (3.0.1)
internal val bootStateFingerprint = fingerprint {
internal val bootStateFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("Z")
opcodes(
@ -30,7 +30,7 @@ internal val bootStateFingerprint = fingerprint {
}
// Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.AttestationHelper#createKey (3.0.1)
internal val createKeyFingerprint = fingerprint {
internal val createKeyFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("Z")
strings("attestation", "SHA-256", "random", "EC", "AndroidKeyStore")

View file

@ -5,7 +5,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
// Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.RootDetection#isRooted (3.0.1)
internal val rootDetectionFingerprint = fingerprint {
internal val rootDetectionFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("L")
parameters("L")

View file

@ -14,7 +14,7 @@ val enableCustomTabsPatch = bytecodePatch(
execute {
launchCustomTabFingerprint.method.apply {
val checkIndex = launchCustomTabFingerprint.patternMatch!!.endIndex + 1
val checkIndex = launchCustomTabFingerprint.instructionMatches.last().index + 1
val register = getInstruction<OneRegisterInstruction>(checkIndex).registerA
replaceInstruction(checkIndex, "const/4 v$register, 0x1")

View file

@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val launchCustomTabFingerprint = fingerprint {
internal val launchCustomTabFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
opcodes(
Opcode.IPUT_OBJECT,

View file

@ -2,7 +2,7 @@ package app.revanced.patches.googlenews.misc.gms
import app.revanced.patcher.fingerprint
internal val magazinesActivityOnCreateFingerprint = fingerprint {
internal val magazinesActivityOnCreateFingerprint by fingerprint {
custom { methodDef, classDef ->
methodDef.name == "onCreate" && classDef.endsWith("/StartActivity;")
}

View file

@ -2,6 +2,6 @@ package app.revanced.patches.googlephotos.misc.features
import app.revanced.patcher.fingerprint
internal val initializeFeaturesEnumFingerprint = fingerprint {
internal val initializeFeaturesEnumFingerprint by fingerprint {
strings("com.google.android.apps.photos.NEXUS_PRELOAD")
}

View file

@ -2,7 +2,7 @@ package app.revanced.patches.googlephotos.misc.gms
import app.revanced.patcher.fingerprint
internal val homeActivityOnCreateFingerprint = fingerprint {
internal val homeActivityOnCreateFingerprint by fingerprint {
custom { methodDef, classDef ->
methodDef.name == "onCreate" && classDef.endsWith("/HomeActivity;")
}

View file

@ -1,8 +0,0 @@
package app.revanced.patches.googlephotos.misc.preferences
import app.revanced.patcher.fingerprint
internal val backupPreferencesFingerprint = fingerprint {
returns("Lcom/google/android/apps/photos/backup/data/BackupPreferences;")
strings("backup_prefs_had_backup_only_when_charging_enabled")
}

View file

@ -1,30 +0,0 @@
package app.revanced.patches.googlephotos.misc.preferences
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Deprecated("This patch no longer works and this code will soon be deleted")
@Suppress("unused")
val restoreHiddenBackUpWhileChargingTogglePatch = bytecodePatch(
description = "Restores a hidden toggle to only run backups when the device is charging."
) {
compatibleWith("com.google.android.apps.photos"("7.11.0.705590205"))
execute {
// Patches 'backup_prefs_had_backup_only_when_charging_enabled' to always be true.
backupPreferencesFingerprint.let {
it.method.apply {
val index = indexOfFirstInstructionOrThrow(
it.stringMatches!!.first().index,
Opcode.MOVE_RESULT
)
val register = getInstruction<OneRegisterInstruction>(index).registerA
addInstruction(index + 1, "const/4 v$register, 0x1")
}
}
}
}

View file

@ -2,7 +2,7 @@ package app.revanced.patches.googlerecorder.restrictions
import app.revanced.patcher.fingerprint
internal val onApplicationCreateFingerprint = fingerprint {
internal val onApplicationCreateFingerprint by fingerprint {
strings("com.google.android.feature.PIXEL_2017_EXPERIENCE")
custom { method, classDef ->
if (method.name != "onCreate") return@custom false

View file

@ -14,7 +14,7 @@ val removeDeviceRestrictionsPatch = bytecodePatch(
compatibleWith("com.google.android.apps.recorder")
execute {
val featureStringIndex = onApplicationCreateFingerprint.stringMatches!!.first().index
val featureStringIndex = onApplicationCreateFingerprint.stringMatches.first().index
onApplicationCreateFingerprint.method.apply {
// Remove check for device restrictions.

View file

@ -2,7 +2,7 @@ package app.revanced.patches.hexeditor.ad
import app.revanced.patcher.fingerprint
internal val primaryAdsFingerprint = fingerprint {
internal val primaryAdsFingerprint by fingerprint {
custom { method, classDef ->
classDef.endsWith("PreferencesHelper;") && method.name == "isAdsDisabled"
}

View file

@ -2,7 +2,7 @@ package app.revanced.patches.iconpackstudio.misc.pro
import app.revanced.patcher.fingerprint
internal val checkProFingerprint = fingerprint {
internal val checkProFingerprint by fingerprint {
returns("Z")
custom { _, classDef -> classDef.endsWith("IPSPurchaseRepository;") }
}

View file

@ -3,7 +3,7 @@ package app.revanced.patches.idaustria.detection.root
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val attestationSupportedCheckFingerprint = fingerprint {
internal val attestationSupportedCheckFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("V")
custom { method, classDef ->
@ -12,7 +12,7 @@ internal val attestationSupportedCheckFingerprint = fingerprint {
}
}
internal val bootloaderCheckFingerprint = fingerprint {
internal val bootloaderCheckFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("Z")
custom { method, classDef ->
@ -21,7 +21,7 @@ internal val bootloaderCheckFingerprint = fingerprint {
}
}
internal val rootCheckFingerprint = fingerprint {
internal val rootCheckFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("V")
custom { method, classDef ->

View file

@ -3,7 +3,7 @@ package app.revanced.patches.idaustria.detection.signature
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val spoofSignatureFingerprint = fingerprint {
internal val spoofSignatureFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE)
returns("L")
parameters("L")

View file

@ -2,7 +2,7 @@ package app.revanced.patches.inshorts.ad
import app.revanced.patcher.fingerprint
internal val inshortsAdsFingerprint = fingerprint {
internal val inshortsAdsFingerprint by fingerprint {
returns("V")
strings("GoogleAdLoader", "exception in requestAd")
}

View file

@ -3,7 +3,7 @@ package app.revanced.patches.instagram.ads
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val adInjectorFingerprint = fingerprint {
internal val adInjectorFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE)
returns("Z")
parameters("L", "L")

View file

@ -3,9 +3,8 @@ package app.revanced.patches.irplus.ad
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val irplusAdsFingerprint = fingerprint {
internal val irplusAdsFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
returns("V")
parameters("L", "Z")
strings("TAGGED")
}

View file

@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val isLoggedInFingerprint = fingerprint {
internal val isLoggedInFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC, AccessFlags.FINAL)
returns("Z")
opcodes(

View file

@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val hasPurchasedFingerprint = fingerprint {
internal val hasPurchasedFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("Z")
opcodes(

View file

@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val licenseValidationFingerprint = fingerprint {
internal val licenseValidationFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("Z")
parameters("Landroid/content/Context;")

View file

@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val verifySignatureFingerprint = fingerprint(fuzzyPatternScanThreshold = 2) {
internal val verifySignatureFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("Z")
parameters("Landroid/app/Activity;")

View file

@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val isFreeVersionFingerprint = fingerprint {
internal val isFreeVersionFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("Ljava/lang/Boolean;")
parameters("Landroid/content/Context;")

View file

@ -5,7 +5,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.value.StringEncodedValue
internal val createInboxSubTabsFingerprint = fingerprint {
internal val createInboxSubTabsFingerprint by fingerprint {
returns("V")
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
opcodes(
@ -22,7 +22,7 @@ internal val createInboxSubTabsFingerprint = fingerprint {
}
}
internal val loadInboxAdsFingerprint = fingerprint {
internal val loadInboxAdsFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("V")
strings(

View file

@ -14,7 +14,7 @@ val disableSwitchingEmojiToStickerPatch = bytecodePatch(
execute {
switchMessengeInputEmojiButtonFingerprint.method.apply {
val setStringIndex = switchMessengeInputEmojiButtonFingerprint.patternMatch!!.startIndex + 2
val setStringIndex = switchMessengeInputEmojiButtonFingerprint.instructionMatches.first().index + 2
val targetRegister = getInstruction<OneRegisterInstruction>(setStringIndex).registerA
replaceInstruction(setStringIndex, "const-string v$targetRegister, \"expression\"")

View file

@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.dexbacked.value.DexBackedStringEncodedValue
internal val sendTypingIndicatorFingerprint = fingerprint {
internal val sendTypingIndicatorFingerprint by fingerprint {
returns("V")
parameters()
custom { method, classDef ->
@ -16,7 +16,7 @@ internal val sendTypingIndicatorFingerprint = fingerprint {
}
}
internal val switchMessengeInputEmojiButtonFingerprint = fingerprint {
internal val switchMessengeInputEmojiButtonFingerprint by fingerprint {
returns("V")
parameters("L", "Z")
opcodes(

View file

@ -3,8 +3,7 @@ package app.revanced.patches.messenger.navbar
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
internal val createTabConfigurationFingerprint = fingerprint {
strings("MessengerTabConfigurationCreator.createTabConfiguration")
internal val createTabConfigurationFingerprint by fingerprint {
opcodes(
Opcode.INVOKE_DIRECT,
Opcode.MOVE_RESULT,
@ -13,4 +12,5 @@ internal val createTabConfigurationFingerprint = fingerprint {
Opcode.MOVE_RESULT,
Opcode.IF_EQZ,
)
strings("MessengerTabConfigurationCreator.createTabConfiguration")
}

View file

@ -14,7 +14,7 @@ val removeMetaAITabPatch = bytecodePatch(
execute {
createTabConfigurationFingerprint.let {
val moveResultIndex = it.patternMatch!!.startIndex + 1
val moveResultIndex = it.instructionMatches.first().index + 1
val enabledRegister = it.method.getInstruction<OneRegisterInstruction>(moveResultIndex).registerA
it.method.replaceInstruction(
moveResultIndex,

View file

@ -3,7 +3,7 @@ package app.revanced.patches.mifitness.misc.locale
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
internal val syncBluetoothLanguageFingerprint = fingerprint {
internal val syncBluetoothLanguageFingerprint by fingerprint {
opcodes(Opcode.MOVE_RESULT_OBJECT)
custom { method, _ ->
method.name == "syncBluetoothLanguage" &&

View file

@ -17,7 +17,7 @@ val forceEnglishLocalePatch = bytecodePatch(
execute {
syncBluetoothLanguageFingerprint.method.apply {
val resolvePhoneLocaleInstruction = syncBluetoothLanguageFingerprint.patternMatch!!.startIndex
val resolvePhoneLocaleInstruction = syncBluetoothLanguageFingerprint.instructionMatches.first().index
val registerIndexToUpdate = getInstruction<OneRegisterInstruction>(resolvePhoneLocaleInstruction).registerA
replaceInstruction(

View file

@ -3,7 +3,7 @@ package app.revanced.patches.mifitness.misc.login
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val xiaomiAccountManagerConstructorFingerprint = fingerprint {
internal val xiaomiAccountManagerConstructorFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.CONSTRUCTOR)
parameters("Landroid/content/Context;", "Z")
custom { method, _ ->

View file

@ -3,7 +3,7 @@ package app.revanced.patches.music.ad.video
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
internal val showVideoAdsParentFingerprint = fingerprint {
internal val showVideoAdsParentFingerprint by fingerprint {
opcodes(
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,

View file

@ -17,7 +17,7 @@ val hideVideoAdsPatch = bytecodePatch(
execute {
navigate(showVideoAdsParentFingerprint.originalMethod)
.to(showVideoAdsParentFingerprint.patternMatch!!.startIndex + 1)
.to(showVideoAdsParentFingerprint.instructionMatches.first().index + 1)
.stop()
.addInstruction(0, "const/4 p1, 0x0")
}

View file

@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val allowExclusiveAudioPlaybackFingerprint = fingerprint {
internal val allowExclusiveAudioPlaybackFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
parameters()

View file

@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val repeatTrackFingerprint = fingerprint {
internal val repeatTrackFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters("L", "L")

View file

@ -19,7 +19,7 @@ val permanentRepeatPatch = bytecodePatch(
)
execute {
val startIndex = repeatTrackFingerprint.patternMatch!!.endIndex
val startIndex = repeatTrackFingerprint.instructionMatches.last().index
val repeatIndex = startIndex + 1
repeatTrackFingerprint.method.apply {

View file

@ -1,19 +0,0 @@
package app.revanced.patches.music.interaction.permanentshuffle
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val disableShuffleFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters()
opcodes(
Opcode.IGET_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.SGET_OBJECT,
Opcode.IPUT_OBJECT,
Opcode.IGET_OBJECT,
Opcode.INVOKE_VIRTUAL
)
}

View file

@ -1,26 +0,0 @@
package app.revanced.patches.music.interaction.permanentshuffle
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.patch.bytecodePatch
@Deprecated("This patch no longer works and will be removed in the future.")
@Suppress("unused")
val permanentShufflePatch = bytecodePatch(
description = "Permanently remember your shuffle preference " +
"even if the playlist ends or another track is played.",
use = false,
) {
compatibleWith(
"com.google.android.apps.youtube.music"(
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
),
)
execute {
disableShuffleFingerprint.method.addInstruction(0, "return-void")
}
}

View file

@ -4,9 +4,8 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val constructCategoryBarFingerprint = fingerprint {
internal val constructCategoryBarFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
returns("V")
parameters("Landroid/content/Context;", "L", "L", "L")
opcodes(
Opcode.IPUT_OBJECT,

View file

@ -20,7 +20,7 @@ val hideCategoryBar = bytecodePatch(
execute {
constructCategoryBarFingerprint.method.apply {
val insertIndex = constructCategoryBarFingerprint.patternMatch!!.startIndex
val insertIndex = constructCategoryBarFingerprint.instructionMatches.first().index
val register = getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
addInstructions(

View file

@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val hideGetPremiumFingerprint = fingerprint {
internal val hideGetPremiumFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters()
@ -16,7 +16,7 @@ internal val hideGetPremiumFingerprint = fingerprint {
strings("FEmusic_history", "FEmusic_offline")
}
internal val membershipSettingsFingerprint = fingerprint {
internal val membershipSettingsFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Ljava/lang/CharSequence;")
opcodes(

View file

@ -20,7 +20,7 @@ val hideGetPremiumPatch = bytecodePatch(
execute {
hideGetPremiumFingerprint.method.apply {
val insertIndex = hideGetPremiumFingerprint.patternMatch!!.endIndex
val insertIndex = hideGetPremiumFingerprint.instructionMatches.last().index
val setVisibilityInstruction = getInstruction<FiveRegisterInstruction>(insertIndex)
val getPremiumViewRegister = setVisibilityInstruction.registerC

View file

@ -4,9 +4,8 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val pivotBarConstructorFingerprint = fingerprint {
internal val pivotBarConstructorFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
returns("V")
parameters("L", "Z")
opcodes(
Opcode.CHECK_CAST,

View file

@ -28,7 +28,7 @@ val removeUpgradeButtonPatch = bytecodePatch(
execute {
pivotBarConstructorFingerprint.method.apply {
val pivotBarElementFieldReference =
getInstruction(pivotBarConstructorFingerprint.patternMatch!!.endIndex - 1)
getInstruction(pivotBarConstructorFingerprint.instructionMatches.last().index - 1)
.getReference<FieldReference>()
val register = getInstruction<FiveRegisterInstruction>(0).registerC
@ -42,7 +42,7 @@ val removeUpgradeButtonPatch = bytecodePatch(
iput-object v0, v$register, $pivotBarElementFieldReference
""".toInstructions().toMutableList()
val endIndex = pivotBarConstructorFingerprint.patternMatch!!.endIndex
val endIndex = pivotBarConstructorFingerprint.instructionMatches.last().index
// Replace the instruction to retain the label at given index.
replaceInstruction(

View file

@ -3,7 +3,7 @@ package app.revanced.patches.music.misc.androidauto
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val checkCertificateFingerprint = fingerprint {
internal val checkCertificateFingerprint by fingerprint {
returns("Z")
parameters("Ljava/lang/String;")
strings(

View file

@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val backgroundPlaybackDisableFingerprint = fingerprint {
internal val backgroundPlaybackDisableFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("Z")
parameters("L")
@ -21,7 +21,7 @@ internal val backgroundPlaybackDisableFingerprint = fingerprint {
)
}
internal val kidsBackgroundPlaybackPolicyControllerFingerprint = fingerprint {
internal val kidsBackgroundPlaybackPolicyControllerFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters("I", "L", "Z")

View file

@ -1,10 +1,13 @@
package app.revanced.patches.music.misc.extension.hooks
import app.revanced.patcher.string
import app.revanced.patches.shared.misc.extension.extensionHook
internal val applicationInitHook = extensionHook {
returns("V")
parameters()
strings("activity")
instructions(
string("activity")
)
custom { method, _ -> method.name == "onCreate" }
}

View file

@ -2,7 +2,7 @@ package app.revanced.patches.music.misc.gms
import app.revanced.patcher.fingerprint
internal val musicActivityOnCreateFingerprint = fingerprint {
internal val musicActivityOnCreateFingerprint by fingerprint {
returns("V")
parameters("Landroid/os/Bundle;")
custom { method, classDef ->

View file

@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val playerRequestConstructorFingerprint = fingerprint {
internal val playerRequestConstructorFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
strings("player")
}
@ -12,7 +12,7 @@ internal val playerRequestConstructorFingerprint = fingerprint {
/**
* Matches using the class found in [playerRequestConstructorFingerprint].
*/
internal val createPlayerRequestBodyFingerprint = fingerprint {
internal val createPlayerRequestBodyFingerprint by fingerprint {
parameters("L")
returns("V")
opcodes(
@ -26,7 +26,7 @@ internal val createPlayerRequestBodyFingerprint = fingerprint {
/**
* Used to get a reference to other clientInfo fields.
*/
internal val setClientInfoFieldsFingerprint = fingerprint {
internal val setClientInfoFieldsFingerprint by fingerprint {
returns("L")
strings("Google Inc.")
}
@ -34,6 +34,6 @@ internal val setClientInfoFieldsFingerprint = fingerprint {
/**
* Used to get a reference to the clientInfo and clientInfo.clientVersion field.
*/
internal val setClientInfoClientVersionFingerprint = fingerprint {
internal val setClientInfoClientVersionFingerprint by fingerprint {
strings("10.29")
}

View file

@ -44,7 +44,7 @@ val spoofClientPatch = bytecodePatch(
val createPlayerRequestBodyMatch = createPlayerRequestBodyFingerprint.match(playerRequestClass)
val clientInfoContainerClass = createPlayerRequestBodyMatch.method
.getInstruction(createPlayerRequestBodyMatch.patternMatch!!.startIndex)
.getInstruction(createPlayerRequestBodyMatch.instructionMatches.first().index)
.getReference<TypeReference>()!!.type
val clientInfoField = setClientInfoClientVersionFingerprint.method.instructions.first {
@ -61,7 +61,7 @@ val spoofClientPatch = bytecodePatch(
val clientModelField = setClientInfoFieldInstructions[5]
val osVersionField = setClientInfoFieldInstructions[7]
val clientVersionField = setClientInfoClientVersionFingerprint.method
.getInstruction(setClientInfoClientVersionFingerprint.stringMatches!!.first().index + 1)
.getInstruction(setClientInfoClientVersionFingerprint.stringMatches.first().index + 1)
.getReference<FieldReference>()
// Helper method to spoof the client info.
@ -101,7 +101,7 @@ val spoofClientPatch = bytecodePatch(
}
createPlayerRequestBodyMatch.method.apply {
val checkCastIndex = createPlayerRequestBodyMatch.patternMatch!!.startIndex
val checkCastIndex = createPlayerRequestBodyMatch.instructionMatches.first().index
val clientInfoContainerRegister = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
addInstruction(checkCastIndex + 1, "invoke-static {v$clientInfoContainerRegister}, $spoofClientInfoMethod")

View file

@ -2,7 +2,7 @@ package app.revanced.patches.myexpenses.misc.pro
import app.revanced.patcher.fingerprint
internal val isEnabledFingerprint = fingerprint {
internal val isEnabledFingerprint by fingerprint {
returns("Z")
strings("feature", "feature.licenceStatus")
}

View file

@ -3,14 +3,14 @@ package app.revanced.patches.myfitnesspal.ads
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val isPremiumUseCaseImplFingerprint = fingerprint {
internal val isPremiumUseCaseImplFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC)
custom { method, classDef ->
classDef.endsWith("IsPremiumUseCaseImpl;") && method.name == "doWork"
}
}
internal val mainActivityNavigateToNativePremiumUpsellFingerprint = fingerprint {
internal val mainActivityNavigateToNativePremiumUpsellFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("V")
custom { method, classDef ->

View file

@ -3,7 +3,7 @@ package app.revanced.patches.nfctoolsse.misc.pro
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val isLicenseRegisteredFingerprint = fingerprint {
internal val isLicenseRegisteredFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("Z")
strings("kLicenseCheck")

View file

@ -4,14 +4,14 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val jwUtilCreateAdvertisementFingerprint = fingerprint {
internal val jwUtilCreateAdvertisementFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC)
custom { methodDef, classDef ->
classDef.type == "Lnl/sanomamedia/android/nu/video/util/JWUtil;" && methodDef.name == "createAdvertising"
}
}
internal val screenMapperFingerprint = fingerprint {
internal val screenMapperFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Lnl/nu/android/bff/domain/models/screen/ScreenEntity;")
parameters("Lnl/nu/performance/api/client/objects/Screen;")
@ -27,7 +27,7 @@ internal val screenMapperFingerprint = fingerprint {
}
}
internal val nextPageRepositoryImplFingerprint = fingerprint {
internal val nextPageRepositoryImplFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("Lnl/nu/android/bff/domain/models/Page;")
parameters("Lnl/nu/performance/api/client/PacResponse;", "Ljava/lang/String;")

View file

@ -11,7 +11,9 @@ val spoofCertificatePatch = bytecodePatch(
compatibleWith("nl.sanomamedia.android.nu")
execute {
getFingerprintHashForPackageFingerprints.forEach { fingerprint ->
getFingerprintHashForPackageFingerprints.forEach { fingerprintBuilder ->
val fingerprint by fingerprintBuilder
fingerprint.method.addInstructions(
0,
"""

View file

@ -1,9 +0,0 @@
package app.revanced.patches.nyx.misc.pro
import app.revanced.patcher.fingerprint
internal val checkProFingerprint = fingerprint {
custom { method, classDef ->
classDef.endsWith("BillingManager;") && method.name == "isProVersion"
}
}

View file

@ -1,20 +0,0 @@
package app.revanced.patches.nyx.misc.pro
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.bytecodePatch
@Deprecated("This patch will be removed in the future.")
@Suppress("unused")
val unlockProPatch = bytecodePatch {
compatibleWith("com.awedea.nyx")
execute {
checkProFingerprint.method.addInstructions(
0,
"""
const/4 v0, 0x1
return v0
""",
)
}
}

View file

@ -2,7 +2,7 @@ package app.revanced.patches.openinghours.misc.fix.crash
import app.revanced.patcher.fingerprint
internal val setPlaceFingerprint = fingerprint {
internal val setPlaceFingerprint by fingerprint {
returns("V")
parameters("Lde/simon/openinghours/models/Place;")
custom { method, _ ->

View file

@ -2,6 +2,6 @@ package app.revanced.patches.pandora.shared
import app.revanced.patcher.fingerprint
internal val constructUserDataFingerprint = fingerprint {
internal val constructUserDataFingerprint by fingerprint {
strings("hasAudioAds", "skipLimitBehavior")
}

View file

@ -3,7 +3,7 @@ package app.revanced.patches.photomath.detection.deviceid
import com.android.tools.smali.dexlib2.Opcode
import app.revanced.patcher.fingerprint
internal val getDeviceIdFingerprint = fingerprint {
internal val getDeviceIdFingerprint by fingerprint {
returns("Ljava/lang/String;")
parameters()
opcodes(

View file

@ -3,7 +3,7 @@ package app.revanced.patches.photomath.detection.signature
import com.android.tools.smali.dexlib2.Opcode
import app.revanced.patcher.fingerprint
internal val checkSignatureFingerprint = fingerprint {
internal val checkSignatureFingerprint by fingerprint {
opcodes(
Opcode.CONST_STRING,
Opcode.INVOKE_STATIC,

View file

@ -10,7 +10,7 @@ val signatureDetectionPatch = bytecodePatch(
) {
execute {
val replacementIndex = checkSignatureFingerprint.patternMatch!!.endIndex
val replacementIndex = checkSignatureFingerprint.instructionMatches.last().index
val checkRegister =
checkSignatureFingerprint.method.getInstruction<OneRegisterInstruction>(replacementIndex).registerA
checkSignatureFingerprint.method.replaceInstruction(replacementIndex, "const/4 v$checkRegister, 0x1")

View file

@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val hideUpdatePopupFingerprint = fingerprint {
internal val hideUpdatePopupFingerprint by fingerprint {
accessFlags(AccessFlags.FINAL, AccessFlags.PUBLIC)
returns("V")
opcodes(

View file

@ -3,7 +3,7 @@ package app.revanced.patches.photomath.misc.unlock.bookpoint
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val isBookpointEnabledFingerprint = fingerprint {
internal val isBookpointEnabledFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
parameters()

View file

@ -3,7 +3,7 @@ package app.revanced.patches.photomath.misc.unlock.plus
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val isPlusUnlockedFingerprint = fingerprint{
internal val isPlusUnlockedFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
strings("genius")

View file

@ -3,7 +3,7 @@ package app.revanced.patches.piccomafr.misc
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val getAndroidIdFingerprint = fingerprint {
internal val getAndroidIdFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Ljava/lang/String;")
parameters("Landroid/content/Context;")

View file

@ -3,19 +3,18 @@ package app.revanced.patches.piccomafr.tracking
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val appMeasurementFingerprint = fingerprint {
internal val appMeasurementFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("V")
strings("config/app/", "Fetching remote configuration")
}
internal val facebookSDKFingerprint = fingerprint {
internal val facebookSDKFingerprint by fingerprint {
accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR)
returns("V")
strings("instagram.com", "facebook.com")
}
internal val firebaseInstallFingerprint = fingerprint {
internal val firebaseInstallFingerprint by fingerprint {
accessFlags(AccessFlags.PRIVATE)
strings(
"https://%s/%s/%s",

View file

@ -3,7 +3,7 @@ package app.revanced.patches.pixiv.ads
import com.android.tools.smali.dexlib2.AccessFlags
import app.revanced.patcher.fingerprint
internal val shouldShowAdsFingerprint = fingerprint {
internal val shouldShowAdsFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z")
custom { methodDef, classDef ->

View file

@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal val enterServerInsertedAdBreakStateFingerprint = fingerprint {
internal val enterServerInsertedAdBreakStateFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC)
parameters("Lcom/amazon/avod/fsm/Trigger;")
returns("V")
@ -19,7 +19,7 @@ internal val enterServerInsertedAdBreakStateFingerprint = fingerprint {
}
}
internal val doTriggerFingerprint = fingerprint {
internal val doTriggerFingerprint by fingerprint {
accessFlags(AccessFlags.PROTECTED)
returns("V")
opcodes(

View file

@ -3,7 +3,7 @@ package app.revanced.patches.rar.misc.annoyances.purchasereminder
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val showReminderFingerprint = fingerprint {
internal val showReminderFingerprint by fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
returns("V")
custom { method, _ ->

View file

@ -2,7 +2,7 @@ package app.revanced.patches.reddit.ad.comments
import app.revanced.patcher.fingerprint
internal val hideCommentAdsFingerprint = fingerprint {
internal val hideCommentAdsFingerprint by fingerprint {
strings(
"link",
// CommentPageRepository is not returning a link object

Some files were not shown because too many files have changed in this diff Show more