feat(core): hide quick add suggestions

This commit is contained in:
rhunk 2024-10-29 21:19:50 +01:00
parent fffe441f68
commit 6fed85b4a6
9 changed files with 34 additions and 68 deletions

View File

@ -500,9 +500,9 @@
"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_quick_add_suggestions": {
"name": "Hide Quick Add Suggestions",
"description": "Removes quick add friend suggestions"
},
"hide_story_suggestions": {
"name": "Hide Story Suggestions",
@ -1264,7 +1264,6 @@
"hide_map_reactions": "Remove Map Reactions"
},
"hide_story_suggestions": {
"hide_friend_suggestions": "Hide friend suggestions",
"hide_suggested_friend_stories": "Hide suggested friend stories",
"hide_my_stories": "Hide My Stories"
},

View File

@ -40,8 +40,8 @@ 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 hideStorySuggestions = multiple("hide_story_suggestions", "hide_friend_suggestions", "hide_suggested_friend_stories", "hide_my_stories") { requireRestart() }
val hideQuickAddSuggestions = boolean("hide_quick_add_suggestions") { requireRestart() }
val hideStorySuggestions = multiple("hide_story_suggestions", "hide_suggested_friend_stories", "hide_my_stories") { requireRestart() }
val hideUiComponents = multiple("hide_ui_components",
"hide_voice_record_button",
"hide_stickers_button",

View File

@ -102,7 +102,7 @@ class FeatureManager(
FriendFeedMessagePreview(),
HideStreakRestore(),
HideFriendFeedEntry(),
HideQuickAddFriendFeed(),
HideQuickAddSuggestions(),
CallButtonsOverride(),
SnapPreview(),
BypassScreenshotDetection(),

View File

@ -1,24 +0,0 @@
package me.rhunk.snapenhance.core.features.impl.ui
import me.rhunk.snapenhance.core.features.Feature
import me.rhunk.snapenhance.core.util.hook.HookStage
import me.rhunk.snapenhance.core.util.hook.hookConstructor
import me.rhunk.snapenhance.core.util.ktx.setObjectField
import me.rhunk.snapenhance.mapper.impl.FriendingDataSourcesMapper
class HideQuickAddFriendFeed : Feature("HideQuickAddFriendFeed") {
override fun init() {
if (!context.config.userInterface.hideQuickAddFriendFeed.get()) return
onNextActivityCreate {
context.mappings.useMapper(FriendingDataSourcesMapper::class) {
classReference.getAsClass()?.hookConstructor(HookStage.AFTER) { param ->
param.thisObject<Any>().setObjectField(
quickAddSourceListField.get()!!,
arrayListOf<Any>()
)
}
}
}
}
}

View File

@ -0,0 +1,27 @@
package me.rhunk.snapenhance.core.features.impl.ui
import me.rhunk.snapenhance.core.features.Feature
import me.rhunk.snapenhance.core.util.hook.HookStage
import me.rhunk.snapenhance.core.util.hook.hook
class HideQuickAddSuggestions : Feature("Hide Quick Add Suggestions") {
override fun init() {
if (!context.config.userInterface.hideQuickAddSuggestions.get()) return
context.androidContext.classLoader.loadClass("io.requery.android.database.sqlite.SQLiteDatabase")
.hook("rawQueryWithFactory", HookStage.BEFORE) { param ->
var sqlRequest = param.arg<String>(1)
fun patchRequest() {
sqlRequest.lastIndexOf("WHERE").takeIf { it != -1 }?.let {
sqlRequest = sqlRequest.substring(0, it + 5) + " 0 = 1 AND " + sqlRequest.substring(it + 5)
param.setArg(1, sqlRequest)
}
}
if (sqlRequest.contains("SuggestedFriendPlacement")) {
patchRequest()
}
}
}
}

View File

@ -98,13 +98,8 @@ class UITweaks : Feature("UITweaks") {
}
val viewModelString = event.prevModel.toString()
val isSuggestedFriend by lazy { viewModelString.startsWith("DFFriendSuggestionCardViewModel") }
val isMyStory by lazy { viewModelString.let { it.startsWith("CircularItemViewModel") && it.contains("storyId=")} }
if (hideStorySuggestions.contains("hide_friend_suggestions") && isSuggestedFriend) {
removeView()
return@subscribe
}
if (hideStorySuggestions.contains("hide_my_stories") && isMyStory) {
removeView()
return@subscribe

View File

@ -33,7 +33,6 @@ class ClassMapper(
ScoreUpdateMapper(),
FriendRelationshipChangerMapper(),
ViewBinderMapper(),
FriendingDataSourcesMapper(),
OperaViewerParamsMapper(),
MemoriesPresenterMapper(),
StreaksExpirationMapper(),

View File

@ -1,30 +0,0 @@
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("FriendingDataSources") {
val classReference = classReference("class")
val quickAddSourceListField = string("quickAddSourceListField")
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 quickAddSourceListDexField = toStringMethod.implementation?.searchNextFieldReference("quickaddSource", contains = true)
?: continue
classReference.set(classDef.getClassName())
quickAddSourceListField.set(quickAddSourceListDexField.name)
return@mapper
}
}
}
}

View File

@ -1,6 +1,6 @@
package me.rhunk.snapenhance.nativelib
data class NativeRequestData(
class NativeRequestData(
val uri: String,
var buffer: ByteArray,
var canceled: Boolean = false,