fix(message_indicators): view padding

This commit is contained in:
rhunk 2024-05-26 16:32:26 +02:00
parent fae26410ff
commit ab7f5ab1bc

View File

@ -2,13 +2,9 @@ package me.rhunk.snapenhance.core.features.impl.ui
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout import android.widget.LinearLayout
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Android import androidx.compose.material.icons.filled.Android
import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.Edit
@ -16,6 +12,7 @@ import androidx.compose.material.icons.filled.Laptop
import androidx.compose.material.icons.filled.LocationOn import androidx.compose.material.icons.filled.LocationOn
import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Lock
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@ -25,6 +22,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import me.rhunk.snapenhance.common.data.ContentType import me.rhunk.snapenhance.common.data.ContentType
import me.rhunk.snapenhance.common.ui.createComposeView import me.rhunk.snapenhance.common.ui.createComposeView
import me.rhunk.snapenhance.common.ui.rememberAsyncMutableState
import me.rhunk.snapenhance.common.util.protobuf.ProtoReader import me.rhunk.snapenhance.common.util.protobuf.ProtoReader
import me.rhunk.snapenhance.core.event.events.impl.BindViewEvent import me.rhunk.snapenhance.core.event.events.impl.BindViewEvent
import me.rhunk.snapenhance.core.features.Feature import me.rhunk.snapenhance.core.features.Feature
@ -52,34 +50,45 @@ class MessageIndicators : Feature("Message Indicators", loadParams = FeatureLoad
if (message.contentType != ContentType.SNAP.id && message.contentType != ContentType.EXTERNAL_MEDIA.id) return@chatMessage if (message.contentType != ContentType.SNAP.id && message.contentType != ContentType.EXTERNAL_MEDIA.id) return@chatMessage
val reader = ProtoReader(message.messageContent ?: return@chatMessage) val reader = ProtoReader(message.messageContent ?: return@chatMessage)
val hasEncryption = reader.containsPath(3, 99, 3)
val sentFromIosDevice = if (reader.containsPath(4, 4, 3)) !reader.containsPath(4, 4, 3, 3, 17) else reader.getVarInt(4, 4, 11, 17, 7) != null
val sentFromWebApp = reader.getVarInt(4, 4, *(if (reader.containsPath(4, 4, 3)) intArrayOf(3, 3, 22, 1) else intArrayOf(11, 22, 1))) == 7L
val sentWithLocation = reader.getVarInt(4, 4, 11, 17, 5) != null
val sentUsingOvfEditor = (reader.getString(4, 4, 11, 12, 1) ?: reader.getString(4, 4, 11, 13, 4, 1, 2, 12, 20, 1)) == "c13129f7-fe4a-44c4-9b9d-e0b26fee8f82"
val sentUsingDirectorMode = reader.followPath(4, 4, 11, 28)?.let {
(it.getVarInt(1) to it.getVarInt(2)) == (0L to 0L)
} == true || reader.getByteArray(4, 4, 11, 13, 4, 1, 2, 12, 27, 1) != null
createComposeView(event.view.context) { createComposeView(event.view.context) {
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(50.dp)
.padding(top = 4.dp, end = 1.dp), .padding(top = 4.dp, end = 1.dp),
contentAlignment = Alignment.BottomEnd contentAlignment = Alignment.TopEnd
) { ) {
val hasEncryption by rememberAsyncMutableState(defaultValue = false) {
reader.getByteArray(4, 3, 3) != null || reader.containsPath(3, 99, 3)
}
val sentFromIosDevice by rememberAsyncMutableState(defaultValue = false) {
if (reader.containsPath(4, 4, 3)) !reader.containsPath(4, 4, 3, 3, 17) else reader.getVarInt(4, 4, 11, 17, 7) != null
}
val sentFromWebApp by rememberAsyncMutableState(defaultValue = false) {
reader.getVarInt(4, 4, *(if (reader.containsPath(4, 4, 3)) intArrayOf(3, 3, 22, 1) else intArrayOf(11, 22, 1))) == 7L
}
val sentWithLocation by rememberAsyncMutableState(defaultValue = false) {
reader.getVarInt(4, 4, 11, 17, 5) != null
}
val sentUsingOvfEditor by rememberAsyncMutableState(defaultValue = false) {
(reader.getString(4, 4, 11, 12, 1) ?: reader.getString(4, 4, 11, 13, 4, 1, 2, 12, 20, 1)) == "c13129f7-fe4a-44c4-9b9d-e0b26fee8f82"
}
val sentUsingDirectorMode by rememberAsyncMutableState(defaultValue = false) {
reader.followPath(4, 4, 11, 28)?.let {
(it.getVarInt(1) to it.getVarInt(2)) == (0L to 0L)
} == true || reader.getByteArray(4, 4, 11, 13, 4, 1, 2, 12, 27, 1) != null
}
Row( Row(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
if (messageIndicatorsConfig.contains("location_indicator")) { if (sentWithLocation && messageIndicatorsConfig.contains("location_indicator")) {
if (sentWithLocation) { Image(
Image( imageVector = Icons.Default.LocationOn,
imageVector = Icons.Default.LocationOn, colorFilter = ColorFilter.tint(Color.Green),
colorFilter = ColorFilter.tint(Color.Green), contentDescription = null,
contentDescription = null, modifier = Modifier.size(15.dp)
modifier = Modifier.size(15.dp) )
)
}
} }
if (messageIndicatorsConfig.contains("platform_indicator")) { if (messageIndicatorsConfig.contains("platform_indicator")) {
Image( Image(
@ -124,9 +133,10 @@ class MessageIndicators : Feature("Message Indicators", loadParams = FeatureLoad
addOnLayoutChangeListener { _, left, _, right, _, _, _, _, _ -> addOnLayoutChangeListener { _, left, _, right, _, _, _, _, _ ->
layout(left, 0, right, 0) layout(left, 0, right, 0)
} }
layoutParams = FrameLayout.LayoutParams( setPadding(0, 0, 0, -(50 * event.view.resources.displayMetrics.density).toInt())
FrameLayout.LayoutParams.MATCH_PARENT, layoutParams = LinearLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
) )
parentLinearLayout.addView(this) parentLinearLayout.addView(this)
} }