From b5c6f60ee61c5c38bdd63d47583539d3c330f534 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Tue, 13 Sep 2022 16:35:30 +0300 Subject: [PATCH] Scroll to top on filter type changed. --- .../v2/VectorSettingsDevicesFragment.kt | 6 ++++- .../devices/v2/list/OtherSessionsView.kt | 22 +++++++++++++++++-- .../v2/othersessions/OtherSessionsFragment.kt | 2 +- .../res/layout/fragment_other_sessions.xml | 7 +++--- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt index 33c0a7ca74..ab918312a5 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt @@ -199,7 +199,11 @@ class VectorSettingsDevicesFragment : } else { views.deviceListHeaderOtherSessions.isVisible = true views.deviceListOtherSessions.isVisible = true - views.deviceListOtherSessions.render(otherDevices.take(NUMBER_OF_OTHER_DEVICES_TO_RENDER), otherDevices.size) + views.deviceListOtherSessions.render( + devices = otherDevices.take(NUMBER_OF_OTHER_DEVICES_TO_RENDER), + totalNumberOfDevices = otherDevices.size, + showViewAll = otherDevices.size > NUMBER_OF_OTHER_DEVICES_TO_RENDER + ) } } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsView.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsView.kt index c6eccc94b6..865bc5d209 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsView.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsView.kt @@ -19,6 +19,8 @@ package im.vector.app.features.settings.devices.v2.list import android.content.Context import android.util.AttributeSet import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint import im.vector.app.R import im.vector.app.core.extensions.cleanup @@ -42,8 +44,10 @@ class OtherSessionsView @JvmOverloads constructor( @Inject lateinit var otherSessionsController: OtherSessionsController private val views: ViewOtherSessionsBinding + private val recyclerViewDataObserver: RecyclerView.AdapterDataObserver var callback: Callback? = null + init { inflate(context, R.layout.view_other_sessions, this) views = ViewOtherSessionsBinding.bind(this) @@ -53,16 +57,30 @@ class OtherSessionsView @JvmOverloads constructor( views.otherSessionsViewAllButton.setOnClickListener { callback?.onViewAllOtherSessionsClicked() } + + recyclerViewDataObserver = object : RecyclerView.AdapterDataObserver() { + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { + super.onItemRangeInserted(positionStart, itemCount) + views.otherSessionsRecyclerView.scrollToPosition(0) + } + } + otherSessionsController.adapter.registerAdapterDataObserver(recyclerViewDataObserver) } - fun render(devices: List, totalNumberOfDevices: Int) { + fun render(devices: List, totalNumberOfDevices: Int, showViewAll: Boolean) { views.otherSessionsRecyclerView.configureWith(otherSessionsController, hasFixedSize = true) - views.otherSessionsViewAllButton.text = context.getString(R.string.device_manager_other_sessions_view_all, totalNumberOfDevices) + if (showViewAll) { + views.otherSessionsViewAllButton.isVisible = true + views.otherSessionsViewAllButton.text = context.getString(R.string.device_manager_other_sessions_view_all, totalNumberOfDevices) + } else { + views.otherSessionsViewAllButton.isVisible = false + } otherSessionsController.setData(devices) } override fun onDetachedFromWindow() { otherSessionsController.callback = null + otherSessionsController.adapter.unregisterAdapterDataObserver(recyclerViewDataObserver) views.otherSessionsRecyclerView.cleanup() super.onDetachedFromWindow() } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt index 3c24c466ca..b582d7952c 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt @@ -147,7 +147,7 @@ class OtherSessionsFragment : } else { views.deviceListOtherSessions.isVisible = true views.otherSessionsNotFoundLayout.isVisible = false - views.deviceListOtherSessions.render(devices, devices.size) + views.deviceListOtherSessions.render(devices = devices, totalNumberOfDevices = devices.size, showViewAll = false) } } diff --git a/vector/src/main/res/layout/fragment_other_sessions.xml b/vector/src/main/res/layout/fragment_other_sessions.xml index a6181d05f5..df2bf0cce4 100644 --- a/vector/src/main/res/layout/fragment_other_sessions.xml +++ b/vector/src/main/res/layout/fragment_other_sessions.xml @@ -25,8 +25,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end" - android:padding="8dp" - android:layout_marginEnd="8dp"> + android:layout_marginEnd="8dp" + android:padding="8dp">