mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-18 20:08:08 +00:00
Added button to scroll to bottom
This commit is contained in:
parent
4ac3649c90
commit
25c2cfc84e
4 changed files with 37 additions and 5 deletions
|
|
@ -103,8 +103,6 @@ class ConversationFragment : SlidingPaneChildFragment() {
|
|||
|
||||
private val args: ConversationFragmentArgs by navArgs()
|
||||
|
||||
private var isUserScrollingUp: Boolean = false
|
||||
|
||||
private val pickMedia = registerForActivityResult(
|
||||
ActivityResultContracts.PickMultipleVisualMedia()
|
||||
) { list ->
|
||||
|
|
@ -367,6 +365,10 @@ class ConversationFragment : SlidingPaneChildFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
binding.setScrollToBottomClickListener {
|
||||
scrollToFirstUnreadMessageOrBottom(true)
|
||||
}
|
||||
|
||||
sendMessageViewModel.emojiToAddEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { emoji ->
|
||||
binding.sendArea.messageToSend.addCharacterAtPosition(emoji)
|
||||
|
|
@ -518,7 +520,7 @@ class ConversationFragment : SlidingPaneChildFragment() {
|
|||
sendMessageViewModel.isEmojiPickerOpen.value = false
|
||||
|
||||
// Scroll to bottom if was already at the bottom
|
||||
if (!isUserScrollingUp) {
|
||||
if (viewModel.isUserScrollingUp.value == false) {
|
||||
binding.eventsList.scrollToPosition(adapter.itemCount - 1)
|
||||
}
|
||||
}
|
||||
|
|
@ -527,7 +529,7 @@ class ConversationFragment : SlidingPaneChildFragment() {
|
|||
binding.eventsList.addOnScrollListener(object : OnScrollListener() {
|
||||
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||
val layoutManager = binding.eventsList.layoutManager as LinearLayoutManager
|
||||
isUserScrollingUp = layoutManager.findLastCompletelyVisibleItemPosition() != adapter.itemCount - 1
|
||||
viewModel.isUserScrollingUp.value = layoutManager.findLastCompletelyVisibleItemPosition() != adapter.itemCount - 1
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -575,7 +577,7 @@ class ConversationFragment : SlidingPaneChildFragment() {
|
|||
coreContext.notificationsManager.resetCurrentlyDisplayedChatRoomId()
|
||||
|
||||
val layoutManager = binding.eventsList.layoutManager as LinearLayoutManager
|
||||
viewModel.scrollingPosition = layoutManager.findFirstVisibleItemPosition()
|
||||
viewModel.scrollingPosition = layoutManager.findFirstCompletelyVisibleItemPosition()
|
||||
|
||||
val bottomSheetBehavior = BottomSheetBehavior.from(binding.messageBottomSheet.root)
|
||||
bottomSheetBehavior.removeBottomSheetCallback(bottomSheetCallback)
|
||||
|
|
|
|||
|
|
@ -67,6 +67,8 @@ class ConversationViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
val searchFilter = MutableLiveData<String>()
|
||||
|
||||
val isUserScrollingUp = MutableLiveData<Boolean>()
|
||||
|
||||
var scrollingPosition: Int = SCROLLING_POSITION_NOT_SET
|
||||
|
||||
val focusSearchBarEvent: MutableLiveData<Event<Boolean>> by lazy {
|
||||
|
|
@ -233,6 +235,7 @@ class ConversationViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
init {
|
||||
searchBarVisible.value = false
|
||||
isUserScrollingUp.value = false
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
|
|
|
|||
9
app/src/main/res/drawable/caret_double_down.xml
Normal file
9
app/src/main/res/drawable/caret_double_down.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="256"
|
||||
android:viewportHeight="256">
|
||||
<path
|
||||
android:pathData="M213.66,122.34a8,8 0,0 1,0 11.32l-80,80a8,8 0,0 1,-11.32 0l-80,-80a8,8 0,0 1,11.32 -11.32L128,196.69l74.34,-74.35A8,8 0,0 1,213.66 122.34ZM122.34,133.66a8,8 0,0 0,11.32 0l80,-80a8,8 0,0 0,-11.32 -11.32L128,116.69 53.66,42.34A8,8 0,0 0,42.34 53.66Z"
|
||||
android:fillColor="#4e6074"/>
|
||||
</vector>
|
||||
|
|
@ -22,6 +22,9 @@
|
|||
<variable
|
||||
name="openFilePickerClickListener"
|
||||
type="View.OnClickListener" />
|
||||
<variable
|
||||
name="scrollToBottomClickListener"
|
||||
type="View.OnClickListener" />
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="org.linphone.ui.main.chat.viewmodel.ConversationViewModel" />
|
||||
|
|
@ -239,6 +242,21 @@
|
|||
bind:openFilePickerClickListener="@{openFilePickerClickListener}"
|
||||
bind:viewModel="@{sendMessageViewModel}"/>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/scroll_to_bottom"
|
||||
android:onClick="@{scrollToBottomClickListener}"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end|bottom"
|
||||
android:layout_margin="16dp"
|
||||
android:src="@drawable/caret_double_down"
|
||||
android:visibility="@{viewModel.isUserScrollingUp ? View.VISIBLE : View.GONE}"
|
||||
app:tint="?attr/color_main2_700"
|
||||
app:backgroundTint="?attr/color_main2_000"
|
||||
app:shapeAppearanceOverlay="@style/rounded"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@id/send_area" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<include
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue