commit e360011b7b14560da48f40d5e0a37e6197dd5858
parent 5e827d1c46e75bcbae3e33b6ebfab8b1979fc6b3
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Wed, 2 Aug 2023 09:17:58 +0200
Merge branch 'main' into refactor_2_0_0
# Conflicts:
# app/build.gradle.kts
# app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt
# core/.gitignore
# core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/GalleryMediaSendOverride.kt
Diffstat:
3 files changed, 59 insertions(+), 41 deletions(-)
diff --git a/core/.gitignore b/core/.gitignore
@@ -1,16 +1 @@
-*.iml
-.gradle
-/local.properties
-/.idea/caches
-/.idea/libraries
-/.idea/modules.xml
-/.idea/workspace.xml
-/.idea/navEditor.xml
-/.idea/assetWizardSettings.xml
-/.idea/
-.DS_Store
-/build
-/captures
-.externalNativeBuild
-.cxx
-local.properties
+/build+
\ No newline at end of file
diff --git a/core/src/main/assets/lang/en_US.json b/core/src/main/assets/lang/en_US.json
@@ -16,7 +16,7 @@
"check_for_updates": "Check for updates",
"export_chat_messages": "Export chat messages"
},
-
+
"property": {
"message_logger": {
"name": "Message Logger",
@@ -294,7 +294,7 @@
"abandon_video": "Missed Video Call"
},
"gallery_media_send_override": {
- "OFF": "Off",
+ "ORIGINAL": "Original",
"NOTE": "Audio Note",
"SNAP": "Snap",
"LIVE_SNAP": "Snap with audio"
@@ -363,6 +363,10 @@
"close": "Close"
},
+ "gallery_media_send_override": {
+ "multiple_media_toast": "You can only send one media at a time"
+ },
+
"conversation_preview": {
"streak_expiration": "expires in {day} days {hour} hours {minute} minutes",
"total_messages": "Total sent/received messages: {count}",
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/GalleryMediaSendOverride.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/GalleryMediaSendOverride.kt
@@ -1,5 +1,7 @@
package me.rhunk.snapenhance.features.impl.tweaks
+import android.app.AlertDialog
+import me.rhunk.snapenhance.config.ConfigProperty
import me.rhunk.snapenhance.data.ContentType
import me.rhunk.snapenhance.data.MessageSender
import me.rhunk.snapenhance.data.wrapper.impl.MessageContent
@@ -12,36 +14,62 @@ import me.rhunk.snapenhance.util.protobuf.ProtoReader
class GalleryMediaSendOverride : Feature("Gallery Media Send Override", loadParams = FeatureLoadParams.INIT_SYNC) {
override fun init() {
- Hooker.hook(context.classCache.conversationManager, "sendMessageWithContent", HookStage.BEFORE) { param ->
- val overrideType = context.config.messaging.galleryMediaSendOverride.getNullable() ?: return@hook
+ val typeNames = listOf(
+ "ORIGINAL",
+ "SNAP",
+ "LIVE_SNAP",
+ "NOTE"
+ ).associateWith {
+ context.translation[ConfigProperty.GALLERY_MEDIA_SEND_OVERRIDE.getOptionTranslationKey(it)]
+ }
+ Hooker.hook(context.classCache.conversationManager, "sendMessageWithContent", HookStage.BEFORE, {
+ context.config.bool(ConfigProperty.GALLERY_MEDIA_SEND_OVERRIDE)
+ }) { param ->
val localMessageContent = MessageContent(param.arg(1))
if (localMessageContent.contentType != ContentType.EXTERNAL_MEDIA) return@hook
- //story replies
+
+ //prevent story replies
val messageProtoReader = ProtoReader(localMessageContent.content)
if (messageProtoReader.exists(7)) return@hook
- if (messageProtoReader.readPath(3)?.getCount(3) != 1) {
- context.runOnUiThread {
- ViewAppearanceHelper.newAlertDialogBuilder(context.mainActivity!!)
- .setMessage("You can only send one media at a time")
- .setPositiveButton("OK", null)
- .show()
- }
- param.setResult(null)
- return@hook
- }
+ param.setResult(null)
+
+ context.runOnUiThread {
+ ViewAppearanceHelper.newAlertDialogBuilder(context.mainActivity!!)
+ .setItems(typeNames.values.toTypedArray()) { dialog, which ->
+ dialog.dismiss()
+ val overrideType = typeNames.keys.toTypedArray()[which]
+
+ if (overrideType != "ORIGINAL" && messageProtoReader.readPath(3)?.getCount(3) != 1) {
+ context.runOnUiThread {
+ ViewAppearanceHelper.newAlertDialogBuilder(context.mainActivity!!)
+ .setMessage(context.translation["gallery_media_send_override.multiple_media_toast"])
+ .setPositiveButton(context.translation["button.ok"], null)
+ .show()
+ }
+ return@setItems
+ }
+
+ when (overrideType) {
+ "SNAP", "LIVE_SNAP" -> {
+ localMessageContent.contentType = ContentType.SNAP
+ localMessageContent.content = MessageSender.redSnapProto(overrideType == "LIVE_SNAP")
+ }
+
+ "NOTE" -> {
+ localMessageContent.contentType = ContentType.NOTE
+ val mediaDuration =
+ messageProtoReader.getLong(3, 3, 5, 1, 1, 15) ?: 0
+ localMessageContent.content =
+ MessageSender.audioNoteProto(mediaDuration)
+ }
+ }
- when (overrideType) {
- "SNAP", "LIVE_SNAP" -> {
- localMessageContent.contentType = ContentType.SNAP
- localMessageContent.content = MessageSender.redSnapProto(overrideType == "LIVE_SNAP")
- }
- "NOTE" -> {
- localMessageContent.contentType = ContentType.NOTE
- val mediaDuration = messageProtoReader.getLong(3, 3, 5, 1, 1, 15) ?: 0
- localMessageContent.content = MessageSender.audioNoteProto(mediaDuration)
- }
+ param.invokeOriginal()
+ }
+ .setNegativeButton(context.translation["button.cancel"], null)
+ .show()
}
}
}