commit a4b743200606e6a294d9cfc3f6a52cb88a29ccc2 parent e82b91eee06078474bc4d45ce28795b37450748e Author: rhunk <101876869+rhunk@users.noreply.github.com> Date: Wed, 25 Oct 2023 02:35:53 +0200 feat: hide quick add in friend feed Diffstat:
7 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json @@ -262,6 +262,10 @@ "name": "Hide Streak Restore", "description": "Hides the Restore button in the friend feed" }, + "hide_quick_add_friend_feed": { + "name": "Hide Quick Add in Friend Feed", + "description": "Hides the Quick Add section in the friend feed" + }, "hide_story_sections": { "name": "Hide Story Section", "description": "Hide certain UI Elements shown in the story section" diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/MappingsWrapper.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/MappingsWrapper.kt @@ -30,6 +30,7 @@ class MappingsWrapper : FileLoaderWrapper(BridgeFileType.MAPPINGS, "{}".toByteAr ScoreUpdateMapper::class, FriendRelationshipChangerMapper::class, ViewBinderMapper::class, + FriendingDataSourcesMapper::class, ) } diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/UserInterfaceTweaks.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/UserInterfaceTweaks.kt @@ -31,6 +31,7 @@ class UserInterfaceTweaks : ConfigContainer() { val streakExpirationInfo = boolean("streak_expiration_info") { requireRestart() } val hideFriendFeedEntry = boolean("hide_friend_feed_entry") { requireRestart() } val hideStreakRestore = boolean("hide_streak_restore") { requireRestart() } + val hideQuickAddFriendFeed = boolean("hide_quick_add_friend_feed") { requireRestart() } val hideStorySections = multiple("hide_story_sections", "hide_friend_suggestions", "hide_friends", "hide_suggested", "hide_for_you") { requireRestart() } val hideUiComponents = multiple("hide_ui_components", diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideQuickAddFriendFeed.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideQuickAddFriendFeed.kt @@ -0,0 +1,21 @@ +package me.rhunk.snapenhance.core.features.impl.ui + +import me.rhunk.snapenhance.core.features.Feature +import me.rhunk.snapenhance.core.features.FeatureLoadParams +import me.rhunk.snapenhance.core.util.hook.HookStage +import me.rhunk.snapenhance.core.util.hook.hookConstructor +import me.rhunk.snapenhance.core.util.ktx.setObjectField + +class HideQuickAddFriendFeed : Feature("HideQuickAddFriendFeed", loadParams = FeatureLoadParams.ACTIVITY_CREATE_SYNC) { + override fun onActivityCreate() { + if (!context.config.userInterface.hideQuickAddFriendFeed.get()) return + + val friendingDataSource = context.mappings.getMappedMap("FriendingDataSources") + findClass(friendingDataSource["class"].toString()).hookConstructor(HookStage.AFTER) { param -> + param.thisObject<Any>().setObjectField( + friendingDataSource["quickAddSourceListField"].toString(), + arrayListOf<Any>() + ) + } + } +}+ \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/manager/impl/FeatureManager.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/manager/impl/FeatureManager.kt @@ -100,6 +100,7 @@ class FeatureManager( FriendFeedMessagePreview::class, HideStreakRestore::class, HideFriendFeedEntry::class, + HideQuickAddFriendFeed::class, ) initializeFeatures() diff --git a/mapper/src/main/kotlin/me/rhunk/snapenhance/mapper/impl/FriendingDataSourcesMapper.kt b/mapper/src/main/kotlin/me/rhunk/snapenhance/mapper/impl/FriendingDataSourcesMapper.kt @@ -0,0 +1,29 @@ +package me.rhunk.snapenhance.mapper.impl + +import me.rhunk.snapenhance.mapper.AbstractClassMapper +import me.rhunk.snapenhance.mapper.ext.findConstString +import me.rhunk.snapenhance.mapper.ext.getClassName +import me.rhunk.snapenhance.mapper.ext.searchNextFieldReference + +class FriendingDataSourcesMapper: AbstractClassMapper() { + init { + mapper { + for (classDef in classes) { + val constructor = classDef.methods.firstOrNull { it.name == "<init>" } ?: continue + if (constructor.parameterTypes.size < 4 || (0..3).any { constructor.parameterTypes[it] != "Ljava/util/List;" }) continue + + val toStringMethod = classDef.methods.firstOrNull { it.name == "toString" } ?: continue + if (toStringMethod.implementation?.findConstString("quickaddSource", contains = true) != true) continue + + val quickAddSourceListField = toStringMethod.implementation?.searchNextFieldReference("quickaddSource", contains = true) + ?: continue + + addMapping("FriendingDataSources", + "class" to classDef.getClassName(), + "quickAddSourceListField" to quickAddSourceListField.name + ) + return@mapper + } + } + } +}+ \ No newline at end of file diff --git a/mapper/src/test/kotlin/me/rhunk/snapenhance/mapper/tests/TestMappings.kt b/mapper/src/test/kotlin/me/rhunk/snapenhance/mapper/tests/TestMappings.kt @@ -24,6 +24,7 @@ class TestMappings { ScoreUpdateMapper::class, FriendRelationshipChangerMapper::class, ViewBinderMapper::class, + FriendingDataSourcesMapper::class, ) val gson = GsonBuilder().setPrettyPrinting().create()