mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-06-12 21:27:43 +02:00
refactor(YouTube - Video playback): Add support for Shorts..
- Add 'Speed dialog' setting to Shorts custom actions - Add default quality settings and default playback speed settings for Shorts - Remove deprecated settings - 'Reject software AV1 codec response', 'Enable Shorts default playback speed' - Reorder video categories
This commit is contained in:
@ -296,6 +296,11 @@ public final class CustomActionsPatch {
|
||||
true
|
||||
)
|
||||
),
|
||||
SPEED_DIALOG(
|
||||
Settings.SHORTS_CUSTOM_ACTIONS_SPEED_DIALOG,
|
||||
"yt_outline_play_arrow_half_circle_black_24",
|
||||
() -> VideoUtils.showPlaybackSpeedDialog(contextRef.get())
|
||||
),
|
||||
REPEAT_STATE(
|
||||
Settings.SHORTS_CUSTOM_ACTIONS_REPEAT_STATE,
|
||||
"yt_outline_arrow_repeat_1_black_24",
|
||||
|
@ -1,17 +1,10 @@
|
||||
package app.revanced.extension.youtube.patches.video;
|
||||
|
||||
import static app.revanced.extension.shared.utils.StringRef.str;
|
||||
|
||||
import app.revanced.extension.shared.utils.Logger;
|
||||
import app.revanced.extension.shared.utils.Utils;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class AV1CodecPatch {
|
||||
private static final int LITERAL_VALUE_AV01 = 1635135811;
|
||||
private static final int LITERAL_VALUE_DOLBY_VISION = 1685485123;
|
||||
private static final String VP9_CODEC = "video/x-vnd.on2.vp9";
|
||||
private static long lastTimeResponse = 0;
|
||||
|
||||
/**
|
||||
* Replace the SW AV01 codec to VP9 codec.
|
||||
@ -22,32 +15,4 @@ public class AV1CodecPatch {
|
||||
public static String replaceCodec(String original) {
|
||||
return Settings.REPLACE_AV1_CODEC.get() ? VP9_CODEC : original;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the SW AV01 codec request with a Dolby Vision codec request.
|
||||
* This request is invalid, so it falls back to codecs other than AV01.
|
||||
* <p>
|
||||
* Limitation: Fallback process causes about 15-20 seconds of buffering.
|
||||
*
|
||||
* @param literalValue literal value of the codec
|
||||
*/
|
||||
public static int rejectResponse(int literalValue) {
|
||||
if (!Settings.REJECT_AV1_CODEC.get())
|
||||
return literalValue;
|
||||
|
||||
Logger.printDebug(() -> "Response: " + literalValue);
|
||||
|
||||
if (literalValue != LITERAL_VALUE_AV01)
|
||||
return literalValue;
|
||||
|
||||
final long currentTime = System.currentTimeMillis();
|
||||
|
||||
// Ignore the invoke within 20 seconds.
|
||||
if (currentTime - lastTimeResponse > 20000) {
|
||||
lastTimeResponse = currentTime;
|
||||
Utils.showToastShort(str("revanced_reject_av1_codec_toast"));
|
||||
}
|
||||
|
||||
return LITERAL_VALUE_DOLBY_VISION;
|
||||
}
|
||||
}
|
||||
|
@ -3,39 +3,73 @@ package app.revanced.extension.youtube.patches.video;
|
||||
import static app.revanced.extension.shared.utils.StringRef.str;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
|
||||
import app.revanced.extension.shared.settings.BooleanSetting;
|
||||
import app.revanced.extension.shared.settings.FloatSetting;
|
||||
import app.revanced.extension.shared.utils.Logger;
|
||||
import app.revanced.extension.shared.utils.Utils;
|
||||
import app.revanced.extension.youtube.patches.utils.PatchStatus;
|
||||
import app.revanced.extension.youtube.patches.video.requests.MusicRequest;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.shared.ShortsPlayerState;
|
||||
import app.revanced.extension.youtube.shared.VideoInformation;
|
||||
import app.revanced.extension.youtube.whitelist.Whitelist;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class PlaybackSpeedPatch {
|
||||
private static final FloatSetting DEFAULT_PLAYBACK_SPEED =
|
||||
Settings.DEFAULT_PLAYBACK_SPEED;
|
||||
private static final FloatSetting DEFAULT_PLAYBACK_SPEED_SHORTS =
|
||||
Settings.DEFAULT_PLAYBACK_SPEED_SHORTS;
|
||||
|
||||
private static final boolean DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC =
|
||||
Settings.DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC.get();
|
||||
private static final long TOAST_DELAY_MILLISECONDS = 750;
|
||||
private static long lastTimeSpeedChanged;
|
||||
private static float lastSelectedPlaybackSpeed = 1.0f;
|
||||
|
||||
private static volatile String channelId = "";
|
||||
private static volatile String videoId = "";
|
||||
private static boolean isLiveStream;
|
||||
|
||||
private static volatile String channelIdShorts = "";
|
||||
private static volatile String videoIdShorts = "";
|
||||
private static boolean isLiveStreamShorts;
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void newVideoStarted(@NonNull String newlyLoadedChannelId, @NonNull String newlyLoadedChannelName,
|
||||
@NonNull String newlyLoadedVideoId, @NonNull String newlyLoadedVideoTitle,
|
||||
final long newlyLoadedVideoLength, boolean newlyLoadedLiveStreamValue) {
|
||||
isLiveStream = newlyLoadedLiveStreamValue;
|
||||
Logger.printDebug(() -> "newVideoStarted: " + newlyLoadedVideoId);
|
||||
if (isShorts()) {
|
||||
channelIdShorts = newlyLoadedChannelId;
|
||||
videoIdShorts = newlyLoadedVideoId;
|
||||
isLiveStreamShorts = newlyLoadedLiveStreamValue;
|
||||
|
||||
final float defaultPlaybackSpeed = getDefaultPlaybackSpeed(newlyLoadedChannelId, newlyLoadedVideoId);
|
||||
Logger.printDebug(() -> "overridePlaybackSpeed: " + defaultPlaybackSpeed);
|
||||
Logger.printDebug(() -> "newVideoStarted: " + newlyLoadedVideoId);
|
||||
} else {
|
||||
channelId = newlyLoadedChannelId;
|
||||
videoId = newlyLoadedVideoId;
|
||||
isLiveStream = newlyLoadedLiveStreamValue;
|
||||
|
||||
VideoInformation.overridePlaybackSpeed(defaultPlaybackSpeed);
|
||||
Logger.printDebug(() -> "newShortsVideoStarted: " + newlyLoadedVideoId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void newShortsVideoStarted(@NonNull String newlyLoadedChannelId, @NonNull String newlyLoadedChannelName,
|
||||
@NonNull String newlyLoadedVideoId, @NonNull String newlyLoadedVideoTitle,
|
||||
final long newlyLoadedVideoLength, boolean newlyLoadedLiveStreamValue) {
|
||||
channelIdShorts = newlyLoadedChannelId;
|
||||
videoIdShorts = newlyLoadedVideoId;
|
||||
isLiveStreamShorts = newlyLoadedLiveStreamValue;
|
||||
|
||||
Logger.printInfo(() -> "newShortsVideoStarted: " + newlyLoadedVideoId);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,17 +99,34 @@ public class PlaybackSpeedPatch {
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static float getPlaybackSpeedInShorts(final float playbackSpeed) {
|
||||
if (VideoInformation.lastPlayerResponseIsShort() &&
|
||||
Settings.ENABLE_DEFAULT_PLAYBACK_SPEED_SHORTS.get()
|
||||
) {
|
||||
float defaultPlaybackSpeed = getDefaultPlaybackSpeed(VideoInformation.getChannelId(), null);
|
||||
Logger.printDebug(() -> "overridePlaybackSpeed in Shorts: " + defaultPlaybackSpeed);
|
||||
public static float getPlaybackSpeed(float playbackSpeed) {
|
||||
boolean isShorts = isShorts();
|
||||
String currentChannelId = isShorts ? channelIdShorts : channelId;
|
||||
String currentVideoId = isShorts ? videoIdShorts : videoId;
|
||||
boolean currentVideoIsLiveStream = isShorts ? isLiveStreamShorts : isLiveStream;
|
||||
boolean currentVideoIsWhitelisted = Whitelist.isChannelWhitelistedPlaybackSpeed(currentChannelId);
|
||||
boolean currentVideoIsMusic = !isShorts && isMusic();
|
||||
|
||||
return defaultPlaybackSpeed;
|
||||
if (currentVideoIsLiveStream || currentVideoIsWhitelisted || currentVideoIsMusic) {
|
||||
Logger.printDebug(() -> "changing playback speed to: 1.0");
|
||||
VideoInformation.setPlaybackSpeed(1.0f);
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
return playbackSpeed;
|
||||
float defaultPlaybackSpeed = isShorts ? DEFAULT_PLAYBACK_SPEED_SHORTS.get() : DEFAULT_PLAYBACK_SPEED.get();
|
||||
|
||||
if (defaultPlaybackSpeed < 0) {
|
||||
float finalPlaybackSpeed = isShorts ? playbackSpeed : lastSelectedPlaybackSpeed;
|
||||
VideoInformation.overridePlaybackSpeed(finalPlaybackSpeed);
|
||||
Logger.printDebug(() -> "changing playback speed to: " + finalPlaybackSpeed);
|
||||
return finalPlaybackSpeed;
|
||||
} else {
|
||||
if (isShorts) {
|
||||
VideoInformation.setPlaybackSpeed(defaultPlaybackSpeed);
|
||||
}
|
||||
Logger.printDebug(() -> "changing playback speed to: " + defaultPlaybackSpeed);
|
||||
return defaultPlaybackSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -86,51 +137,61 @@ public class PlaybackSpeedPatch {
|
||||
*/
|
||||
public static void userSelectedPlaybackSpeed(float playbackSpeed) {
|
||||
try {
|
||||
if (PatchStatus.RememberPlaybackSpeed() &&
|
||||
Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED.get()) {
|
||||
// With the 0.05x menu, if the speed is set by integrations to higher than 2.0x
|
||||
// then the menu will allow increasing without bounds but the max speed is
|
||||
// still capped to under 8.0x.
|
||||
playbackSpeed = Math.min(playbackSpeed, CustomPlaybackSpeedPatch.PLAYBACK_SPEED_MAXIMUM - 0.05f);
|
||||
boolean isShorts = isShorts();
|
||||
if (PatchStatus.RememberPlaybackSpeed()) {
|
||||
BooleanSetting rememberPlaybackSpeedLastSelectedSetting = isShorts
|
||||
? Settings.REMEMBER_PLAYBACK_SPEED_SHORTS_LAST_SELECTED
|
||||
: Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED;
|
||||
FloatSetting playbackSpeedSetting = isShorts
|
||||
? DEFAULT_PLAYBACK_SPEED_SHORTS
|
||||
: DEFAULT_PLAYBACK_SPEED;
|
||||
BooleanSetting showToastSetting = isShorts
|
||||
? Settings.REMEMBER_PLAYBACK_SPEED_SHORTS_LAST_SELECTED_TOAST
|
||||
: Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED_TOAST;
|
||||
|
||||
// Prevent toast spamming if using the 0.05x adjustments.
|
||||
// Show exactly one toast after the user stops interacting with the speed menu.
|
||||
final long now = System.currentTimeMillis();
|
||||
lastTimeSpeedChanged = now;
|
||||
if (rememberPlaybackSpeedLastSelectedSetting.get()) {
|
||||
// With the 0.05x menu, if the speed is set by integrations to higher than 2.0x
|
||||
// then the menu will allow increasing without bounds but the max speed is
|
||||
// still capped to under 8.0x.
|
||||
playbackSpeed = Math.min(playbackSpeed, CustomPlaybackSpeedPatch.PLAYBACK_SPEED_MAXIMUM - 0.05f);
|
||||
|
||||
final float finalPlaybackSpeed = playbackSpeed;
|
||||
Utils.runOnMainThreadDelayed(() -> {
|
||||
if (lastTimeSpeedChanged != now) {
|
||||
// The user made additional speed adjustments and this call is outdated.
|
||||
return;
|
||||
}
|
||||
// Prevent toast spamming if using the 0.05x adjustments.
|
||||
// Show exactly one toast after the user stops interacting with the speed menu.
|
||||
final long now = System.currentTimeMillis();
|
||||
lastTimeSpeedChanged = now;
|
||||
|
||||
if (Settings.DEFAULT_PLAYBACK_SPEED.get() == finalPlaybackSpeed) {
|
||||
// User changed to a different speed and immediately changed back.
|
||||
// Or the user is going past 8.0x in the glitched out 0.05x menu.
|
||||
return;
|
||||
}
|
||||
Settings.DEFAULT_PLAYBACK_SPEED.save(finalPlaybackSpeed);
|
||||
final float finalPlaybackSpeed = playbackSpeed;
|
||||
Utils.runOnMainThreadDelayed(() -> {
|
||||
if (lastTimeSpeedChanged != now) {
|
||||
// The user made additional speed adjustments and this call is outdated.
|
||||
return;
|
||||
}
|
||||
if (playbackSpeedSetting.get() == finalPlaybackSpeed) {
|
||||
// User changed to a different speed and immediately changed back.
|
||||
// Or the user is going past 8.0x in the glitched out 0.05x menu.
|
||||
return;
|
||||
}
|
||||
playbackSpeedSetting.save(finalPlaybackSpeed);
|
||||
|
||||
if (!Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED_TOAST.get()) {
|
||||
return;
|
||||
}
|
||||
Utils.showToastShort(str("revanced_remember_playback_speed_toast", (finalPlaybackSpeed + "x")));
|
||||
}, TOAST_DELAY_MILLISECONDS);
|
||||
if (showToastSetting.get()) {
|
||||
Utils.showToastShort(str(isShorts ? "revanced_remember_playback_speed_toast_shorts" : "revanced_remember_playback_speed_toast", (finalPlaybackSpeed + "x")));
|
||||
}
|
||||
}, TOAST_DELAY_MILLISECONDS);
|
||||
}
|
||||
} else if (!isShorts){
|
||||
lastSelectedPlaybackSpeed = playbackSpeed;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "userSelectedPlaybackSpeed failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static float getDefaultPlaybackSpeed(@NonNull String channelId, @Nullable String videoId) {
|
||||
return (isLiveStream || Whitelist.isChannelWhitelistedPlaybackSpeed(channelId) || isMusic(videoId))
|
||||
? 1.0f
|
||||
: Settings.DEFAULT_PLAYBACK_SPEED.get();
|
||||
private static boolean isShorts() {
|
||||
return !ShortsPlayerState.getCurrent().isClosed();
|
||||
}
|
||||
|
||||
private static boolean isMusic(@Nullable String videoId) {
|
||||
if (DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC && videoId != null) {
|
||||
private static boolean isMusic() {
|
||||
if (DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC && !videoId.isEmpty()) {
|
||||
try {
|
||||
MusicRequest request = MusicRequest.getRequestForVideoId(videoId);
|
||||
final boolean isMusic = request != null && BooleanUtils.toBoolean(request.getStream());
|
||||
|
@ -9,13 +9,16 @@ import app.revanced.extension.shared.utils.Logger;
|
||||
import app.revanced.extension.shared.utils.Utils;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.shared.PlayerType;
|
||||
import app.revanced.extension.youtube.shared.ShortsPlayerState;
|
||||
import app.revanced.extension.youtube.shared.VideoInformation;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class VideoQualityPatch {
|
||||
private static final int DEFAULT_YOUTUBE_VIDEO_QUALITY = -2;
|
||||
private static final IntegerSetting mobileQualitySetting = Settings.DEFAULT_VIDEO_QUALITY_MOBILE;
|
||||
private static final IntegerSetting wifiQualitySetting = Settings.DEFAULT_VIDEO_QUALITY_WIFI;
|
||||
private static final IntegerSetting shortsQualityMobile = Settings.DEFAULT_VIDEO_QUALITY_MOBILE_SHORTS;
|
||||
private static final IntegerSetting shortsQualityWifi = Settings.DEFAULT_VIDEO_QUALITY_WIFI_SHORTS;
|
||||
private static final IntegerSetting videoQualityMobile = Settings.DEFAULT_VIDEO_QUALITY_MOBILE;
|
||||
private static final IntegerSetting videoQualityWifi = Settings.DEFAULT_VIDEO_QUALITY_WIFI;
|
||||
|
||||
@NonNull
|
||||
public static String videoId = "";
|
||||
@ -35,12 +38,11 @@ public class VideoQualityPatch {
|
||||
public static void newVideoStarted(@NonNull String newlyLoadedChannelId, @NonNull String newlyLoadedChannelName,
|
||||
@NonNull String newlyLoadedVideoId, @NonNull String newlyLoadedVideoTitle,
|
||||
final long newlyLoadedVideoLength, boolean newlyLoadedLiveStreamValue) {
|
||||
if (PlayerType.getCurrent() == PlayerType.INLINE_MINIMAL)
|
||||
return;
|
||||
if (videoId.equals(newlyLoadedVideoId))
|
||||
return;
|
||||
videoId = newlyLoadedVideoId;
|
||||
setVideoQuality(Settings.SKIP_PRELOADED_BUFFER.get() ? 250 : 750);
|
||||
if (PlayerType.getCurrent() != PlayerType.INLINE_MINIMAL &&
|
||||
!videoId.equals(newlyLoadedVideoId)) {
|
||||
videoId = newlyLoadedVideoId;
|
||||
setVideoQuality(750);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,42 +55,67 @@ public class VideoQualityPatch {
|
||||
);
|
||||
}
|
||||
|
||||
private static void setVideoQuality(final long delayMillis) {
|
||||
final int defaultQuality = Utils.getNetworkType() == Utils.NetworkType.MOBILE
|
||||
? mobileQualitySetting.get()
|
||||
: wifiQualitySetting.get();
|
||||
private static void setVideoQuality(long delayMillis) {
|
||||
boolean isShorts = isShorts();
|
||||
IntegerSetting defaultQualitySetting = Utils.getNetworkType() == Utils.NetworkType.MOBILE
|
||||
? isShorts ? shortsQualityMobile : videoQualityMobile
|
||||
: isShorts ? shortsQualityWifi : videoQualityWifi;
|
||||
|
||||
if (defaultQuality == DEFAULT_YOUTUBE_VIDEO_QUALITY)
|
||||
return;
|
||||
int defaultQuality = defaultQualitySetting.get();
|
||||
|
||||
Utils.runOnMainThreadDelayed(() -> {
|
||||
final int qualityToUseFinal = VideoInformation.getAvailableVideoQuality(defaultQuality);
|
||||
Logger.printDebug(() -> "Changing video quality to: " + qualityToUseFinal);
|
||||
VideoInformation.overrideVideoQuality(qualityToUseFinal);
|
||||
}, delayMillis
|
||||
);
|
||||
if (defaultQuality != DEFAULT_YOUTUBE_VIDEO_QUALITY) {
|
||||
Utils.runOnMainThreadDelayed(() -> {
|
||||
final int qualityToUseFinal = VideoInformation.getAvailableVideoQuality(defaultQuality);
|
||||
Logger.printDebug(() -> "Changing video quality to: " + qualityToUseFinal);
|
||||
VideoInformation.overrideVideoQuality(qualityToUseFinal);
|
||||
}, delayMillis
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static void userSelectedVideoQuality(final int defaultQuality) {
|
||||
if (!Settings.REMEMBER_VIDEO_QUALITY_LAST_SELECTED.get())
|
||||
return;
|
||||
if (defaultQuality == DEFAULT_YOUTUBE_VIDEO_QUALITY)
|
||||
return;
|
||||
if (defaultQuality != DEFAULT_YOUTUBE_VIDEO_QUALITY) {
|
||||
boolean isShorts = isShorts();
|
||||
final Utils.NetworkType networkType = Utils.getNetworkType();
|
||||
String networkTypeMessage = networkType == Utils.NetworkType.MOBILE
|
||||
? str("revanced_remember_video_quality_mobile")
|
||||
: str("revanced_remember_video_quality_wifi");
|
||||
|
||||
final Utils.NetworkType networkType = Utils.getNetworkType();
|
||||
if (isShorts) {
|
||||
if (Settings.REMEMBER_VIDEO_QUALITY_SHORTS_LAST_SELECTED.get()) {
|
||||
IntegerSetting defaultQualitySetting = networkType == Utils.NetworkType.MOBILE
|
||||
? shortsQualityMobile
|
||||
: shortsQualityWifi;
|
||||
|
||||
switch (networkType) {
|
||||
case NONE -> {
|
||||
Utils.showToastShort(str("revanced_remember_video_quality_none"));
|
||||
return;
|
||||
defaultQualitySetting.save(defaultQuality);
|
||||
|
||||
if (Settings.REMEMBER_VIDEO_QUALITY_SHORTS_LAST_SELECTED_TOAST.get()) {
|
||||
Utils.showToastShort(str(
|
||||
"revanced_remember_video_quality_toast_shorts",
|
||||
networkTypeMessage, (defaultQuality + "p")
|
||||
));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (Settings.REMEMBER_VIDEO_QUALITY_LAST_SELECTED.get()) {
|
||||
IntegerSetting defaultQualitySetting = networkType == Utils.NetworkType.MOBILE
|
||||
? videoQualityMobile
|
||||
: videoQualityWifi;
|
||||
|
||||
defaultQualitySetting.save(defaultQuality);
|
||||
|
||||
if (Settings.REMEMBER_VIDEO_QUALITY_LAST_SELECTED_TOAST.get()) {
|
||||
Utils.showToastShort(str(
|
||||
"revanced_remember_video_quality_toast",
|
||||
networkTypeMessage, (defaultQuality + "p")
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
case MOBILE -> mobileQualitySetting.save(defaultQuality);
|
||||
default -> wifiQualitySetting.save(defaultQuality);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Settings.REMEMBER_VIDEO_QUALITY_LAST_SELECTED_TOAST.get())
|
||||
return;
|
||||
|
||||
Utils.showToastShort(str("revanced_remember_video_quality_" + networkType.getName(), defaultQuality + "p"));
|
||||
private static boolean isShorts() {
|
||||
return !ShortsPlayerState.getCurrent().isClosed();
|
||||
}
|
||||
}
|
@ -498,12 +498,13 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL = new BooleanSetting("revanced_shorts_custom_actions_copy_video_url", FALSE, true);
|
||||
public static final BooleanSetting SHORTS_CUSTOM_ACTIONS_EXTERNAL_DOWNLOADER = new BooleanSetting("revanced_shorts_custom_actions_external_downloader", FALSE, true);
|
||||
public static final BooleanSetting SHORTS_CUSTOM_ACTIONS_OPEN_VIDEO = new BooleanSetting("revanced_shorts_custom_actions_open_video", FALSE, true);
|
||||
public static final BooleanSetting SHORTS_CUSTOM_ACTIONS_SPEED_DIALOG = new BooleanSetting("revanced_shorts_custom_actions_speed_dialog", FALSE, true);
|
||||
public static final BooleanSetting SHORTS_CUSTOM_ACTIONS_REPEAT_STATE = new BooleanSetting("revanced_shorts_custom_actions_repeat_state", FALSE, true);
|
||||
|
||||
public static final BooleanSetting ENABLE_SHORTS_CUSTOM_ACTIONS_FLYOUT_MENU = new BooleanSetting("revanced_enable_shorts_custom_actions_flyout_menu", FALSE, true,
|
||||
parentsAny(SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL, SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL_TIMESTAMP, SHORTS_CUSTOM_ACTIONS_EXTERNAL_DOWNLOADER, SHORTS_CUSTOM_ACTIONS_OPEN_VIDEO, SHORTS_CUSTOM_ACTIONS_REPEAT_STATE));
|
||||
parentsAny(SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL, SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL_TIMESTAMP, SHORTS_CUSTOM_ACTIONS_EXTERNAL_DOWNLOADER, SHORTS_CUSTOM_ACTIONS_OPEN_VIDEO, SHORTS_CUSTOM_ACTIONS_SPEED_DIALOG, SHORTS_CUSTOM_ACTIONS_REPEAT_STATE));
|
||||
public static final BooleanSetting ENABLE_SHORTS_CUSTOM_ACTIONS_TOOLBAR = new BooleanSetting("revanced_enable_shorts_custom_actions_toolbar", FALSE, true,
|
||||
parentsAny(SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL, SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL_TIMESTAMP, SHORTS_CUSTOM_ACTIONS_EXTERNAL_DOWNLOADER, SHORTS_CUSTOM_ACTIONS_OPEN_VIDEO, SHORTS_CUSTOM_ACTIONS_REPEAT_STATE));
|
||||
parentsAny(SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL, SHORTS_CUSTOM_ACTIONS_COPY_VIDEO_URL_TIMESTAMP, SHORTS_CUSTOM_ACTIONS_EXTERNAL_DOWNLOADER, SHORTS_CUSTOM_ACTIONS_OPEN_VIDEO, SHORTS_CUSTOM_ACTIONS_SPEED_DIALOG, SHORTS_CUSTOM_ACTIONS_REPEAT_STATE));
|
||||
|
||||
// Experimental Flags
|
||||
public static final BooleanSetting ENABLE_TIME_STAMP = new BooleanSetting("revanced_enable_shorts_time_stamp", FALSE, true);
|
||||
@ -550,30 +551,38 @@ public class Settings extends BaseSettings {
|
||||
public static final FloatSetting SWIPE_BRIGHTNESS_VALUE = new FloatSetting("revanced_swipe_brightness_value", -1.0f, false, false);
|
||||
|
||||
|
||||
// PreferenceScreen: Video
|
||||
public static final FloatSetting DEFAULT_PLAYBACK_SPEED = new FloatSetting("revanced_default_playback_speed", -2.0f);
|
||||
public static final IntegerSetting DEFAULT_VIDEO_QUALITY_MOBILE = new IntegerSetting("revanced_default_video_quality_mobile", -2);
|
||||
public static final IntegerSetting DEFAULT_VIDEO_QUALITY_WIFI = new IntegerSetting("revanced_default_video_quality_wifi", -2);
|
||||
// PreferenceScreen: Video - Codec
|
||||
public static final BooleanSetting DISABLE_HDR_VIDEO = new BooleanSetting("revanced_disable_hdr_video", FALSE, true);
|
||||
public static final BooleanSetting DISABLE_VP9_CODEC = new BooleanSetting("revanced_disable_vp9_codec", FALSE, true);
|
||||
public static final BooleanSetting REPLACE_AV1_CODEC = new BooleanSetting("revanced_replace_av1_codec", FALSE, true);
|
||||
|
||||
// PreferenceScreen: Video - Playback speed
|
||||
public static final FloatSetting DEFAULT_PLAYBACK_SPEED = new FloatSetting("revanced_default_playback_speed", -2.0f);
|
||||
public static final BooleanSetting REMEMBER_PLAYBACK_SPEED_LAST_SELECTED = new BooleanSetting("revanced_remember_playback_speed_last_selected", TRUE);
|
||||
public static final BooleanSetting REMEMBER_PLAYBACK_SPEED_LAST_SELECTED_TOAST = new BooleanSetting("revanced_remember_playback_speed_last_selected_toast", TRUE, parent(REMEMBER_PLAYBACK_SPEED_LAST_SELECTED));
|
||||
public static final FloatSetting DEFAULT_PLAYBACK_SPEED_SHORTS = new FloatSetting("revanced_default_playback_speed_shorts", -2.0f);
|
||||
public static final BooleanSetting REMEMBER_PLAYBACK_SPEED_SHORTS_LAST_SELECTED = new BooleanSetting("revanced_remember_playback_speed_shorts_last_selected", TRUE);
|
||||
public static final BooleanSetting REMEMBER_PLAYBACK_SPEED_SHORTS_LAST_SELECTED_TOAST = new BooleanSetting("revanced_remember_playback_speed_shorts_last_selected_toast", TRUE, parent(REMEMBER_PLAYBACK_SPEED_SHORTS_LAST_SELECTED));
|
||||
public static final BooleanSetting ENABLE_CUSTOM_PLAYBACK_SPEED = new BooleanSetting("revanced_enable_custom_playback_speed", FALSE, true);
|
||||
public static final BooleanSetting CUSTOM_PLAYBACK_SPEED_MENU_TYPE = new BooleanSetting("revanced_custom_playback_speed_menu_type", FALSE, parent(ENABLE_CUSTOM_PLAYBACK_SPEED));
|
||||
public static final StringSetting CUSTOM_PLAYBACK_SPEEDS = new StringSetting("revanced_custom_playback_speeds", "0.25\n0.5\n0.75\n1.0\n1.25\n1.5\n1.75\n2.0\n2.25\n2.5", true, parent(ENABLE_CUSTOM_PLAYBACK_SPEED));
|
||||
public static final BooleanSetting REMEMBER_PLAYBACK_SPEED_LAST_SELECTED = new BooleanSetting("revanced_remember_playback_speed_last_selected", TRUE);
|
||||
public static final BooleanSetting REMEMBER_PLAYBACK_SPEED_LAST_SELECTED_TOAST = new BooleanSetting("revanced_remember_playback_speed_last_selected_toast", TRUE, parent(REMEMBER_PLAYBACK_SPEED_LAST_SELECTED));
|
||||
|
||||
// PreferenceScreen: Video - Video quality
|
||||
public static final IntegerSetting DEFAULT_VIDEO_QUALITY_MOBILE = new IntegerSetting("revanced_default_video_quality_mobile", -2);
|
||||
public static final IntegerSetting DEFAULT_VIDEO_QUALITY_WIFI = new IntegerSetting("revanced_default_video_quality_wifi", -2);
|
||||
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_LAST_SELECTED = new BooleanSetting("revanced_remember_video_quality_last_selected", TRUE);
|
||||
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_LAST_SELECTED_TOAST = new BooleanSetting("revanced_remember_video_quality_last_selected_toast", TRUE, parent(REMEMBER_VIDEO_QUALITY_LAST_SELECTED));
|
||||
public static final IntegerSetting DEFAULT_VIDEO_QUALITY_MOBILE_SHORTS = new IntegerSetting("revanced_default_video_quality_mobile_shorts", -2, true);
|
||||
public static final IntegerSetting DEFAULT_VIDEO_QUALITY_WIFI_SHORTS = new IntegerSetting("revanced_default_video_quality_wifi_shorts", -2, true);
|
||||
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_SHORTS_LAST_SELECTED = new BooleanSetting("revanced_remember_video_quality_shorts_last_selected", TRUE);
|
||||
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_SHORTS_LAST_SELECTED_TOAST = new BooleanSetting("revanced_remember_video_quality_shorts_last_selected_toast", TRUE, parent(REMEMBER_VIDEO_QUALITY_SHORTS_LAST_SELECTED));
|
||||
public static final BooleanSetting RESTORE_OLD_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_restore_old_video_quality_menu", TRUE, true);
|
||||
// Experimental Flags
|
||||
public static final BooleanSetting DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC = new BooleanSetting("revanced_disable_default_playback_speed_music", FALSE, true);
|
||||
public static final BooleanSetting DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC_TYPE = new BooleanSetting("revanced_disable_default_playback_speed_music_type", FALSE, true, parent(DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC));
|
||||
public static final BooleanSetting ENABLE_DEFAULT_PLAYBACK_SPEED_SHORTS = new BooleanSetting("revanced_enable_default_playback_speed_shorts", FALSE);
|
||||
public static final BooleanSetting SKIP_PRELOADED_BUFFER = new BooleanSetting("revanced_skip_preloaded_buffer", FALSE, true, "revanced_skip_preloaded_buffer_user_dialog_message");
|
||||
public static final BooleanSetting SKIP_PRELOADED_BUFFER_TOAST = new BooleanSetting("revanced_skip_preloaded_buffer_toast", TRUE);
|
||||
public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true);
|
||||
public static final BooleanSetting DISABLE_VP9_CODEC = new BooleanSetting("revanced_disable_vp9_codec", FALSE, true);
|
||||
public static final BooleanSetting REPLACE_AV1_CODEC = new BooleanSetting("revanced_replace_av1_codec", FALSE, true);
|
||||
public static final BooleanSetting REJECT_AV1_CODEC = new BooleanSetting("revanced_reject_av1_codec", FALSE, true);
|
||||
|
||||
public static final BooleanSetting DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC = new BooleanSetting("revanced_disable_default_playback_speed_music", FALSE, true);
|
||||
public static final BooleanSetting DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC_TYPE = new BooleanSetting("revanced_disable_default_playback_speed_music_type", FALSE, true, parent(DISABLE_DEFAULT_PLAYBACK_SPEED_MUSIC));
|
||||
|
||||
// PreferenceScreen: Miscellaneous
|
||||
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
|
||||
|
@ -10,6 +10,7 @@ import static app.revanced.extension.shared.utils.Utils.getChildView;
|
||||
import static app.revanced.extension.shared.utils.Utils.isSDKAbove;
|
||||
import static app.revanced.extension.shared.utils.Utils.showToastShort;
|
||||
import static app.revanced.extension.youtube.settings.Settings.DEFAULT_PLAYBACK_SPEED;
|
||||
import static app.revanced.extension.youtube.settings.Settings.DEFAULT_PLAYBACK_SPEED_SHORTS;
|
||||
import static app.revanced.extension.youtube.settings.Settings.HIDE_PREVIEW_COMMENT;
|
||||
import static app.revanced.extension.youtube.settings.Settings.HIDE_PREVIEW_COMMENT_TYPE;
|
||||
|
||||
@ -119,7 +120,7 @@ public class ReVancedPreferenceFragment extends PreferenceFragment {
|
||||
} else {
|
||||
Setting.privateSetValueFromString(setting, listPreference.getValue());
|
||||
}
|
||||
if (setting.equals(DEFAULT_PLAYBACK_SPEED)) {
|
||||
if (setting.equals(DEFAULT_PLAYBACK_SPEED) || setting.equals(DEFAULT_PLAYBACK_SPEED_SHORTS)) {
|
||||
listPreference.setEntries(CustomPlaybackSpeedPatch.getEntries());
|
||||
listPreference.setEntryValues(CustomPlaybackSpeedPatch.getEntryValues());
|
||||
}
|
||||
@ -310,7 +311,7 @@ public class ReVancedPreferenceFragment extends PreferenceFragment {
|
||||
} else if (preference instanceof EditTextPreference editTextPreference) {
|
||||
editTextPreference.setText(setting.get().toString());
|
||||
} else if (preference instanceof ListPreference listPreference) {
|
||||
if (setting.equals(DEFAULT_PLAYBACK_SPEED)) {
|
||||
if (setting.equals(DEFAULT_PLAYBACK_SPEED) || setting.equals(DEFAULT_PLAYBACK_SPEED_SHORTS)) {
|
||||
listPreference.setEntries(CustomPlaybackSpeedPatch.getEntries());
|
||||
listPreference.setEntryValues(CustomPlaybackSpeedPatch.getEntryValues());
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ public class ReVancedSettingsPreference extends ReVancedPreferenceFragment {
|
||||
NavigationPreferenceLinks();
|
||||
RYDPreferenceLinks();
|
||||
SeekBarPreferenceLinks();
|
||||
ShortsPreferenceLinks();
|
||||
SpeedOverlayPreferenceLinks();
|
||||
QuickActionsPreferenceLinks();
|
||||
TabletLayoutLinks();
|
||||
@ -186,6 +187,19 @@ public class ReVancedSettingsPreference extends ReVancedPreferenceFragment {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable/Disable Preference related to Shorts settings
|
||||
*/
|
||||
private static void ShortsPreferenceLinks() {
|
||||
if (!PatchStatus.RememberPlaybackSpeed()) {
|
||||
enableDisablePreferences(
|
||||
true,
|
||||
Settings.SHORTS_CUSTOM_ACTIONS_SPEED_DIALOG
|
||||
);
|
||||
Settings.SHORTS_CUSTOM_ACTIONS_SPEED_DIALOG.save(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable/Disable Preference related to Speed overlay settings
|
||||
*/
|
||||
|
@ -202,6 +202,7 @@ public class VideoUtils extends IntentUtils {
|
||||
new AlertDialog.Builder(context)
|
||||
.setSingleChoiceItems(playbackSpeedEntries, index, (mDialog, mIndex) -> {
|
||||
final float selectedPlaybackSpeed = Float.parseFloat(playbackSpeedEntryValues[mIndex] + "f");
|
||||
VideoInformation.setPlaybackSpeed(selectedPlaybackSpeed);
|
||||
VideoInformation.overridePlaybackSpeed(selectedPlaybackSpeed);
|
||||
userSelectedPlaybackSpeed(selectedPlaybackSpeed);
|
||||
mDialog.dismiss();
|
||||
|
Reference in New Issue
Block a user