mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-04-30 06:34:37 +02:00
chore(YouTube Music): Use accurate keys and method names
This commit is contained in:
parent
3eac4aee88
commit
60809b2636
@ -3,121 +3,137 @@ package app.revanced.extension.music.patches.player;
|
|||||||
import static app.revanced.extension.shared.utils.Utils.hideViewByRemovingFromParentUnderCondition;
|
import static app.revanced.extension.shared.utils.Utils.hideViewByRemovingFromParentUnderCondition;
|
||||||
import static app.revanced.extension.shared.utils.Utils.hideViewUnderCondition;
|
import static app.revanced.extension.shared.utils.Utils.hideViewUnderCondition;
|
||||||
import static app.revanced.extension.shared.utils.Utils.isSDKAbove;
|
import static app.revanced.extension.shared.utils.Utils.isSDKAbove;
|
||||||
|
import static app.revanced.extension.shared.utils.Utils.runOnMainThreadDelayed;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
import app.revanced.extension.music.settings.Settings;
|
import app.revanced.extension.music.settings.Settings;
|
||||||
import app.revanced.extension.music.shared.VideoType;
|
import app.revanced.extension.music.shared.VideoType;
|
||||||
import app.revanced.extension.music.utils.VideoUtils;
|
import app.revanced.extension.music.utils.VideoUtils;
|
||||||
import app.revanced.extension.shared.utils.Utils;
|
import app.revanced.extension.shared.utils.Logger;
|
||||||
|
|
||||||
@SuppressWarnings({"unused"})
|
@SuppressWarnings({"unused", "SpellCheckingInspection"})
|
||||||
public class PlayerPatch {
|
public class PlayerPatch {
|
||||||
private static final int MUSIC_VIDEO_GREY_BACKGROUND_COLOR = -12566464;
|
private static final boolean ADD_MINIPLAYER_NEXT_BUTTON =
|
||||||
private static final int MUSIC_VIDEO_ORIGINAL_BACKGROUND_COLOR = -16579837;
|
Settings.ADD_MINIPLAYER_NEXT_BUTTON.get();
|
||||||
|
private static final boolean ADD_MINIPLAYER_PREVIOUS_BUTTON =
|
||||||
|
Settings.ADD_MINIPLAYER_PREVIOUS_BUTTON.get();
|
||||||
|
private static final boolean CHANGE_PLAYER_BACKGROUND_COLOR =
|
||||||
|
Settings.CHANGE_PLAYER_BACKGROUND_COLOR.get();
|
||||||
|
private static final boolean DISABLE_PLAYER_GESTURE =
|
||||||
|
Settings.DISABLE_PLAYER_GESTURE.get();
|
||||||
|
private static final boolean ENABLE_SWIPE_TO_DISMISS_MINIPLAYER =
|
||||||
|
Settings.ENABLE_SWIPE_TO_DISMISS_MINIPLAYER.get();
|
||||||
|
private static final boolean HIDE_DOUBLE_TAP_OVERLAY_FILTER =
|
||||||
|
Settings.HIDE_DOUBLE_TAP_OVERLAY_FILTER.get();
|
||||||
|
private static final boolean HIDE_FULLSCREEN_SHARE_BUTTON =
|
||||||
|
Settings.HIDE_FULLSCREEN_SHARE_BUTTON.get();
|
||||||
|
private static final boolean HIDE_SONG_VIDEO_TOGGLE =
|
||||||
|
Settings.HIDE_SONG_VIDEO_TOGGLE.get();
|
||||||
|
private static final boolean RESTORE_OLD_COMMENTS_POPUP_PANELS =
|
||||||
|
Settings.RESTORE_OLD_COMMENTS_POPUP_PANELS.get();
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
private static final int MUSIC_VIDEO_GREY_BACKGROUND_COLOR = 0xFF404040;
|
||||||
public static View previousButton;
|
private static final int MUSIC_VIDEO_ORIGINAL_BACKGROUND_COLOR = 0xFF030303;
|
||||||
@SuppressLint("StaticFieldLeak")
|
|
||||||
public static View nextButton;
|
|
||||||
|
|
||||||
public static boolean disableMiniPlayerGesture() {
|
private static WeakReference<View> previousButtonViewRef = new WeakReference<>(null);
|
||||||
return Settings.DISABLE_MINI_PLAYER_GESTURE.get();
|
private static WeakReference<View> nextButtonViewRef = new WeakReference<>(null);
|
||||||
|
|
||||||
|
public static boolean addMiniPlayerNextButton(boolean original) {
|
||||||
|
return !ADD_MINIPLAYER_NEXT_BUTTON && original;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean disablePlayerGesture() {
|
public static boolean changeMiniPlayerColor() {
|
||||||
return Settings.DISABLE_PLAYER_GESTURE.get();
|
return Settings.CHANGE_MINIPLAYER_COLOR.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean enableColorMatchPlayer() {
|
public static int changePlayerBackgroundColor(int originalColor) {
|
||||||
return Settings.ENABLE_COLOR_MATCH_PLAYER.get();
|
return CHANGE_PLAYER_BACKGROUND_COLOR && originalColor != MUSIC_VIDEO_GREY_BACKGROUND_COLOR
|
||||||
}
|
|
||||||
|
|
||||||
public static int enableBlackPlayerBackground(int originalColor) {
|
|
||||||
return Settings.ENABLE_BLACK_PLAYER_BACKGROUND.get()
|
|
||||||
&& originalColor != MUSIC_VIDEO_GREY_BACKGROUND_COLOR
|
|
||||||
? Color.BLACK
|
? Color.BLACK
|
||||||
: originalColor;
|
: originalColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean enableForceMinimizedPlayer(boolean original) {
|
public static boolean disableMiniPlayerGesture() {
|
||||||
return Settings.ENABLE_FORCE_MINIMIZED_PLAYER.get() || original;
|
return Settings.DISABLE_MINIPLAYER_GESTURE.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean enableMiniPlayerNextButton(boolean original) {
|
public static boolean disablePlayerGesture() {
|
||||||
return !Settings.ENABLE_MINI_PLAYER_NEXT_BUTTON.get() && original;
|
return DISABLE_PLAYER_GESTURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean enableForcedMiniPlayer(boolean original) {
|
||||||
|
return Settings.ENABLE_FORCED_MINIPLAYER.get() || original;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static View[] getViewArray(View[] oldViewArray) {
|
public static View[] getViewArray(View[] oldViewArray) {
|
||||||
if (previousButton != null) {
|
View previousButtonView = previousButtonViewRef.get();
|
||||||
if (nextButton != null) {
|
if (previousButtonView != null) {
|
||||||
return getViewArray(getViewArray(oldViewArray, previousButton), nextButton);
|
oldViewArray = ArrayUtils.add(oldViewArray, previousButtonView);
|
||||||
} else {
|
View nextButtonView = nextButtonViewRef.get();
|
||||||
return getViewArray(oldViewArray, previousButton);
|
if (nextButtonView != null) {
|
||||||
|
oldViewArray = ArrayUtils.add(oldViewArray, nextButtonView);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return oldViewArray;
|
return oldViewArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setNextButtonView(View nextButtonView) {
|
||||||
|
nextButtonViewRef = new WeakReference<>(nextButtonView);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static View[] getViewArray(View[] oldViewArray, View newView) {
|
public static void setNextButtonOnClickListener(View nextButtonView) {
|
||||||
final int oldViewArrayLength = oldViewArray.length;
|
if (nextButtonView != null) {
|
||||||
|
|
||||||
View[] newViewArray = Arrays.copyOf(oldViewArray, oldViewArrayLength + 1);
|
|
||||||
newViewArray[oldViewArrayLength] = newView;
|
|
||||||
return newViewArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setNextButton(View nextButtonView) {
|
|
||||||
if (nextButtonView == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
hideViewUnderCondition(
|
hideViewUnderCondition(
|
||||||
!Settings.ENABLE_MINI_PLAYER_NEXT_BUTTON.get(),
|
!ADD_MINIPLAYER_NEXT_BUTTON,
|
||||||
nextButtonView
|
nextButtonView
|
||||||
);
|
);
|
||||||
|
|
||||||
nextButtonView.setOnClickListener(PlayerPatch::setNextButtonOnClickListener);
|
nextButtonView.setOnClickListener(v -> nextButtonClicked(nextButtonView));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// rest of the implementation added by patch.
|
// rest of the implementation added by patch.
|
||||||
private static void setNextButtonOnClickListener(View view) {
|
private static void nextButtonClicked(View view) {
|
||||||
if (Settings.ENABLE_MINI_PLAYER_NEXT_BUTTON.get())
|
// These instructions are ignored by patch.
|
||||||
view.getClass();
|
Logger.printDebug(() -> "next button clicked: " + view);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setPreviousButton(View previousButtonView) {
|
public static void setPreviousButtonView(View previousButtonView) {
|
||||||
if (previousButtonView == null)
|
previousButtonViewRef = new WeakReference<>(previousButtonView);
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
public static void setPreviousButtonOnClickListener(View previousButtonView) {
|
||||||
|
if (previousButtonView != null) {
|
||||||
hideViewUnderCondition(
|
hideViewUnderCondition(
|
||||||
!Settings.ENABLE_MINI_PLAYER_PREVIOUS_BUTTON.get(),
|
!ADD_MINIPLAYER_PREVIOUS_BUTTON,
|
||||||
previousButtonView
|
previousButtonView
|
||||||
);
|
);
|
||||||
|
|
||||||
previousButtonView.setOnClickListener(PlayerPatch::setPreviousButtonOnClickListener);
|
previousButtonView.setOnClickListener(v -> previousButtonClicked(previousButtonView));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// rest of the implementation added by patch.
|
// rest of the implementation added by patch.
|
||||||
private static void setPreviousButtonOnClickListener(View view) {
|
private static void previousButtonClicked(View view) {
|
||||||
if (Settings.ENABLE_MINI_PLAYER_PREVIOUS_BUTTON.get())
|
// These instructions are ignored by patch.
|
||||||
view.getClass();
|
Logger.printDebug(() -> "previous button clicked: " + view);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean enableSwipeToDismissMiniPlayer() {
|
public static boolean enableSwipeToDismissMiniPlayer() {
|
||||||
return Settings.ENABLE_SWIPE_TO_DISMISS_MINI_PLAYER.get();
|
return ENABLE_SWIPE_TO_DISMISS_MINIPLAYER;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean enableSwipeToDismissMiniPlayer(boolean original) {
|
public static boolean enableSwipeToDismissMiniPlayer(boolean original) {
|
||||||
return !Settings.ENABLE_SWIPE_TO_DISMISS_MINI_PLAYER.get() && original;
|
return !ENABLE_SWIPE_TO_DISMISS_MINIPLAYER && original;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Object enableSwipeToDismissMiniPlayer(Object object) {
|
public static Object enableSwipeToDismissMiniPlayer(Object object) {
|
||||||
return Settings.ENABLE_SWIPE_TO_DISMISS_MINI_PLAYER.get() ? null : object;
|
return ENABLE_SWIPE_TO_DISMISS_MINIPLAYER ? null : object;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int enableZenMode(int originalColor) {
|
public static int enableZenMode(int originalColor) {
|
||||||
@ -129,19 +145,20 @@ public class PlayerPatch {
|
|||||||
return originalColor;
|
return originalColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void hideAudioVideoSwitchToggle(View view, int originalVisibility) {
|
public static void hideSongVideoToggle(View view, int originalVisibility) {
|
||||||
if (Settings.HIDE_AUDIO_VIDEO_SWITCH_TOGGLE.get()) {
|
view.setVisibility(
|
||||||
originalVisibility = View.GONE;
|
HIDE_SONG_VIDEO_TOGGLE
|
||||||
}
|
? View.GONE
|
||||||
view.setVisibility(originalVisibility);
|
: originalVisibility
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void hideDoubleTapOverlayFilter(View view) {
|
public static void hideDoubleTapOverlayFilter(View view) {
|
||||||
hideViewByRemovingFromParentUnderCondition(Settings.HIDE_DOUBLE_TAP_OVERLAY_FILTER, view);
|
hideViewByRemovingFromParentUnderCondition(HIDE_DOUBLE_TAP_OVERLAY_FILTER, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int hideFullscreenShareButton(int original) {
|
public static int hideFullscreenShareButton(int original) {
|
||||||
return Settings.HIDE_FULLSCREEN_SHARE_BUTTON.get() ? 0 : original;
|
return HIDE_FULLSCREEN_SHARE_BUTTON ? 0 : original;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setShuffleState(Enum<?> shuffleState) {
|
public static void setShuffleState(Enum<?> shuffleState) {
|
||||||
@ -163,7 +180,7 @@ public class PlayerPatch {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (needDelay) {
|
if (needDelay) {
|
||||||
Utils.runOnMainThreadDelayed(VideoUtils::shuffleTracks, 1000);
|
runOnMainThreadDelayed(VideoUtils::shuffleTracks, 1000);
|
||||||
} else {
|
} else {
|
||||||
VideoUtils.shuffleTracks();
|
VideoUtils.shuffleTracks();
|
||||||
}
|
}
|
||||||
@ -185,7 +202,7 @@ public class PlayerPatch {
|
|||||||
if (!Settings.SETTINGS_INITIALIZED.get()) {
|
if (!Settings.SETTINGS_INITIALIZED.get()) {
|
||||||
return original;
|
return original;
|
||||||
}
|
}
|
||||||
return !Settings.RESTORE_OLD_COMMENTS_POPUP_PANELS.get() && original;
|
return !RESTORE_OLD_COMMENTS_POPUP_PANELS && original;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean restoreOldPlayerBackground(boolean original) {
|
public static boolean restoreOldPlayerBackground(boolean original) {
|
||||||
|
@ -130,21 +130,21 @@ public class Settings extends BaseSettings {
|
|||||||
|
|
||||||
|
|
||||||
// PreferenceScreen: Player
|
// PreferenceScreen: Player
|
||||||
public static final BooleanSetting ENABLE_MINI_PLAYER_NEXT_BUTTON = new BooleanSetting("revanced_enable_mini_player_next_button", TRUE, true);
|
public static final BooleanSetting ADD_MINIPLAYER_NEXT_BUTTON = new BooleanSetting("revanced_add_miniplayer_next_button", TRUE, true);
|
||||||
public static final BooleanSetting ENABLE_MINI_PLAYER_PREVIOUS_BUTTON = new BooleanSetting("revanced_enable_mini_player_previous_button", TRUE, true);
|
public static final BooleanSetting ADD_MINIPLAYER_PREVIOUS_BUTTON = new BooleanSetting("revanced_add_miniplayer_previous_button", TRUE, true);
|
||||||
public static final BooleanSetting ENABLE_COLOR_MATCH_PLAYER = new BooleanSetting("revanced_enable_color_match_player", TRUE);
|
public static final BooleanSetting CHANGE_MINIPLAYER_COLOR = new BooleanSetting("revanced_change_miniplayer_color", TRUE);
|
||||||
public static final BooleanSetting ENABLE_BLACK_PLAYER_BACKGROUND = new BooleanSetting("revanced_enable_black_player_background", FALSE, true);
|
public static final BooleanSetting CHANGE_PLAYER_BACKGROUND_COLOR = new BooleanSetting("revanced_change_player_background_color", FALSE, true);
|
||||||
public static final BooleanSetting DISABLE_MINI_PLAYER_GESTURE = new BooleanSetting("revanced_disable_mini_player_gesture", FALSE, true);
|
public static final BooleanSetting DISABLE_MINIPLAYER_GESTURE = new BooleanSetting("revanced_disable_miniplayer_gesture", FALSE, true);
|
||||||
public static final BooleanSetting DISABLE_PLAYER_GESTURE = new BooleanSetting("revanced_disable_player_gesture", FALSE, true);
|
public static final BooleanSetting DISABLE_PLAYER_GESTURE = new BooleanSetting("revanced_disable_player_gesture", FALSE, true);
|
||||||
public static final BooleanSetting ENABLE_FORCE_MINIMIZED_PLAYER = new BooleanSetting("revanced_enable_force_minimized_player", TRUE);
|
public static final BooleanSetting ENABLE_FORCED_MINIPLAYER = new BooleanSetting("revanced_enable_forced_miniplayer", TRUE);
|
||||||
public static final BooleanSetting ENABLE_SWIPE_TO_DISMISS_MINI_PLAYER = new BooleanSetting("revanced_enable_swipe_to_dismiss_mini_player", TRUE, true);
|
public static final BooleanSetting ENABLE_SWIPE_TO_DISMISS_MINIPLAYER = new BooleanSetting("revanced_enable_swipe_to_dismiss_miniplayer", TRUE, true);
|
||||||
public static final BooleanSetting ENABLE_ZEN_MODE = new BooleanSetting("revanced_enable_zen_mode", FALSE);
|
public static final BooleanSetting ENABLE_ZEN_MODE = new BooleanSetting("revanced_enable_zen_mode", FALSE);
|
||||||
public static final BooleanSetting ENABLE_ZEN_MODE_PODCAST = new BooleanSetting("revanced_enable_zen_mode_podcast", FALSE);
|
public static final BooleanSetting ENABLE_ZEN_MODE_PODCAST = new BooleanSetting("revanced_enable_zen_mode_podcast", FALSE);
|
||||||
public static final BooleanSetting HIDE_COMMENT_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_comment_channel_guidelines", TRUE);
|
public static final BooleanSetting HIDE_COMMENT_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_comment_channel_guidelines", TRUE);
|
||||||
public static final BooleanSetting HIDE_DOUBLE_TAP_OVERLAY_FILTER = new BooleanSetting("revanced_hide_double_tap_overlay_filter", FALSE, true);
|
public static final BooleanSetting HIDE_DOUBLE_TAP_OVERLAY_FILTER = new BooleanSetting("revanced_hide_double_tap_overlay_filter", FALSE, true);
|
||||||
public static final BooleanSetting HIDE_COMMENT_TIMESTAMP_AND_EMOJI_BUTTONS = new BooleanSetting("revanced_hide_comment_timestamp_and_emoji_buttons", FALSE);
|
public static final BooleanSetting HIDE_COMMENT_TIMESTAMP_AND_EMOJI_BUTTONS = new BooleanSetting("revanced_hide_comment_timestamp_and_emoji_buttons", FALSE);
|
||||||
public static final BooleanSetting HIDE_FULLSCREEN_SHARE_BUTTON = new BooleanSetting("revanced_hide_fullscreen_share_button", FALSE, true);
|
public static final BooleanSetting HIDE_FULLSCREEN_SHARE_BUTTON = new BooleanSetting("revanced_hide_fullscreen_share_button", FALSE, true);
|
||||||
public static final BooleanSetting HIDE_AUDIO_VIDEO_SWITCH_TOGGLE = new BooleanSetting("revanced_hide_audio_video_switch_toggle", FALSE, true);
|
public static final BooleanSetting HIDE_SONG_VIDEO_TOGGLE = new BooleanSetting("revanced_hide_song_video_toggle", FALSE, true);
|
||||||
public static final BooleanSetting REMEMBER_REPEAT_SATE = new BooleanSetting("revanced_remember_repeat_state", TRUE);
|
public static final BooleanSetting REMEMBER_REPEAT_SATE = new BooleanSetting("revanced_remember_repeat_state", TRUE);
|
||||||
public static final BooleanSetting REMEMBER_SHUFFLE_SATE = new BooleanSetting("revanced_remember_shuffle_state", TRUE);
|
public static final BooleanSetting REMEMBER_SHUFFLE_SATE = new BooleanSetting("revanced_remember_shuffle_state", TRUE);
|
||||||
public static final BooleanSetting ALWAYS_SHUFFLE = new BooleanSetting("revanced_always_shuffle", FALSE);
|
public static final BooleanSetting ALWAYS_SHUFFLE = new BooleanSetting("revanced_always_shuffle", FALSE);
|
||||||
|
@ -227,13 +227,17 @@ internal val nextButtonVisibilityFingerprint = legacyFingerprint(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
internal const val OLD_ENGAGEMENT_PANEL_FEATURE_FLAG = 45427672L
|
||||||
|
|
||||||
internal val oldEngagementPanelFingerprint = legacyFingerprint(
|
internal val oldEngagementPanelFingerprint = legacyFingerprint(
|
||||||
name = "oldEngagementPanelFingerprint",
|
name = "oldEngagementPanelFingerprint",
|
||||||
returnType = "Z",
|
returnType = "Z",
|
||||||
parameters = emptyList(),
|
parameters = emptyList(),
|
||||||
literals = listOf(45427672L),
|
literals = listOf(OLD_ENGAGEMENT_PANEL_FEATURE_FLAG),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
internal const val OLD_PLAYER_BACKGROUND_FEATURE_FLAG = 45415319L
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deprecated in YouTube Music v6.34.51+
|
* Deprecated in YouTube Music v6.34.51+
|
||||||
*/
|
*/
|
||||||
@ -241,9 +245,11 @@ internal val oldPlayerBackgroundFingerprint = legacyFingerprint(
|
|||||||
name = "oldPlayerBackgroundFingerprint",
|
name = "oldPlayerBackgroundFingerprint",
|
||||||
returnType = "Z",
|
returnType = "Z",
|
||||||
parameters = emptyList(),
|
parameters = emptyList(),
|
||||||
literals = listOf(45415319L),
|
literals = listOf(OLD_PLAYER_BACKGROUND_FEATURE_FLAG),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
internal const val OLD_PLAYER_LAYOUT_FEATURE_FLAG = 45399578L
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deprecated in YouTube Music v6.31.55+
|
* Deprecated in YouTube Music v6.31.55+
|
||||||
*/
|
*/
|
||||||
@ -251,7 +257,7 @@ internal val oldPlayerLayoutFingerprint = legacyFingerprint(
|
|||||||
name = "oldPlayerLayoutFingerprint",
|
name = "oldPlayerLayoutFingerprint",
|
||||||
returnType = "Z",
|
returnType = "Z",
|
||||||
parameters = emptyList(),
|
parameters = emptyList(),
|
||||||
literals = listOf(45399578L),
|
literals = listOf(OLD_PLAYER_LAYOUT_FEATURE_FLAG),
|
||||||
)
|
)
|
||||||
|
|
||||||
internal val playerPatchConstructorFingerprint = legacyFingerprint(
|
internal val playerPatchConstructorFingerprint = legacyFingerprint(
|
||||||
|
@ -198,21 +198,21 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
execute {
|
execute {
|
||||||
|
|
||||||
// region patch for enable next previous button
|
// region patch for add next previous button
|
||||||
|
|
||||||
val nextButtonFieldName = "nextButton"
|
val nextButtonViewMethodName = "setNextButtonView"
|
||||||
val previousButtonFieldName = "previousButton"
|
val previousButtonViewMethodName = "setPreviousButtonView"
|
||||||
val nextButtonClassFieldName = "nextButtonClass"
|
val nextButtonClassFieldName = "nextButtonClass"
|
||||||
val previousButtonClassFieldName = "previousButtonClass"
|
val previousButtonClassFieldName = "previousButtonClass"
|
||||||
val nextButtonButtonMethodName = "setNextButton"
|
val nextOnClickListenerMethodName = "setNextButtonOnClickListener"
|
||||||
val previousButtonMethodName = "setPreviousButton"
|
val previousOnClickListenerMethodName = "setPreviousButtonOnClickListener"
|
||||||
val nextButtonOnClickListenerMethodName = "setNextButtonOnClickListener"
|
val nextButtonClickedMethodName = "nextButtonClicked"
|
||||||
val previousButtonOnClickListenerMethodName = "setPreviousButtonOnClickListener"
|
val previousButtonClickedMethodName = "previousButtonClicked"
|
||||||
val nextButtonIntentString = "YTM Next"
|
val nextButtonIntentString = "YTM Next"
|
||||||
val previousButtonIntentString = "YTM Previous"
|
val previousButtonIntentString = "YTM Previous"
|
||||||
|
|
||||||
fun MutableMethod.setStaticFieldValue(
|
fun MutableMethod.setButtonView(
|
||||||
fieldName: String,
|
methodName: String,
|
||||||
viewId: Long
|
viewId: Long
|
||||||
) {
|
) {
|
||||||
val miniPlayerPlayPauseReplayButtonIndex =
|
val miniPlayerPlayPauseReplayButtonIndex =
|
||||||
@ -232,7 +232,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
const v$constRegister, $viewId
|
const v$constRegister, $viewId
|
||||||
invoke-virtual {v$findViewByIdRegister, v$constRegister}, $definingClass->findViewById(I)Landroid/view/View;
|
invoke-virtual {v$findViewByIdRegister, v$constRegister}, $definingClass->findViewById(I)Landroid/view/View;
|
||||||
move-result-object v$constRegister
|
move-result-object v$constRegister
|
||||||
sput-object v$constRegister, $PLAYER_CLASS_DESCRIPTOR->$fieldName:Landroid/view/View;
|
invoke-static {v$constRegister}, $PLAYER_CLASS_DESCRIPTOR->$methodName(Landroid/view/View;)V
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -256,7 +256,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun MutableMethod.setOnClickListener(
|
fun MutableMethod.setIntentOnClickListener(
|
||||||
intentString: String,
|
intentString: String,
|
||||||
methodName: String,
|
methodName: String,
|
||||||
fieldName: String
|
fieldName: String
|
||||||
@ -302,6 +302,32 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun MutableMethod.setOnclickListener(
|
||||||
|
methodName: String,
|
||||||
|
viewId: Long
|
||||||
|
) {
|
||||||
|
val miniPlayerPlayPauseReplayButtonIndex =
|
||||||
|
indexOfFirstLiteralInstructionOrThrow(miniPlayerPlayPauseReplayButton)
|
||||||
|
val miniPlayerPlayPauseReplayButtonRegister =
|
||||||
|
getInstruction<OneRegisterInstruction>(miniPlayerPlayPauseReplayButtonIndex).registerA
|
||||||
|
val findViewByIdIndex =
|
||||||
|
indexOfFirstInstructionOrThrow(
|
||||||
|
miniPlayerPlayPauseReplayButtonIndex,
|
||||||
|
Opcode.INVOKE_VIRTUAL
|
||||||
|
)
|
||||||
|
val parentViewRegister =
|
||||||
|
getInstruction<FiveRegisterInstruction>(findViewByIdIndex).registerC
|
||||||
|
|
||||||
|
addInstructions(
|
||||||
|
miniPlayerPlayPauseReplayButtonIndex, """
|
||||||
|
const v$miniPlayerPlayPauseReplayButtonRegister, $viewId
|
||||||
|
invoke-virtual {v$parentViewRegister, v$miniPlayerPlayPauseReplayButtonRegister}, Landroid/view/View;->findViewById(I)Landroid/view/View;
|
||||||
|
move-result-object v$miniPlayerPlayPauseReplayButtonRegister
|
||||||
|
invoke-static {v$miniPlayerPlayPauseReplayButtonRegister}, $PLAYER_CLASS_DESCRIPTOR->$methodName(Landroid/view/View;)V
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val miniPlayerConstructorMutableMethod =
|
val miniPlayerConstructorMutableMethod =
|
||||||
miniPlayerConstructorFingerprint.methodOrThrow()
|
miniPlayerConstructorFingerprint.methodOrThrow()
|
||||||
|
|
||||||
@ -320,33 +346,33 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addInstructions(
|
addInstructions(
|
||||||
targetIndex + 1, """
|
targetIndex + 1, """
|
||||||
invoke-static {v$targetRegister}, $PLAYER_CLASS_DESCRIPTOR->enableMiniPlayerNextButton(Z)Z
|
invoke-static {v$targetRegister}, $PLAYER_CLASS_DESCRIPTOR->addMiniPlayerNextButton(Z)Z
|
||||||
move-result v$targetRegister
|
move-result v$targetRegister
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
miniPlayerConstructorMutableMethod.setInstanceFieldValue(
|
miniPlayerConstructorMutableMethod.setOnclickListener(
|
||||||
nextButtonButtonMethodName,
|
nextOnClickListenerMethodName,
|
||||||
topStart
|
topStart
|
||||||
)
|
)
|
||||||
mppWatchWhileLayoutMutableMethod.setStaticFieldValue(nextButtonFieldName, topStart)
|
mppWatchWhileLayoutMutableMethod.setButtonView(nextButtonViewMethodName, topStart)
|
||||||
pendingIntentReceiverMutableMethod.setOnClickListener(
|
pendingIntentReceiverMutableMethod.setIntentOnClickListener(
|
||||||
nextButtonIntentString,
|
nextButtonIntentString,
|
||||||
nextButtonOnClickListenerMethodName,
|
nextButtonClickedMethodName,
|
||||||
nextButtonClassFieldName
|
nextButtonClassFieldName
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
miniPlayerConstructorMutableMethod.setInstanceFieldValue(
|
miniPlayerConstructorMutableMethod.setOnclickListener(
|
||||||
previousButtonMethodName,
|
previousOnClickListenerMethodName,
|
||||||
topEnd
|
topEnd
|
||||||
)
|
)
|
||||||
mppWatchWhileLayoutMutableMethod.setStaticFieldValue(previousButtonFieldName, topEnd)
|
mppWatchWhileLayoutMutableMethod.setButtonView(previousButtonViewMethodName, topEnd)
|
||||||
pendingIntentReceiverMutableMethod.setOnClickListener(
|
pendingIntentReceiverMutableMethod.setIntentOnClickListener(
|
||||||
previousButtonIntentString,
|
previousButtonIntentString,
|
||||||
previousButtonOnClickListenerMethodName,
|
previousButtonClickedMethodName,
|
||||||
previousButtonClassFieldName
|
previousButtonClassFieldName
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -354,18 +380,18 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
CategoryType.PLAYER,
|
CategoryType.PLAYER,
|
||||||
"revanced_enable_mini_player_next_button",
|
"revanced_add_miniplayer_next_button",
|
||||||
"true"
|
"true"
|
||||||
)
|
)
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
CategoryType.PLAYER,
|
CategoryType.PLAYER,
|
||||||
"revanced_enable_mini_player_previous_button",
|
"revanced_add_miniplayer_previous_button",
|
||||||
"true"
|
"true"
|
||||||
)
|
)
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region patch for enable color match player and enable black player background
|
// region patch for color match player and black player background
|
||||||
|
|
||||||
val (
|
val (
|
||||||
colorMathPlayerMethodParameter,
|
colorMathPlayerMethodParameter,
|
||||||
@ -385,9 +411,9 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
targetMethod.addInstructions(
|
targetMethod.addInstructions(
|
||||||
insertIndex, """
|
insertIndex, """
|
||||||
invoke-static {p1}, $PLAYER_CLASS_DESCRIPTOR->enableBlackPlayerBackground(I)I
|
invoke-static {p1}, $PLAYER_CLASS_DESCRIPTOR->changePlayerBackgroundColor(I)I
|
||||||
move-result p1
|
move-result p1
|
||||||
invoke-static {p2}, $PLAYER_CLASS_DESCRIPTOR->enableBlackPlayerBackground(I)I
|
invoke-static {p2}, $PLAYER_CLASS_DESCRIPTOR->changePlayerBackgroundColor(I)I
|
||||||
move-result p2
|
move-result p2
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
@ -420,7 +446,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addInstructionsWithLabels(
|
addInstructionsWithLabels(
|
||||||
invokeDirectIndex + 1, """
|
invokeDirectIndex + 1, """
|
||||||
invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->enableColorMatchPlayer()Z
|
invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->changeMiniPlayerColor()Z
|
||||||
move-result v$freeRegister
|
move-result v$freeRegister
|
||||||
if-eqz v$freeRegister, :off
|
if-eqz v$freeRegister, :off
|
||||||
invoke-virtual {p1}, $colorMathPlayerInvokeVirtualReference
|
invoke-virtual {p1}, $colorMathPlayerInvokeVirtualReference
|
||||||
@ -438,12 +464,12 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
CategoryType.PLAYER,
|
CategoryType.PLAYER,
|
||||||
"revanced_enable_color_match_player",
|
"revanced_change_miniplayer_color",
|
||||||
"true"
|
"true"
|
||||||
)
|
)
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
CategoryType.PLAYER,
|
CategoryType.PLAYER,
|
||||||
"revanced_enable_black_player_background",
|
"revanced_change_player_background_color",
|
||||||
"false"
|
"false"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -487,7 +513,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
CategoryType.PLAYER,
|
CategoryType.PLAYER,
|
||||||
"revanced_disable_mini_player_gesture",
|
"revanced_disable_miniplayer_gesture",
|
||||||
"false"
|
"false"
|
||||||
)
|
)
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
@ -498,7 +524,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region patch for enable force minimized player
|
// region patch for forced minimized player
|
||||||
|
|
||||||
minimizedPlayerFingerprint.matchOrThrow().let {
|
minimizedPlayerFingerprint.matchOrThrow().let {
|
||||||
it.method.apply {
|
it.method.apply {
|
||||||
@ -507,7 +533,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addInstructions(
|
addInstructions(
|
||||||
insertIndex, """
|
insertIndex, """
|
||||||
invoke-static {v$insertRegister}, $PLAYER_CLASS_DESCRIPTOR->enableForceMinimizedPlayer(Z)Z
|
invoke-static {v$insertRegister}, $PLAYER_CLASS_DESCRIPTOR->enableForcedMiniPlayer(Z)Z
|
||||||
move-result v$insertRegister
|
move-result v$insertRegister
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
@ -516,13 +542,13 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
CategoryType.PLAYER,
|
CategoryType.PLAYER,
|
||||||
"revanced_enable_force_minimized_player",
|
"revanced_enable_forced_miniplayer",
|
||||||
"true"
|
"true"
|
||||||
)
|
)
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region patch for enable swipe to dismiss mini player
|
// region patch for enable swipe to dismiss miniplayer
|
||||||
|
|
||||||
if (!is_6_42_or_greater) {
|
if (!is_6_42_or_greater) {
|
||||||
swipeToCloseFingerprint.methodOrThrow().apply {
|
swipeToCloseFingerprint.methodOrThrow().apply {
|
||||||
@ -676,7 +702,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
CategoryType.PLAYER,
|
CategoryType.PLAYER,
|
||||||
"revanced_enable_swipe_to_dismiss_mini_player",
|
"revanced_enable_swipe_to_dismiss_miniplayer",
|
||||||
"true"
|
"true"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -794,7 +820,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region patch for hide song video switch toggle
|
// region patch for hide song video toggle
|
||||||
|
|
||||||
audioVideoSwitchToggleFingerprint.methodOrThrow().apply {
|
audioVideoSwitchToggleFingerprint.methodOrThrow().apply {
|
||||||
implementation!!.instructions
|
implementation!!.instructions
|
||||||
@ -813,14 +839,14 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
replaceInstruction(
|
replaceInstruction(
|
||||||
index,
|
index,
|
||||||
"invoke-static {v${instruction.registerC}, v${instruction.registerD}}," +
|
"invoke-static {v${instruction.registerC}, v${instruction.registerD}}," +
|
||||||
"$PLAYER_CLASS_DESCRIPTOR->hideAudioVideoSwitchToggle(Landroid/view/View;I)V"
|
"$PLAYER_CLASS_DESCRIPTOR->hideSongVideoToggle(Landroid/view/View;I)V"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
CategoryType.PLAYER,
|
CategoryType.PLAYER,
|
||||||
"revanced_hide_audio_video_switch_toggle",
|
"revanced_hide_song_video_toggle",
|
||||||
"false"
|
"false"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -997,7 +1023,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
if (is_6_27_or_greater && !is_7_18_or_greater) {
|
if (is_6_27_or_greater && !is_7_18_or_greater) {
|
||||||
oldEngagementPanelFingerprint.injectLiteralInstructionBooleanCall(
|
oldEngagementPanelFingerprint.injectLiteralInstructionBooleanCall(
|
||||||
45427672L,
|
OLD_ENGAGEMENT_PANEL_FEATURE_FLAG,
|
||||||
"$PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels(Z)Z"
|
"$PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels(Z)Z"
|
||||||
)
|
)
|
||||||
restoreOldCommentsPopupPanel = true
|
restoreOldCommentsPopupPanel = true
|
||||||
@ -1081,7 +1107,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
if (oldPlayerBackgroundFingerprint.resolvable()) {
|
if (oldPlayerBackgroundFingerprint.resolvable()) {
|
||||||
oldPlayerBackgroundFingerprint.injectLiteralInstructionBooleanCall(
|
oldPlayerBackgroundFingerprint.injectLiteralInstructionBooleanCall(
|
||||||
45415319L,
|
OLD_PLAYER_BACKGROUND_FEATURE_FLAG,
|
||||||
"$PLAYER_CLASS_DESCRIPTOR->restoreOldPlayerBackground(Z)Z"
|
"$PLAYER_CLASS_DESCRIPTOR->restoreOldPlayerBackground(Z)Z"
|
||||||
)
|
)
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
@ -1097,7 +1123,7 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
if (oldPlayerLayoutFingerprint.resolvable()) {
|
if (oldPlayerLayoutFingerprint.resolvable()) {
|
||||||
oldPlayerLayoutFingerprint.injectLiteralInstructionBooleanCall(
|
oldPlayerLayoutFingerprint.injectLiteralInstructionBooleanCall(
|
||||||
45399578L,
|
OLD_PLAYER_LAYOUT_FEATURE_FLAG,
|
||||||
"$PLAYER_CLASS_DESCRIPTOR->restoreOldPlayerLayout(Z)Z"
|
"$PLAYER_CLASS_DESCRIPTOR->restoreOldPlayerLayout(Z)Z"
|
||||||
)
|
)
|
||||||
addSwitchPreference(
|
addSwitchPreference(
|
||||||
@ -1113,29 +1139,3 @@ val playerComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MutableMethod.setInstanceFieldValue(
|
|
||||||
methodName: String,
|
|
||||||
viewId: Long
|
|
||||||
) {
|
|
||||||
val miniPlayerPlayPauseReplayButtonIndex =
|
|
||||||
indexOfFirstLiteralInstructionOrThrow(miniPlayerPlayPauseReplayButton)
|
|
||||||
val miniPlayerPlayPauseReplayButtonRegister =
|
|
||||||
getInstruction<OneRegisterInstruction>(miniPlayerPlayPauseReplayButtonIndex).registerA
|
|
||||||
val findViewByIdIndex =
|
|
||||||
indexOfFirstInstructionOrThrow(
|
|
||||||
miniPlayerPlayPauseReplayButtonIndex,
|
|
||||||
Opcode.INVOKE_VIRTUAL
|
|
||||||
)
|
|
||||||
val parentViewRegister =
|
|
||||||
getInstruction<FiveRegisterInstruction>(findViewByIdIndex).registerC
|
|
||||||
|
|
||||||
addInstructions(
|
|
||||||
miniPlayerPlayPauseReplayButtonIndex, """
|
|
||||||
const v$miniPlayerPlayPauseReplayButtonRegister, $viewId
|
|
||||||
invoke-virtual {v$parentViewRegister, v$miniPlayerPlayPauseReplayButtonRegister}, Landroid/view/View;->findViewById(I)Landroid/view/View;
|
|
||||||
move-result-object v$miniPlayerPlayPauseReplayButtonRegister
|
|
||||||
invoke-static {v$miniPlayerPlayPauseReplayButtonRegister}, $PLAYER_CLASS_DESCRIPTOR->$methodName(Landroid/view/View;)V
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
@ -228,22 +228,22 @@ This does not bypass the age restriction. It just accepts it automatically."</st
|
|||||||
<!-- PreferenceScreen: Player -->
|
<!-- PreferenceScreen: Player -->
|
||||||
<string name="revanced_preference_screen_player_title">Player</string>
|
<string name="revanced_preference_screen_player_title">Player</string>
|
||||||
|
|
||||||
<string name="revanced_enable_mini_player_next_button_title">Add miniplayer next button</string>
|
<string name="revanced_add_miniplayer_next_button_title">Add miniplayer next button</string>
|
||||||
<string name="revanced_enable_mini_player_next_button_summary">Adds a next track button to the miniplayer.</string>
|
<string name="revanced_add_miniplayer_next_button_summary">Adds a next track button to the miniplayer.</string>
|
||||||
<string name="revanced_enable_mini_player_previous_button_title">Add miniplayer previous button</string>
|
<string name="revanced_add_miniplayer_previous_button_title">Add miniplayer previous button</string>
|
||||||
<string name="revanced_enable_mini_player_previous_button_summary">Adds a previous track button to the miniplayer.</string>
|
<string name="revanced_add_miniplayer_previous_button_summary">Adds a previous track button to the miniplayer.</string>
|
||||||
<string name="revanced_enable_color_match_player_title">Change miniplayer color</string>
|
<string name="revanced_change_miniplayer_color_title">Change miniplayer color</string>
|
||||||
<string name="revanced_enable_color_match_player_summary">Changes the miniplayer color to match the fullscreen player.</string>
|
<string name="revanced_change_miniplayer_color_summary">Changes the miniplayer color to match the fullscreen player.</string>
|
||||||
<string name="revanced_enable_black_player_background_title">Change player background color</string>
|
<string name="revanced_change_player_background_color_title">Change player background color</string>
|
||||||
<string name="revanced_enable_black_player_background_summary">Changes the player background color to black.</string>
|
<string name="revanced_change_player_background_color_summary">Changes the player background color to black.</string>
|
||||||
<string name="revanced_disable_mini_player_gesture_title">Disable miniplayer gesture</string>
|
<string name="revanced_disable_miniplayer_gesture_title">Disable miniplayer gesture</string>
|
||||||
<string name="revanced_disable_mini_player_gesture_summary">Disables swipe to change tracks in the miniplayer.</string>
|
<string name="revanced_disable_miniplayer_gesture_summary">Disables swipe to change tracks in the miniplayer.</string>
|
||||||
<string name="revanced_disable_player_gesture_title">Disable player gesture</string>
|
<string name="revanced_disable_player_gesture_title">Disable player gesture</string>
|
||||||
<string name="revanced_disable_player_gesture_summary">Disables swipe to change tracks in the player.</string>
|
<string name="revanced_disable_player_gesture_summary">Disables swipe to change tracks in the player.</string>
|
||||||
<string name="revanced_enable_force_minimized_player_title">Enable forced miniplayer</string>
|
<string name="revanced_enable_forced_miniplayer_title">Enable forced miniplayer</string>
|
||||||
<string name="revanced_enable_force_minimized_player_summary">Enables forced miniplayer when switching to a new track.</string>
|
<string name="revanced_enable_forced_miniplayer_summary">Enables forced miniplayer when switching to a new track.</string>
|
||||||
<string name="revanced_enable_swipe_to_dismiss_mini_player_title">Enable swipe to dismiss miniplayer</string>
|
<string name="revanced_enable_swipe_to_dismiss_miniplayer_title">Enable swipe to dismiss miniplayer</string>
|
||||||
<string name="revanced_enable_swipe_to_dismiss_mini_player_summary">Enables swipe down to dismiss miniplayer.</string>
|
<string name="revanced_enable_swipe_to_dismiss_miniplayer_summary">Enables swipe down to dismiss miniplayer.</string>
|
||||||
<string name="revanced_enable_zen_mode_title">Enable Zen mode</string>
|
<string name="revanced_enable_zen_mode_title">Enable Zen mode</string>
|
||||||
<string name="revanced_enable_zen_mode_summary">Enables a light grey color for the player background to reduce eye strain.</string>
|
<string name="revanced_enable_zen_mode_summary">Enables a light grey color for the player background to reduce eye strain.</string>
|
||||||
<string name="revanced_enable_zen_mode_podcast_title">Enable Zen mode in podcasts</string>
|
<string name="revanced_enable_zen_mode_podcast_title">Enable Zen mode in podcasts</string>
|
||||||
@ -256,8 +256,8 @@ This does not bypass the age restriction. It just accepts it automatically."</st
|
|||||||
<string name="revanced_hide_comment_timestamp_and_emoji_buttons_summary">Hides the emoji and timestamp buttons when typing comments.</string>
|
<string name="revanced_hide_comment_timestamp_and_emoji_buttons_summary">Hides the emoji and timestamp buttons when typing comments.</string>
|
||||||
<string name="revanced_hide_fullscreen_share_button_title">Hide fullscreen Share button</string>
|
<string name="revanced_hide_fullscreen_share_button_title">Hide fullscreen Share button</string>
|
||||||
<string name="revanced_hide_fullscreen_share_button_summary">Hides the Share button in the fullscreen player.</string>
|
<string name="revanced_hide_fullscreen_share_button_summary">Hides the Share button in the fullscreen player.</string>
|
||||||
<string name="revanced_hide_audio_video_switch_toggle_title">Hide Song / Video toggle</string>
|
<string name="revanced_hide_song_video_toggle_title">Hide Song / Video toggle</string>
|
||||||
<string name="revanced_hide_audio_video_switch_toggle_summary">Hides the Song / Video toggle in the player.</string>
|
<string name="revanced_hide_song_video_toggle_summary">Hides the Song / Video toggle in the player.</string>
|
||||||
<string name="revanced_remember_repeat_state_title">Remember repeat state</string>
|
<string name="revanced_remember_repeat_state_title">Remember repeat state</string>
|
||||||
<string name="revanced_remember_repeat_state_summary">Remembers the state of the repeat toggle.</string>
|
<string name="revanced_remember_repeat_state_summary">Remembers the state of the repeat toggle.</string>
|
||||||
<string name="revanced_remember_shuffle_state_title">Remember shuffle state</string>
|
<string name="revanced_remember_shuffle_state_title">Remember shuffle state</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user