Browse Source

Implement status infos on chat view

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 1 năm trước cách đây
mục cha
commit
4b89ceeb54

+ 51 - 5
app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

@@ -73,6 +73,7 @@ import android.view.animation.AlphaAnimation
 import android.view.animation.Animation
 import android.view.animation.LinearInterpolator
 import android.widget.AbsListView
+import android.widget.FrameLayout
 import android.widget.ImageButton
 import android.widget.ImageView
 import android.widget.LinearLayout
@@ -81,6 +82,7 @@ import android.widget.RelativeLayout
 import android.widget.RelativeLayout.BELOW
 import android.widget.RelativeLayout.LayoutParams
 import android.widget.SeekBar
+import android.widget.TextView
 import android.widget.Toast
 import androidx.activity.OnBackPressedCallback
 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.translate.ui.TranslateActivity
 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.dialog.AttachmentDialog
 import com.nextcloud.talk.ui.dialog.MessageActionsDialog
@@ -1568,10 +1571,24 @@ class ChatActivity :
                 private fun setIcon(drawable: Drawable?) {
                     supportActionBar?.let {
                         val avatarSize = (it.height / TOOLBAR_AVATAR_RATIO).roundToInt()
-
+                        val size = DisplayUtils.convertDpToPixel(STATUS_SIZE_IN_DP, context)
                         if (drawable != null && avatarSize > 0) {
                             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 {
                             Log.d(TAG, "loadAvatarForStatusBar avatarSize <= 0")
                         }
@@ -1600,6 +1617,8 @@ class ChatActivity :
                     .diskCachePolicy(CachePolicy.DISABLED)
                     .build()
             )
+        } else {
+            binding.chatToolbar.findViewById<FrameLayout>(R.id.chat_toolbar_avatar_container).visibility = View.GONE
         }
     }
 
@@ -2643,17 +2662,42 @@ class ChatActivity :
     }
 
     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) {
                 try {
-                    " " + EmojiCompat.get().process(currentConversation?.displayName as CharSequence).toString()
+                    EmojiCompat.get().process(currentConversation?.displayName as CharSequence).toString()
                 } catch (e: java.lang.IllegalStateException) {
-                    " " + currentConversation?.displayName
+                    currentConversation?.displayName
                     error(e)
                 }
             } 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() {
@@ -3320,6 +3364,7 @@ class ChatActivity :
             }
 
             loadAvatarForStatusBar()
+            setActionBarTitle()
         }
 
         if (CapabilitiesUtilNew.isAbleToCall(conversationUser)) {
@@ -4145,6 +4190,7 @@ class ChatActivity :
         private const val GROUPED_MESSAGES_THRESHOLD = 4
         private const val GROUPED_MESSAGES_SAME_AUTHOR_THRESHOLD = 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_PRECONDITION_FAILED = 412
         private const val QUOTED_MESSAGE_IMAGE_MAX_HEIGHT = 96f

+ 61 - 3
app/src/main/res/layout/activity_chat.xml

@@ -37,6 +37,7 @@
         android:id="@+id/chat_appbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
+
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/chat_toolbar"
             android:layout_width="match_parent"
@@ -45,9 +46,66 @@
             android:theme="?attr/actionBarPopupTheme"
             app:layout_scrollFlags="scroll|enterAlways"
             app:navigationIconTint="@color/fontAppbar"
-            app:popupTheme="@style/appActionBarPopupMenu"
-            app:titleTextColor="@color/fontAppbar"
-            tools:title="@string/nc_app_product_name" />
+            app:popupTheme="@style/appActionBarPopupMenu">
+
+            <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>
 
     <RelativeLayout