diff --git a/vector/src/main/java/im/vector/riotx/features/home/group/GroupListFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/group/GroupListFragment.kt index 2615643781..df45bbc9a0 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/group/GroupListFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/group/GroupListFragment.kt @@ -70,7 +70,7 @@ class GroupListFragment : VectorBaseFragment(), GroupSummaryController.Callback is Incomplete -> stateView.state = StateView.State.Loading is Success -> stateView.state = StateView.State.Content } - groupController.setData(state) + groupController.update(state) } override fun onGroupSelected(groupSummary: GroupSummary) { diff --git a/vector/src/main/java/im/vector/riotx/features/home/group/GroupSummaryController.kt b/vector/src/main/java/im/vector/riotx/features/home/group/GroupSummaryController.kt index 785f833077..91fb02a74e 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/group/GroupSummaryController.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/group/GroupSummaryController.kt @@ -16,17 +16,29 @@ package im.vector.riotx.features.home.group +import com.airbnb.epoxy.EpoxyController import com.airbnb.epoxy.TypedEpoxyController import im.vector.matrix.android.api.session.group.model.GroupSummary import im.vector.riotx.features.home.AvatarRenderer import javax.inject.Inject -class GroupSummaryController @Inject constructor(private val avatarRenderer: AvatarRenderer): TypedEpoxyController() { +class GroupSummaryController @Inject constructor(private val avatarRenderer: AvatarRenderer) : EpoxyController() { var callback: Callback? = null + private var viewState: GroupListViewState? = null - override fun buildModels(viewState: GroupListViewState) { - buildGroupModels(viewState.asyncGroups(), viewState.selectedGroup) + init { + requestModelBuild() + } + + fun update(viewState: GroupListViewState) { + this.viewState = viewState + requestModelBuild() + } + + override fun buildModels() { + val nonNullViewState = viewState ?: return + buildGroupModels(nonNullViewState.asyncGroups(), nonNullViewState.selectedGroup) } private fun buildGroupModels(summaries: List?, selected: GroupSummary?) { diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt index afe3579d76..cc2224b64a 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt @@ -41,6 +41,7 @@ import im.vector.riotx.features.home.room.list.widget.FabMenuView import im.vector.riotx.features.notifications.NotificationDrawerManager import kotlinx.android.parcel.Parcelize import kotlinx.android.synthetic.main.fragment_room_list.* +import timber.log.Timber import javax.inject.Inject @Parcelize @@ -180,7 +181,7 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Listener, O is Success -> renderSuccess(state) is Fail -> renderFailure(state.asyncFilteredRooms.error) } - roomController.setData(state) + roomController.update(state) } private fun renderSuccess(state: RoomListViewState) { diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomSummaryController.kt b/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomSummaryController.kt index 42e3a3db85..f2e9fbc947 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomSummaryController.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomSummaryController.kt @@ -17,40 +17,54 @@ package im.vector.riotx.features.home.room.list import androidx.annotation.StringRes +import com.airbnb.epoxy.EpoxyController import com.airbnb.epoxy.TypedEpoxyController import im.vector.matrix.android.api.session.room.model.Membership import im.vector.matrix.android.api.session.room.model.RoomSummary import im.vector.riotx.core.resources.StringProvider import im.vector.riotx.features.home.room.filtered.FilteredRoomFooterItem import im.vector.riotx.features.home.room.filtered.filteredRoomFooterItem +import timber.log.Timber import javax.inject.Inject class RoomSummaryController @Inject constructor(private val stringProvider: StringProvider, private val roomSummaryItemFactory: RoomSummaryItemFactory, private val roomListNameFilter: RoomListNameFilter -) : TypedEpoxyController() { +) : EpoxyController() { var listener: Listener? = null - override fun buildModels(viewState: RoomListViewState) { - if (viewState.displayMode == RoomListFragment.DisplayMode.FILTERED) { - buildFilteredRooms(viewState) + private var viewState: RoomListViewState? = null + + init { + requestModelBuild() + } + + fun update(viewState: RoomListViewState) { + this.viewState = viewState + requestModelBuild() + } + + override fun buildModels() { + val nonNullViewState = viewState ?: return + if (nonNullViewState.displayMode == RoomListFragment.DisplayMode.FILTERED) { + buildFilteredRooms(nonNullViewState) } else { - val roomSummaries = viewState.asyncFilteredRooms() + val roomSummaries = nonNullViewState.asyncFilteredRooms() roomSummaries?.forEach { (category, summaries) -> if (summaries.isEmpty()) { return@forEach } else { - val isExpanded = viewState.isCategoryExpanded(category) - buildRoomCategory(viewState, summaries, category.titleRes, viewState.isCategoryExpanded(category)) { + val isExpanded = nonNullViewState.isCategoryExpanded(category) + buildRoomCategory(nonNullViewState, summaries, category.titleRes, nonNullViewState.isCategoryExpanded(category)) { listener?.onToggleRoomCategory(category) } if (isExpanded) { buildRoomModels(summaries, - viewState.joiningRoomsIds, - viewState.joiningErrorRoomsIds, - viewState.rejectingRoomsIds, - viewState.rejectingErrorRoomsIds) + nonNullViewState.joiningRoomsIds, + nonNullViewState.joiningErrorRoomsIds, + nonNullViewState.rejectingRoomsIds, + nonNullViewState.rejectingErrorRoomsIds) } } } @@ -66,10 +80,10 @@ class RoomSummaryController @Inject constructor(private val stringProvider: Stri .filter { it.membership == Membership.JOIN && roomListNameFilter.test(it) } buildRoomModels(filteredSummaries, - viewState.joiningRoomsIds, - viewState.joiningErrorRoomsIds, - viewState.rejectingRoomsIds, - viewState.rejectingErrorRoomsIds) + viewState.joiningRoomsIds, + viewState.joiningErrorRoomsIds, + viewState.rejectingRoomsIds, + viewState.rejectingErrorRoomsIds) addFilterFooter(viewState) } @@ -105,7 +119,7 @@ class RoomSummaryController @Inject constructor(private val stringProvider: Stri showHighlighted(showHighlighted) listener { mutateExpandedState() - setData(viewState) + update(viewState) } } }