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

Optimize scroll-to-bottom
This commit is contained in:
Marcel Hibbe 2023-02-08 15:58:50 +01:00 committed by GitHub
commit ee9407588f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 45 additions and 30 deletions

View File

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

View File

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

View File

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

View File

@ -76,8 +76,4 @@
<color name="dialog_background">#353535</color> <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> </resources>

View File

@ -102,10 +102,6 @@
<color name="list_divider_background">#1F121212</color> <color name="list_divider_background">#1F121212</color>
<color name="grey_200">#EEEEEE</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 <!-- 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 --> possible?! don't use this to set the background of dialogs -->
<color name="dialog_background">#FFFFFF</color> <color name="dialog_background">#FFFFFF</color>

View File

@ -163,6 +163,16 @@
<item name="iconPadding">0dp</item> <item name="iconPadding">0dp</item>
</style> </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"> <style name="Button.Borderless" parent="Widget.Material3.Button.TextButton">
<item name="android:textColor">@drawable/borderless_btn</item> <item name="android:textColor">@drawable/borderless_btn</item>
<item name="android:textAllCaps">false</item> <item name="android:textAllCaps">false</item>