diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/mentions/MentionCandidateView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/mentions/MentionCandidateView.kt
index 7b6619a1eb..46101962f9 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/mentions/MentionCandidateView.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/mentions/MentionCandidateView.kt
@@ -1,11 +1,11 @@
package org.thoughtcrime.securesms.conversation.v2.input_bar.mentions
-import android.view.View
import network.loki.messenger.databinding.ViewMentionCandidateV2Binding
import org.thoughtcrime.securesms.conversation.v2.mention.MentionViewModel
import org.thoughtcrime.securesms.ui.components.Avatar
import org.thoughtcrime.securesms.ui.setThemedContent
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
+import org.thoughtcrime.securesms.util.AvatarBadge
fun ViewMentionCandidateV2Binding.update(candidate: MentionViewModel.Candidate) {
mentionCandidateNameTextView.text = candidate.nameHighlighted
@@ -13,8 +13,7 @@ fun ViewMentionCandidateV2Binding.update(candidate: MentionViewModel.Candidate)
Avatar(
size = LocalDimensions.current.iconMediumAvatar,
data = candidate.member.avatarData,
+ badge = if (candidate.member.showAdminCrown) AvatarBadge.Admin else AvatarBadge.None
)
}
-
- moderatorIconImageView.visibility = if (candidate.member.showAdminCrown) View.VISIBLE else View.GONE
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt
index 8796834bbe..3f883900ed 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt
@@ -61,6 +61,7 @@ import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.bold
+import org.thoughtcrime.securesms.util.AvatarBadge
import org.thoughtcrime.securesms.util.AvatarUtils
import org.thoughtcrime.securesms.util.DateUtils
import org.thoughtcrime.securesms.util.disableClipping
@@ -176,7 +177,6 @@ class VisibleMessageView : FrameLayout {
val isStartOfMessageCluster = isStartOfMessageCluster(message, previous, isGroupThread)
val isEndOfMessageCluster = isEndOfMessageCluster(message, next, isGroupThread)
// Show profile picture and sender name if this is a group thread AND the message is incoming
- binding.moderatorIconImageView.isVisible = false
binding.profilePictureView.visibility = when {
threadRecipient.isGroupOrCommunityRecipient && !message.isOutgoing && isEndOfMessageCluster -> View.VISIBLE
threadRecipient.isGroupOrCommunityRecipient -> View.INVISIBLE
@@ -200,22 +200,22 @@ class VisibleMessageView : FrameLayout {
if (isGroupThread && !message.isOutgoing) {
if (isEndOfMessageCluster) {
+ val showProBadge = if (sender.address is Address.WithAccountId) {
+ (threadRecipient.data as? RecipientData.GroupLike)
+ ?.shouldShowAdminCrown(sender.address.accountId) == true
+ } else {
+ false
+ }
binding.profilePictureView.setThemedContent {
Avatar(
size = LocalDimensions.current.iconMediumAvatar,
data = avatarUtils.getUIDataFromRecipient(sender),
+ badge = if(showProBadge) AvatarBadge.Admin else AvatarBadge.None,
modifier = Modifier.clickable {
delegate?.showUserProfileModal(message.recipient)
}
)
}
-
- binding.moderatorIconImageView.isVisible = if (sender.address is Address.WithAccountId) {
- (threadRecipient.data as? RecipientData.GroupLike)
- ?.shouldShowAdminCrown(sender.address.accountId) == true
- } else {
- false
- }
}
}
if(!message.isOutgoing && (isStartOfMessageCluster && isGroupThread)){
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/ProComponents.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/ProComponents.kt
index 640158f89d..a202ddd64c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ui/ProComponents.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/ui/ProComponents.kt
@@ -80,6 +80,7 @@ import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
import org.thoughtcrime.securesms.ui.theme.ThemeColors
+import org.thoughtcrime.securesms.util.AvatarBadge
import org.thoughtcrime.securesms.util.AvatarUIData
@@ -750,7 +751,7 @@ fun AvatarQrWidget(
label = "corner_radius"
)
- // Scale animations for content
+ // Scale animations for content (used when going from QR back to avatar)
val avatarScale by animateFloatAsState(
targetValue = if (showQR) 0.8f else 1f,
animationSpec = animationSpecFast,
@@ -835,7 +836,6 @@ fun AvatarQrWidget(
}
Avatar(
modifier = avatarModifier
- .size(animatedSize)
.graphicsLayer(
alpha = avatarAlpha,
scaleX = avatarScale,
@@ -844,7 +844,7 @@ fun AvatarQrWidget(
,
size = animatedSize,
maxSizeLoad = LocalDimensions.current.iconXXLargeAvatar,
- data = avatarUIData
+ data = avatarUIData,
)
// QR with scale and alpha
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/Avatar.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/Avatar.kt
index 38d1c4abef..f1e49a1d50 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ui/components/Avatar.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/Avatar.kt
@@ -31,6 +31,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.max
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImagePainter
import coil3.compose.SubcomposeAsyncImage
@@ -55,6 +56,7 @@ import org.thoughtcrime.securesms.util.AvatarUIData
import org.thoughtcrime.securesms.util.AvatarUIElement
import org.thoughtcrime.securesms.util.avatarOptions
+private val MIN_BADGE_SIZE = 12.dp
@Composable
fun BaseAvatar(
@@ -105,8 +107,8 @@ fun BaseAvatar(
Box(
modifier = Modifier
.align(Alignment.BottomEnd)
- .offset(1.dp, 1.dp) // Used to make up for transparent padding in icon.
- .size(size * 0.4f)
+ .offset(x = 1.dp, y = 1.dp)
+ .size(max(size * 0.4f, MIN_BADGE_SIZE))
) {
badge()
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtils.kt b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtils.kt
index a978a65e39..ff7c0d78ed 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtils.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtils.kt
@@ -231,7 +231,7 @@ data class AvatarUIElement(
sealed class AvatarBadge(@DrawableRes val icon: Int){
data object None: AvatarBadge(0)
- data object Admin: AvatarBadge(R.drawable.ic_crown_custom_enlarged)
+ data object Admin: AvatarBadge(R.drawable.ic_crown_custom_enlarged_no_padding)
data class Custom(@DrawableRes val iconRes: Int): AvatarBadge(iconRes)
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FilenameUtils.kt b/app/src/main/java/org/thoughtcrime/securesms/util/FilenameUtils.kt
index 9476844413..b95876bac7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/FilenameUtils.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/FilenameUtils.kt
@@ -92,12 +92,18 @@ object FilenameUtils {
val projection = arrayOf(OpenableColumns.DISPLAY_NAME)
val contentRes = context.contentResolver
if (contentRes != null) {
- val cursor = contentRes.query(uri, projection, null, null, null)
- cursor?.use {
- if (it.moveToFirst()) {
- val nameIndex = it.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME)
- extractedFilename = it.getString(nameIndex)
+ try {
+ val cursor = contentRes.query(uri, projection, null, null, null)
+ cursor?.use {
+ if (it.moveToFirst()) {
+ val nameIndex = it.getColumnIndex(OpenableColumns.DISPLAY_NAME)
+ if (nameIndex != -1) {
+ extractedFilename = it.getString(nameIndex)
+ }
+ }
}
+ } catch (e: Exception) {
+ Log.w(TAG, "Unable to query display name for uri: $uri", e)
}
}
}
diff --git a/app/src/main/res/drawable/ic_crown_custom_enlarged_no_padding.xml b/app/src/main/res/drawable/ic_crown_custom_enlarged_no_padding.xml
new file mode 100644
index 0000000000..68c2a6cbd7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_crown_custom_enlarged_no_padding.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/layout/view_mention_candidate_v2.xml b/app/src/main/res/layout/view_mention_candidate_v2.xml
index c813264b31..5c21663c97 100644
--- a/app/src/main/res/layout/view_mention_candidate_v2.xml
+++ b/app/src/main/res/layout/view_mention_candidate_v2.xml
@@ -25,19 +25,6 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
-
-
-
-