瀏覽代碼

Minor UI improvements
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>

sowjanyakch 1 年之前
父節點
當前提交
8d4c0fb57c

+ 0 - 6
app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt

@@ -242,12 +242,6 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) :
         }
     }
 
-    fun updateMessage(message: ChatMessage) {
-        binding.messageText.text = message.message
-        binding.messageType.visibility = View.VISIBLE
-        binding.messageTime.text = dateUtils.getLocalTimeStringFromTimestamp(message.lastEditTimestamp)
-    }
-
     fun assignCommonMessageInterface(commonMessageInterface: CommonMessageInterface) {
         this.commonMessageInterface = commonMessageInterface
     }

+ 36 - 33
app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

@@ -66,7 +66,6 @@ import android.view.Menu
 import android.view.MenuItem
 import android.view.MotionEvent
 import android.view.View
-import android.view.View.GONE
 import android.view.View.OnTouchListener
 import android.view.animation.AccelerateDecelerateInterpolator
 import android.view.animation.AccelerateInterpolator
@@ -301,8 +300,6 @@ class ChatActivity :
 
     lateinit var chatViewModel: ChatViewModel
 
-    val editableBehaviorSubject = BehaviorSubject.createDefault(false)
-    val editedTextBehaviorSubject = BehaviorSubject.createDefault("")
     private lateinit var editMessage: ChatMessage
 
     override val view: View
@@ -363,6 +360,8 @@ class ChatActivity :
         RELEASED,
         ERROR
     }
+    private val editableBehaviorSubject = BehaviorSubject.createDefault(false)
+    private val editedTextBehaviorSubject = BehaviorSubject.createDefault("")
 
     private var mediaRecorderState: MediaRecorderState = MediaRecorderState.INITIAL
 
@@ -532,6 +531,8 @@ class ChatActivity :
         context.getSharedPreferences(localClassName, MODE_PRIVATE).apply {
             val text = getString(roomToken, "")
             val cursor = getInt(roomToken + CURSOR_KEY, 0)
+            //  val editFlag = getBoolean(EDIT_FLAG, false)
+            //  editableBehaviorSubject.onNext(editFlag)
             binding.messageInputView.messageInput.setText(text)
             binding.messageInputView.messageInput.setSelection(cursor)
         }
@@ -558,6 +559,7 @@ class ChatActivity :
             context.getSharedPreferences(localClassName, MODE_PRIVATE).edit().apply {
                 putString(roomToken, text)
                 putInt(roomToken + CURSOR_KEY, cursor)
+                //  putBoolean(EDIT_FLAG, editableBehaviorSubject.value!!)
                 apply()
             }
         }
@@ -760,13 +762,14 @@ class ChatActivity :
     private fun initMessageInputView() {
         val filters = arrayOfNulls<InputFilter>(1)
         val lengthFilter = CapabilitiesUtilNew.getMessageMaxLength(conversationUser)
-        binding.editView.editMessageView.visibility = GONE
 
         if (editableBehaviorSubject.value!!) {
             val editableText = Editable.Factory.getInstance().newEditable(editMessage.message)
             binding.messageInputView.inputEditText.text = editableText
             binding.messageInputView.inputEditText.setSelection(editableText.length)
             binding.editView.editMessage.setText(editMessage.message)
+        } else {
+            binding.editView.editMessageView.visibility = View.GONE
         }
 
         filters[0] = InputFilter.LengthFilter(lengthFilter)
@@ -831,11 +834,7 @@ class ChatActivity :
         }
         initVoiceRecordButton()
         if (editableBehaviorSubject.value!!) {
-            binding.messageInputView.messageSendButton.visibility = View.GONE
-            binding.messageInputView.recordAudioButton.visibility = View.GONE
-            binding.messageInputView.editMessageButton.visibility = View.VISIBLE
-            binding.editView.editMessageView.visibility = View.VISIBLE
-            binding.messageInputView.attachmentButton.visibility = View.GONE
+            setEditUI()
         }
 
         if (sharedText.isNotEmpty()) {
@@ -920,16 +919,9 @@ class ChatActivity :
                         }
                     }
                     message.message = messageEdited.ocs?.data?.parentMessage?.text
-                    message.lastEditTimestamp = System.currentTimeMillis()
+                    message.lastEditTimestamp = messageEdited.ocs?.data?.lastEditTimestamp!!
                     adapter?.update(message)
                     adapter?.notifyDataSetChanged()
