mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-13 05:37:48 +02:00
fix(core/notifications): reply
This commit is contained in:
@ -26,7 +26,9 @@ class BridgeService : Service() {
|
|||||||
var messagingBridge: MessagingBridge? = null
|
var messagingBridge: MessagingBridge? = null
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
remoteSideContext.bridgeService = null
|
if (::remoteSideContext.isInitialized) {
|
||||||
|
remoteSideContext.bridgeService = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBind(intent: Intent): IBinder? {
|
override fun onBind(intent: Intent): IBinder? {
|
||||||
|
@ -21,7 +21,6 @@ class MappingsWrapper : FileLoaderWrapper(BridgeFileType.MAPPINGS, "{}".toByteAr
|
|||||||
DefaultMediaItemMapper::class,
|
DefaultMediaItemMapper::class,
|
||||||
MediaQualityLevelProviderMapper::class,
|
MediaQualityLevelProviderMapper::class,
|
||||||
OperaPageViewControllerMapper::class,
|
OperaPageViewControllerMapper::class,
|
||||||
PlatformAnalyticsCreatorMapper::class,
|
|
||||||
PlusSubscriptionMapper::class,
|
PlusSubscriptionMapper::class,
|
||||||
ScCameraSettingsMapper::class,
|
ScCameraSettingsMapper::class,
|
||||||
StoryBoostStateMapper::class,
|
StoryBoostStateMapper::class,
|
||||||
|
@ -90,66 +90,6 @@ enum class PlayableSnapState {
|
|||||||
NOTDOWNLOADED, DOWNLOADING, DOWNLOADFAILED, PLAYABLE, VIEWEDREPLAYABLE, PLAYING, VIEWEDNOTREPLAYABLE
|
NOTDOWNLOADED, DOWNLOADING, DOWNLOADFAILED, PLAYABLE, VIEWEDREPLAYABLE, PLAYING, VIEWEDNOTREPLAYABLE
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class MetricsMessageMediaType {
|
|
||||||
NO_MEDIA,
|
|
||||||
IMAGE,
|
|
||||||
VIDEO,
|
|
||||||
VIDEO_NO_SOUND,
|
|
||||||
GIF,
|
|
||||||
DERIVED_FROM_MESSAGE_TYPE,
|
|
||||||
REACTION
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class MetricsMessageType {
|
|
||||||
TEXT,
|
|
||||||
STICKER,
|
|
||||||
CUSTOM_STICKER,
|
|
||||||
SNAP,
|
|
||||||
AUDIO_NOTE,
|
|
||||||
MEDIA,
|
|
||||||
BATCHED_MEDIA,
|
|
||||||
MISSED_AUDIO_CALL,
|
|
||||||
MISSED_VIDEO_CALL,
|
|
||||||
JOINED_CALL,
|
|
||||||
LEFT_CALL,
|
|
||||||
SNAPCHATTER,
|
|
||||||
LOCATION_SHARE,
|
|
||||||
LOCATION_REQUEST,
|
|
||||||
SCREENSHOT,
|
|
||||||
SCREEN_RECORDING,
|
|
||||||
GAME_CLOSED,
|
|
||||||
STORY_SHARE,
|
|
||||||
MAP_DROP_SHARE,
|
|
||||||
MAP_STORY_SHARE,
|
|
||||||
MAP_STORY_SNAP_SHARE,
|
|
||||||
MAP_HEAT_SNAP_SHARE,
|
|
||||||
MAP_SCREENSHOT_SHARE,
|
|
||||||
MEMORIES_STORY,
|
|
||||||
SEARCH_STORY_SHARE,
|
|
||||||
SEARCH_STORY_SNAP_SHARE,
|
|
||||||
DISCOVER_SHARE,
|
|
||||||
SHAZAM_SHARE,
|
|
||||||
SAVE_TO_CAMERA_ROLL,
|
|
||||||
GAME_SCORE_SHARE,
|
|
||||||
SNAP_PRO_PROFILE_SHARE,
|
|
||||||
SNAP_PRO_SNAP_SHARE,
|
|
||||||
CANVAS_APP_SHARE,
|
|
||||||
AD_SHARE,
|
|
||||||
STORY_REPLY,
|
|
||||||
SPOTLIGHT_STORY_SHARE,
|
|
||||||
CAMEO,
|
|
||||||
MEMOJI,
|
|
||||||
BITMOJI_OUTFIT_SHARE,
|
|
||||||
LIVE_LOCATION_SHARE,
|
|
||||||
CREATIVE_TOOL_ITEM,
|
|
||||||
SNAP_KIT_INVITE_SHARE,
|
|
||||||
QUOTE_REPLY_SHARE,
|
|
||||||
BLOOPS_STORY_SHARE,
|
|
||||||
SNAP_PRO_SAVED_STORY_SHARE,
|
|
||||||
PLACE_PROFILE_SHARE,
|
|
||||||
PLACE_STORY_SHARE,
|
|
||||||
SAVED_STORY_SHARE
|
|
||||||
}
|
|
||||||
enum class MediaReferenceType {
|
enum class MediaReferenceType {
|
||||||
UNASSIGNED, OVERLAY, IMAGE, VIDEO, ASSET_BUNDLE, AUDIO, ANIMATED_IMAGE, FONT, WEB_VIEW_CONTENT, VIDEO_NO_AUDIO
|
UNASSIGNED, OVERLAY, IMAGE, VIDEO, ASSET_BUNDLE, AUDIO, ANIMATED_IMAGE, FONT, WEB_VIEW_CONTENT, VIDEO_NO_AUDIO
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package me.rhunk.snapenhance.core.messaging
|
package me.rhunk.snapenhance.core.messaging
|
||||||
|
|
||||||
import me.rhunk.snapenhance.common.data.ContentType
|
import me.rhunk.snapenhance.common.data.ContentType
|
||||||
import me.rhunk.snapenhance.common.data.MetricsMessageMediaType
|
|
||||||
import me.rhunk.snapenhance.common.data.MetricsMessageType
|
|
||||||
import me.rhunk.snapenhance.common.util.protobuf.ProtoWriter
|
import me.rhunk.snapenhance.common.util.protobuf.ProtoWriter
|
||||||
import me.rhunk.snapenhance.core.ModContext
|
import me.rhunk.snapenhance.core.ModContext
|
||||||
import me.rhunk.snapenhance.core.features.impl.messaging.Messaging
|
import me.rhunk.snapenhance.core.features.impl.messaging.Messaging
|
||||||
@ -59,34 +57,10 @@ class MessageSender(
|
|||||||
|
|
||||||
private val sendMessageCallback by lazy { context.mappings.getMappedClass("callbacks", "SendMessageCallback") }
|
private val sendMessageCallback by lazy { context.mappings.getMappedClass("callbacks", "SendMessageCallback") }
|
||||||
|
|
||||||
private val platformAnalyticsCreatorClass by lazy {
|
|
||||||
context.mappings.getMappedClass("PlatformAnalyticsCreator")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun defaultPlatformAnalytics(): ByteArray {
|
|
||||||
val analyticsSource = platformAnalyticsCreatorClass.constructors[0].parameterTypes[0]
|
|
||||||
val chatAnalyticsSource = analyticsSource.enumConstants.first { it.toString() == "CHAT" }
|
|
||||||
|
|
||||||
val platformAnalyticsDefaultArgs = arrayOf(chatAnalyticsSource, null, null, null, null, null, null, null, null, null, 0L, 0L,
|
|
||||||
null, null, false, null, null, 0L, null, null, false, null, null,
|
|
||||||
null, null, null, null, null, null, null, null, null, null, null,
|
|
||||||
null, null, null, null, null, null, false, null, null, false, 0L, -2, 8191)
|
|
||||||
|
|
||||||
val platformAnalyticsInstance = platformAnalyticsCreatorClass.constructors[0].newInstance(
|
|
||||||
*platformAnalyticsDefaultArgs
|
|
||||||
) ?: throw Exception("Failed to create platform analytics instance")
|
|
||||||
|
|
||||||
return platformAnalyticsInstance.javaClass.declaredMethods.first { it.returnType == ByteArray::class.java }
|
|
||||||
.invoke(platformAnalyticsInstance) as ByteArray?
|
|
||||||
?: throw Exception("Failed to get platform analytics content")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createLocalMessageContentTemplate(
|
private fun createLocalMessageContentTemplate(
|
||||||
contentType: ContentType,
|
contentType: ContentType,
|
||||||
messageContent: ByteArray,
|
messageContent: ByteArray,
|
||||||
localMediaReference: ByteArray? = null,
|
localMediaReference: ByteArray? = null,
|
||||||
metricMessageMediaType: MetricsMessageMediaType = MetricsMessageMediaType.DERIVED_FROM_MESSAGE_TYPE,
|
|
||||||
metricsMediaType: MetricsMessageType = MetricsMessageType.TEXT,
|
|
||||||
savePolicy: String = "PROHIBITED",
|
savePolicy: String = "PROHIBITED",
|
||||||
): String {
|
): String {
|
||||||
return """
|
return """
|
||||||
@ -104,12 +78,10 @@ class MessageSender(
|
|||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
"mPlatformAnalytics": {
|
"mPlatformAnalytics": {
|
||||||
"mAttemptId": {
|
"mAttemptId": null,
|
||||||
"mId": [${(1..16).map { (-127 ..127).random() }.joinToString(",")}]
|
"mContent": [],
|
||||||
},
|
"mMetricsMessageMediaType": "NO_MEDIA",
|
||||||
"mContent": [${defaultPlatformAnalytics().joinToString(",")}],
|
"mMetricsMessageType": "TEXT",
|
||||||
"mMetricsMessageMediaType": "${metricMessageMediaType.name}",
|
|
||||||
"mMetricsMessageType": "${metricsMediaType.name}",
|
|
||||||
"mReactionSource": "NONE"
|
"mReactionSource": "NONE"
|
||||||
},
|
},
|
||||||
"mSavePolicy": "$savePolicy"
|
"mSavePolicy": "$savePolicy"
|
||||||
@ -130,35 +102,6 @@ class MessageSender(
|
|||||||
sendMessageWithContentMethod.invoke(context.feature(Messaging::class).conversationManager, messageDestinations.instanceNonNull(), localMessageContent, callback)
|
sendMessageWithContentMethod.invoke(context.feature(Messaging::class).conversationManager, messageDestinations.instanceNonNull(), localMessageContent, callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: implement sendSnapMessage
|
|
||||||
/*
|
|
||||||
fun sendSnapMessage(conversations: List<SnapUUID>, chatMediaType: ChatMediaType, uri: Uri, onError: (Any) -> Unit = {}, onSuccess: () -> Unit = {}) {
|
|
||||||
val mediaReferenceBuffer = FlatBufferBuilder(0).apply {
|
|
||||||
val uriOffset = createString(uri.toString())
|
|
||||||
forceDefaults(true)
|
|
||||||
startTable(2)
|
|
||||||
addOffset(1, uriOffset, 0)
|
|
||||||
addInt(0, chatMediaType.value, 0)
|
|
||||||
finish(endTable())
|
|
||||||
finished()
|
|
||||||
}.sizedByteArray()
|
|
||||||
|
|
||||||
internalSendMessage(conversations, createLocalMessageContentTemplate(
|
|
||||||
contentType = ContentType.SNAP,
|
|
||||||
messageContent = redSnapProto(chatMediaType == ChatMediaType.AUDIO || chatMediaType == ChatMediaType.VIDEO),
|
|
||||||
localMediaReference = mediaReferenceBuffer,
|
|
||||||
metricMessageMediaType = MetricsMessageMediaType.IMAGE,
|
|
||||||
metricsMediaType = MetricsMessageType.SNAP
|
|
||||||
), CallbackBuilder(sendMessageCallback)
|
|
||||||
.override("onSuccess") {
|
|
||||||
onSuccess()
|
|
||||||
}
|
|
||||||
.override("onError") {
|
|
||||||
onError(it.arg(0))
|
|
||||||
}
|
|
||||||
.build())
|
|
||||||
}*/
|
|
||||||
|
|
||||||
fun sendChatMessage(conversations: List<SnapUUID>, message: String, onError: (Any) -> Unit = {}, onSuccess: () -> Unit = {}) {
|
fun sendChatMessage(conversations: List<SnapUUID>, message: String, onError: (Any) -> Unit = {}, onSuccess: () -> Unit = {}) {
|
||||||
internalSendMessage(conversations, createLocalMessageContentTemplate(ContentType.CHAT, ProtoWriter().apply {
|
internalSendMessage(conversations, createLocalMessageContentTemplate(ContentType.CHAT, ProtoWriter().apply {
|
||||||
from(2) {
|
from(2) {
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package me.rhunk.snapenhance.mapper.impl
|
|
||||||
|
|
||||||
import me.rhunk.snapenhance.mapper.AbstractClassMapper
|
|
||||||
import me.rhunk.snapenhance.mapper.ext.findConstString
|
|
||||||
import me.rhunk.snapenhance.mapper.ext.getClassName
|
|
||||||
import me.rhunk.snapenhance.mapper.ext.getStaticConstructor
|
|
||||||
import me.rhunk.snapenhance.mapper.ext.isEnum
|
|
||||||
|
|
||||||
class PlatformAnalyticsCreatorMapper : AbstractClassMapper() {
|
|
||||||
init {
|
|
||||||
mapper {
|
|
||||||
for (clazz in classes) {
|
|
||||||
val firstConstructor = clazz.directMethods.firstOrNull { it.name == "<init>" } ?: continue
|
|
||||||
// 47 is the number of parameters of the constructor
|
|
||||||
// it may change in future versions
|
|
||||||
if (firstConstructor.parameters.size != 47) continue
|
|
||||||
val firstParameterClass = getClass(firstConstructor.parameterTypes[0]) ?: continue
|
|
||||||
if (!firstParameterClass.isEnum()) continue
|
|
||||||
if (firstParameterClass.getStaticConstructor()?.implementation?.findConstString("IN_APP_NOTIFICATION") != true) continue
|
|
||||||
|
|
||||||
addMapping("PlatformAnalyticsCreator", clazz.getClassName())
|
|
||||||
return@mapper
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -16,7 +16,6 @@ class TestMappings {
|
|||||||
DefaultMediaItemMapper::class,
|
DefaultMediaItemMapper::class,
|
||||||
MediaQualityLevelProviderMapper::class,
|
MediaQualityLevelProviderMapper::class,
|
||||||
OperaPageViewControllerMapper::class,
|
OperaPageViewControllerMapper::class,
|
||||||
PlatformAnalyticsCreatorMapper::class,
|
|
||||||
PlusSubscriptionMapper::class,
|
PlusSubscriptionMapper::class,
|
||||||
ScCameraSettingsMapper::class,
|
ScCameraSettingsMapper::class,
|
||||||
StoryBoostStateMapper::class,
|
StoryBoostStateMapper::class,
|
||||||
|
Reference in New Issue
Block a user