commit 35016b589f7c9dd957aae18d94a8eb98bae76f12
parent ce2fe64c37c66313273a6776d82d0fbc0f5fd391
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Mon, 4 Dec 2023 23:18:02 +0100
feat(core): edit text override
Diffstat:
4 files changed, 49 insertions(+), 0 deletions(-)
diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json
@@ -322,6 +322,10 @@
"fidelius_indicator": {
"name": "Fidelius Indicator",
"description": "Adds a green circle next to messages that have been sent only to you"
+ },
+ "edit_text_override": {
+ "name": "Edit Text Override",
+ "description": "Overrides text field behavior"
}
}
},
@@ -795,6 +799,10 @@
"auto_reload": {
"snapchat_only": "Snapchat Only",
"all": "All (Snapchat + SnapEnhance)"
+ },
+ "edit_text_override": {
+ "multi_line_chat_input": "Multi Line Chat Input",
+ "bypass_text_input_limit": "Bypass Text Input Limit"
}
}
},
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
@@ -50,4 +50,7 @@ class UserInterfaceTweaks : ConfigContainer() {
val hideSettingsGear = boolean("hide_settings_gear") { requireRestart() }
val verticalStoryViewer = boolean("vertical_story_viewer") { requireRestart() }
val fideliusIndicator = boolean("fidelius_indicator") { requireRestart() }
+ val editTextOverride = multiple("edit_text_override", "multi_line_chat_input", "bypass_text_input_limit") {
+ requireRestart(); addNotices(FeatureNotice.BAN_RISK, FeatureNotice.INTERNAL_BEHAVIOR)
+ }
}
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/EditTextOverride.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/EditTextOverride.kt
@@ -0,0 +1,36 @@
+package me.rhunk.snapenhance.core.features.impl.ui
+
+import android.text.InputFilter
+import android.text.InputType
+import android.widget.EditText
+import android.widget.TextView
+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.hook
+import me.rhunk.snapenhance.core.util.hook.hookConstructor
+
+class EditTextOverride : Feature("Edit Text Override", loadParams = FeatureLoadParams.ACTIVITY_CREATE_SYNC) {
+ override fun onActivityCreate() {
+ val editTextOverride by context.config.userInterface.editTextOverride
+ if (editTextOverride.isEmpty()) return
+
+ if (editTextOverride.contains("bypass_text_input_limit")) {
+ TextView::class.java.getMethod("setFilters", Array<InputFilter>::class.java)
+ .hook(HookStage.BEFORE) { param ->
+ param.setArg(0, param.arg<Array<InputFilter>>(0).filter {
+ it !is InputFilter.LengthFilter
+ }.toTypedArray())
+ }
+ }
+
+ if (editTextOverride.contains("multi_line_chat_input")) {
+ findClass("com.snap.messaging.chat.features.input.InputBarEditText").apply {
+ hookConstructor(HookStage.AFTER) { param ->
+ val editText = param.thisObject<EditText>()
+ editText.inputType = editText.inputType or InputType.TYPE_TEXT_FLAG_MULTI_LINE
+ }
+ }
+ }
+ }
+}+
\ 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
@@ -113,6 +113,7 @@ class FeatureManager(
Stories::class,
DisableComposerModules::class,
FideliusIndicator::class,
+ EditTextOverride::class,
)
initializeFeatures()