Enable selectMode when long pressing on list item

This commit is contained in:
Maxime NATUREL 2022-10-18 17:06:39 +02:00
parent 2e155b1acc
commit ab2e91ae80
5 changed files with 26 additions and 1 deletions

View File

@ -331,6 +331,10 @@ class VectorSettingsDevicesFragment :
views.waitingView.root.isVisible = isLoading views.waitingView.root.isVisible = isLoading
} }
override fun onOtherSessionLongClicked(deviceId: String) {
// do nothing
}
override fun onOtherSessionClicked(deviceId: String) { override fun onOtherSessionClicked(deviceId: String) {
navigateToSessionOverview(deviceId) navigateToSessionOverview(deviceId)
} }

View File

@ -17,6 +17,7 @@
package im.vector.app.features.settings.devices.v2.list package im.vector.app.features.settings.devices.v2.list
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.view.View.OnLongClickListener
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
@ -59,11 +60,15 @@ abstract class OtherSessionItem : VectorEpoxyModel<OtherSessionItem.Holder>(R.la
@EpoxyAttribute(EpoxyAttribute.Option.DoNotHash) @EpoxyAttribute(EpoxyAttribute.Option.DoNotHash)
var clickListener: ClickListener? = null var clickListener: ClickListener? = null
@EpoxyAttribute(EpoxyAttribute.Option.DoNotHash)
var onLongClickListener: OnLongClickListener? = null
private val setDeviceTypeIconUseCase = SetDeviceTypeIconUseCase() private val setDeviceTypeIconUseCase = SetDeviceTypeIconUseCase()
override fun bind(holder: Holder) { override fun bind(holder: Holder) {
super.bind(holder) super.bind(holder)
holder.view.onClick(clickListener) holder.view.onClick(clickListener)
holder.view.setOnLongClickListener(onLongClickListener)
if (clickListener == null) { if (clickListener == null) {
holder.view.isClickable = false holder.view.isClickable = false
} }

View File

@ -16,6 +16,7 @@
package im.vector.app.features.settings.devices.v2.list package im.vector.app.features.settings.devices.v2.list
import android.view.View
import com.airbnb.epoxy.TypedEpoxyController import com.airbnb.epoxy.TypedEpoxyController
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.date.DateFormatKind import im.vector.app.core.date.DateFormatKind
@ -38,6 +39,7 @@ class OtherSessionsController @Inject constructor(
var callback: Callback? = null var callback: Callback? = null
interface Callback { interface Callback {
fun onItemLongClicked(deviceId: String)
fun onItemClicked(deviceId: String) fun onItemClicked(deviceId: String)
} }
@ -72,6 +74,10 @@ class OtherSessionsController @Inject constructor(
sessionDescriptionColor(descriptionColor) sessionDescriptionColor(descriptionColor)
stringProvider(this@OtherSessionsController.stringProvider) stringProvider(this@OtherSessionsController.stringProvider)
clickListener { device.deviceInfo.deviceId?.let { host.callback?.onItemClicked(it) } } clickListener { device.deviceInfo.deviceId?.let { host.callback?.onItemClicked(it) } }
onLongClickListener(View.OnLongClickListener {
device.deviceInfo.deviceId?.let { host.callback?.onItemLongClicked(it) }
true
})
} }
} }
} }

View File

@ -40,6 +40,7 @@ class OtherSessionsView @JvmOverloads constructor(
) : ConstraintLayout(context, attrs, defStyleAttr), OtherSessionsController.Callback { ) : ConstraintLayout(context, attrs, defStyleAttr), OtherSessionsController.Callback {
interface Callback { interface Callback {
fun onOtherSessionLongClicked(deviceId: String)
fun onOtherSessionClicked(deviceId: String) fun onOtherSessionClicked(deviceId: String)
fun onViewAllOtherSessionsClicked() fun onViewAllOtherSessionsClicked()
} }
@ -107,4 +108,8 @@ class OtherSessionsView @JvmOverloads constructor(
override fun onItemClicked(deviceId: String) { override fun onItemClicked(deviceId: String) {
callback?.onOtherSessionClicked(deviceId) callback?.onOtherSessionClicked(deviceId)
} }
override fun onItemLongClicked(deviceId: String) {
callback?.onOtherSessionLongClicked(deviceId)
}
} }

View File

@ -89,7 +89,6 @@ class OtherSessionsFragment :
} }
} }
// TODO call enableSelectMode(true) on long press of an item when disabled
private fun enableSelectMode(isEnabled: Boolean) { private fun enableSelectMode(isEnabled: Boolean) {
val action = if (isEnabled) OtherSessionsAction.EnableSelectMode else OtherSessionsAction.DisableSelectMode val action = if (isEnabled) OtherSessionsAction.EnableSelectMode else OtherSessionsAction.DisableSelectMode
viewModel.handle(action) viewModel.handle(action)
@ -253,6 +252,12 @@ class OtherSessionsFragment :
SessionLearnMoreBottomSheet.show(childFragmentManager, args) SessionLearnMoreBottomSheet.show(childFragmentManager, args)
} }
override fun onOtherSessionLongClicked(deviceId: String) = withState(viewModel) { state ->
if (!state.isSelectModeEnabled) {
enableSelectMode(true)
}
}
override fun onOtherSessionClicked(deviceId: String) { override fun onOtherSessionClicked(deviceId: String) {
viewNavigator.navigateToSessionOverview( viewNavigator.navigateToSessionOverview(
context = requireActivity(), context = requireActivity(),