mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-08 18:33:57 +01:00
Compare commits
9 Commits
v5.0.3-dev
...
v5.1.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10f221f374 | ||
|
|
ba1aab6d4d | ||
|
|
01cc8e0abf | ||
|
|
518958350d | ||
|
|
a625309d1f | ||
|
|
a7fc08a491 | ||
|
|
97b129e088 | ||
|
|
8c6c8e0442 | ||
|
|
16c090d2c0 |
21
CHANGELOG.md
21
CHANGELOG.md
@@ -1,3 +1,24 @@
|
||||
# [5.1.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.1.0-dev.2...v5.1.0-dev.3) (2024-11-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Miniplayer:** Add option to disable miniplayer ([#3961](https://github.com/ReVanced/revanced-patches/issues/3961)) ([e565cdb](https://github.com/ReVanced/revanced-patches/commit/e565cdb583aacfc0052d12c430f56fd9abd5bf00))
|
||||
|
||||
# [5.1.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.1.0-dev.1...v5.1.0-dev.2) (2024-11-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - SponsorBlock:** Fix create new segment crash on tablet custom roms ([#3946](https://github.com/ReVanced/revanced-patches/issues/3946)) ([a0da377](https://github.com/ReVanced/revanced-patches/commit/a0da377ba8f90ba39e905ed9730b3e819633bd50))
|
||||
|
||||
# [5.1.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.0.3-dev.5...v5.1.0-dev.1) (2024-11-20)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube:** Support version `19.45.38` ([#3938](https://github.com/ReVanced/revanced-patches/issues/3938)) ([7c4e3fe](https://github.com/ReVanced/revanced-patches/commit/7c4e3fe97e8cbbb8cf16a2fb95f64223ca2bd7ef))
|
||||
|
||||
## [5.0.3-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.0.3-dev.4...v5.0.3-dev.5) (2024-11-18)
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package app.revanced.extension.shared.checks;
|
||||
|
||||
// Fields are set by the patch. Do not modify.
|
||||
// Fields are not final, because the compiler is inlining them.
|
||||
/**
|
||||
* Fields are set by the patch. Do not modify.
|
||||
* Fields are not final, because the compiler is inlining them.
|
||||
*
|
||||
* @noinspection CanBeFinal
|
||||
*/
|
||||
final class PatchInfo {
|
||||
static long PATCH_TIME = 0L;
|
||||
|
||||
|
||||
@@ -11,9 +11,6 @@ import static android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
|
||||
|
||||
public class ShowOnLockscreenPatch {
|
||||
/**
|
||||
* @noinspection deprecation
|
||||
*/
|
||||
public static Window getWindow(AppCompatActivity activity, float brightness) {
|
||||
Window window = activity.getWindow();
|
||||
|
||||
|
||||
@@ -24,9 +24,20 @@ public final class MiniplayerPatch {
|
||||
* Mini player type. Null fields indicates to use the original un-patched value.
|
||||
*/
|
||||
public enum MiniplayerType {
|
||||
/**
|
||||
* Disabled. When swiped down the miniplayer is immediately closed.
|
||||
* Only available with 19.43+
|
||||
*/
|
||||
DISABLED(false, null),
|
||||
/** Unmodified type, and same as un-patched. */
|
||||
ORIGINAL(null, null),
|
||||
/**
|
||||
* Exactly the same as MINIMAL, and only here for migration of user settings.
|
||||
* Eventually this should be deleted.
|
||||
*/
|
||||
@Deprecated
|
||||
PHONE(false, null),
|
||||
MINIMAL(false, null),
|
||||
TABLET(true, null),
|
||||
MODERN_1(null, 1),
|
||||
MODERN_2(null, 2),
|
||||
@@ -164,6 +175,18 @@ public final class MiniplayerPatch {
|
||||
OPACITY_LEVEL = (opacity * 255) / 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
* Enables a handler that immediately closes the miniplayer when the video is minimized,
|
||||
* effectively disabling the miniplayer.
|
||||
*/
|
||||
public static boolean getMiniplayerOnCloseHandler(boolean original) {
|
||||
return CURRENT_TYPE == ORIGINAL
|
||||
? original
|
||||
: CURRENT_TYPE == DISABLED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
|
||||
@@ -147,6 +147,7 @@ public class ReturnYouTubeDislikeApi {
|
||||
*/
|
||||
private static void randomlyWaitIfLocallyDebugging() {
|
||||
final boolean DEBUG_RANDOMLY_DELAY_NETWORK_CALLS = false; // set true to debug UI
|
||||
//noinspection ConstantValue
|
||||
if (DEBUG_RANDOMLY_DELAY_NETWORK_CALLS) {
|
||||
final long amountOfTimeToWaste = (long) (Math.random()
|
||||
* (API_GET_VOTES_TCP_TIMEOUT_MILLISECONDS + API_GET_VOTES_HTTP_TIMEOUT_MILLISECONDS));
|
||||
@@ -187,6 +188,7 @@ public class ReturnYouTubeDislikeApi {
|
||||
*/
|
||||
private static boolean checkIfRateLimitWasHit(int httpResponseCode) {
|
||||
final boolean DEBUG_RATE_LIMIT = false; // set to true, to verify rate limit works
|
||||
//noinspection ConstantValue
|
||||
if (DEBUG_RATE_LIMIT) {
|
||||
final double RANDOM_RATE_LIMIT_PERCENTAGE = 0.2; // 20% chance of a triggering a rate limit
|
||||
if (Math.random() < RANDOM_RATE_LIMIT_PERCENTAGE) {
|
||||
|
||||
@@ -272,7 +272,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true,
|
||||
"revanced_spoof_device_dimensions_user_dialog_message");
|
||||
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE, false, false);
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true,"revanced_spoof_video_streams_user_dialog_message");
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
|
||||
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofVideoStreamsPatch.ForceiOSAVCAvailability());
|
||||
@@ -375,15 +375,20 @@ public class Settings extends BaseSettings {
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING, SB_PRIVATE_USER_ID);
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
||||
|
||||
// Old spoof versions that no longer work reliably.
|
||||
if (SpoofAppVersionPatch.isSpoofingToLessThan(SPOOF_APP_VERSION_TARGET.defaultValue)) {
|
||||
Logger.printInfo(() -> "Resetting spoof app version target");
|
||||
SPOOF_APP_VERSION_TARGET.resetToDefault();
|
||||
}
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
||||
// Migrate renamed enum type.
|
||||
if (MINIPLAYER_TYPE.get() == PHONE) {
|
||||
MINIPLAYER_TYPE.save(MINIMAL);
|
||||
}
|
||||
|
||||
// endregion
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ enum class PlayerType {
|
||||
|
||||
companion object {
|
||||
|
||||
private val nameToPlayerType = values().associateBy { it.name }
|
||||
private val nameToPlayerType = PlayerType.entries.associateBy { it.name }
|
||||
|
||||
@JvmStatic
|
||||
fun setFromString(enumName: String) {
|
||||
|
||||
@@ -22,7 +22,7 @@ enum class VideoState {
|
||||
|
||||
companion object {
|
||||
|
||||
private val nameToVideoState = values().associateBy { it.name }
|
||||
private val nameToVideoState = VideoState.entries.associateBy { it.name }
|
||||
|
||||
@JvmStatic
|
||||
fun setFromString(enumName: String) {
|
||||
|
||||
@@ -382,7 +382,6 @@ public class SponsorBlockUtils {
|
||||
return statsNumberFormatter.format(viewCount);
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private static long parseSegmentTime(@NonNull String time) {
|
||||
Matcher matcher = manualEditTimePattern.matcher(time);
|
||||
if (!matcher.matches()) {
|
||||
|
||||
@@ -113,6 +113,7 @@ public class SBRequester {
|
||||
// Could benefit from:
|
||||
// 1) collection of YouTube videos with test segment times (verify client skip timing matches the video, verify seekbar draws correctly)
|
||||
// 2) unit tests (verify everything else)
|
||||
//noinspection ConstantValue
|
||||
if (false) {
|
||||
segments.clear();
|
||||
// Test auto-hide skip button:
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
||||
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
|
||||
@@ -107,12 +107,13 @@ public final class NewSegmentLayout extends FrameLayout {
|
||||
*/
|
||||
private void initializeButton(final Context context, final String resourceIdentifierName,
|
||||
final ButtonOnClickHandlerFunction handler, final String debugMessage) {
|
||||
final ImageButton button = findViewById(getResourceIdentifier(context, resourceIdentifierName, "id"));
|
||||
ImageButton button = findViewById(getResourceIdentifier(context, resourceIdentifierName, "id"));
|
||||
|
||||
// Add ripple effect
|
||||
button.setBackgroundResource(rippleEffectId);
|
||||
RippleDrawable rippleDrawable = (RippleDrawable) button.getBackground();
|
||||
rippleDrawable.setColor(rippleColorStateList);
|
||||
RippleDrawable rippleDrawable = new RippleDrawable(
|
||||
rippleColorStateList, null, null
|
||||
);
|
||||
button.setBackground(rippleDrawable);
|
||||
|
||||
button.setOnClickListener((v) -> {
|
||||
handler.apply();
|
||||
@@ -121,7 +122,7 @@ public final class NewSegmentLayout extends FrameLayout {
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface ButtonOnClickHandlerFunction {
|
||||
private interface ButtonOnClickHandlerFunction {
|
||||
void apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
||||
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
|
||||
@@ -7,8 +7,6 @@ import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.TypedValue
|
||||
import android.view.HapticFeedbackConstants
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import app.revanced.extension.shared.StringRef.str
|
||||
@@ -59,8 +57,8 @@ class SwipeControlsOverlayLayout(
|
||||
val compoundIconPadding = 4.applyDimension(context, TypedValue.COMPLEX_UNIT_DIP)
|
||||
feedbackTextView = TextView(context).apply {
|
||||
layoutParams = LayoutParams(
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||
LayoutParams.WRAP_CONTENT,
|
||||
LayoutParams.WRAP_CONTENT,
|
||||
).apply {
|
||||
addRule(CENTER_IN_PARENT, TRUE)
|
||||
setPadding(
|
||||
@@ -91,7 +89,7 @@ class SwipeControlsOverlayLayout(
|
||||
|
||||
private val feedbackHideHandler = Handler(Looper.getMainLooper())
|
||||
private val feedbackHideCallback = Runnable {
|
||||
feedbackTextView.visibility = View.GONE
|
||||
feedbackTextView.visibility = GONE
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.0.3-dev.5
|
||||
version = 5.1.0-dev.3
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
package app.revanced.patches.facebook.ads.mainfeed
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
@@ -4,14 +4,11 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import baseModelMapperFingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31i
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
import getSponsoredDataModelTemplateFingerprint
|
||||
import getStoryVisibilityFingerprint
|
||||
|
||||
@Suppress("unused")
|
||||
val hideSponsoredStoriesPatch = bytecodePatch(
|
||||
|
||||
@@ -4,7 +4,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val enableCustomTabsPatch = bytecodePatch(
|
||||
|
||||
@@ -4,7 +4,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val restoreHiddenBackUpWhileChargingTogglePatch = bytecodePatch(
|
||||
|
||||
@@ -5,7 +5,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val removeDeviceRestrictionsPatch = bytecodePatch(
|
||||
|
||||
@@ -4,7 +4,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val disableSwitchingEmojiToStickerPatch = bytecodePatch(
|
||||
|
||||
@@ -7,7 +7,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val hideGetPremiumPatch = bytecodePatch(
|
||||
name = "Hide 'Get Music Premium' label",
|
||||
description = "Hides the \"Get Music Premium\" label from the account menu and settings.",
|
||||
|
||||
@@ -4,7 +4,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val backgroundPlaybackPatch = bytecodePatch(
|
||||
name = "Remove background playback restrictions",
|
||||
description = "Removes restrictions on background playback, including playing kids videos in the background.",
|
||||
|
||||
@@ -21,7 +21,7 @@ internal val createTabsFingerprint = fingerprint {
|
||||
if (reference.definingClass != ACTIVITY_TAB_DESCRIPTOR) return@any false
|
||||
if (reference.returnType != "[${ACTIVITY_TAB_DESCRIPTOR}") return@any false
|
||||
true
|
||||
} ?: false
|
||||
} == true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ internal val showNotificationFingerprint = fingerprint {
|
||||
}
|
||||
}
|
||||
true
|
||||
} ?: false
|
||||
} == true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import app.revanced.patches.twitch.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.twitch.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.twitch.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val audioAdsPatch = bytecodePatch(
|
||||
name = "Block audio ads",
|
||||
description = "Blocks audio ads in streams and VODs.",
|
||||
|
||||
@@ -9,7 +9,6 @@ import app.revanced.patches.twitch.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.twitch.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.twitch.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val embeddedAdsPatch = bytecodePatch(
|
||||
name = "Block embedded ads",
|
||||
description = "Blocks embedded stream ads using services like Luminous or PurpleAdBlocker.",
|
||||
|
||||
@@ -12,7 +12,6 @@ import app.revanced.patches.twitch.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.twitch.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.twitch.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val showDeletedMessagesPatch = bytecodePatch(
|
||||
name = "Show deleted messages",
|
||||
description = "Shows deleted chat messages behind a clickable spoiler.",
|
||||
|
||||
@@ -11,7 +11,6 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.twitch.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.twitch.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val autoClaimChannelPointsPatch = bytecodePatch(
|
||||
name = "Auto claim channel points",
|
||||
description = "Automatically claim Channel Points.",
|
||||
|
||||
@@ -9,7 +9,6 @@ import app.revanced.patches.twitch.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.twitch.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.twitch.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val debugModePatch = bytecodePatch(
|
||||
name = "Debug mode",
|
||||
description = "Enables Twitch's internal debugging mode.",
|
||||
|
||||
@@ -75,6 +75,7 @@ val hideAdsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ val hideGetPremiumPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val videoAdsPatch = bytecodePatch(
|
||||
name = "Video ads",
|
||||
description = "Adds an option to remove ads in the video player.",
|
||||
@@ -30,6 +29,7 @@ val videoAdsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ val copyVideoUrlPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
val removeViewerDiscretionDialogPatch = bytecodePatch(
|
||||
name = "Remove viewer discretion dialog",
|
||||
description = "Adds an option to remove the dialog that appears when opening a video that has been age-restricted " +
|
||||
@@ -31,6 +30,7 @@ val removeViewerDiscretionDialogPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -74,6 +74,7 @@ val downloadsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val disablePreciseSeekingGesturePatch = bytecodePatch(
|
||||
name = "Disable precise seeking gesture",
|
||||
description = "Adds an option to disable precise seeking when swiping up on the seekbar.",
|
||||
@@ -30,6 +29,7 @@ val disablePreciseSeekingGesturePatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
@Suppress("unused")
|
||||
val enableSeekbarTappingPatch = bytecodePatch(
|
||||
name = "Seekbar tapping",
|
||||
description = "Adds an option to enable tap-to-seek on the seekbar of the video player.",
|
||||
@@ -33,6 +32,7 @@ val enableSeekbarTappingPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -17,12 +17,10 @@ import app.revanced.util.getReference
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
internal const val EXTENSION_METHOD_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/SlideToSeekPatch;->isSlideToSeekDisabled(Z)Z"
|
||||
|
||||
@Suppress("unused")
|
||||
val enableSlideToSeekPatch = bytecodePatch(
|
||||
name = "Enable slide to seek",
|
||||
description = "Adds an option to enable slide to seek " +
|
||||
@@ -44,6 +42,7 @@ val enableSlideToSeekPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/SeekbarThumbnailsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val seekbarThumbnailsPatch = bytecodePatch(
|
||||
name = "Seekbar thumbnails",
|
||||
description = "Adds an option to use high quality fullscreen seekbar thumbnails. " +
|
||||
@@ -36,6 +35,7 @@ val seekbarThumbnailsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -71,6 +71,7 @@ val swipeControlsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.shared.subtitleButtonControllerFingerprint
|
||||
|
||||
@Suppress("unused")
|
||||
val autoCaptionsPatch = bytecodePatch(
|
||||
name = "Disable auto captions",
|
||||
description = "Adds an option to disable captions from being automatically enabled.",
|
||||
@@ -29,6 +28,7 @@ val autoCaptionsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -41,7 +41,17 @@ val customBrandingPatch = resourcePatch(
|
||||
) {
|
||||
dependsOn(versionCheckPatch)
|
||||
|
||||
compatibleWith("com.google.android.youtube")
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"18.38.44",
|
||||
"18.49.37",
|
||||
"19.16.39",
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
val appName by stringOption(
|
||||
key = "appName",
|
||||
|
||||
@@ -39,7 +39,17 @@ val changeHeaderPatch = resourcePatch(
|
||||
) {
|
||||
dependsOn(versionCheckPatch)
|
||||
|
||||
compatibleWith("com.google.android.youtube")
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"18.38.44",
|
||||
"18.49.37",
|
||||
"19.16.39",
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
)
|
||||
)
|
||||
|
||||
val header by stringOption(
|
||||
key = "header",
|
||||
|
||||
@@ -10,7 +10,6 @@ import app.revanced.patches.youtube.misc.litho.filter.addLithoFilter
|
||||
import app.revanced.patches.youtube.misc.litho.filter.lithoFilterPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
|
||||
@Suppress("unused")
|
||||
val hideButtonsPatch = resourcePatch(
|
||||
name = "Hide video action buttons",
|
||||
description = "Adds options to hide action buttons (such as the Download button) under videos.",
|
||||
@@ -29,6 +28,7 @@ val hideButtonsPatch = resourcePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/NavigationButtonsPatch;"
|
||||
@@ -43,6 +42,7 @@ val navigationButtonsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ val hidePlayerOverlayButtonsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ val hideEndscreenCardsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/DisableFullscreenAmbientModePatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val disableFullscreenAmbientModePatch = bytecodePatch(
|
||||
name = "Disable fullscreen ambient mode",
|
||||
description = "Adds an option to disable the ambient mode when in fullscreen.",
|
||||
@@ -36,6 +35,7 @@ val disableFullscreenAmbientModePatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -107,7 +107,6 @@ private const val CUSTOM_FILTER_CLASS_NAME =
|
||||
private const val KEYWORD_FILTER_CLASS_NAME =
|
||||
"Lapp/revanced/extension/youtube/patches/components/KeywordContentFilter;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideLayoutComponentsPatch = bytecodePatch(
|
||||
name = "Hide layout components",
|
||||
description = "Adds options to hide general layout components.",
|
||||
@@ -129,6 +128,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ val hideInfoCardsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import app.revanced.patches.youtube.misc.playertype.playerTypeHookPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val hidePlayerFlyoutMenuPatch = bytecodePatch(
|
||||
name = "Hide player flyout menu items",
|
||||
description = "Adds options to hide menu items that appear when pressing the gear icon in the video player.",
|
||||
@@ -31,6 +30,7 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/DisableRollingNumberAnimationsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val disableRollingNumberAnimationPatch = bytecodePatch(
|
||||
name = "Disable rolling number animations",
|
||||
description = "Adds an option to disable rolling number animations of video view count, user likes, and upload time.",
|
||||
@@ -36,6 +35,7 @@ val disableRollingNumberAnimationPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.shared.seekbarFingerprint
|
||||
import app.revanced.patches.youtube.shared.seekbarOnDrawFingerprint
|
||||
|
||||
@Suppress("unused")
|
||||
val hideSeekbarPatch = bytecodePatch(
|
||||
name = "Hide seekbar",
|
||||
description = "Adds an option to hide the seekbar.",
|
||||
@@ -32,6 +31,7 @@ val hideSeekbarPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
internal var reelMultipleItemShelfId = -1L
|
||||
private set
|
||||
@@ -189,6 +188,7 @@ val hideShortsComponentsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ val disableSuggestedVideoEndScreenPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val hideTimestampPatch = bytecodePatch(
|
||||
name = "Hide timestamp",
|
||||
description = "Adds an option to hide the timestamp in the bottom left of the video player.",
|
||||
@@ -28,6 +27,7 @@ val hideTimestampPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ internal const val MINIPLAYER_DRAG_DROP_FEATURE_KEY = 45628752L
|
||||
internal const val MINIPLAYER_HORIZONTAL_DRAG_FEATURE_KEY = 45658112L
|
||||
internal const val MINIPLAYER_ROUNDED_CORNERS_FEATURE_KEY = 45652224L
|
||||
internal const val MINIPLAYER_INITIAL_SIZE_FEATURE_KEY = 45640023L
|
||||
internal const val MINIPLAYER_DISABLED_FEATURE_KEY = 45657015L
|
||||
|
||||
internal val miniplayerModernConstructorFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
@@ -50,6 +51,12 @@ internal val miniplayerModernConstructorFingerprint = fingerprint {
|
||||
literal { 45623000L }
|
||||
}
|
||||
|
||||
internal val miniplayerOnCloseHandlerFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
literal { MINIPLAYER_DISABLED_FEATURE_KEY }
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches using the class found in [miniplayerModernViewParentFingerprint].
|
||||
*/
|
||||
|
||||
@@ -147,8 +147,7 @@ val miniplayerPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"18.38.44",
|
||||
"18.49.37",
|
||||
// 18.49.37 // Could be supported, but no reason when 19.16 exists and has modern types.
|
||||
// 19.14.43 // Incomplete code for modern miniplayers.
|
||||
// 19.15.36 // Different code for handling subtitle texts and not worth supporting.
|
||||
"19.16.39", // First with modern miniplayers.
|
||||
@@ -170,6 +169,7 @@ val miniplayerPatch = bytecodePatch(
|
||||
// 19.33.35
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
@@ -178,58 +178,60 @@ val miniplayerPatch = bytecodePatch(
|
||||
|
||||
val preferences = mutableSetOf<BasePreference>()
|
||||
|
||||
if (!is_19_16_or_greater) {
|
||||
preferences += ListPreference(
|
||||
"revanced_miniplayer_type",
|
||||
summaryKey = null,
|
||||
entriesKey = "revanced_miniplayer_type_legacy_entries",
|
||||
entryValuesKey = "revanced_miniplayer_type_legacy_entry_values",
|
||||
)
|
||||
} else {
|
||||
preferences += ListPreference(
|
||||
"revanced_miniplayer_type",
|
||||
summaryKey = null,
|
||||
)
|
||||
|
||||
if (is_19_25_or_greater) {
|
||||
if (!is_19_29_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_double_tap_action")
|
||||
}
|
||||
preferences += SwitchPreference("revanced_miniplayer_drag_and_drop")
|
||||
}
|
||||
|
||||
preferences +=
|
||||
if (is_19_43_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_horizontal_drag")
|
||||
}
|
||||
|
||||
if (is_19_36_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_rounded_corners")
|
||||
}
|
||||
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_subtext")
|
||||
|
||||
preferences += if (is_19_26_or_greater) {
|
||||
SwitchPreference("revanced_miniplayer_hide_expand_close")
|
||||
ListPreference(
|
||||
"revanced_miniplayer_type",
|
||||
summaryKey = null,
|
||||
)
|
||||
} else {
|
||||
SwitchPreference(
|
||||
key = "revanced_miniplayer_hide_expand_close",
|
||||
titleKey = "revanced_miniplayer_hide_expand_close_legacy_title",
|
||||
summaryOnKey = "revanced_miniplayer_hide_expand_close_legacy_summary_on",
|
||||
summaryOffKey = "revanced_miniplayer_hide_expand_close_legacy_summary_off",
|
||||
ListPreference(
|
||||
"revanced_miniplayer_type",
|
||||
summaryKey = null,
|
||||
entriesKey = "revanced_miniplayer_type_legacy_entries",
|
||||
entryValuesKey = "revanced_miniplayer_type_legacy_entry_values",
|
||||
)
|
||||
}
|
||||
|
||||
if (!is_19_26_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_rewind_forward")
|
||||
if (is_19_25_or_greater) {
|
||||
if (!is_19_29_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_double_tap_action")
|
||||
}
|
||||
|
||||
if (is_19_26_or_greater) {
|
||||
preferences += TextPreference("revanced_miniplayer_width_dip", inputType = InputType.NUMBER)
|
||||
}
|
||||
|
||||
preferences += TextPreference("revanced_miniplayer_opacity", inputType = InputType.NUMBER)
|
||||
preferences += SwitchPreference("revanced_miniplayer_drag_and_drop")
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_horizontal_drag")
|
||||
}
|
||||
|
||||
if (is_19_36_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_rounded_corners")
|
||||
}
|
||||
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_subtext")
|
||||
|
||||
preferences += if (is_19_26_or_greater) {
|
||||
SwitchPreference("revanced_miniplayer_hide_expand_close")
|
||||
} else {
|
||||
SwitchPreference(
|
||||
key = "revanced_miniplayer_hide_expand_close",
|
||||
titleKey = "revanced_miniplayer_hide_expand_close_legacy_title",
|
||||
summaryOnKey = "revanced_miniplayer_hide_expand_close_legacy_summary_on",
|
||||
summaryOffKey = "revanced_miniplayer_hide_expand_close_legacy_summary_off",
|
||||
)
|
||||
}
|
||||
|
||||
if (!is_19_26_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_rewind_forward")
|
||||
}
|
||||
|
||||
if (is_19_26_or_greater) {
|
||||
preferences += TextPreference("revanced_miniplayer_width_dip", inputType = InputType.NUMBER)
|
||||
}
|
||||
|
||||
preferences += TextPreference("revanced_miniplayer_opacity", inputType = InputType.NUMBER)
|
||||
|
||||
PreferenceScreen.PLAYER.addPreferences(
|
||||
PreferenceScreenPreference(
|
||||
key = "revanced_miniplayer_screen",
|
||||
@@ -349,11 +351,6 @@ val miniplayerPatch = bytecodePatch(
|
||||
it.method.insertLegacyTabletMiniplayerOverride(it.patternMatch!!.endIndex)
|
||||
}
|
||||
|
||||
if (!is_19_16_or_greater) {
|
||||
// Return here, as patch below is only for the current versions of the app.
|
||||
return@execute
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Enable modern miniplayer.
|
||||
@@ -379,13 +376,6 @@ val miniplayerPatch = bytecodePatch(
|
||||
)
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
MINIPLAYER_HORIZONTAL_DRAG_FEATURE_KEY,
|
||||
"setHorizontalDrag",
|
||||
)
|
||||
}
|
||||
|
||||
if (is_19_25_or_greater) {
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
MINIPLAYER_MODERN_FEATURE_LEGACY_KEY,
|
||||
@@ -442,6 +432,18 @@ val miniplayerPatch = bytecodePatch(
|
||||
)
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
miniplayerOnCloseHandlerFingerprint.insertLiteralValueBooleanOverride(
|
||||
MINIPLAYER_DISABLED_FEATURE_KEY,
|
||||
"getMiniplayerOnCloseHandler"
|
||||
)
|
||||
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
MINIPLAYER_HORIZONTAL_DRAG_FEATURE_KEY,
|
||||
"setHorizontalDrag",
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Fix 19.16 using mixed up drawables for tablet modern.
|
||||
|
||||
@@ -9,7 +9,6 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val playerPopupPanelsPatch = bytecodePatch(
|
||||
name = "Disable player popup panels",
|
||||
description = "Adds an option to disable panels (such as live chat) from opening automatically.",
|
||||
@@ -28,6 +27,7 @@ val playerPopupPanelsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ val playerControlsBackgroundPatch = resourcePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ val customPlayerOverlayOpacityPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.TypeReference
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/ReturnYouTubeDislikePatch;"
|
||||
@@ -39,7 +38,6 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
private const val FILTER_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/components/ReturnYouTubeDislikeFilterPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val returnYouTubeDislikePatch = bytecodePatch(
|
||||
name = "Return YouTube Dislike",
|
||||
description = "Adds an option to show the dislike count of videos with Return YouTube Dislike.",
|
||||
@@ -61,6 +59,7 @@ val returnYouTubeDislikePatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/WideSearchbarPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val wideSearchbarPatch = bytecodePatch(
|
||||
name = "Wide searchbar",
|
||||
description = "Adds an option to replace the search icon with a wide search bar. This will hide the YouTube logo when active.",
|
||||
@@ -36,6 +35,7 @@ val wideSearchbarPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/ShortsAutoplayPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val shortsAutoplayPatch = bytecodePatch(
|
||||
name = "Shorts autoplay",
|
||||
description = "Adds options to automatically play the next Short.",
|
||||
@@ -38,6 +37,7 @@ val shortsAutoplayPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -117,6 +117,7 @@ val sponsorBlockPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/spoof/SpoofAppVersionPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofAppVersionPatch = bytecodePatch(
|
||||
name = "Spoof app version",
|
||||
description = "Adds an option to trick YouTube into thinking you are running an older version of the app. " +
|
||||
@@ -39,6 +38,7 @@ val spoofAppVersionPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/ChangeStartPagePatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val changeStartPagePatch = bytecodePatch(
|
||||
name = "Change start page",
|
||||
description = "Adds an option to set which page the app opens in instead of the homepage.",
|
||||
@@ -36,6 +35,7 @@ val changeStartPagePatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/DisableResumingStartupShortsPlayerPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val disableResumingShortsOnStartupPatch = bytecodePatch(
|
||||
name = "Disable resuming Shorts on startup",
|
||||
description = "Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.",
|
||||
@@ -38,6 +37,7 @@ val disableResumingShortsOnStartupPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
|
||||
const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/TabletLayoutPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val enableTabletLayoutPatch = bytecodePatch(
|
||||
name = "Enable tablet layout",
|
||||
description = "Adds an option to enable tablet layout.",
|
||||
@@ -33,6 +32,7 @@ val enableTabletLayoutPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
|
||||
internal const val GRADIENT_LOADING_SCREEN_AB_CONSTANT = 45412406L
|
||||
|
||||
@Suppress("unused")
|
||||
val themePatch = bytecodePatch(
|
||||
name = "Theme",
|
||||
description = "Adds options for theming and applies a custom background theme (dark background theme defaults to amoled black).",
|
||||
@@ -201,6 +200,7 @@ val themePatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/AlternativeThumbnailsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val alternativeThumbnailsPatch = bytecodePatch(
|
||||
name = "Alternative thumbnails",
|
||||
description = "Adds options to replace video thumbnails using the DeArrow API or image captures from the video.",
|
||||
@@ -40,6 +39,7 @@ val alternativeThumbnailsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/BypassImageRegionRestrictionsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val bypassImageRegionRestrictionsPatch = bytecodePatch(
|
||||
name = "Bypass image region restrictions",
|
||||
description = "Adds an option to use a different host for user avatar and channel images " +
|
||||
@@ -34,6 +33,7 @@ val bypassImageRegionRestrictionsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/announcements/AnnouncementsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val announcementsPatch = bytecodePatch(
|
||||
name = "Announcements",
|
||||
description = "Adds an option to show announcements from ReVanced on app startup.",
|
||||
@@ -30,6 +29,7 @@ val announcementsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -11,10 +11,8 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.shared.autoRepeatFingerprint
|
||||
import app.revanced.patches.youtube.shared.autoRepeatParentFingerprint
|
||||
import org.stringtemplate.v4.compiler.Bytecode.instructions
|
||||
|
||||
// TODO: Rename this patch to AlwaysRepeatPatch (as well as strings and references in the extension).
|
||||
@Suppress("unused")
|
||||
val autoRepeatPatch = bytecodePatch(
|
||||
name = "Always repeat",
|
||||
description = "Adds an option to always repeat videos when they end.",
|
||||
@@ -32,6 +30,7 @@ val autoRepeatPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ val backgroundPlaybackPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.android.tools.smali.dexlib2.Opcode
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/EnableDebuggingPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val enableDebuggingPatch = bytecodePatch(
|
||||
name = "Enable debugging",
|
||||
description = "Adds options for debugging.",
|
||||
@@ -36,6 +35,7 @@ val enableDebuggingPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/spoof/SpoofDeviceDimensionsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofDeviceDimensionsPatch = bytecodePatch(
|
||||
name = "Spoof device dimensions",
|
||||
description = "Adds an option to spoof the device dimensions which can unlock higher video qualities.",
|
||||
@@ -31,6 +30,7 @@ val spoofDeviceDimensionsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/CheckWatchHistoryDomainNameResolutionPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val checkWatchHistoryDomainNameResolutionPatch = bytecodePatch(
|
||||
name = "Check watch history domain name resolution",
|
||||
description = "Checks if the device DNS server is preventing user watch history from being saved.",
|
||||
@@ -24,6 +23,7 @@ val checkWatchHistoryDomainNameResolutionPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ val spoofVideoStreamsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.android.tools.smali.dexlib2.iface.Method
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
@Suppress("unused")
|
||||
val bypassURLRedirectsPatch = bytecodePatch(
|
||||
name = "Bypass URL redirects",
|
||||
description = "Adds an option to bypass URL redirects and open the original URL directly.",
|
||||
@@ -37,6 +36,7 @@ val bypassURLRedirectsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||
|
||||
@Suppress("unused")
|
||||
val openLinksExternallyPatch = bytecodePatch(
|
||||
name = "Open links externally",
|
||||
description = "Adds an option to always open links in your browser instead of in the in-app-browser.",
|
||||
@@ -48,6 +47,7 @@ val openLinksExternallyPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/RemoveTrackingQueryParameterPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val removeTrackingQueryParameterPatch = bytecodePatch(
|
||||
name = "Remove tracking query parameter",
|
||||
description = "Adds an option to remove the tracking info from links you share.",
|
||||
@@ -37,6 +36,7 @@ val removeTrackingQueryParameterPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
|
||||
@Suppress("unused")
|
||||
val zoomHapticsPatch = bytecodePatch(
|
||||
name = "Disable zoom haptics",
|
||||
description = "Adds an option to disable haptics when zooming.",
|
||||
@@ -28,6 +27,7 @@ val zoomHapticsPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ val playerResponseMethodHookPatch = bytecodePatch {
|
||||
}
|
||||
}
|
||||
|
||||
sealed class Hook private constructor(private val methodDescriptor: String) {
|
||||
sealed class Hook(private val methodDescriptor: String) {
|
||||
class VideoId(methodDescriptor: String) : Hook(methodDescriptor)
|
||||
|
||||
class ProtoBufferParameter(methodDescriptor: String) : Hook(methodDescriptor)
|
||||
|
||||
@@ -18,12 +18,10 @@ import app.revanced.patches.youtube.video.information.videoInformationPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
import com.sun.org.apache.bcel.internal.generic.InstructionConst.getInstruction
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val rememberVideoQualityPatch = bytecodePatch(
|
||||
name = "Remember video quality",
|
||||
description = "Adds an option to remember the last video quality selected.",
|
||||
@@ -43,6 +41,7 @@ val rememberVideoQualityPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ val playbackSpeedPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@ val restoreOldVideoQualityMenuPatch = bytecodePatch(
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1010,8 +1010,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">المشغل المصغر</string>
|
||||
<string name="revanced_miniplayer_screen_summary">تغيير نمط المشغل المصغر داخل التطبيق</string>
|
||||
<string name="revanced_miniplayer_type_title">نوع المشغل المصغر</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">معطّل</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">الأصلي</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">الجوّال</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">الحد الأدنى</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">الجهاز اللوحي</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">حديث 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">حديث 2</string>
|
||||
@@ -1146,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">تم تمكين الاهتزاز</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">جودة تلقائية</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">تلقائي</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">تذكر تغييرات جودة الفيديو</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">تنطبق تغييرات الجودة على جميع مقاطع الفيديو</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">تنطبق تغييرات الجودة على الفيديو الحالي فقط</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1010,8 +1010,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Kiçik oynadıcı</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Tətbiqdə kiçildilən oynadıcı üslubunu dəyişdir</string>
|
||||
<string name="revanced_miniplayer_type_title">Kiçik oynadıcı növü</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Qeyri-aktivdir</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Orijinal</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Planşet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Müasir 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Müasir 2</string>
|
||||
@@ -1146,7 +1146,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Toxunuş əks-əlaqəsi aktivdir</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Avtomatik keyfiyyət</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Avtomatik</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Video keyfiyyəti dəyişikliklərini xatırla</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Keyfiyyət dəyişiklikləri bütün videolara tətbiq edilir</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Keyfiyyət dəyişiklikləri yalnız cari videoya tətbiq edilir</string>
|
||||
|
||||
@@ -914,8 +914,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Міні-плэер</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Змяніце стыль мінімізаванага плэера ў праграме</string>
|
||||
<string name="revanced_miniplayer_type_title">Тып мініплэера</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Інваліды</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Арыгінал</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Тэлефон</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Планшэт</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Сучасны 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Сучасны 2</string>
|
||||
@@ -1029,7 +1029,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Тактыльныя сігналы ўключаны</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Аўтаматычнае якасць</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Аўто</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Запомніце змены якасці відэа</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Змены якасці распаўсюджваюцца на ўсе відэа</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Змены якасці прымяняюцца толькі да бягучага відэа</string>
|
||||
|
||||
@@ -87,6 +87,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Възпроизвеждане на Shorts в фонов режим</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Фоновото възпроизвеждане на Shorts е деактивирано</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Фоновото възпроизвеждане на Shorts е активирано</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">Отстраняване на грешки</string>
|
||||
@@ -960,6 +962,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Подлъгване за версията на</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">18.38.44 - Възстановете старите икони на Shorts в плейъра</string>
|
||||
<!-- 'RYD' is 'Return YouTube Dislike' -->
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - Възстановете RYD в режим „инкогнито“ на Shorts</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - Възстановяване на видео скорост & в менюто за качество</string>
|
||||
@@ -1007,8 +1010,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Минимизиран екран за възпроизвеждане</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Променете стила на минимизирания екран за възпроизвеждане</string>
|
||||
<string name="revanced_miniplayer_type_title">Минимизиран тип екран за гледане</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Деактивирано</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Оригинал</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Телефон</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Таблет</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Модерен 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Модерен 2</string>
|
||||
@@ -1143,7 +1146,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Вибрациите са активирани</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Автоматично качество</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Авто</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Запомни промените в качеството на видеото</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Промените в качеството се отнасят за всички видеоклипове</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Промените в качеството се отнасят само за текущия видеоклип</string>
|
||||
|
||||
@@ -906,8 +906,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">মিনিপ্লেয়ার</string>
|
||||
<string name="revanced_miniplayer_screen_summary">অ্যাপের মধ্যকার মিনিমাইজড প্লেয়ার এর ধরণ পরিবর্তন করুন</string>
|
||||
<string name="revanced_miniplayer_type_title">মিনিপ্লেয়ার ধরণ</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">নিষ্ক্রিয় হয়েছে</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">আসল</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">ফোন</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">ট্যাবলেট</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">মর্ডান ১</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">মর্ডান ২</string>
|
||||
@@ -1017,7 +1017,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">কম্পন সক্রিয় করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">স্বয়ংক্রিয় গুণমান</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">স্বতস্ফূর্তভাবে</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">ভিডিও গুণমান পরিবর্তন মনে রাখুন</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">গুণমান পরিবর্তন সব ভিডিওতে প্রয়োগ করা হয়েছে</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">গুণমান পরিবর্তন বর্তমান ভিডিওতে প্রয়োগ করা হয়েছে</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -183,6 +183,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Desactivat</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -216,6 +217,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1011,8 +1011,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minipřehrávač</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Změnit styl přehrávače minimalizovaného nastavení</string>
|
||||
<string name="revanced_miniplayer_type_title">Typ minipřehrávače</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Vypnuto</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Původní</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimální</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderní 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderní 2</string>
|
||||
@@ -1147,7 +1148,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Hmatové úlohy jsou povoleny</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatická kvalita</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automaticky</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Zapamatovat změny kvality videa</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Změny kvality platí pro všechna videa</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Změny kvality se vztahují pouze na aktuální video</string>
|
||||
|
||||
@@ -993,8 +993,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Miniplayer</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Ændre stilen for den i app minimeret afspiller</string>
|
||||
<string name="revanced_miniplayer_type_title">Type af miniplayer</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Deaktiveret</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Oprindelig</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderne 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderne 2</string>
|
||||
@@ -1129,7 +1130,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptics er aktiveret</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisk kvalitet</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisk</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Husk ændringer i videokvalitet</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Kvalitetsændringer gælder for alle videoer</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Kvalitetsændringer gælder kun for den aktuelle video</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user