Implement parts of the visible message view

This commit is contained in:
nielsandriesse 2021-06-01 13:01:03 +10:00
parent d20f81bd2e
commit a23cfbc11d
13 changed files with 97 additions and 25 deletions

View File

@ -4,7 +4,7 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
import kotlinx.android.synthetic.main.view_visible_message.view.*
import kotlinx.android.synthetic.main.view_control_message.view.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.database.model.MessageRecord
@ -30,7 +30,11 @@ class ControlMessageView : LinearLayout {
// region Updating
fun bind(message: MessageRecord) {
testTextView.text = "Control message: ${message.body}"
// TODO: Localize strings, make the view look better, handle closed group control messages
if (message.isExpirationTimerUpdate) { textView.text = "Expiration timer update" }
else if (message.isScreenshotNotification) { textView.text = "Screenshot notification" }
else if (message.isMediaSavedNotification) { textView.text = "Media saved notification" }
else { textView.text = "Control message not yet handled" }
}
fun recycle() {

View File

@ -3,9 +3,12 @@ package org.thoughtcrime.securesms.conversation.v2.messages
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.LinearLayout
import kotlinx.android.synthetic.main.view_visible_message.view.*
import network.loki.messenger.R
import org.session.libsession.messaging.contacts.Contact.ContactContext
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.model.MessageRecord
class VisibleMessageView : LinearLayout {
@ -30,11 +33,31 @@ class VisibleMessageView : LinearLayout {
// region Updating
fun bind(message: MessageRecord) {
testTextView.text = "Visible message: ${message.body}"
val sender = message.individualRecipient
val senderSessionID = sender.address.serialize()
val threadID = message.threadId
val threadDB = DatabaseFactory.getThreadDatabase(context)
val thread = threadDB.getRecipientForThreadId(threadID)
val contactDB = DatabaseFactory.getSessionContactDatabase(context)
val isGroupThread = (thread?.isGroupRecipient == true)
// Show profile picture and sender name if this is a group thread
if (isGroupThread) {
profilePictureContainer.visibility = View.VISIBLE
profilePictureView.publicKey = senderSessionID
// TODO: Set glide on the profile picture view and update it
// TODO: Show crown if this is an open group and the user is a moderator; otherwise hide it
senderNameTextView.visibility = View.VISIBLE
val context = if (thread?.isOpenGroupRecipient == true) ContactContext.OPEN_GROUP else ContactContext.REGULAR
senderNameTextView.text = contactDB.getContactWithSessionID(senderSessionID)?.displayName(context) ?: senderSessionID
} else {
profilePictureContainer.visibility = View.GONE
senderNameTextView.visibility = View.GONE
}
// TODO: Populate content view
}
fun recycle() {
// TODO: Implement
profilePictureView.recycle()
}
// endregion
}

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners android:radius="@dimen/message_corner_radius"/>
<solid android:color="@color/white" />

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners android:radius="@dimen/message_corner_radius"/>
<solid android:color="@color/white" />

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/message_corner_collapse_radius"

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/message_corner_collapse_radius"

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/message_corner_radius"

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners android:radius="@dimen/message_corner_radius"/>
<solid android:color="@color/white" />

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/message_corner_radius"

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/message_corner_radius"

View File

@ -4,7 +4,6 @@
<item
android:top="2px"
android:bottom="2px">
<shape android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/message_corner_radius"

View File

@ -1,14 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal">
android:orientation="horizontal"
android:gravity="center">
<TextView
android:id="@+id/testTextView"
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/medium_font_size"

View File

@ -1,17 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal">
android:orientation="horizontal"
android:gravity="bottom">
<TextView
android:id="@+id/testTextView"
android:layout_width="match_parent"
<!-- The linear layout below is marked as "useless", but this isn't the case. It's
convenient because it allows you to show or hide the profile picture plus the spacers
before and behind it in one go. -->
<LinearLayout
android:id="@+id/profilePictureContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" />
android:orientation="horizontal">
<View
android:layout_width="12dp"
android:layout_height="0dp" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<org.thoughtcrime.securesms.loki.views.ProfilePictureView
android:id="@+id/profilePictureView"
android:layout_width="@dimen/very_small_profile_picture_size"
android:layout_height="@dimen/very_small_profile_picture_size" />
<ImageView
android:id="@+id/moderatorIconImageView"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_crown"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true" />
</RelativeLayout>
<View
android:layout_width="12dp"
android:layout_height="0dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/senderNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:textColor="@color/text"
android:textStyle="bold"
android:maxLines="1"
android:ellipsize="end" />
<LinearLayout
android:id="@+id/messageContentContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/message_bubble_background" />
</LinearLayout>
</LinearLayout>