mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-28 21:00:19 +02:00
feat(YouTube - Hide action buttons): Add patch option Hide action buttons by index
(Experimental)
This commit is contained in:
parent
5dbab47628
commit
70178a0942
@ -0,0 +1,62 @@
|
||||
package app.revanced.extension.youtube.patches.player;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import app.revanced.extension.shared.settings.BooleanSetting;
|
||||
import app.revanced.extension.shared.utils.Logger;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.shared.VideoInformation;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ActionButtonsPatch {
|
||||
|
||||
public enum ActionButton {
|
||||
INDEX_7(Settings.HIDE_ACTION_BUTTON_INDEX_7, Settings.HIDE_ACTION_BUTTON_INDEX_LIVE_7, 7),
|
||||
INDEX_6(Settings.HIDE_ACTION_BUTTON_INDEX_6, Settings.HIDE_ACTION_BUTTON_INDEX_LIVE_6, 6),
|
||||
INDEX_5(Settings.HIDE_ACTION_BUTTON_INDEX_5, Settings.HIDE_ACTION_BUTTON_INDEX_LIVE_5, 5),
|
||||
INDEX_4(Settings.HIDE_ACTION_BUTTON_INDEX_4, Settings.HIDE_ACTION_BUTTON_INDEX_LIVE_4, 4),
|
||||
INDEX_3(Settings.HIDE_ACTION_BUTTON_INDEX_3, Settings.HIDE_ACTION_BUTTON_INDEX_LIVE_3, 3),
|
||||
INDEX_2(Settings.HIDE_ACTION_BUTTON_INDEX_2, Settings.HIDE_ACTION_BUTTON_INDEX_LIVE_2, 2),
|
||||
INDEX_1(Settings.HIDE_ACTION_BUTTON_INDEX_1, Settings.HIDE_ACTION_BUTTON_INDEX_LIVE_1, 1),
|
||||
INDEX_0(Settings.HIDE_ACTION_BUTTON_INDEX_0, Settings.HIDE_ACTION_BUTTON_INDEX_LIVE_0, 0);
|
||||
|
||||
private final BooleanSetting generalSetting;
|
||||
private final BooleanSetting liveSetting;
|
||||
private final int index;
|
||||
|
||||
ActionButton(final BooleanSetting generalSetting, final BooleanSetting liveSetting, final int index) {
|
||||
this.generalSetting = generalSetting;
|
||||
this.liveSetting = liveSetting;
|
||||
this.index = index;
|
||||
}
|
||||
}
|
||||
|
||||
private static final String TARGET_COMPONENT_TYPE = "LazilyConvertedElement";
|
||||
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.eml";
|
||||
|
||||
public static List<Object> hideActionButtonByIndex(@Nullable List<Object> list, @Nullable String identifier) {
|
||||
try {
|
||||
if (identifier != null &&
|
||||
identifier.startsWith(VIDEO_ACTION_BAR_PATH_PREFIX) &&
|
||||
list != null &&
|
||||
!list.isEmpty() &&
|
||||
list.get(0).toString().equals(TARGET_COMPONENT_TYPE)
|
||||
) {
|
||||
final int size = list.size();
|
||||
final boolean isLive = VideoInformation.getLiveStreamState();
|
||||
for (ActionButton button : ActionButton.values()) {
|
||||
if (size > button.index && (isLive ? button.liveSetting.get() : button.generalSetting.get())) {
|
||||
list.remove(button.index);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "hideActionButtonByIndex failure", ex);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
@ -285,6 +285,23 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_SHOP_BUTTON = new BooleanSetting("revanced_hide_shop_button", FALSE);
|
||||
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", FALSE);
|
||||
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_0 = new BooleanSetting("revanced_hide_action_button_index_0", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_1 = new BooleanSetting("revanced_hide_action_button_index_1", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_2 = new BooleanSetting("revanced_hide_action_button_index_2", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_3 = new BooleanSetting("revanced_hide_action_button_index_3", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_4 = new BooleanSetting("revanced_hide_action_button_index_4", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_5 = new BooleanSetting("revanced_hide_action_button_index_5", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_6 = new BooleanSetting("revanced_hide_action_button_index_6", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_7 = new BooleanSetting("revanced_hide_action_button_index_7", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_LIVE_0 = new BooleanSetting("revanced_hide_action_button_index_live_0", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_LIVE_1 = new BooleanSetting("revanced_hide_action_button_index_live_1", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_LIVE_2 = new BooleanSetting("revanced_hide_action_button_index_live_2", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_LIVE_3 = new BooleanSetting("revanced_hide_action_button_index_live_3", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_LIVE_4 = new BooleanSetting("revanced_hide_action_button_index_live_4", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_LIVE_5 = new BooleanSetting("revanced_hide_action_button_index_live_5", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_LIVE_6 = new BooleanSetting("revanced_hide_action_button_index_live_6", FALSE);
|
||||
public static final BooleanSetting HIDE_ACTION_BUTTON_INDEX_LIVE_7 = new BooleanSetting("revanced_hide_action_button_index_live_7", FALSE);
|
||||
|
||||
// PreferenceScreen: Player - Ambient mode
|
||||
public static final BooleanSetting BYPASS_AMBIENT_MODE_RESTRICTIONS = new BooleanSetting("revanced_bypass_ambient_mode_restrictions", FALSE);
|
||||
public static final BooleanSetting DISABLE_AMBIENT_MODE = new BooleanSetting("revanced_disable_ambient_mode", FALSE, true);
|
||||
|
@ -1,16 +1,37 @@
|
||||
package app.revanced.patches.youtube.player.action
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.booleanOption
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.litho.addLithoFilter
|
||||
import app.revanced.patches.shared.litho.emptyComponentsFingerprint
|
||||
import app.revanced.patches.shared.litho.lithoFilterPatch
|
||||
import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE
|
||||
import app.revanced.patches.youtube.utils.extension.Constants.COMPONENTS_PATH
|
||||
import app.revanced.patches.youtube.utils.extension.Constants.PLAYER_PATH
|
||||
import app.revanced.patches.youtube.utils.patch.PatchList.HIDE_ACTION_BUTTONS
|
||||
import app.revanced.patches.youtube.utils.settings.ResourceUtils.addPreference
|
||||
import app.revanced.patches.youtube.utils.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.video.information.videoInformationPatch
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.addInstructionsAtControlFlowLabel
|
||||
import app.revanced.util.findMethodOrThrow
|
||||
import app.revanced.util.fingerprint.methodOrThrow
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
import app.revanced.util.indexOfFirstStringInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
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.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
|
||||
private const val FILTER_CLASS_DESCRIPTOR =
|
||||
"$COMPONENTS_PATH/ActionButtonsFilter;"
|
||||
private const val ACTION_BUTTONS_CLASS_DESCRIPTOR =
|
||||
"$PLAYER_PATH/ActionButtonsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val actionButtonsPatch = bytecodePatch(
|
||||
@ -22,18 +43,73 @@ val actionButtonsPatch = bytecodePatch(
|
||||
dependsOn(
|
||||
settingsPatch,
|
||||
lithoFilterPatch,
|
||||
videoInformationPatch,
|
||||
)
|
||||
|
||||
val hideActionButtonByIndex by booleanOption(
|
||||
key = "hideActionButtonByIndex",
|
||||
default = false,
|
||||
title = "Hide action buttons by index",
|
||||
description = """
|
||||
Add an option to hide action buttons by index.
|
||||
|
||||
This setting is still experimental, so use it only for debugging purposes.
|
||||
""".trimIndentMultiline(),
|
||||
required = true
|
||||
)
|
||||
|
||||
execute {
|
||||
addLithoFilter(FILTER_CLASS_DESCRIPTOR)
|
||||
|
||||
var settingArray = arrayOf(
|
||||
"PREFERENCE_SCREEN: PLAYER",
|
||||
"SETTINGS: HIDE_ACTION_BUTTONS"
|
||||
)
|
||||
|
||||
if (hideActionButtonByIndex == true) {
|
||||
componentListFingerprint.methodOrThrow(emptyComponentsFingerprint).apply {
|
||||
val conversionContextToStringMethod =
|
||||
findMethodOrThrow(parameters[1].type) {
|
||||
name == "toString"
|
||||
}
|
||||
val identifierReference = with (conversionContextToStringMethod) {
|
||||
val identifierStringIndex =
|
||||
indexOfFirstStringInstructionOrThrow(", identifierProperty=")
|
||||
val identifierStringAppendIndex =
|
||||
indexOfFirstInstructionOrThrow(identifierStringIndex, Opcode.INVOKE_VIRTUAL)
|
||||
val identifierStringAppendIndexRegister = getInstruction<FiveRegisterInstruction>(identifierStringAppendIndex).registerD
|
||||
val identifierAppendIndex =
|
||||
indexOfFirstInstructionOrThrow(identifierStringAppendIndex + 1, Opcode.INVOKE_VIRTUAL)
|
||||
val identifierRegister = getInstruction<FiveRegisterInstruction>(identifierAppendIndex).registerD
|
||||
val identifierIndex = indexOfFirstInstructionReversedOrThrow(identifierAppendIndex) {
|
||||
opcode == Opcode.IGET_OBJECT &&
|
||||
getReference<FieldReference>()?.type == "Ljava/lang/String;" &&
|
||||
(this as? TwoRegisterInstruction)?.registerA == identifierRegister
|
||||
}
|
||||
getInstruction<ReferenceInstruction>(identifierIndex).reference
|
||||
}
|
||||
|
||||
val listIndex = implementation!!.instructions.lastIndex
|
||||
val listRegister = getInstruction<OneRegisterInstruction>(listIndex).registerA
|
||||
val identifierRegister = listRegister + 1
|
||||
|
||||
addInstructionsAtControlFlowLabel(
|
||||
listIndex, """
|
||||
move-object/from16 v$identifierRegister, p2
|
||||
iget-object v$identifierRegister, v$identifierRegister, $identifierReference
|
||||
invoke-static {v$listRegister, v$identifierRegister}, $ACTION_BUTTONS_CLASS_DESCRIPTOR->hideActionButtonByIndex(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
|
||||
move-result-object v$listRegister
|
||||
"""
|
||||
)
|
||||
|
||||
settingArray += "SETTINGS: HIDE_BUTTONS_BY_INDEX"
|
||||
}
|
||||
}
|
||||
|
||||
// region add settings
|
||||
|
||||
addPreference(
|
||||
arrayOf(
|
||||
"PREFERENCE_SCREEN: PLAYER",
|
||||
"SETTINGS: HIDE_ACTION_BUTTONS"
|
||||
),
|
||||
settingArray,
|
||||
HIDE_ACTION_BUTTONS
|
||||
)
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
package app.revanced.patches.youtube.player.action
|
||||
|
||||
import app.revanced.util.fingerprint.legacyFingerprint
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import app.revanced.util.or
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
internal val componentListFingerprint = legacyFingerprint(
|
||||
name = "componentListFingerprint",
|
||||
returnType = "Ljava/util/List;",
|
||||
accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL,
|
||||
customFingerprint = { method, _ ->
|
||||
method.indexOfFirstInstruction {
|
||||
opcode == Opcode.INVOKE_STATIC &&
|
||||
getReference<MethodReference>()?.name == "nCopies"
|
||||
} >= 0
|
||||
}
|
||||
)
|
@ -848,6 +848,43 @@ Settings → Autoplay / Playback → Autoplay next video"</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Thanks button is hidden.</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Thanks button is shown.</string>
|
||||
|
||||
<!-- PreferenceScreen: Player, PreferenceCategory: Player, PreferenceScreen: Action buttons, PreferenceCategory: Hide by index -->
|
||||
<string name="revanced_preference_category_hide_by_index">Hide by index</string>
|
||||
|
||||
<string name="revanced_hide_action_button_index_0_title">Hide first button</string>
|
||||
<string name="revanced_hide_action_button_index_0_summary_on">First button is hidden.</string>
|
||||
<string name="revanced_hide_action_button_index_0_summary_off">First button is shown.</string>
|
||||
<string name="revanced_hide_action_button_index_1_title">Hide second button</string>
|
||||
<string name="revanced_hide_action_button_index_1_summary_on">Second button is hidden.</string>
|
||||
<string name="revanced_hide_action_button_index_1_summary_off">Second button is shown.</string>
|
||||
<string name="revanced_hide_action_button_index_2_title">Hide third button</string>
|
||||
<string name="revanced_hide_action_button_index_2_summary_on">Third button is hidden.</string>
|
||||
<string name="revanced_hide_action_button_index_2_summary_off">Third button is shown.</string>
|
||||
<string name="revanced_hide_action_button_index_3_title">Hide fourth button</string>
|
||||
<string name="revanced_hide_action_button_index_3_summary_on">Fourth button is hidden.</string>
|
||||
<string name="revanced_hide_action_button_index_3_summary_off">Fourth button is shown.</string>
|
||||
<string name="revanced_hide_action_button_index_4_title">Hide fifth button</string>
|
||||
<string name="revanced_hide_action_button_index_4_summary_on">Fifth button is hidden.</string>
|
||||
<string name="revanced_hide_action_button_index_4_summary_off">Fifth button is shown.</string>
|
||||
<string name="revanced_hide_action_button_index_5_title">Hide sixth button</string>
|
||||
<string name="revanced_hide_action_button_index_5_summary_on">Sixth button is hidden.</string>
|
||||
<string name="revanced_hide_action_button_index_5_summary_off">Sixth button is shown.</string>
|
||||
<string name="revanced_hide_action_button_index_6_title">Hide seventh button</string>
|
||||
<string name="revanced_hide_action_button_index_6_summary_on">Seventh button is hidden.</string>
|
||||
<string name="revanced_hide_action_button_index_6_summary_off">Seventh button is shown.</string>
|
||||
<string name="revanced_hide_action_button_index_7_title">Hide eighth button</string>
|
||||
<string name="revanced_hide_action_button_index_7_summary_on">Eighth button is hidden.</string>
|
||||
<string name="revanced_hide_action_button_index_7_summary_off">Eighth button is shown.</string>
|
||||
|
||||
<!-- PreferenceScreen: Player, PreferenceCategory: Player, PreferenceScreen: Action buttons, PreferenceCategory: Hide by index in live stream -->
|
||||
<string name="revanced_preference_category_hide_by_index_live">Hide by index in live stream</string>
|
||||
|
||||
<string name="revanced_hide_action_button_index_about_title">About Hide action button by index</string>
|
||||
<string name="revanced_hide_action_button_index_about_summary">"Hide the action buttons by index before the action buttons are initialized.
|
||||
|
||||
- Hiding the action buttons leaves no empty space.
|
||||
- Index of the action buttons may not always be the same button."</string>
|
||||
|
||||
<!-- PreferenceScreen: Player, PreferenceCategory: Player, PreferenceScreen: Ambient mode -->
|
||||
<string name="revanced_preference_screen_ambient_mode_title">Ambient mode</string>
|
||||
<string name="revanced_preference_screen_ambient_mode_summary">Disable Ambient mode or bypass Ambient mode restrictions.</string>
|
||||
|
@ -331,7 +331,30 @@
|
||||
<SwitchPreference android:title="@string/revanced_hide_playlist_button_title" android:key="revanced_hide_playlist_button" android:summaryOn="@string/revanced_hide_playlist_button_summary_on" android:summaryOff="@string/revanced_hide_playlist_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_share_button_title" android:key="revanced_hide_share_button" android:summaryOn="@string/revanced_hide_share_button_summary_on" android:summaryOff="@string/revanced_hide_share_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_shop_button_title" android:key="revanced_hide_shop_button" android:summaryOn="@string/revanced_hide_shop_button_summary_on" android:summaryOff="@string/revanced_hide_shop_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_thanks_button_title" android:key="revanced_hide_thanks_button" android:summaryOn="@string/revanced_hide_thanks_button_summary_on" android:summaryOff="@string/revanced_hide_thanks_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_thanks_button_title" android:key="revanced_hide_thanks_button" android:summaryOn="@string/revanced_hide_thanks_button_summary_on" android:summaryOff="@string/revanced_hide_thanks_button_summary_off" />SETTINGS: HIDE_ACTION_BUTTONS -->
|
||||
|
||||
<!-- SETTINGS: HIDE_BUTTONS_BY_INDEX
|
||||
<PreferenceCategory android:title="@string/revanced_preference_category_hide_by_index" android:layout="@layout/revanced_settings_preferences_category"/>
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_0_title" android:key="revanced_hide_action_button_index_0" android:summaryOn="@string/revanced_hide_action_button_index_0_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_0_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_1_title" android:key="revanced_hide_action_button_index_1" android:summaryOn="@string/revanced_hide_action_button_index_1_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_1_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_2_title" android:key="revanced_hide_action_button_index_2" android:summaryOn="@string/revanced_hide_action_button_index_2_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_2_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_3_title" android:key="revanced_hide_action_button_index_3" android:summaryOn="@string/revanced_hide_action_button_index_3_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_3_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_4_title" android:key="revanced_hide_action_button_index_4" android:summaryOn="@string/revanced_hide_action_button_index_4_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_4_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_5_title" android:key="revanced_hide_action_button_index_5" android:summaryOn="@string/revanced_hide_action_button_index_5_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_5_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_6_title" android:key="revanced_hide_action_button_index_6" android:summaryOn="@string/revanced_hide_action_button_index_6_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_6_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_7_title" android:key="revanced_hide_action_button_index_7" android:summaryOn="@string/revanced_hide_action_button_index_7_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_7_summary_off" />
|
||||
|
||||
<PreferenceCategory android:title="@string/revanced_preference_category_hide_by_index_live" android:layout="@layout/revanced_settings_preferences_category"/>
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_0_title" android:key="revanced_hide_action_button_index_live_0" android:summaryOn="@string/revanced_hide_action_button_index_0_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_0_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_1_title" android:key="revanced_hide_action_button_index_live_1" android:summaryOn="@string/revanced_hide_action_button_index_1_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_1_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_2_title" android:key="revanced_hide_action_button_index_live_2" android:summaryOn="@string/revanced_hide_action_button_index_2_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_2_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_3_title" android:key="revanced_hide_action_button_index_live_3" android:summaryOn="@string/revanced_hide_action_button_index_3_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_3_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_4_title" android:key="revanced_hide_action_button_index_live_4" android:summaryOn="@string/revanced_hide_action_button_index_4_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_4_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_action_button_index_5_title" android:key="revanced_hide_action_button_index_live_5" android:summaryOn="@string/revanced_hide_action_button_index_5_summary_on" android:summaryOff="@string/revanced_hide_action_button_index_5_summary_off" />
|
||||
|
||||
<Preference android:title="@string/revanced_hide_action_button_index_about_title" android:selectable="false" android:summary="@string/revanced_hide_action_button_index_about_summary" />SETTINGS: HIDE_BUTTONS_BY_INDEX -->
|
||||
|
||||
<!-- SETTINGS: HIDE_ACTION_BUTTONS
|
||||
</PreferenceScreen>SETTINGS: HIDE_ACTION_BUTTONS -->
|
||||
|
||||
<!-- SETTINGS: AMBIENT_MODE_CONTROLS
|
||||
|
Loading…
x
Reference in New Issue
Block a user