mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2025-05-11 13:15:39 +02:00
Merge 2fa35c73ac
into 25e7dc1568
This commit is contained in:
commit
4084c7439a
335 changed files with 2594 additions and 3240 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
|
@ -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())
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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;"
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
)
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;")
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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;")
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
}
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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;") }
|
||||
}
|
|
@ -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 ->
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
}
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
}
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;")
|
||||
|
|
|
@ -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;")
|
||||
|
|
|
@ -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;")
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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\"")
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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" &&
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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, _ ->
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
|
@ -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")
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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" }
|
||||
}
|
||||
|
|
|
@ -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 ->
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
}
|
|
@ -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 ->
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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;")
|
||||
|
|
|
@ -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,
|
||||
"""
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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, _ ->
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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;")
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 ->
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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, _ ->
|
||||
|
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue