fix(YouTube/Settings): Search bar in settings can't find RYD and SponsorBlock settings

This commit is contained in:
inotia00
2024-09-23 22:20:33 +09:00
parent 6d48adef53
commit 9bd51f7df8
7 changed files with 102 additions and 61 deletions

View File

@ -7,7 +7,8 @@ import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchException
import app.revanced.patches.shared.integrations.BaseIntegrationsPatch.IntegrationsFingerprint.IRegisterResolver
import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_CLASS_DESCRIPTOR
import app.revanced.util.deprecatedOrResultOrThrow
import app.revanced.util.isDeprecated
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.ClassDef
import com.android.tools.smali.dexlib2.iface.Method
@ -53,7 +54,9 @@ abstract class BaseIntegrationsPatch(
) {
fun invoke(integrationsDescriptor: String) {
deprecatedOrResultOrThrow()?.mutableMethod?.let { method ->
if (isDeprecated()) return
resultOrThrow().mutableMethod.let { method ->
val insertIndex = insertIndexResolver(method)
val contextRegister = contextRegisterResolver(method)

View File

@ -2,11 +2,11 @@ package app.revanced.patches.youtube.general.spoofappversion
import app.revanced.patcher.data.ResourceContext
import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE
import app.revanced.patches.youtube.utils.settings.ResourceUtils.addEntryValues
import app.revanced.patches.youtube.utils.settings.SettingsPatch
import app.revanced.util.patch.BaseResourcePatch
import org.w3c.dom.Element
@Suppress("DEPRECATION", "unused")
@Suppress("unused")
object SpoofAppVersionPatch : BaseResourcePatch(
name = "Spoof app version",
description = "Adds options to spoof the YouTube client version. " +
@ -17,31 +17,20 @@ object SpoofAppVersionPatch : BaseResourcePatch(
),
compatiblePackages = COMPATIBLE_PACKAGE
) {
private const val ATTRIBUTE_NAME_ENTRIES =
"revanced_spoof_app_version_target_entries"
private const val ATTRIBUTE_NAME_ENTRY_VALUE =
"revanced_spoof_app_version_target_entry_values"
override fun execute(context: ResourceContext) {
if (SettingsPatch.upward1834) {
context.appendChild(
arrayOf(
"revanced_spoof_app_version_target_entries" to "@string/revanced_spoof_app_version_target_entry_18_33_40",
"revanced_spoof_app_version_target_entry_values" to "18.33.40",
)
)
context.appendAppVersion("18.33.40")
if (SettingsPatch.upward1839) {
context.appendChild(
arrayOf(
"revanced_spoof_app_version_target_entries" to "@string/revanced_spoof_app_version_target_entry_18_38_45",
"revanced_spoof_app_version_target_entry_values" to "18.38.45"
)
)
context.appendAppVersion("18.38.45")
if (SettingsPatch.upward1849) {
context.appendChild(
arrayOf(
"revanced_spoof_app_version_target_entries" to "@string/revanced_spoof_app_version_target_entry_18_48_39",
"revanced_spoof_app_version_target_entry_values" to "18.48.39"
)
)
context.appendAppVersion("18.48.39")
}
}
}
@ -60,25 +49,16 @@ object SpoofAppVersionPatch : BaseResourcePatch(
SettingsPatch.updatePatchStatus(this)
}
private fun ResourceContext.appendChild(entryArray: Array<Pair<String, String>>) {
entryArray.map { (attributeName, attributeValue) ->
this.xmlEditor["res/values/arrays.xml"].use { editor ->
editor.file.apply {
val resourcesNode = getElementsByTagName("resources").item(0) as Element
val newElement: Element = createElement("item")
for (i in 0 until resourcesNode.childNodes.length) {
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
if (node.getAttribute("name") == attributeName) {
newElement.appendChild(createTextNode(attributeValue))
val firstChild = node.firstChild
node.insertBefore(newElement, firstChild)
}
}
}
}
}
private fun ResourceContext.appendAppVersion(appVersion: String) {
addEntryValues(
ATTRIBUTE_NAME_ENTRIES,
"@string/revanced_spoof_app_version_target_entry_" + appVersion.replace(".", "_"),
prepend = false
)
addEntryValues(
ATTRIBUTE_NAME_ENTRY_VALUE,
appVersion,
prepend = false
)
}
}

View File

@ -56,8 +56,16 @@ object DoubleTapLengthPatch : BaseResourcePatch(
)
for (index in 0 until splits.count()) {
context.addEntryValues(arrayPath, lengthElements[index], entryValueName)
context.addEntryValues(arrayPath, lengthElements[index], entriesName)
context.addEntryValues(
entryValueName,
lengthElements[index],
path = arrayPath
)
context.addEntryValues(
entriesName,
lengthElements[index],
path = arrayPath
)
}
SettingsPatch.updatePatchStatus(this)

View File

@ -30,8 +30,8 @@ import app.revanced.util.patch.BaseBytecodePatch
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.RegisterRangeInstruction
import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction3rc
@Suppress("unused")
object PlayerButtonsPatch : BaseBytecodePatch(
@ -182,7 +182,7 @@ object PlayerButtonsPatch : BaseBytecodePatch(
PlayerControlsVisibilityModelFingerprint.resultOrThrow().let {
it.mutableMethod.apply {
val callIndex = indexOfFirstInstructionOrThrow(Opcode.INVOKE_DIRECT_RANGE)
val callInstruction = getInstruction<Instruction3rc>(callIndex)
val callInstruction = getInstruction<RegisterRangeInstruction>(callIndex)
val hasNextParameterRegister = callInstruction.startRegister + HAS_NEXT
val hasPreviousParameterRegister = callInstruction.startRegister + HAS_PREVIOUS

View File

@ -50,23 +50,27 @@ object ResourceUtils {
}
fun ResourceContext.addEntryValues(
path: String,
speedEntryValues: String,
attributeName: String
attributeName: String,
attributeValue: String,
path: String = "res/values/arrays.xml",
prepend: Boolean = true,
) {
xmlEditor[path].use {
with(it.file) {
val resourcesNode = getElementsByTagName("resources").item(0) as Element
val newElement: Element = createElement("item")
for (i in 0 until resourcesNode.childNodes.length) {
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
if (node.getAttribute("name") == attributeName) {
newElement.appendChild(createTextNode(speedEntryValues))
newElement.appendChild(createTextNode(attributeValue))
if (prepend) {
node.appendChild(newElement)
} else {
node.insertBefore(newElement, node.firstChild)
}
}
}
}

View File

@ -33,8 +33,8 @@ import com.android.tools.smali.dexlib2.util.MethodUtil
const val REGISTER_TEMPLATE_REPLACEMENT: String = "REGISTER_INDEX"
fun MethodFingerprint.deprecatedOrResultOrThrow() =
if (javaClass.annotations[0].toString().contains("Deprecated")) result else resultOrThrow()
fun MethodFingerprint.isDeprecated() =
javaClass.annotations[0].toString().contains("Deprecated")
fun MethodFingerprint.resultOrThrow() = result ?: throw exception

View File

@ -78,8 +78,8 @@
<SwitchPreference android:title="@string/revanced_hide_keyword_content_subscriptions_title" android:key="revanced_hide_keyword_content_subscriptions" android:summaryOn="@string/revanced_hide_keyword_content_subscriptions_summary_on" android:summaryOff="@string/revanced_hide_keyword_content_subscriptions_summary_off" />
<SwitchPreference android:title="@string/revanced_hide_keyword_content_comments_title" android:key="revanced_hide_keyword_content_comments" android:summaryOn="@string/revanced_hide_keyword_content_comments_summary_on" android:summaryOff="@string/revanced_hide_keyword_content_comments_summary_off" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_keyword_content_phrases_title" android:key="revanced_hide_keyword_content_phrases" android:summary="@string/revanced_hide_keyword_content_phrases_summary" android:inputType="textMultiLine" />
<app.revanced.integrations.youtube.settings.preference.KeywordContentAboutPreference android:title="@string/revanced_hide_keyword_content_about_title" android:selectable="false" android:summary="@string/revanced_hide_keyword_content_about_summary" />
<app.revanced.integrations.youtube.settings.preference.KeywordContentAboutWholeWordsPreference android:title="@string/revanced_hide_keyword_content_about_whole_words_title" android:selectable="false" android:summary="@string/revanced_hide_keyword_content_about_whole_words_summary" />
<Preference android:title="@string/revanced_hide_keyword_content_about_title" android:selectable="false" android:summary="@string/revanced_hide_keyword_content_about_summary" />
<app.revanced.integrations.shared.settings.preference.HtmlPreference android:title="@string/revanced_hide_keyword_content_about_whole_words_title" android:selectable="false" android:summary="@string/revanced_hide_keyword_content_about_whole_words_summary" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/revanced_preference_category_recommended_video" android:layout="@layout/revanced_settings_preferences_category">
<SwitchPreference android:title="@string/revanced_hide_recommended_video_title" android:key="revanced_hide_recommended_video" android:summary="@string/revanced_hide_recommended_video_summary" />
@ -92,7 +92,7 @@
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_view_counts_less_than_title" android:key="revanced_hide_video_view_counts_less_than" android:summary="@string/revanced_hide_video_view_counts_less_than_summary" android:inputType="number" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_view_counts_greater_than_title" android:key="revanced_hide_video_view_counts_greater_than" android:summary="@string/revanced_hide_video_view_counts_greater_than_summary" android:inputType="number" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_view_counts_multiplier_title" android:key="revanced_hide_video_view_counts_multiplier" android:summary="@string/revanced_hide_video_view_counts_multiplier_summary" android:inputType="textMultiLine" />
<app.revanced.integrations.youtube.settings.preference.ViewCountAboutPreference android:title="@string/revanced_hide_video_by_view_counts_about_title" android:selectable="false" android:summary="@string/revanced_hide_video_by_view_counts_about_summary" />
<Preference android:title="@string/revanced_hide_video_by_view_counts_about_title" android:selectable="false" android:summary="@string/revanced_hide_video_by_view_counts_about_summary" />
</PreferenceCategory>
</PreferenceScreen>
<SwitchPreference android:title="@string/revanced_hide_album_card_title" android:key="revanced_hide_album_card" android:summaryOn="@string/revanced_hide_album_card_summary_on" android:summaryOff="@string/revanced_hide_album_card_summary_off" />
@ -601,12 +601,58 @@
<!-- PREFERENCE_SCREEN: RETURN_YOUTUBE_DISLIKE
<Preference android:title="@string/revanced_preference_screen_ryd_title" android:key="revanced_preference_screen_ryd" />PREFERENCE_SCREEN: RETURN_YOUTUBE_DISLIKE -->
<PreferenceScreen android:title="@string/revanced_preference_screen_ryd_title" android:key="revanced_preference_screen_ryd" >
<SwitchPreference android:title="@string/revanced_ryd_enable_title" android:key="ryd_enabled" android:summaryOn="@string/revanced_ryd_enable_summary_on" android:summaryOff="@string/revanced_ryd_enable_summary_off" />
<SwitchPreference android:title="@string/revanced_ryd_shorts_title" android:key="ryd_shorts" android:summaryOn="@string/revanced_ryd_shorts_summary_on" android:summaryOff="@string/revanced_ryd_shorts_summary_off" />
<SwitchPreference android:title="@string/revanced_ryd_dislike_percentage_title" android:key="ryd_dislike_percentage" android:summaryOn="@string/revanced_ryd_dislike_percentage_summary_on" android:summaryOff="@string/revanced_ryd_dislike_percentage_summary_off" />
<SwitchPreference android:title="@string/revanced_ryd_compact_layout_title" android:key="ryd_compact_layout" android:summaryOn="@string/revanced_ryd_compact_layout_summary_on" android:summaryOff="@string/revanced_ryd_compact_layout_summary_off" />
<SwitchPreference android:title="@string/revanced_ryd_toast_on_connection_error_title" android:key="ryd_toast_on_connection_error" android:summaryOn="@string/revanced_ryd_toast_on_connection_error_summary_on" android:summaryOff="@string/revanced_ryd_toast_on_connection_error_summary_off" />
<PreferenceCategory android:title="@string/revanced_ryd_about" android:layout="@layout/revanced_settings_preferences_category"/>
<Preference android:title="@string/revanced_ryd_attribution_title" android:key="revanced_ryd_attribution" android:summary="@string/revanced_ryd_attribution_summary">
<intent android:action="android.intent.action.VIEW" android:data="https://returnyoutubedislike.com" />
</Preference>
</PreferenceScreen>PREFERENCE_SCREEN: RETURN_YOUTUBE_DISLIKE -->
<!-- PREFERENCE_SCREEN: SPONSOR_BLOCK
<Preference android:title="@string/revanced_preference_screen_sb_title" android:key="revanced_preference_screen_sb" />PREFERENCE_SCREEN: SPONSOR_BLOCK -->
<PreferenceScreen android:title="@string/revanced_preference_screen_sb_title" android:key="revanced_preference_screen_sb" >
<SwitchPreference android:title="@string/revanced_sb_enable_sb" android:key="sb_enabled" android:summary="@string/revanced_sb_enable_sb_sum" />
<PreferenceCategory android:title="@string/revanced_sb_appearance_category" android:layout="@layout/revanced_settings_preferences_category">
<SwitchPreference android:title="@string/revanced_sb_enable_voting" android:key="sb_voting_button" android:summaryOn="@string/revanced_sb_enable_voting_sum_on" android:summaryOff="@string/revanced_sb_enable_voting_sum_off" />
<SwitchPreference android:title="@string/revanced_sb_enable_compact_skip_button" android:key="sb_compact_skip_button" android:summaryOn="@string/revanced_sb_enable_compact_skip_button_sum_on" android:summaryOff="@string/revanced_sb_enable_compact_skip_button_sum_off" />
<SwitchPreference android:title="@string/revanced_sb_enable_auto_hide_skip_segment_button" android:key="sb_auto_hide_skip_button" android:summaryOn="@string/revanced_sb_enable_auto_hide_skip_segment_button_sum_on" android:summaryOff="@string/revanced_sb_enable_auto_hide_skip_segment_button_sum_off" />
<SwitchPreference android:title="@string/revanced_sb_general_skiptoast" android:key="sb_toast_on_skip" android:summaryOn="@string/revanced_sb_general_skiptoast_sum_on" android:summaryOff="@string/revanced_sb_general_skiptoast_sum_off" />
<SwitchPreference android:title="@string/revanced_sb_general_time_without" android:key="sb_video_length_without_segments" android:summaryOn="@string/revanced_sb_general_time_without_sum_on" android:summaryOff="@string/revanced_sb_general_time_without_sum_off" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/revanced_sb_diff_segments" android:layout="@layout/revanced_settings_preferences_category">
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_sponsor" android:key="sponsor" android:summary="@string/revanced_sb_segments_sponsor_sum" />
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_selfpromo" android:key="selfpromo" android:summary="@string/revanced_sb_segments_selfpromo_sum" />
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_interaction" android:key="interaction" android:summary="@string/revanced_sb_segments_interaction_sum" />
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_highlight" android:key="poi_highlight" android:summary="@string/revanced_sb_segments_highlight_sum" />
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_intro" android:key="intro" android:summary="@string/revanced_sb_segments_intro_sum" />
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_outro" android:key="outro" android:summary="@string/revanced_sb_segments_outro_sum" />
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_preview" android:key="preview" android:summary="@string/revanced_sb_segments_preview_sum" />
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_filler" android:key="filler" android:summary="@string/revanced_sb_segments_filler_sum" />
<app.revanced.integrations.youtube.settings.preference.SegmentCategoryListPreference android:title="@string/revanced_sb_segments_nomusic" android:key="music_offtopic" android:summary="@string/revanced_sb_segments_nomusic_sum" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/revanced_sb_create_segment_category" android:layout="@layout/revanced_settings_preferences_category">
<SwitchPreference android:title="@string/revanced_sb_enable_create_segment" android:key="sb_create_new_segment" android:summaryOn="@string/revanced_sb_enable_create_segment_sum_on" android:summaryOff="@string/revanced_sb_enable_create_segment_sum_off" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_sb_general_adjusting" android:key="sb_create_new_segment_step" android:summary="@string/revanced_sb_general_adjusting_sum" android:inputType="number" />
<Preference android:title="@string/revanced_sb_guidelines_preference_title" android:key="revanced_sb_guidelines_preference" android:summary="@string/revanced_sb_guidelines_preference_sum" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/revanced_sb_general" android:layout="@layout/revanced_settings_preferences_category">
<SwitchPreference android:title="@string/revanced_sb_toast_on_connection_error_title" android:key="sb_toast_on_connection_error" android:summaryOn="@string/revanced_sb_toast_on_connection_error_summary_on" android:summaryOff="@string/revanced_sb_toast_on_connection_error_summary_off" />
<SwitchPreference android:title="@string/revanced_sb_general_skipcount" android:key="sb_track_skip_count" android:summaryOn="@string/revanced_sb_general_skipcount_sum_on" android:summaryOff="@string/revanced_sb_general_skipcount_sum_off" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_sb_general_min_duration" android:key="sb_min_segment_duration" android:summary="@string/revanced_sb_general_min_duration_sum" android:inputType="numberDecimal" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_sb_general_uuid" android:key="sb_private_user_id_Do_Not_Share" android:summary="@string/revanced_sb_general_uuid_sum" android:inputType="textMultiLine" />
<Preference android:title="@string/revanced_sb_general_api_url" android:key="sb_api_url" android:summary="@string/revanced_sb_general_api_url_sum" android:dependency="sb_enabled" />
<app.revanced.integrations.youtube.settings.preference.SponsorBlockImportExportPreference android:title="@string/revanced_sb_settings_ie" android:summary="@string/revanced_sb_settings_ie_sum" android:inputType="textMultiLine" android:dependency="sb_enabled" />
</PreferenceCategory>
</PreferenceScreen>PREFERENCE_SCREEN: SPONSOR_BLOCK -->
<PreferenceScreen android:title="@string/revanced_preference_screen_misc_title" android:key="revanced_preference_screen_misc">