From 8bde38939847ec417ce9406d530a5e5f67de6e2f Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 23 Jul 2021 16:59:34 -0300 Subject: [PATCH] Scroll to selected on state change. --- .../securesms/avatar/picker/AvatarPickerFragment.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/avatar/picker/AvatarPickerFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/avatar/picker/AvatarPickerFragment.kt index 2fd3babe78..6651a5b9fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/avatar/picker/AvatarPickerFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/avatar/picker/AvatarPickerFragment.kt @@ -47,6 +47,8 @@ class AvatarPickerFragment : Fragment(R.layout.avatar_picker_fragment) { private val viewModel: AvatarPickerViewModel by viewModels(factoryProducer = this::createFactory) + private lateinit var recycler: RecyclerView + private fun createFactory(): AvatarPickerViewModel.Factory { val args = AvatarPickerFragmentArgs.fromBundle(requireArguments()) val groupId = ParcelableGroupId.get(args.groupId) @@ -56,13 +58,13 @@ class AvatarPickerFragment : Fragment(R.layout.avatar_picker_fragment) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val toolbar: Toolbar = view.findViewById(R.id.avatar_picker_toolbar) - val recycler: RecyclerView = view.findViewById(R.id.avatar_picker_recycler) val cameraButton: ButtonStripItemView = view.findViewById(R.id.avatar_picker_camera) val photoButton: ButtonStripItemView = view.findViewById(R.id.avatar_picker_photo) val textButton: ButtonStripItemView = view.findViewById(R.id.avatar_picker_text) val saveButton: View = view.findViewById(R.id.avatar_picker_save) val clearButton: View = view.findViewById(R.id.avatar_picker_clear) + recycler = view.findViewById(R.id.avatar_picker_recycler) recycler.addItemDecoration(GridDividerDecoration(4, ViewUtil.dpToPx(16))) val adapter = MappingAdapter() @@ -87,7 +89,13 @@ class AvatarPickerFragment : Fragment(R.layout.avatar_picker_fragment) { saveButton.animate().alpha(alpha) } - adapter.submitList(state.selectableAvatars.map { AvatarPickerItem.Model(it, it == state.currentAvatar) }) + val items = state.selectableAvatars.map { AvatarPickerItem.Model(it, it == state.currentAvatar) } + val selectedPosition = items.indexOfFirst { it.isSelected } + + adapter.submitList(items) { + if (selectedPosition > -1) + recycler.smoothScrollToPosition(selectedPosition) + } } toolbar.setNavigationOnClickListener { Navigation.findNavController(it).popBackStack() }