From 51000c4711a116ca814a93d71ecf50c22f1ce9d6 Mon Sep 17 00:00:00 2001 From: ganfra Date: Sun, 30 Dec 2018 13:02:20 +0100 Subject: [PATCH] Re-add opening detail when opening app --- .../features/home/HomeActivity.kt | 30 +++++--------- .../riotredesign/features/home/HomeModule.kt | 4 +- .../features/home/HomeNavigator.kt | 39 +++++++++++++++++-- .../home/room/detail/RoomDetailFragment.kt | 4 +- .../home/room/list/RoomListFragment.kt | 3 ++ 5 files changed, 53 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/im/vector/riotredesign/features/home/HomeActivity.kt b/app/src/main/java/im/vector/riotredesign/features/home/HomeActivity.kt index c75cc051..2fd2b653 100644 --- a/app/src/main/java/im/vector/riotredesign/features/home/HomeActivity.kt +++ b/app/src/main/java/im/vector/riotredesign/features/home/HomeActivity.kt @@ -15,17 +15,18 @@ import im.vector.riotredesign.core.platform.OnBackPressed import im.vector.riotredesign.core.platform.RiotActivity import im.vector.riotredesign.core.platform.ToolbarConfigurable import im.vector.riotredesign.features.home.room.detail.LoadingRoomDetailFragment -import im.vector.riotredesign.features.home.room.detail.RoomDetailArgs -import im.vector.riotredesign.features.home.room.detail.RoomDetailFragment import kotlinx.android.synthetic.main.activity_home.* +import org.koin.android.ext.android.inject import org.koin.standalone.StandAloneContext.loadKoinModules -import timber.log.Timber -class HomeActivity : RiotActivity(), HomeNavigator, ToolbarConfigurable { +class HomeActivity : RiotActivity(), ToolbarConfigurable { + + private val homeNavigator by inject() override fun onCreate(savedInstanceState: Bundle?) { loadKoinModules(listOf(HomeModule(this).definition)) + homeNavigator.activity = this super.onCreate(savedInstanceState) setContentView(R.layout.activity_home) if (savedInstanceState == null) { @@ -36,6 +37,11 @@ class HomeActivity : RiotActivity(), HomeNavigator, ToolbarConfigurable { } } + override fun onDestroy() { + homeNavigator.activity = null + super.onDestroy() + } + override fun configure(toolbar: Toolbar) { setSupportActionBar(toolbar) supportActionBar?.setHomeButtonEnabled(true) @@ -84,22 +90,6 @@ class HomeActivity : RiotActivity(), HomeNavigator, ToolbarConfigurable { return false } - // HomeNavigator ******************************************************************************* - - override fun openRoomDetail(roomId: String, eventId: String?) { - val args = RoomDetailArgs(roomId, eventId) - val roomDetailFragment = RoomDetailFragment.newInstance(args) - drawerLayout.closeDrawer(Gravity.LEFT) - replaceFragment(roomDetailFragment, R.id.homeDetailFragmentContainer) - } - - override fun openGroupDetail(groupId: String) { - Timber.v("Open group detail $groupId") - } - - override fun openUserDetail(userId: String) { - Timber.v("Open user detail $userId") - } companion object { fun newIntent(context: Context): Intent { diff --git a/app/src/main/java/im/vector/riotredesign/features/home/HomeModule.kt b/app/src/main/java/im/vector/riotredesign/features/home/HomeModule.kt index 75491d0a..f9a6a263 100644 --- a/app/src/main/java/im/vector/riotredesign/features/home/HomeModule.kt +++ b/app/src/main/java/im/vector/riotredesign/features/home/HomeModule.kt @@ -23,8 +23,8 @@ class HomeModule(private val homeActivity: HomeActivity) { TextItemFactory() } - factory { - homeActivity as HomeNavigator + single { + HomeNavigator() } factory { (roomId: String) -> diff --git a/app/src/main/java/im/vector/riotredesign/features/home/HomeNavigator.kt b/app/src/main/java/im/vector/riotredesign/features/home/HomeNavigator.kt index c306f5c5..91a64011 100644 --- a/app/src/main/java/im/vector/riotredesign/features/home/HomeNavigator.kt +++ b/app/src/main/java/im/vector/riotredesign/features/home/HomeNavigator.kt @@ -1,11 +1,42 @@ package im.vector.riotredesign.features.home -interface HomeNavigator { +import android.view.Gravity +import im.vector.riotredesign.R +import im.vector.riotredesign.core.extensions.replaceFragment +import im.vector.riotredesign.features.home.room.detail.RoomDetailArgs +import im.vector.riotredesign.features.home.room.detail.RoomDetailFragment +import kotlinx.android.synthetic.main.activity_home.* +import timber.log.Timber - fun openRoomDetail(roomId: String, eventId: String?) +class HomeNavigator { - fun openGroupDetail(groupId: String) + var activity: HomeActivity? = null - fun openUserDetail(userId: String) + private var currentRoomId: String? = null + + fun openRoomDetail(roomId: String, eventId: String?) { + if (isRoomOpened(roomId)) { + return + } + currentRoomId = roomId + activity?.let { + val args = RoomDetailArgs(roomId, eventId) + val roomDetailFragment = RoomDetailFragment.newInstance(args) + it.drawerLayout?.closeDrawer(Gravity.LEFT) + it.replaceFragment(roomDetailFragment, R.id.homeDetailFragmentContainer) + } + } + + fun openGroupDetail(groupId: String) { + Timber.v("Open group detail $groupId") + } + + fun openUserDetail(userId: String) { + Timber.v("Open user detail $userId") + } + + fun isRoomOpened(roomId: String): Boolean { + return currentRoomId == roomId + } } \ No newline at end of file diff --git a/app/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailFragment.kt b/app/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailFragment.kt index 3cd1258c..6d7c0571 100644 --- a/app/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailFragment.kt +++ b/app/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailFragment.kt @@ -78,7 +78,9 @@ class RoomDetailFragment : RiotFragment(), TimelineEventController.Callback { } private fun renderState(state: RoomDetailViewState) { - renderTimeline(state.asyncTimeline()) + if (state.asyncTimeline.complete) { + renderTimeline(state.asyncTimeline()) + } renderRoomSummary(state.asyncRoomSummary()) } diff --git a/app/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt b/app/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt index 05729d40..35b4d272 100644 --- a/app/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt +++ b/app/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt @@ -50,6 +50,9 @@ class RoomListFragment : RiotFragment(), RoomSummaryController.Callback { } private fun renderSuccess(state: RoomListViewState) { + if (state.selectedRoomId != null) { + homeNavigator.openRoomDetail(state.selectedRoomId, null) + } if (state.asyncRooms().isNullOrEmpty()) { stateView.state = StateView.State.Empty(getString(R.string.room_list_empty)) } else {