feat: fill out the contact info properly, add in re-send colors

This commit is contained in:
0x330a 2023-11-22 15:53:45 +11:00
parent 896907dadb
commit 5ed8f70fa6
4 changed files with 36 additions and 17 deletions

View File

@ -1290,7 +1290,16 @@ open class Storage(
membersConfig.get(it) == null membersConfig.get(it) == null
} }
filteredMembers.forEach { memberSessionId -> filteredMembers.forEach { memberSessionId ->
val contact = getContactWithSessionID(memberSessionId)
val name = contact?.name
val url = contact?.profilePictureURL
val key = contact?.profilePictureEncryptionKey
val userPic = if (url != null && key != null) {
UserPic(url, key)
} else UserPic.DEFAULT
val member = membersConfig.getOrConstruct(memberSessionId).copy( val member = membersConfig.getOrConstruct(memberSessionId).copy(
name = name,
profilePicture = userPic,
invitePending = true, invitePending = true,
) )
membersConfig.set(member) membersConfig.set(member)

View File

@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.groups.compose
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Context import android.content.Context
import android.widget.Toast import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -13,11 +14,12 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.Icon import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedButton
import androidx.compose.material.Scaffold import androidx.compose.material.Scaffold
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.material.rememberScaffoldState import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -26,6 +28,9 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Alignment.Companion.CenterVertically
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -38,6 +43,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import app.cash.molecule.RecompositionMode.Immediate import app.cash.molecule.RecompositionMode.Immediate
import app.cash.molecule.launchMolecule import app.cash.molecule.launchMolecule
import com.google.android.material.color.MaterialColors
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.NavResult import com.ramcosta.composedestinations.result.NavResult
@ -314,15 +320,28 @@ fun EditGroupView(
} }
// Resend button // Resend button
if (viewState.admin && member.memberState == MemberState.InviteFailed) { if (viewState.admin && member.memberState == MemberState.InviteFailed) {
OutlinedButton(onClick = { TextButton(
onReinvite(member.memberSessionId) onClick = {
},) { onReinvite(member.memberSessionId)
Text("Re-send") },
modifier = Modifier
.clip(CircleShape)
.background(
Color(
MaterialColors.getColor(LocalContext.current,
R.attr.colorControlHighlight,
MaterialTheme.colors.onPrimary.toArgb())
)
)
) {
Text(
"Re-send",
color = MaterialTheme.colors.onPrimary
)
} }
} }
} }
} }
} }
} }
} }

View File

@ -114,7 +114,7 @@ fun CellWithPaddingAndMargin(
} }
} }
private val Colors.cellColor: Color val Colors.cellColor: Color
@Composable @Composable
get() = LocalExtraColors.current.settingsBackground get() = LocalExtraColors.current.settingsBackground

View File

@ -14,7 +14,6 @@ import org.session.libsession.messaging.utilities.SodiumUtilities
import org.session.libsession.snode.SnodeAPI import org.session.libsession.snode.SnodeAPI
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateInviteMessage import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateInviteMessage
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateMessage import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateMessage
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.LokiProfile
import org.session.libsignal.utilities.SessionId import org.session.libsignal.utilities.SessionId
import org.session.libsignal.utilities.prettifiedDescription import org.session.libsignal.utilities.prettifiedDescription
@ -74,20 +73,12 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
val messageToSign = "INVITE$memberSessionId$timestamp" val messageToSign = "INVITE$memberSessionId$timestamp"
val signature = SodiumUtilities.sign(messageToSign.toByteArray(), adminKey) val signature = SodiumUtilities.sign(messageToSign.toByteArray(), adminKey)
val userProfile = storage.getUserProfile() val userProfile = storage.getUserProfile()
val lokiProfile = LokiProfile.newBuilder()
.setDisplayName(userProfile.displayName)
if (userProfile.profilePictureURL?.isNotEmpty() == true) {
lokiProfile.profilePicture = userProfile.profilePictureURL
}
val groupInvite = GroupUpdateInviteMessage.newBuilder() val groupInvite = GroupUpdateInviteMessage.newBuilder()
.setGroupSessionId(groupSessionId) .setGroupSessionId(groupSessionId)
.setMemberAuthData(ByteString.copyFrom(subAccount)) .setMemberAuthData(ByteString.copyFrom(subAccount))
.setAdminSignature(ByteString.copyFrom(signature)) .setAdminSignature(ByteString.copyFrom(signature))
.setName(userProfile.displayName) .setName(userProfile.displayName)
.setProfile(lokiProfile.build())
if (userProfile.profileKey?.isNotEmpty() == true) {
groupInvite.profileKey = ByteString.copyFrom(userProfile.profileKey)
}
val message = GroupUpdateMessage.newBuilder() val message = GroupUpdateMessage.newBuilder()
.setInviteMessage(groupInvite) .setInviteMessage(groupInvite)
.build() .build()