-
-                    // val inflater = LayoutInflater.from(context)
-                    // val outgoingTextViewLayout = inflater.inflate(R.layout.item_custom_incoming_text_message, null)
-                    // val messageType = outgoingTextViewLayout.findViewById<TextView>(R.id.messageType)
-                    // val messageTime = outgoingTextViewLayout.findViewById<TextView>(R.id.messageTime)
-                    // messageType.visibility = View.VISIBLE
-                    // messageTime.text = dateUtils.getLocalTimeStringFromTimestamp(message.lastEditTimestamp)
                     clearEditUI()
                 }
 
@@ -941,11 +933,19 @@ class ChatActivity :
             })
     }
 
+    private fun setEditUI() {
+        binding.messageInputView.messageSendButton.visibility = View.GONE
+        binding.messageInputView.recordAudioButton.visibility = View.GONE
+        binding.messageInputView.editMessageButton.visibility = View.VISIBLE
+        binding.editView.editMessageView.visibility = View.VISIBLE
+        binding.messageInputView.attachmentButton.visibility = View.GONE
+    }
+
     private fun clearEditUI() {
-        binding.messageInputView.editMessageButton.visibility = GONE
+        binding.messageInputView.editMessageButton.visibility = View.GONE
         editableBehaviorSubject.onNext(false)
         binding.messageInputView.inputEditText.setText("")
-        binding.editView.editMessageView.visibility = GONE
+        binding.editView.editMessageView.visibility = View.GONE
         binding.messageInputView.attachmentButton.visibility = View.VISIBLE
     }
 
@@ -987,6 +987,9 @@ class ChatActivity :
         binding.messageInputView.findViewById<MicInputCloud>(R.id.micInputCloud)?.let {
             viewThemeUtils.talk.themeMicInputCloud(it)
         }
+        binding.messageInputView.findViewById<ImageView>(R.id.editMessageButton)?.let {
+            viewThemeUtils.platform.colorImageView(it, ColorRole.PRIMARY)
+        }
     }
 
     private fun setupActionBar() {
@@ -4471,7 +4474,7 @@ class ChatActivity :
 
     private fun setMessageAsEdited(message: IMessage?) {
         val messageTemp = message as ChatMessage
-        messageTemp.lastEditTimestamp = message.timestamp
+        messageTemp.lastEditTimestamp = message.lastEditTimestamp
 
         messageTemp.isOneToOneConversation =
             currentConversation?.type == ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL
@@ -4527,21 +4530,10 @@ class ChatActivity :
     }
 
     private fun isShowMessageDeletionButton(message: ChatMessage): Boolean {
-        if (conversationUser == null) return false
-
-        val isUserAllowedByPrivileges = if (message.actorId == conversationUser!!.userId) {
-            true
-        } else {
-            ConversationUtils.canModerate(currentConversation!!, conversationUser!!)
-        }
-
-        val isOlderThanSixHours = message
-            .createdAt
-            .before(Date(System.currentTimeMillis() - AGE_THRESHOLD_FOR_DELETE_MESSAGE))
+        val isUserAllowedByPrivileges = userAllowedByPrivilages(message)
 
         return when {
             !isUserAllowedByPrivileges -> false
-            isOlderThanSixHours -> false
             message.systemMessageType != ChatMessage.SystemMessageType.DUMMY -> false
             message.isDeleted -> false
             !CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "delete-messages") -> false
@@ -4550,6 +4542,17 @@ class ChatActivity :
         }
     }
 
+    fun userAllowedByPrivilages(message: ChatMessage): Boolean {
+        if (conversationUser == null) return false
+
+        val isUserAllowedByPrivileges = if (message.actorId == conversationUser!!.userId) {
+            true
+        } else {
+            ConversationUtils.canModerate(currentConversation!!, conversationUser!!)
+        }
+        return isUserAllowedByPrivileges
+    }
+
     override fun hasContentFor(message: ChatMessage, type: Byte): Boolean {
         return when (type) {
             CONTENT_TYPE_LOCATION -> message.hasGeoLocation()
@@ -4771,7 +4774,6 @@ class ChatActivity :
         private const val GET_ROOM_INFO_DELAY_NORMAL: Long = 30000
         private const val GET_ROOM_INFO_DELAY_LOBBY: Long = 5000
         private const val HTTP_CODE_OK: Int = 200
-        private const val AGE_THRESHOLD_FOR_DELETE_MESSAGE: Int = 21600000 // (6 hours in millis = 6 * 3600 * 1000)
         private const val REQUEST_CODE_CHOOSE_FILE: Int = 555
         private const val REQUEST_CODE_SELECT_CONTACT: Int = 666
         private const val REQUEST_CODE_MESSAGE_SEARCH: Int = 777
@@ -4835,5 +4837,6 @@ class ChatActivity :
         private const val MILISEC_15: Long = 15
         private const val LINEBREAK = "\n"
         private const val CURSOR_KEY = "_cursor"
+        private const val EDIT_FLAG = "_editFlag"
     }
 }

