@@ -43,9 +43,12 @@ import im.vector.app.features.home.room.list.RoomSummaryItemFactory
43
43
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsBottomSheet
44
44
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedAction
45
45
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel
46
+ import im.vector.app.features.home.room.list.actions.RoomListSharedAction
47
+ import im.vector.app.features.home.room.list.actions.RoomListSharedActionViewModel
46
48
import im.vector.app.features.home.room.list.home.filter.HomeFilteredRoomsController
47
49
import im.vector.app.features.home.room.list.home.filter.HomeRoomFilter
48
50
import im.vector.app.features.home.room.list.home.recent.RecentRoomCarouselController
51
+ import im.vector.app.features.spaces.SpaceListBottomSheet
49
52
import kotlinx.coroutines.flow.launchIn
50
53
import kotlinx.coroutines.flow.onEach
51
54
import org.matrix.android.sdk.api.session.room.model.RoomSummary
@@ -62,10 +65,13 @@ class HomeRoomListFragment @Inject constructor(
62
65
RoomListListener {
63
66
64
67
private val roomListViewModel: HomeRoomListViewModel by fragmentViewModel()
65
- private lateinit var sharedActionViewModel: RoomListQuickActionsSharedActionViewModel
68
+ private lateinit var sharedQuickActionsViewModel: RoomListQuickActionsSharedActionViewModel
69
+ private lateinit var sharedActionViewModel: RoomListSharedActionViewModel
66
70
private var concatAdapter = ConcatAdapter ()
67
71
private var modelBuildListener: OnModelBuildFinishedListener ? = null
68
72
73
+ private val spaceListBottomSheet = SpaceListBottomSheet ()
74
+
69
75
private lateinit var stateRestorer: LayoutManagerStateRestorer
70
76
71
77
override fun getBinding (inflater : LayoutInflater , container : ViewGroup ? ): FragmentRoomListBinding {
@@ -74,15 +80,25 @@ class HomeRoomListFragment @Inject constructor(
74
80
75
81
override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
76
82
super .onViewCreated(view, savedInstanceState)
83
+ views.stateView.contentView = views.roomListView
84
+ views.stateView.state = StateView .State .Loading
85
+ setupObservers()
86
+ setupRecyclerView()
87
+ setupFabs()
88
+ }
89
+
90
+ private fun setupObservers () {
91
+ sharedQuickActionsViewModel = activityViewModelProvider[RoomListQuickActionsSharedActionViewModel ::class .java]
92
+ sharedActionViewModel = activityViewModelProvider[RoomListSharedActionViewModel ::class .java]
77
93
78
- sharedActionViewModel = activityViewModelProvider[RoomListQuickActionsSharedActionViewModel ::class .java]
79
94
sharedActionViewModel
80
95
.stream()
81
- .onEach { handleQuickActions(it) }
96
+ .onEach(::handleSharedAction)
97
+ .launchIn(viewLifecycleOwner.lifecycleScope)
98
+ sharedQuickActionsViewModel
99
+ .stream()
100
+ .onEach(::handleQuickActions)
82
101
.launchIn(viewLifecycleOwner.lifecycleScope)
83
-
84
- views.stateView.contentView = views.roomListView
85
- views.stateView.state = StateView .State .Loading
86
102
87
103
roomListViewModel.observeViewEvents {
88
104
when (it) {
@@ -92,9 +108,42 @@ class HomeRoomListFragment @Inject constructor(
92
108
is HomeRoomListViewEvents .Done -> Unit
93
109
}
94
110
}
111
+ }
95
112
96
- setupRecyclerView()
97
- setupFabs()
113
+ private fun handleSharedAction (action : RoomListSharedAction ) {
114
+ when (action) {
115
+ RoomListSharedAction .CloseBottomSheet -> spaceListBottomSheet.dismiss()
116
+ }
117
+ }
118
+
119
+ private fun handleQuickActions (quickAction : RoomListQuickActionsSharedAction ) {
120
+ when (quickAction) {
121
+ is RoomListQuickActionsSharedAction .NotificationsAllNoisy -> {
122
+ roomListViewModel.handle(HomeRoomListAction .ChangeRoomNotificationState (quickAction.roomId, RoomNotificationState .ALL_MESSAGES_NOISY ))
123
+ }
124
+ is RoomListQuickActionsSharedAction .NotificationsAll -> {
125
+ roomListViewModel.handle(HomeRoomListAction .ChangeRoomNotificationState (quickAction.roomId, RoomNotificationState .ALL_MESSAGES ))
126
+ }
127
+ is RoomListQuickActionsSharedAction .NotificationsMentionsOnly -> {
128
+ roomListViewModel.handle(HomeRoomListAction .ChangeRoomNotificationState (quickAction.roomId, RoomNotificationState .MENTIONS_ONLY ))
129
+ }
130
+ is RoomListQuickActionsSharedAction .NotificationsMute -> {
131
+ roomListViewModel.handle(HomeRoomListAction .ChangeRoomNotificationState (quickAction.roomId, RoomNotificationState .MUTE ))
132
+ }
133
+ is RoomListQuickActionsSharedAction .Settings -> {
134
+ navigator.openRoomProfile(requireActivity(), quickAction.roomId)
135
+ }
136
+ is RoomListQuickActionsSharedAction .Favorite -> {
137
+ roomListViewModel.handle(HomeRoomListAction .ToggleTag (quickAction.roomId, RoomTag .ROOM_TAG_FAVOURITE ))
138
+ }
139
+ is RoomListQuickActionsSharedAction .LowPriority -> {
140
+ roomListViewModel.handle(HomeRoomListAction .ToggleTag (quickAction.roomId, RoomTag .ROOM_TAG_LOW_PRIORITY ))
141
+ }
142
+ is RoomListQuickActionsSharedAction .Leave -> {
143
+ roomListViewModel.handle(HomeRoomListAction .LeaveRoom (quickAction.roomId))
144
+ promptLeaveRoom(quickAction.roomId)
145
+ }
146
+ }
98
147
}
99
148
100
149
private fun setupRecyclerView () {
@@ -121,7 +170,8 @@ class HomeRoomListFragment @Inject constructor(
121
170
}
122
171
123
172
views.newLayoutOpenSpacesButton.setOnClickListener {
124
- // Click action for open spaces modal goes here (Issue #6499)
173
+ // Click action for open spaces modal goes here
174
+ spaceListBottomSheet.show(requireActivity().supportFragmentManager, SpaceListBottomSheet .TAG )
125
175
}
126
176
127
177
// Hide FABs when list is scrolling
@@ -158,36 +208,6 @@ class HomeRoomListFragment @Inject constructor(
158
208
}
159
209
}
160
210
161
- private fun handleQuickActions (quickAction : RoomListQuickActionsSharedAction ) {
162
- when (quickAction) {
163
- is RoomListQuickActionsSharedAction .NotificationsAllNoisy -> {
164
- roomListViewModel.handle(HomeRoomListAction .ChangeRoomNotificationState (quickAction.roomId, RoomNotificationState .ALL_MESSAGES_NOISY ))
165
- }
166
- is RoomListQuickActionsSharedAction .NotificationsAll -> {
167
- roomListViewModel.handle(HomeRoomListAction .ChangeRoomNotificationState (quickAction.roomId, RoomNotificationState .ALL_MESSAGES ))
168
- }
169
- is RoomListQuickActionsSharedAction .NotificationsMentionsOnly -> {
170
- roomListViewModel.handle(HomeRoomListAction .ChangeRoomNotificationState (quickAction.roomId, RoomNotificationState .MENTIONS_ONLY ))
171
- }
172
- is RoomListQuickActionsSharedAction .NotificationsMute -> {
173
- roomListViewModel.handle(HomeRoomListAction .ChangeRoomNotificationState (quickAction.roomId, RoomNotificationState .MUTE ))
174
- }
175
- is RoomListQuickActionsSharedAction .Settings -> {
176
- navigator.openRoomProfile(requireActivity(), quickAction.roomId)
177
- }
178
- is RoomListQuickActionsSharedAction .Favorite -> {
179
- roomListViewModel.handle(HomeRoomListAction .ToggleTag (quickAction.roomId, RoomTag .ROOM_TAG_FAVOURITE ))
180
- }
181
- is RoomListQuickActionsSharedAction .LowPriority -> {
182
- roomListViewModel.handle(HomeRoomListAction .ToggleTag (quickAction.roomId, RoomTag .ROOM_TAG_LOW_PRIORITY ))
183
- }
184
- is RoomListQuickActionsSharedAction .Leave -> {
185
- roomListViewModel.handle(HomeRoomListAction .LeaveRoom (quickAction.roomId))
186
- promptLeaveRoom(quickAction.roomId)
187
- }
188
- }
189
- }
190
-
191
211
private fun promptLeaveRoom (roomId : String ) {
192
212
val isPublicRoom = roomListViewModel.isPublicRoom(roomId)
193
213
val message = buildString {
0 commit comments