Implement status infos on chat view

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2023-07-27 22:07:10 +02:00
parent 5d5b476001
commit 4b89ceeb54
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
2 changed files with 112 additions and 8 deletions

View File

@ -73,6 +73,7 @@ import android.view.animation.AlphaAnimation
import android.view.animation.Animation import android.view.animation.Animation
import android.view.animation.LinearInterpolator import android.view.animation.LinearInterpolator
import android.widget.AbsListView import android.widget.AbsListView
import android.widget.FrameLayout
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
@ -81,6 +82,7 @@ import android.widget.RelativeLayout
import android.widget.RelativeLayout.BELOW import android.widget.RelativeLayout.BELOW
import android.widget.RelativeLayout.LayoutParams import android.widget.RelativeLayout.LayoutParams
import android.widget.SeekBar import android.widget.SeekBar
import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
@ -178,6 +180,7 @@ import com.nextcloud.talk.signaling.SignalingMessageReceiver
import com.nextcloud.talk.signaling.SignalingMessageSender import com.nextcloud.talk.signaling.SignalingMessageSender
import com.nextcloud.talk.translate.ui.TranslateActivity import com.nextcloud.talk.translate.ui.TranslateActivity
import com.nextcloud.talk.ui.MicInputCloud import com.nextcloud.talk.ui.MicInputCloud
import com.nextcloud.talk.ui.StatusDrawable
import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet
import com.nextcloud.talk.ui.dialog.AttachmentDialog import com.nextcloud.talk.ui.dialog.AttachmentDialog
import com.nextcloud.talk.ui.dialog.MessageActionsDialog import com.nextcloud.talk.ui.dialog.MessageActionsDialog
@ -1568,10 +1571,24 @@ class ChatActivity :
private fun setIcon(drawable: Drawable?) { private fun setIcon(drawable: Drawable?) {
supportActionBar?.let { supportActionBar?.let {
val avatarSize = (it.height / TOOLBAR_AVATAR_RATIO).roundToInt() val avatarSize = (it.height / TOOLBAR_AVATAR_RATIO).roundToInt()
val size = DisplayUtils.convertDpToPixel(STATUS_SIZE_IN_DP, context)
if (drawable != null && avatarSize > 0) { if (drawable != null && avatarSize > 0) {
val bitmap = drawable.toBitmap(avatarSize, avatarSize) val bitmap = drawable.toBitmap(avatarSize, avatarSize)
it.setIcon(BitmapDrawable(resources, bitmap)) val status = StatusDrawable(
currentConversation!!.status,
null,
size,
viewThemeUtils.platform.getScheme(binding.chatToolbar.context).surface,
binding.chatToolbar.context
)
binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_avatar)
.setImageDrawable(BitmapDrawable(resources, bitmap))
binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_status)
.setImageDrawable(status)
binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_status).contentDescription =
currentConversation?.status
binding.chatToolbar.findViewById<FrameLayout>(R.id.chat_toolbar_avatar_container)
.visibility = View.VISIBLE
} else { } else {
Log.d(TAG, "loadAvatarForStatusBar avatarSize <= 0") Log.d(TAG, "loadAvatarForStatusBar avatarSize <= 0")
} }
@ -1600,6 +1617,8 @@ class ChatActivity :
.diskCachePolicy(CachePolicy.DISABLED) .diskCachePolicy(CachePolicy.DISABLED)
.build() .build()
) )
} else {
binding.chatToolbar.findViewById<FrameLayout>(R.id.chat_toolbar_avatar_container).visibility = View.GONE
} }
} }
@ -2643,17 +2662,42 @@ class ChatActivity :
} }
private fun setActionBarTitle() { private fun setActionBarTitle() {
supportActionBar?.title = val title = binding.chatToolbar.findViewById<TextView>(R.id.chat_toolbar_title)
viewThemeUtils.platform.colorTextView(title, ColorRole.ON_SURFACE)
title.text =
if (currentConversation?.displayName != null) { if (currentConversation?.displayName != null) {
try { try {
" " + EmojiCompat.get().process(currentConversation?.displayName as CharSequence).toString() EmojiCompat.get().process(currentConversation?.displayName as CharSequence).toString()
} catch (e: java.lang.IllegalStateException) { } catch (e: java.lang.IllegalStateException) {
" " + currentConversation?.displayName currentConversation?.displayName
error(e) error(e)
} }
} else { } else {
"" ""
} }
val statusMessageView = binding.chatToolbar.findViewById<TextView>(R.id.chat_toolbar_status_message)
if (currentConversation?.type == ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) {
var statusMessage = ""
if (currentConversation?.statusIcon != null) {
statusMessage += currentConversation?.statusIcon
}
if (currentConversation?.statusMessage != null) {
statusMessage += currentConversation?.statusMessage
}
if (statusMessage.isNotEmpty()) {
viewThemeUtils.platform.colorTextView(statusMessageView, ColorRole.ON_SURFACE)
statusMessageView.text = statusMessage
statusMessageView.visibility = View.VISIBLE
} else {
statusMessageView.visibility = View.GONE
}
} else {
statusMessageView.visibility = View.GONE
}
} }
public override fun onDestroy() { public override fun onDestroy() {
@ -3320,6 +3364,7 @@ class ChatActivity :
} }
loadAvatarForStatusBar() loadAvatarForStatusBar()
setActionBarTitle()
} }
if (CapabilitiesUtilNew.isAbleToCall(conversationUser)) { if (CapabilitiesUtilNew.isAbleToCall(conversationUser)) {
@ -4145,6 +4190,7 @@ class ChatActivity :
private const val GROUPED_MESSAGES_THRESHOLD = 4 private const val GROUPED_MESSAGES_THRESHOLD = 4
private const val GROUPED_MESSAGES_SAME_AUTHOR_THRESHOLD = 5 private const val GROUPED_MESSAGES_SAME_AUTHOR_THRESHOLD = 5
private const val TOOLBAR_AVATAR_RATIO = 1.5 private const val TOOLBAR_AVATAR_RATIO = 1.5
private const val STATUS_SIZE_IN_DP = 9f
private const val HTTP_CODE_NOT_MODIFIED = 304 private const val HTTP_CODE_NOT_MODIFIED = 304
private const val HTTP_CODE_PRECONDITION_FAILED = 412 private const val HTTP_CODE_PRECONDITION_FAILED = 412
private const val QUOTED_MESSAGE_IMAGE_MAX_HEIGHT = 96f private const val QUOTED_MESSAGE_IMAGE_MAX_HEIGHT = 96f

View File

@ -37,6 +37,7 @@
android:id="@+id/chat_appbar" android:id="@+id/chat_appbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/chat_toolbar" android:id="@+id/chat_toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -45,9 +46,66 @@
android:theme="?attr/actionBarPopupTheme" android:theme="?attr/actionBarPopupTheme"
app:layout_scrollFlags="scroll|enterAlways" app:layout_scrollFlags="scroll|enterAlways"
app:navigationIconTint="@color/fontAppbar" app:navigationIconTint="@color/fontAppbar"
app:popupTheme="@style/appActionBarPopupMenu" app:popupTheme="@style/appActionBarPopupMenu">
app:titleTextColor="@color/fontAppbar"
tools:title="@string/nc_app_product_name" /> <FrameLayout
android:id="@+id/chat_toolbar_avatar_container"
android:layout_width="46dp"
android:layout_height="46dp"
android:layout_marginEnd="@dimen/standard_half_margin"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/chat_toolbar_avatar"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_gravity="start|center_vertical"
android:contentDescription="@null"
tools:src="@drawable/ic_avatar_group" />
<ImageView
android:id="@+id/chat_toolbar_status"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_gravity="end|bottom"
android:contentDescription="@null"
tools:src="@drawable/online_status" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/chat_toolbar_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:lines="1"
android:text="@string/nc_app_product_name"
android:textColor="@color/fontAppbar"
android:textSize="22sp" />
<androidx.emoji2.widget.EmojiTextView
android:id="@+id/chat_toolbar_status_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:lines="1"
android:text="@string/nc_app_product_name"
android:textColor="@color/fontAppbar"
android:textSize="12sp"
android:visibility="gone"
tools:text="Offline"
tools:visibility="visible" />
</LinearLayout>
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<RelativeLayout <RelativeLayout