+ 14 - 3
app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt

@@ -61,6 +61,7 @@ import io.reactivex.Observer
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.disposables.Disposable
 import io.reactivex.schedulers.Schedulers
+import java.util.Date
 import javax.inject.Inject
 
 @AutoInjector(NextcloudTalkApplication::class)
@@ -92,10 +93,19 @@ class MessageActionsDialog(
     private val messageHasRegularText = ChatMessage.MessageType.REGULAR_TEXT_MESSAGE == message
         .getCalculateMessageType() && !message.isDeleted
 
+    private val isOlderThanTwentyFourHours = message.createdAt.before(
+        Date(
+            System.currentTimeMillis() -
+                AGE_THRESHOLD_FOR_EDIT_MESSAGE
+        )
+    )
+
+    private val isUserAllowedToEdit = chatActivity.userAllowedByPrivilages(message)
+
     private val isMessageEditable = CapabilitiesUtilNew.hasSpreedFeatureCapability(
         user,
         "edit-messages"
-    ) && !message.isDeleted
+    ) && messageHasRegularText && !isOlderThanTwentyFourHours && isUserAllowedToEdit
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -138,7 +148,7 @@ class MessageActionsDialog(
                 ChatMessage.MessageType.REGULAR_TEXT_MESSAGE == message.getCalculateMessageType() &&
                 CapabilitiesUtilNew.isTranslationsSupported(user)
         )
