diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json index db67ce3a..12f0dd30 100644 --- 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 index 19a8e9f7..4436ea95 100644 --- 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 new file mode 100644 index 00000000..71dab11c --- /dev/null +++ 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::class.java) + .hook(HookStage.BEFORE) { param -> + param.setArg(0, param.arg>(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.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 index 9acafcf1..ccafe8f9 100644 --- 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()