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:
Mcommon/src/main/assets/lang/en_US.json | 8++++++++
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/UserInterfaceTweaks.kt | 3+++
Acore/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/EditTextOverride.kt | 37+++++++++++++++++++++++++++++++++++++
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/manager/impl/FeatureManager.kt | 1+
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()