commit 4e60b01dd00e850264ad6609a3cdb52b7b6ce279
parent ca01565d68beb81b3536e4d1952cc38b45151b51
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Fri, 1 Aug 2025 15:54:25 +0200
fix(core): hide story suggestions
Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>
Diffstat:
2 files changed, 11 insertions(+), 30 deletions(-)
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/tweaks/RequerySqlite.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/tweaks/RequerySqlite.kt
@@ -9,8 +9,9 @@ class RequerySqlite : Feature("Requery Sqlite") {
override fun init() {
val hideQuickAddSuggestions = context.config.userInterface.hideQuickAddSuggestions.get()
val hideFriendFeedEntry = context.config.userInterface.hideFriendFeedEntry.get()
+ val hideSuggestedStories = context.config.userInterface.hideStorySuggestions.get().contains("hide_suggested_friend_stories")
- if (!hideQuickAddSuggestions && !hideFriendFeedEntry) return
+ if (!hideQuickAddSuggestions && !hideFriendFeedEntry && !hideSuggestedStories) return
findClass("io.requery.android.database.sqlite.SQLiteDatabase").hook("rawQueryWithFactory", HookStage.BEFORE) { param ->
var sqlRequest = param.argNullable<String>(1) ?: return@hook
@@ -26,6 +27,10 @@ class RequerySqlite : Feature("Requery Sqlite") {
patchRequest("0 = 1")
}
+ if (hideSuggestedStories && sqlRequest.contains("DiscoverFeedFriendStoriesViewV2 AS DFStories")) {
+ patchRequest("DFStories.isFriendOfFriend = 0")
+ }
+
if (hideFriendFeedEntry && sqlRequest.startsWith("SELECT") && (sqlRequest.contains("FriendWithUsername")) && sqlRequest.contains("userId")) {
val ids = context.bridgeClient.getRuleIds(MessagingRuleType.HIDE_FRIEND_FEED).takeIf { it.isNotEmpty() } ?: return@hook
patchRequest(ids.joinToString(" AND ") { "${if (sqlRequest.contains("Friend.userId")) "Friend.userId" else "userId "} != '$it'" })
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/UITweaks.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/UITweaks.kt
@@ -1,17 +1,18 @@
package me.rhunk.snapenhance.core.features.impl.ui
import android.content.res.Resources
-import android.util.Size
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams
import android.widget.FrameLayout
import android.widget.LinearLayout
-import me.rhunk.snapenhance.common.util.ktx.findFieldsToString
import me.rhunk.snapenhance.core.event.events.impl.AddViewEvent
import me.rhunk.snapenhance.core.event.events.impl.BindViewEvent
import me.rhunk.snapenhance.core.features.Feature
-import me.rhunk.snapenhance.core.ui.*
+import me.rhunk.snapenhance.core.ui.children
+import me.rhunk.snapenhance.core.ui.getComposerContext
+import me.rhunk.snapenhance.core.ui.hideViewCompletely
+import me.rhunk.snapenhance.core.ui.onLayoutChange
import me.rhunk.snapenhance.core.util.dataBuilder
import me.rhunk.snapenhance.core.util.hook.HookStage
import me.rhunk.snapenhance.core.util.hook.Hooker
@@ -79,7 +80,6 @@ class UITweaks : Feature("UITweaks") {
val chatNoteRecordButton = getId("chat_note_record_button", "id")
val unreadHintButton = getId("unread_hint_button", "id")
- val friendCardFrame = getId("friend_card_frame", "id")
Resources::class.java.methods.first { it.name == "getDimensionPixelSize"}.hook(
HookStage.AFTER,
@@ -92,8 +92,6 @@ class UITweaks : Feature("UITweaks") {
}
}
- var friendCardFrameSize: Size? = null
-
context.event.subscribe(BindViewEvent::class, { hideStorySuggestions.isNotEmpty() }) { event ->
if (event.view is FrameLayout) {
fun removeView() {
@@ -103,35 +101,13 @@ class UITweaks : Feature("UITweaks") {
}
val viewModelString = event.prevModel.toString()
- val isMyStory by lazy { viewModelString.let { it.startsWith("CircularItemViewModel") && it.contains("storyId=")} }
+ val isMyStory by lazy { viewModelString.let { it.startsWith("StoryCarouselItemViewModel") && it.contains("storyId=") } }
if (hideStorySuggestions.contains("hide_my_stories") && isMyStory) {
removeView()
return@subscribe
}
}
-
- if (event.view.id == friendCardFrame && hideStorySuggestions.contains("hide_suggested_friend_stories")) {
- val friendStoryData = event.prevModel::class.java.findFieldsToString(event.prevModel, once = true) { _, value ->
- value.contains("FriendStoryData")
- }.firstOrNull()?.get(event.prevModel) ?: return@subscribe
-
- event.view.layoutParams.apply {
- if (friendCardFrameSize == null && width > 0 && height > 0) {
- friendCardFrameSize = Size(width, height)
- }
-
- if (friendStoryData.toString().contains("isFriendOfFriend=true")) {
- width = 0
- height = 0
- } else {
- friendCardFrameSize?.let {
- width = it.width
- height = it.height
- }
- }
- }
- }
}
context.event.subscribe(AddViewEvent::class) { event ->