浏览代码

Merge pull request #2741 from nextcloud/feature/noid/optimzeScrollToBottom

Optimize scroll-to-bottom
Marcel Hibbe 2 年之前
父节点
当前提交
ee9407588f

+ 4 - 2
app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt

@@ -673,7 +673,8 @@ class ChatController(args: Bundle) :
             }
         }
 
-        binding?.scrollDownButton?.setOnClickListener { binding?.messagesListView?.smoothScrollToPosition(0) }
+        binding?.scrollDownButton?.setOnClickListener { binding?.messagesListView?.scrollToPosition(0) }
+        binding?.let { viewThemeUtils.material.colorMaterialButtonPrimaryTonal(it.scrollDownButton) }
 
         binding?.let { viewThemeUtils.material.colorMaterialButtonPrimaryFilled(it.popupBubbleView) }
 
@@ -688,7 +689,7 @@ class ChatController(args: Bundle) :
                     if (layoutManager!!.findFirstCompletelyVisibleItemPosition() > 0) {
                         binding?.scrollDownButton?.visibility = View.VISIBLE
                     } else {
-                        binding?.scrollDownButton?.visibility = View.INVISIBLE
+                        binding?.scrollDownButton?.visibility = View.GONE
                     }
 
                     if (newMessagesCount != 0 && layoutManager != null) {
@@ -2445,6 +2446,7 @@ class ChatController(args: Bundle) :
         if (!shouldAddNewMessagesNotice && !shouldScroll) {
             if (!binding?.popupBubbleView?.isShown!!) {
                 newMessagesCount = 1
+                binding?.scrollDownButton?.visibility = View.GONE
                 binding?.popupBubbleView?.show()
             } else if (binding?.popupBubbleView?.isShown!!) {
                 newMessagesCount++

+ 12 - 7
app/src/main/res/drawable/ic_baseline_keyboard_double_arrow_down_24.xml → app/src/main/res/drawable/ic_keyboard_double_arrow_down.xml

@@ -1,21 +1,26 @@
 <!--
     @author Google LLC
     Copyright (C) 2023 Google LLC
+
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
+
     http://www.apache.org/licenses/LICENSE-2.0
+
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-<vector android:height="24dp" android:tint="#000"
-    android:viewportHeight="24" android:viewportWidth="24"
-    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="@android:color/black"
-        android:pathData="M18,6.41l-1.41,-1.41l-4.59,4.58l-4.59,-4.58l-1.41,1.41l6,6z"/>
-    <path android:fillColor="@android:color/black"
-        android:pathData="M18,13l-1.41,-1.41l-4.59,4.58l-4.59,-4.58l-1.41,1.41l6,6z"/>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="?attr/colorControlNormal"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,19.275 L5.8,13.1 7.4,11.5 12,16.075 16.6,11.5 18.2,13.1ZM12,13.1 L5.8,6.9 7.4,5.325 12,9.9 16.6,5.325 18.2,6.9Z" />
 </vector>

+ 19 - 13
app/src/main/res/layout/controller_chat.xml

@@ -76,8 +76,8 @@
             app:incomingImageTimeTextSize="12sp"
             app:incomingTextColor="@color/nc_incoming_text_default"
             app:incomingTextLinkColor="@color/nc_incoming_text_default"
-            app:incomingTimeTextColor="@color/no_emphasis_text"
             app:incomingTextSize="@dimen/chat_text_size"
+            app:incomingTimeTextColor="@color/no_emphasis_text"
             app:incomingTimeTextSize="12sp"
             app:outcomingBubblePaddingBottom="@dimen/message_bubble_corners_vertical_padding"
             app:outcomingBubblePaddingLeft="@dimen/message_bubble_corners_horizontal_padding"
@@ -100,30 +100,36 @@
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
             android:layout_centerHorizontal="true"
-            android:layout_marginStart="@dimen/dialog_padding"
+            android:layout_marginStart="64dp"
             android:layout_marginTop="16dp"
-            android:layout_marginEnd="@dimen/dialog_padding"
+            android:layout_marginEnd="64dp"
             android:layout_marginBottom="16dp"
             android:minHeight="@dimen/min_size_clickable_area"
+            android:layout_toStartOf="@+id/scrollDownButton"
             android:text="@string/nc_new_messages"
             app:background="@color/colorPrimary"
+            android:ellipsize="middle"
             app:cornerRadius="@dimen/button_corner_radius"
             app:icon="@drawable/ic_baseline_arrow_downward_24px" />
 
-        <ImageButton
+        <com.google.android.material.button.MaterialButton
             android:id="@+id/scrollDownButton"
-            android:layout_width="44dp"
-            android:layout_height="44dp"
+            style="@style/Widget.AppTheme.Button.ElevatedButton"
+            android:layout_width="@dimen/min_size_clickable_area"
+            android:layout_height="@dimen/min_size_clickable_area"
             android:layout_alignParentEnd="true"
             android:layout_alignParentBottom="true"
-            android:layout_marginEnd="6dp"
-            android:layout_marginBottom="16dp"
-            android:background="@drawable/shape_oval"
-            android:backgroundTint="@color/scroll_down_chat_button"
+            android:layout_centerHorizontal="true"
+            android:layout_marginEnd="@dimen/standard_margin"
+            android:layout_marginBottom="@dimen/standard_margin"
             android:contentDescription="@string/scroll_to_bottom"
-            android:src="@drawable/ic_baseline_keyboard_double_arrow_down_24"
-            android:visibility="invisible"
-            app:tint="@color/scroll_down_chat_button_icon" />
+            android:paddingStart="@dimen/standard_padding"
+            android:paddingEnd="@dimen/standard_padding"
+            android:visibility="gone"
+            app:cornerRadius="@dimen/button_corner_radius"
+            app:icon="@drawable/ic_keyboard_double_arrow_down"
+            app:iconPadding="0dp"
+            app:iconSize="24dp" />
 
     </RelativeLayout>
 

+ 0 - 4
app/src/main/res/values-night/colors.xml

@@ -76,8 +76,4 @@
 
     <color name="dialog_background">#353535</color>
 
-    <!-- scroll down chat button  -->
-    <color name="scroll_down_chat_button">#141F25</color>
-    <color name="scroll_down_chat_button_icon">#99C3DA</color>
-
 </resources>

+ 0 - 4
app/src/main/res/values/colors.xml

@@ -102,10 +102,6 @@
     <color name="list_divider_background">#1F121212</color>
     <color name="grey_200">#EEEEEE</color>
 
-    <!-- scroll down chat button  -->
-    <color name="scroll_down_chat_button">#E5F0F5</color>
-    <color name="scroll_down_chat_button_icon">#002A41</color>
-
     <!-- this is just a helper for status icon background because getting the background color of a dialog is not
     possible?! don't use this to set the background of dialogs -->
     <color name="dialog_background">#FFFFFF</color>

+ 10 - 0
app/src/main/res/values/styles.xml

@@ -163,6 +163,16 @@
         <item name="iconPadding">0dp</item>
     </style>
 
+    <style name="Widget.AppTheme.Button.ElevatedButton" parent="Widget.Material3.Button.ElevatedButton">
+        <item name="android:minWidth">0dp</item>
+        <item name="android:insetLeft">0dp</item>
+        <item name="android:insetTop">0dp</item>
+        <item name="android:insetRight">0dp</item>
+        <item name="android:insetBottom">0dp</item>
+        <item name="iconGravity">textStart</item>
+        <item name="iconPadding">0dp</item>
+    </style>
+
     <style name="Button.Borderless" parent="Widget.Material3.Button.TextButton">
         <item name="android:textColor">@drawable/borderless_btn</item>
         <item name="android:textAllCaps">false</item>