-        initMenuEditorDetails(message.lastEditTimestamp != 0L && isMessageEditable)
+        initMenuEditorDetails(message.lastEditTimestamp != 0L && !message.isDeleted)
         initMenuReplyToMessage(message.replyable && hasChatPermission)
         initMenuReplyPrivately(
             message.replyable &&
@@ -366,7 +376,7 @@ class MessageActionsDialog(
     private fun initMenuEditorDetails(showEditorDetails: Boolean) {
         if (showEditorDetails) {
             val editedTime = dateUtils.getLocalTimeStringFromTimestamp(message.lastEditTimestamp)
-            val editorName = "Edited by " + message.lastEditActorDisplayName
+            val editorName = context.getString(R.string.nc_edited_by) + message.lastEditActorDisplayName
             dialogMessageActionsBinding.editorName.setText(editorName)
             dialogMessageActionsBinding.editedTime.setText(editedTime)
         }
@@ -515,5 +525,6 @@ class MessageActionsDialog(
         private const val ACTOR_LENGTH = 6
         private const val NO_PREVIOUS_MESSAGE_ID: Int = -1
         private const val DELAY: Long = 200
+        private const val AGE_THRESHOLD_FOR_EDIT_MESSAGE: Long = 86400000
     }
 }

+ 37 - 34
app/src/main/res/layout/dialog_message_actions.xml

@@ -146,6 +146,8 @@
                 tools:text="@string/nc_edited_by_admin"
                 android:textAlignment="viewStart"
                 android:textColor="@color/high_emphasis_text"
+                android:maxLines="1"
+                android:ellipsize="end"
                 android:textSize="@dimen/bottom_sheet_text_size" />
 
             <TextView
@@ -195,40 +197,6 @@
 
         </LinearLayout>
 
-
-        <LinearLayout
-            android:id="@+id/menu_edit_message"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/bottom_sheet_item_height"
-            android:background="?android:attr/selectableItemBackground"
-            android:gravity="center_vertical"
-            android:orientation="horizontal"
-            tools:ignore="UseCompoundDrawables">
-
-            <ImageView
-                android:id="@+id/menu_icon_edit_message"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:contentDescription="@string/edit_message_icon_description"
-                android:paddingStart="@dimen/standard_padding"
-                android:paddingEnd="@dimen/zero"
-                android:src="@drawable/ic_edit_24"
-                app:tint="@color/high_emphasis_menu_icon" />
-
-            <androidx.appcompat.widget.AppCompatTextView
-                android:id="@+id/menu_text_edit_message"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_gravity="start|center_vertical"
-                android:paddingStart="@dimen/standard_double_padding"
-                android:paddingEnd="@dimen/standard_padding"
-                android:text="@string/nc_edit_message"
-                android:textAlignment="viewStart"
-                android:textColor="@color/high_emphasis_text"
-                android:textSize="@dimen/bottom_sheet_text_size" />
-
-        </LinearLayout>
-
         <LinearLayout
             android:id="@+id/menu_reply_privately"
             android:layout_width="match_parent"
@@ -526,6 +494,41 @@
 
         </LinearLayout>
 
+
+
+        <LinearLayout
+            android:id="@+id/menu_edit_message"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/bottom_sheet_item_height"
+            android:background="?android:attr/selectableItemBackground"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            tools:ignore="UseCompoundDrawables">
+
+            <ImageView
+                android:id="@+id/menu_icon_edit_message"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:contentDescription="@string/edit_message_icon_description"
+                android:paddingStart="@dimen/standard_padding"
+                android:paddingEnd="@dimen/zero"
+                android:src="@drawable/ic_edit_24"
+                app:tint="@color/high_emphasis_menu_icon" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/menu_text_edit_message"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_gravity="start|center_vertical"
+                android:paddingStart="@dimen/standard_double_padding"
+                android:paddingEnd="@dimen/standard_padding"
+                android:text="@string/nc_edit_message"
+                android:textAlignment="viewStart"
+                android:textColor="@color/high_emphasis_text"
+                android:textSize="@dimen/bottom_sheet_text_size" />
+
+        </LinearLayout>
+
         <LinearLayout
             android:id="@+id/menu_delete_message"
             android:layout_width="match_parent"

+ 3 - 3
app/src/main/res/layout/edit_message_view.xml

@@ -17,7 +17,7 @@
         android:padding = "12dp"
         android:src = "@drawable/ic_edit_24"
         android:layout_gravity = "start|top"
-        app:tint="@color/colorPrimaryDark">
+        app:tint="@color/grey_600">
 
     </ImageView>
 
@@ -30,7 +30,7 @@
             android:id = "@+id/editMessageTitle"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textColor = "@color/colorPrimaryDark"
+            android:textColor = "@color/grey_600"
             android:text = "@string/nc_edit_message_text">
 
         </TextView>
@@ -50,7 +50,7 @@
         android:id = "@+id/clearEdit"
         android:layout_width="48dp"
         android:layout_height="48dp"
-        android:padding = "8dp"
+        android:padding = "12dp"
         android:src = "@drawable/ic_clear_24"
         android:gravity = "top|end"
         app:tint="@color/colorPrimaryDark">

+ 12 - 12
app/src/main/res/layout/item_custom_incoming_text_message.xml

@@ -79,32 +79,32 @@
             tools:text="Talk to you later!" />
 
         <TextView
-            android:id="@+id/messageType"
+            android:id="@id/messageTime"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_below="@id/messageText"
             android:layout_marginStart="8dp"
-            android:text="@string/hint_edited_message"
+            android:alpha="0.6"
+            android:textColor="@color/no_emphasis_text"
+            android:textIsSelectable="false"
+            android:gravity = "end"
             app:layout_alignSelf="center"
             app:layout_flexGrow="1"
-            app:layout_wrapBefore="false">
+            app:layout_wrapBefore="false"
+            tools:text="12:38" />
 
-        </TextView>
 
         <TextView
-            android:id="@id/messageTime"
+            android:id="@+id/messageType"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_below="@id/messageText"
             android:layout_marginStart="8dp"
-            android:alpha="0.6"
-            android:gravity="end"
-            android:textColor="@color/no_emphasis_text"
-            android:textIsSelectable="false"
             app:layout_alignSelf="center"
-            app:layout_flexGrow="1"
-            app:layout_wrapBefore="false"
-            tools:text="12:38" />
+            android:text = "@string/hint_edited_message"
+            android:textSize="12sp">
+
+        </TextView>
 
         <include
             android:id="@+id/reactions"

+ 14 - 13
app/src/main/res/layout/item_custom_outcoming_text_message.xml

@@ -58,19 +58,6 @@
             tools:text="Talk to you later!" />
 
 
-        <TextView
-            android:id="@+id/messageType"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_below="@id/messageText"
-            android:layout_marginStart="8dp"
-            app:layout_alignSelf="center"
-            app:layout_flexGrow="1"
-            app:layout_wrapBefore="false"
-            android:text = "@string/hint_edited_message">
-
-        </TextView>
-
         <TextView
             android:id="@id/messageTime"
             android:layout_width="wrap_content"
@@ -97,6 +84,20 @@
             app:layout_alignSelf="center"
             app:tint="@color/high_emphasis_text" />
 
+
+
+        <TextView
+            android:id="@+id/messageType"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/messageText"
+            android:layout_marginStart="8dp"
+            app:layout_alignSelf="center"
+            android:text = "@string/hint_edited_message"
+            android:textSize="12sp">
+
+        </TextView>
+
         <include
             android:id="@+id/reactions"
             layout="@layout/reactions_inside_message" />

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -797,4 +797,5 @@ How to translate with transifex:
     <string name="nc_conversation_not_found">Conversation not found</string>
     <string name="add_to_notes">Add to Notes</string>
     <string name="nc_edited_by_admin">Edited by admin</string>
+    <string name="nc_edited_by">"Edited by "</string>
 </resources>