From 4963025150c5ecb2eb527d111463a16a6f2265ae Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Jul 2021 11:35:59 +0200 Subject: [PATCH 1/2] Decorelate interfaces for code clarity --- .../room/filtered/FilteredRoomFooterItem.kt | 7 ++-- .../home/room/list/RoomListFragment.kt | 40 ++++++++++++------- .../room/list/widget/NotifsFabMenuView.kt | 8 ++-- 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/filtered/FilteredRoomFooterItem.kt b/vector/src/main/java/im/vector/app/features/home/room/filtered/FilteredRoomFooterItem.kt index 9c28faa942..5e45004579 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/filtered/FilteredRoomFooterItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/filtered/FilteredRoomFooterItem.kt @@ -23,13 +23,12 @@ import im.vector.app.R import im.vector.app.core.epoxy.VectorEpoxyHolder import im.vector.app.core.epoxy.VectorEpoxyModel import im.vector.app.core.epoxy.onClick -import im.vector.app.features.home.room.list.widget.NotifsFabMenuView @EpoxyModelClass(layout = R.layout.item_room_filter_footer) abstract class FilteredRoomFooterItem : VectorEpoxyModel() { @EpoxyAttribute - var listener: FilteredRoomFooterItemListener? = null + var listener: Listener? = null @EpoxyAttribute var currentFilter: String = "" @@ -47,7 +46,9 @@ abstract class FilteredRoomFooterItem : VectorEpoxyModel(R.id.roomFilterFooterOpenRoomDirectory) } - interface FilteredRoomFooterItemListener : NotifsFabMenuView.Listener { + interface Listener { fun createRoom(initialName: String) + fun createDirectChat() + fun openRoomDirectory(initialFilter: String) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt index 3c08793fa4..fdfe171439 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt @@ -42,6 +42,7 @@ import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.UserPreferencesProvider import im.vector.app.databinding.FragmentRoomListBinding import im.vector.app.features.home.RoomListDisplayMode +import im.vector.app.features.home.room.filtered.FilteredRoomFooterItem import im.vector.app.features.home.room.list.actions.RoomListActionsArgs import im.vector.app.features.home.room.list.actions.RoomListQuickActionsBottomSheet import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedAction @@ -70,6 +71,7 @@ class RoomListFragment @Inject constructor( ) : VectorBaseFragment(), RoomListListener, OnBackPressed, + FilteredRoomFooterItem.Listener, NotifsFabMenuView.Listener { private var modelBuildListener: OnModelBuildFinishedListener? = null @@ -178,16 +180,16 @@ class RoomListFragment @Inject constructor( private fun setupCreateRoomButton() { when (roomListParams.displayMode) { RoomListDisplayMode.NOTIFICATIONS -> views.createChatFabMenu.isVisible = true - RoomListDisplayMode.PEOPLE -> views.createChatRoomButton.isVisible = true - RoomListDisplayMode.ROOMS -> views.createGroupRoomButton.isVisible = true + RoomListDisplayMode.PEOPLE -> views.createChatRoomButton.isVisible = true + RoomListDisplayMode.ROOMS -> views.createGroupRoomButton.isVisible = true else -> Unit // No button in this mode } views.createChatRoomButton.debouncedClicks { - createDirectChat() + fabCreateDirectChat() } views.createGroupRoomButton.debouncedClicks { - openRoomDirectory() + fabOpenRoomDirectory() } // Hide FAB when list is scrolling @@ -221,14 +223,28 @@ class RoomListFragment @Inject constructor( roomListViewModel.handle(RoomListAction.FilterWith(filter)) } - override fun openRoomDirectory(initialFilter: String) { - navigator.openRoomDirectory(requireActivity(), initialFilter) + // FilteredRoomFooterItem.Listener + override fun createRoom(initialName: String) { + navigator.openCreateRoom(requireActivity(), initialName) } override fun createDirectChat() { navigator.openCreateDirectRoom(requireActivity()) } + override fun openRoomDirectory(initialFilter: String) { + navigator.openRoomDirectory(requireActivity(), initialFilter) + } + + // NotifsFabMenuView.Listener + override fun fabCreateDirectChat() { + navigator.openCreateDirectRoom(requireActivity()) + } + + override fun fabOpenRoomDirectory() { + navigator.openRoomDirectory(requireActivity(), "") + } + private fun setupRecyclerView() { val layoutManager = LinearLayoutManager(context) stateRestorer = LayoutManagerStateRestorer(layoutManager).register() @@ -339,8 +355,8 @@ class RoomListFragment @Inject constructor( if (isAdded) { when (roomListParams.displayMode) { RoomListDisplayMode.NOTIFICATIONS -> views.createChatFabMenu.show() - RoomListDisplayMode.PEOPLE -> views.createChatRoomButton.show() - RoomListDisplayMode.ROOMS -> views.createGroupRoomButton.show() + RoomListDisplayMode.PEOPLE -> views.createChatRoomButton.show() + RoomListDisplayMode.ROOMS -> views.createGroupRoomButton.show() else -> Unit } } @@ -409,14 +425,14 @@ class RoomListFragment @Inject constructor( image = ContextCompat.getDrawable(requireContext(), R.drawable.ic_noun_party_popper), message = getString(R.string.room_list_catchup_empty_body)) } - RoomListDisplayMode.PEOPLE -> + RoomListDisplayMode.PEOPLE -> StateView.State.Empty( title = getString(R.string.room_list_people_empty_title), image = ContextCompat.getDrawable(requireContext(), R.drawable.empty_state_dm), isBigImage = true, message = getString(R.string.room_list_people_empty_body) ) - RoomListDisplayMode.ROOMS -> + RoomListDisplayMode.ROOMS -> StateView.State.Empty( title = getString(R.string.room_list_rooms_empty_title), image = ContextCompat.getDrawable(requireContext(), R.drawable.empty_state_room), @@ -480,8 +496,4 @@ class RoomListFragment @Inject constructor( notificationDrawerManager.clearMemberShipNotificationForRoom(room.roomId) roomListViewModel.handle(RoomListAction.RejectInvitation(room)) } - - override fun createRoom(initialName: String) { - navigator.openCreateRoom(requireActivity(), initialName) - } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/widget/NotifsFabMenuView.kt b/vector/src/main/java/im/vector/app/features/home/room/list/widget/NotifsFabMenuView.kt index 51191e03f2..72b58fc7ca 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/widget/NotifsFabMenuView.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/widget/NotifsFabMenuView.kt @@ -43,14 +43,14 @@ class NotifsFabMenuView @JvmOverloads constructor(context: Context, attrs: Attri .forEach { it.setOnClickListener { closeFabMenu() - listener?.createDirectChat() + listener?.fabCreateDirectChat() } } listOf(views.createRoomItemGroup, views.createRoomItemGroupLabel) .forEach { it.setOnClickListener { closeFabMenu() - listener?.openRoomDirectory() + listener?.fabOpenRoomDirectory() } } @@ -99,7 +99,7 @@ class NotifsFabMenuView @JvmOverloads constructor(context: Context, attrs: Attri } interface Listener { - fun createDirectChat() - fun openRoomDirectory(initialFilter: String = "") + fun fabCreateDirectChat() + fun fabOpenRoomDirectory() } } From 8f1b7649aaabf2d4bd96b75f08cac06fbb047e84 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Jul 2021 12:10:06 +0200 Subject: [PATCH 2/2] Make the code compile... --- .../app/features/home/room/list/RoomListFooterController.kt | 3 ++- .../im/vector/app/features/home/room/list/RoomListListener.kt | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFooterController.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFooterController.kt index cef8fa2d26..22cd0ae639 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFooterController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFooterController.kt @@ -22,6 +22,7 @@ import im.vector.app.core.epoxy.helpFooterItem import im.vector.app.core.resources.StringProvider import im.vector.app.core.resources.UserPreferencesProvider import im.vector.app.features.home.RoomListDisplayMode +import im.vector.app.features.home.room.filtered.FilteredRoomFooterItem import im.vector.app.features.home.room.filtered.filteredRoomFooterItem import javax.inject.Inject @@ -30,7 +31,7 @@ class RoomListFooterController @Inject constructor( private val userPreferencesProvider: UserPreferencesProvider ) : TypedEpoxyController() { - var listener: RoomListListener? = null + var listener: FilteredRoomFooterItem.Listener? = null override fun buildModels(data: RoomListViewState?) { val host = this diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListListener.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListListener.kt index cf619ce435..b0bb6706dd 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListListener.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListListener.kt @@ -16,11 +16,10 @@ package im.vector.app.features.home.room.list -import im.vector.app.features.home.room.filtered.FilteredRoomFooterItem import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo -interface RoomListListener : FilteredRoomFooterItem.FilteredRoomFooterItemListener { +interface RoomListListener { fun onRoomClicked(room: RoomSummary) fun onRoomLongClicked(room: RoomSummary): Boolean fun onRejectRoomInvitation(room: RoomSummary)