mirror of
https://github.com/oxen-io/session-android.git
synced 2025-08-14 11:38:05 +00:00
Merge remote-tracking branch 'upstream/dev' into feature/unread-mention-indicator
# Conflicts: # app/src/main/res/values/themes.xml
This commit is contained in:
@@ -461,6 +461,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||
|
||||
// called from onCreate
|
||||
private fun setUpInputBar() {
|
||||
binding!!.inputBar.isVisible = viewModel.openGroup == null || viewModel.openGroup?.canWrite == true
|
||||
binding!!.inputBar.delegate = this
|
||||
binding!!.inputBarRecordingView.delegate = this
|
||||
// GIF button
|
||||
|
@@ -158,7 +158,8 @@ class VisibleMessageView : LinearLayout {
|
||||
binding.profilePictureView.root.update(message.individualRecipient)
|
||||
binding.profilePictureView.root.setOnClickListener {
|
||||
if (thread.isOpenGroupRecipient) {
|
||||
if (IdPrefix.fromValue(senderSessionID) == IdPrefix.BLINDED) {
|
||||
val openGroup = lokiThreadDb.getOpenGroupChat(threadID)
|
||||
if (IdPrefix.fromValue(senderSessionID) == IdPrefix.BLINDED && openGroup?.canWrite == true) {
|
||||
val intent = Intent(context, ConversationActivityV2::class.java)
|
||||
intent.putExtra(ConversationActivityV2.FROM_GROUP_THREAD_ID, threadID)
|
||||
intent.putExtra(ConversationActivityV2.ADDRESS, Address.fromSerialized(senderSessionID))
|
||||
|
@@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.database
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import org.session.libsession.avatars.AvatarHelper
|
||||
import org.session.libsession.database.StorageProtocol
|
||||
import org.session.libsession.messaging.BlindedIdMapping
|
||||
import org.session.libsession.messaging.calls.CallMessageType
|
||||
@@ -12,6 +13,7 @@ import org.session.libsession.messaging.messages.control.ConfigurationMessage
|
||||
import org.session.libsession.messaging.messages.control.MessageRequestResponse
|
||||
import org.session.libsession.messaging.messages.signal.*
|
||||
import org.session.libsession.messaging.messages.visible.Attachment
|
||||
import org.session.libsession.messaging.messages.visible.Profile
|
||||
import org.session.libsession.messaging.messages.visible.Reaction
|
||||
import org.session.libsession.messaging.messages.visible.VisibleMessage
|
||||
import org.session.libsession.messaging.open_groups.GroupMember
|
||||
@@ -28,6 +30,11 @@ import org.session.libsession.messaging.utilities.UpdateMessageData
|
||||
import org.session.libsession.snode.OnionRequestAPI
|
||||
import org.session.libsession.utilities.*
|
||||
import org.session.libsession.utilities.Address.Companion.fromSerialized
|
||||
import org.session.libsession.utilities.GroupRecord
|
||||
import org.session.libsession.utilities.GroupUtil
|
||||
import org.session.libsession.utilities.ProfileKeyUtil
|
||||
import org.session.libsession.utilities.SSKEnvironment
|
||||
import org.session.libsession.utilities.TextSecurePreferences
|
||||
import org.session.libsession.utilities.recipients.Recipient
|
||||
import org.session.libsignal.crypto.ecc.ECKeyPair
|
||||
import org.session.libsignal.messages.SignalServiceAttachmentPointer
|
||||
@@ -44,6 +51,7 @@ import org.thoughtcrime.securesms.groups.OpenGroupManager
|
||||
import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority
|
||||
import org.thoughtcrime.securesms.util.SessionMetaProtocol
|
||||
import java.security.MessageDigest
|
||||
|
||||
class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, helper), StorageProtocol {
|
||||
|
||||
@@ -55,16 +63,11 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
|
||||
return DatabaseComponent.get(context).lokiAPIDatabase().getUserX25519KeyPair()
|
||||
}
|
||||
|
||||
override fun getUserDisplayName(): String? {
|
||||
return TextSecurePreferences.getProfileName(context)
|
||||
}
|
||||
|
||||
override fun getUserProfileKey(): ByteArray? {
|
||||
return ProfileKeyUtil.getProfileKey(context)
|
||||
}
|
||||
|
||||
override fun getUserProfilePictureURL(): String? {
|
||||
return TextSecurePreferences.getProfilePictureURL(context)
|
||||
override fun getUserProfile(): Profile {
|
||||
val displayName = TextSecurePreferences.getProfileName(context)!!
|
||||
val profileKey = ProfileKeyUtil.getProfileKey(context)
|
||||
val profilePictureUrl = TextSecurePreferences.getProfilePictureURL(context)
|
||||
return Profile(displayName, profileKey, profilePictureUrl)
|
||||
}
|
||||
|
||||
override fun setUserProfilePictureURL(newValue: String) {
|
||||
@@ -755,6 +758,25 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
|
||||
val smsDb = DatabaseComponent.get(context).smsDatabase()
|
||||
val sender = Recipient.from(context, fromSerialized(senderPublicKey), false)
|
||||
val threadId = threadDB.getOrCreateThreadIdFor(sender)
|
||||
val profile = response.profile
|
||||
if (profile != null) {
|
||||
val profileManager = SSKEnvironment.shared.profileManager
|
||||
val name = profile.displayName!!
|
||||
if (name.isNotEmpty()) {
|
||||
profileManager.setName(context, sender, name)
|
||||
}
|
||||
val newProfileKey = profile.profileKey
|
||||
|
||||
val needsProfilePicture = !AvatarHelper.avatarFileExists(context, sender.address)
|
||||
val profileKeyValid = newProfileKey?.isNotEmpty() == true && (newProfileKey.size == 16 || newProfileKey.size == 32) && profile.profilePictureURL?.isNotEmpty() == true
|
||||
val profileKeyChanged = (sender.profileKey == null || !MessageDigest.isEqual(sender.profileKey, newProfileKey))
|
||||
|
||||
if ((profileKeyValid && profileKeyChanged) || (profileKeyValid && needsProfilePicture)) {
|
||||
profileManager.setProfileKey(context, sender, newProfileKey!!)
|
||||
profileManager.setUnidentifiedAccessMode(context, sender, Recipient.UnidentifiedAccessMode.UNKNOWN)
|
||||
profileManager.setProfilePictureURL(context, sender, profile.profilePictureURL!!)
|
||||
}
|
||||
}
|
||||
threadDB.setHasSent(threadId, true)
|
||||
val mappingDb = DatabaseComponent.get(context).blindedIdMappingDatabase()
|
||||
val mappings = mutableMapOf<String, BlindedIdMapping>()
|
||||
|
@@ -81,7 +81,7 @@ object OpenGroupManager {
|
||||
if (threadID < 0) {
|
||||
threadID = GroupManager.createOpenGroup(openGroupID, context, null, info.name).threadId
|
||||
}
|
||||
val openGroup = OpenGroup(server = server, room = room, publicKey = publicKey, name = info.name, imageId = info.imageId, infoUpdates = info.infoUpdates)
|
||||
val openGroup = OpenGroup(server = server, room = room, publicKey = publicKey, name = info.name, imageId = info.imageId, canWrite = info.write, infoUpdates = info.infoUpdates)
|
||||
threadDB.setOpenGroupChat(openGroup, threadID)
|
||||
return info
|
||||
}
|
||||
|
@@ -52,8 +52,8 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu
|
||||
|
||||
public void setMostRecentSender(Recipient recipient, Recipient threadRecipient) {
|
||||
String displayName = recipient.toShortString();
|
||||
if (threadRecipient.isOpenGroupRecipient()) {
|
||||
displayName = getOpenGroupDisplayName(recipient);
|
||||
if (threadRecipient.isGroupRecipient()) {
|
||||
displayName = getGroupDisplayName(recipient, threadRecipient.isOpenGroupRecipient());
|
||||
}
|
||||
if (privacy.isDisplayContact()) {
|
||||
setContentText(context.getString(R.string.MessageNotifier_most_recent_from_s, displayName));
|
||||
@@ -78,8 +78,8 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu
|
||||
|
||||
public void addMessageBody(@NonNull Recipient sender, Recipient threadRecipient, @Nullable CharSequence body) {
|
||||
String displayName = sender.toShortString();
|
||||
if (threadRecipient.isOpenGroupRecipient()) {
|
||||
displayName = getOpenGroupDisplayName(sender);
|
||||
if (threadRecipient.isGroupRecipient()) {
|
||||
displayName = getGroupDisplayName(sender, threadRecipient.isOpenGroupRecipient());
|
||||
}
|
||||
if (privacy.isDisplayMessage()) {
|
||||
SpannableStringBuilder builder = new SpannableStringBuilder();
|
||||
@@ -113,14 +113,15 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu
|
||||
}
|
||||
|
||||
/**
|
||||
* @param recipient the * individual * recipient for which to get the open group display name.
|
||||
* @param recipient the * individual * recipient for which to get the display name.
|
||||
* @param openGroupRecipient whether in an open group context
|
||||
*/
|
||||
private String getOpenGroupDisplayName(Recipient recipient) {
|
||||
private String getGroupDisplayName(Recipient recipient, boolean openGroupRecipient) {
|
||||
SessionContactDatabase contactDB = DatabaseComponent.get(context).sessionContactDatabase();
|
||||
String sessionID = recipient.getAddress().serialize();
|
||||
Contact contact = contactDB.getContactWithSessionID(sessionID);
|
||||
if (contact == null) { return sessionID; }
|
||||
String displayName = contact.displayName(Contact.ContactContext.OPEN_GROUP);
|
||||
String displayName = contact.displayName(openGroupRecipient ? Contact.ContactContext.OPEN_GROUP : Contact.ContactContext.REGULAR);
|
||||
if (displayName == null) { return sessionID; }
|
||||
return displayName;
|
||||
}
|
||||
|
@@ -117,15 +117,15 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil
|
||||
setNumber(messageCount);
|
||||
}
|
||||
|
||||
public void setPrimaryMessageBody(@NonNull Recipient threadRecipients,
|
||||
public void setPrimaryMessageBody(@NonNull Recipient threadRecipient,
|
||||
@NonNull Recipient individualRecipient,
|
||||
@NonNull CharSequence message,
|
||||
@Nullable SlideDeck slideDeck)
|
||||
{
|
||||
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
|
||||
|
||||
if (privacy.isDisplayContact() && threadRecipients.isOpenGroupRecipient()) {
|
||||
String displayName = getOpenGroupDisplayName(individualRecipient);
|
||||
if (privacy.isDisplayContact() && threadRecipient.isGroupRecipient()) {
|
||||
String displayName = getGroupDisplayName(individualRecipient, threadRecipient.isOpenGroupRecipient());
|
||||
stringBuilder.append(Util.getBoldedString(displayName + ": "));
|
||||
}
|
||||
|
||||
@@ -214,8 +214,8 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil
|
||||
{
|
||||
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
|
||||
|
||||
if (privacy.isDisplayContact() && threadRecipient.isOpenGroupRecipient()) {
|
||||
String displayName = getOpenGroupDisplayName(individualRecipient);
|
||||
if (privacy.isDisplayContact() && threadRecipient.isGroupRecipient()) {
|
||||
String displayName = getGroupDisplayName(individualRecipient, threadRecipient.isOpenGroupRecipient());
|
||||
stringBuilder.append(Util.getBoldedString(displayName + ": "));
|
||||
}
|
||||
|
||||
@@ -334,14 +334,15 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil
|
||||
}
|
||||
|
||||
/**
|
||||
* @param recipient the * individual * recipient for which to get the open group display name.
|
||||
* @param recipient the * individual * recipient for which to get the display name.
|
||||
* @param openGroupRecipient whether in an open group context
|
||||
*/
|
||||
private String getOpenGroupDisplayName(Recipient recipient) {
|
||||
private String getGroupDisplayName(Recipient recipient, boolean openGroupRecipient) {
|
||||
SessionContactDatabase contactDB = DatabaseComponent.get(context).sessionContactDatabase();
|
||||
String sessionID = recipient.getAddress().serialize();
|
||||
Contact contact = contactDB.getContactWithSessionID(sessionID);
|
||||
if (contact == null) { return sessionID; }
|
||||
String displayName = contact.displayName(Contact.ContactContext.OPEN_GROUP);
|
||||
String displayName = contact.displayName(openGroupRecipient ? Contact.ContactContext.OPEN_GROUP : Contact.ContactContext.REGULAR);
|
||||
if (displayName == null) { return sessionID; }
|
||||
return displayName;
|
||||
}
|
||||
|
@@ -352,7 +352,7 @@
|
||||
<item name="home_gradient_end">@color/classic_dark_1</item>
|
||||
<item name="conversation_pinned_background_color">?colorCellBackground</item>
|
||||
<item name="conversation_unread_background_color">@color/classic_dark_2</item>
|
||||
<item name="conversation_pinned_icon_color">@color/classic_dark_4</item>
|
||||
<item name="conversation_pinned_icon_color">?android:textColorSecondary</item>
|
||||
<item name="unreadIndicatorBackgroundColor">@color/classic_dark_3</item>
|
||||
<item name="unreadIndicatorTextColor">@color/classic_dark_6</item>
|
||||
|
||||
@@ -437,7 +437,7 @@
|
||||
<item name="home_gradient_end">@color/classic_light_5</item>
|
||||
<item name="conversation_pinned_background_color">?colorCellBackground</item>
|
||||
<item name="conversation_unread_background_color">@color/classic_light_6</item>
|
||||
<item name="conversation_pinned_icon_color">@color/classic_light_2</item>
|
||||
<item name="conversation_pinned_icon_color">?android:textColorSecondary</item>
|
||||
<item name="unreadIndicatorBackgroundColor">@color/classic_light_3</item>
|
||||
<item name="unreadIndicatorTextColor">@color/classic_light_0</item>
|
||||
<!-- New conversation button -->
|
||||
@@ -517,7 +517,7 @@
|
||||
<item name="home_gradient_end">@color/ocean_dark_3</item>
|
||||
<item name="conversation_pinned_background_color">?colorCellBackground</item>
|
||||
<item name="conversation_unread_background_color">@color/ocean_dark_4</item>
|
||||
<item name="conversation_pinned_icon_color">?colorAccent</item>
|
||||
<item name="conversation_pinned_icon_color">?android:textColorSecondary</item>
|
||||
<item name="unreadIndicatorBackgroundColor">?colorAccent</item>
|
||||
<item name="unreadIndicatorTextColor">@color/ocean_dark_0</item>
|
||||
<item name="conversation_menu_background_color">@color/ocean_dark_3</item>
|
||||
@@ -639,7 +639,7 @@
|
||||
<item name="conversation_unread_count_indicator_background">?colorAccent</item>
|
||||
<item name="conversation_pinned_background_color">?colorCellBackground</item>
|
||||
<item name="conversation_unread_background_color">@color/ocean_light_6</item>
|
||||
<item name="conversation_pinned_icon_color">?android:textColorPrimary</item>
|
||||
<item name="conversation_pinned_icon_color">?android:textColorSecondary</item>
|
||||
<item name="message_selected">@color/ocean_light_6</item>
|
||||
</style>
|
||||
|
||||
|
Reference in New Issue
Block a user