From ab2e91ae80fd33c12eef06e0ae9a88acf2b346e2 Mon Sep 17 00:00:00 2001 From: Maxime NATUREL Date: Tue, 18 Oct 2022 17:06:39 +0200 Subject: [PATCH] Enable selectMode when long pressing on list item --- .../settings/devices/v2/VectorSettingsDevicesFragment.kt | 4 ++++ .../features/settings/devices/v2/list/OtherSessionItem.kt | 5 +++++ .../settings/devices/v2/list/OtherSessionsController.kt | 6 ++++++ .../features/settings/devices/v2/list/OtherSessionsView.kt | 5 +++++ .../devices/v2/othersessions/OtherSessionsFragment.kt | 7 ++++++- 5 files changed, 26 insertions(+), 1 deletion(-) 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 c507699e0b..1c348af4f9 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 @@ -331,6 +331,10 @@ class VectorSettingsDevicesFragment : views.waitingView.root.isVisible = isLoading } + override fun onOtherSessionLongClicked(deviceId: String) { + // do nothing + } + override fun onOtherSessionClicked(deviceId: String) { navigateToSessionOverview(deviceId) } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionItem.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionItem.kt index f83f069a9f..6397a42f7f 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionItem.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionItem.kt @@ -17,6 +17,7 @@ package im.vector.app.features.settings.devices.v2.list import android.graphics.drawable.Drawable +import android.view.View.OnLongClickListener import android.widget.ImageView import android.widget.TextView import androidx.annotation.ColorInt @@ -59,11 +60,15 @@ abstract class OtherSessionItem : VectorEpoxyModel(R.la @EpoxyAttribute(EpoxyAttribute.Option.DoNotHash) var clickListener: ClickListener? = null + @EpoxyAttribute(EpoxyAttribute.Option.DoNotHash) + var onLongClickListener: OnLongClickListener? = null + private val setDeviceTypeIconUseCase = SetDeviceTypeIconUseCase() override fun bind(holder: Holder) { super.bind(holder) holder.view.onClick(clickListener) + holder.view.setOnLongClickListener(onLongClickListener) if (clickListener == null) { holder.view.isClickable = false } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsController.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsController.kt index 59e7e1888e..d7166d02d2 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsController.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/list/OtherSessionsController.kt @@ -16,6 +16,7 @@ package im.vector.app.features.settings.devices.v2.list +import android.view.View import com.airbnb.epoxy.TypedEpoxyController import im.vector.app.R import im.vector.app.core.date.DateFormatKind @@ -38,6 +39,7 @@ class OtherSessionsController @Inject constructor( var callback: Callback? = null interface Callback { + fun onItemLongClicked(deviceId: String) fun onItemClicked(deviceId: String) } @@ -72,6 +74,10 @@ class OtherSessionsController @Inject constructor( sessionDescriptionColor(descriptionColor) stringProvider(this@OtherSessionsController.stringProvider) clickListener { device.deviceInfo.deviceId?.let { host.callback?.onItemClicked(it) } } + onLongClickListener(View.OnLongClickListener { + device.deviceInfo.deviceId?.let { host.callback?.onItemLongClicked(it) } + true + }) } } } 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 6f6956c885..a4f8bb64db 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 @@ -40,6 +40,7 @@ class OtherSessionsView @JvmOverloads constructor( ) : ConstraintLayout(context, attrs, defStyleAttr), OtherSessionsController.Callback { interface Callback { + fun onOtherSessionLongClicked(deviceId: String) fun onOtherSessionClicked(deviceId: String) fun onViewAllOtherSessionsClicked() } @@ -107,4 +108,8 @@ class OtherSessionsView @JvmOverloads constructor( override fun onItemClicked(deviceId: String) { callback?.onOtherSessionClicked(deviceId) } + + override fun onItemLongClicked(deviceId: String) { + callback?.onOtherSessionLongClicked(deviceId) + } } 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 804344e00e..77aac4d91d 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 @@ -89,7 +89,6 @@ class OtherSessionsFragment : } } - // TODO call enableSelectMode(true) on long press of an item when disabled private fun enableSelectMode(isEnabled: Boolean) { val action = if (isEnabled) OtherSessionsAction.EnableSelectMode else OtherSessionsAction.DisableSelectMode viewModel.handle(action) @@ -253,6 +252,12 @@ class OtherSessionsFragment : SessionLearnMoreBottomSheet.show(childFragmentManager, args) } + override fun onOtherSessionLongClicked(deviceId: String) = withState(viewModel) { state -> + if (!state.isSelectModeEnabled) { + enableSelectMode(true) + } + } + override fun onOtherSessionClicked(deviceId: String) { viewNavigator.navigateToSessionOverview( context = requireActivity(),