Showing the admin crown for legacy groups (#923)

pull/1709/head
ThomasSession 2 months ago committed by GitHub
parent 6ad806afb7
commit fc914f2667
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -85,6 +85,10 @@ class UserView : LinearLayout {
}
}
fun handleAdminStatus(isAdmin: Boolean){
binding.adminIcon.visibility = if (isAdmin) View.VISIBLE else View.GONE
}
fun unbind() { binding.profilePictureView.recycle() }
// endregion
}

@ -61,8 +61,10 @@ import org.thoughtcrime.securesms.home.UserDetailsBottomSheet
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestManager
import network.loki.messenger.libsession_util.getOrNull
import org.session.libsession.utilities.Address.Companion.fromSerialized
import org.session.libsession.utilities.ConfigFactoryProtocol
import org.session.libsignal.utilities.AccountId
import org.thoughtcrime.securesms.database.GroupDatabase
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
import org.thoughtcrime.securesms.dependencies.ConfigFactory
import org.thoughtcrime.securesms.util.DateUtils
@ -77,6 +79,7 @@ class VisibleMessageView : FrameLayout {
private var replyDisabled: Boolean = false
@Inject lateinit var threadDb: ThreadDatabase
@Inject lateinit var lokiThreadDb: LokiThreadDatabase
@Inject lateinit var groupDb: GroupDatabase // for legacy groups only
@Inject lateinit var lokiApiDb: LokiAPIDatabase
@Inject lateinit var mmsSmsDb: MmsSmsDatabase
@Inject lateinit var smsDb: SmsDatabase
@ -211,7 +214,14 @@ class VisibleMessageView : FrameLayout {
}
val isModerator = OpenGroupManager.isUserModerator(context, openGroup.groupId, standardPublicKey, blindedPublicKey)
binding.moderatorIconImageView.isVisible = isModerator
} else if (thread.isGroupV2Recipient) {
}
else if (thread.isLegacyGroupRecipient) { // legacy groups
val groupRecord = groupDb.getGroup(thread.address.toGroupString()).orNull()
val isAdmin: Boolean = groupRecord?.admins?.contains(fromSerialized(senderAccountID)) ?: false
binding.moderatorIconImageView.isVisible = isAdmin
}
else if (thread.isGroupV2Recipient) { // groups v2
val isAdmin = configFactory.withGroupConfigs(AccountId(thread.address.serialize())) {
it.groupMembers.getOrNull(senderAccountID)?.admin == true
}

@ -66,6 +66,8 @@ class EditLegacyGroupActivity : PassphraseRequiredActionBarActivity() {
private var isLoading = false
set(newValue) { field = newValue; invalidateOptionsMenu() }
private val groupInfo by lazy { DatabaseComponent.get(this).groupDatabase().getGroup(groupID).get() }
private lateinit var groupID: String
private lateinit var originalName: String
private lateinit var name: String
@ -79,9 +81,9 @@ class EditLegacyGroupActivity : PassphraseRequiredActionBarActivity() {
private val memberListAdapter by lazy {
if (isSelfAdmin)
EditLegacyGroupMembersAdapter(this, Glide.with(this), isSelfAdmin, this::onMemberClick)
EditLegacyGroupMembersAdapter(this, Glide.with(this), isSelfAdmin, ::checkUserIsAdmin , this::onMemberClick)
else
EditLegacyGroupMembersAdapter(this, Glide.with(this), isSelfAdmin)
EditLegacyGroupMembersAdapter(this, Glide.with(this), isSelfAdmin, ::checkUserIsAdmin)
}
private lateinit var mainContentContainer: LinearLayout
@ -108,9 +110,9 @@ class EditLegacyGroupActivity : PassphraseRequiredActionBarActivity() {
ThemeUtil.getThemedDrawableResId(this, R.attr.actionModeCloseDrawable))
groupID = intent.getStringExtra(groupIDKey)!!
val groupInfo = DatabaseComponent.get(this).groupDatabase().getGroup(groupID).get()
originalName = groupInfo.title
isSelfAdmin = groupInfo.admins.any { it.serialize() == TextSecurePreferences.getLocalNumber(this) }
isSelfAdmin = checkUserIsAdmin(TextSecurePreferences.getLocalNumber(this))
name = originalName
@ -205,6 +207,10 @@ class EditLegacyGroupActivity : PassphraseRequiredActionBarActivity() {
}
}
private fun checkUserIsAdmin(userId: String?): Boolean{
return groupInfo.admins.any { it.serialize() == userId }
}
private fun handleIsEditingNameChanged() {
cntGroupNameEdit.visibility = if (isEditingName) View.VISIBLE else View.INVISIBLE
cntGroupNameDisplay.visibility = if (isEditingName) View.INVISIBLE else View.VISIBLE

@ -13,6 +13,7 @@ class EditLegacyGroupMembersAdapter(
private val context: Context,
private val glide: RequestManager,
private val admin: Boolean,
private val checkIsAdmin: (String) -> Boolean,
private val memberClickListener: ((String) -> Unit)? = null
) : RecyclerView.Adapter<EditLegacyGroupMembersAdapter.ViewHolder>() {
@ -59,6 +60,8 @@ class EditLegacyGroupMembersAdapter(
} else {
viewHolder.view.setOnClickListener(null)
}
viewHolder.view.handleAdminStatus(checkIsAdmin(member))
}
class ViewHolder(val view: UserView) : RecyclerView.ViewHolder(view)

@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="64dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="?attr/selectableItemBackground"
android:contentDescription="@string/AccessibilityId_contact"
android:orientation="vertical">
@ -15,12 +16,33 @@
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/medium_spacing">
<org.thoughtcrime.securesms.components.ProfilePictureView
android:id="@+id/profilePictureView"
android:layout_width="@dimen/small_profile_picture_size"
android:layout_height="@dimen/small_profile_picture_size"
android:layout_marginVertical="@dimen/medium_spacing"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<org.thoughtcrime.securesms.components.ProfilePictureView
android:id="@+id/profilePictureView"
android:layout_width="@dimen/small_profile_picture_size"
android:layout_height="@dimen/small_profile_picture_size"
android:layout_marginTop="3dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<ImageView
android:id="@+id/adminIcon"
android:layout_width="16dp"
android:layout_height="16dp"
android:src="@drawable/ic_crown_custom"
android:layout_marginEnd="-1dp"
android:layout_marginBottom="-1dp"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
app:layout_constraintBottom_toBottomOf="@+id/profilePictureView"
app:layout_constraintEnd_toEndOf="@+id/profilePictureView"
android:visibility="gone"
tools:visibility="visible"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/nameTextView"

Loading…
Cancel
Save