From 90f420b2873b3a1c2307edffc9bd4dfc3b745d2a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 19 Jun 2019 11:10:36 +0200 Subject: [PATCH] Cleanup PermalinkHandler and Navigation --- .../riotredesign/features/home/HomeModule.kt | 2 +- .../features/home/HomeNavigator.kt | 38 +------------------ ...ermalinkHandler.kt => PermalinkHandler.kt} | 33 ++++++++-------- .../home/room/detail/RoomDetailFragment.kt | 7 ++-- .../home/room/list/RoomListFragment.kt | 2 +- .../features/navigation/DefaultNavigator.kt | 13 ++++++- .../features/navigation/Navigator.kt | 6 ++- .../roomdirectory/PublicRoomsFragment.kt | 2 +- .../createroom/CreateRoomFragment.kt | 2 +- .../RoomPreviewNoPreviewFragment.kt | 2 +- 10 files changed, 42 insertions(+), 65 deletions(-) rename vector/src/main/java/im/vector/riotredesign/features/home/{HomePermalinkHandler.kt => PermalinkHandler.kt} (54%) diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/HomeModule.kt b/vector/src/main/java/im/vector/riotredesign/features/home/HomeModule.kt index 7f85269a..bbe85a4e 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/HomeModule.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/HomeModule.kt @@ -51,7 +51,7 @@ class HomeModule { } scope(HOME_SCOPE) { - HomePermalinkHandler(get(), get()) + PermalinkHandler(get()) } // Fragment scopes diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/HomeNavigator.kt b/vector/src/main/java/im/vector/riotredesign/features/home/HomeNavigator.kt index 5d621604..729b8722 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/HomeNavigator.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/HomeNavigator.kt @@ -17,11 +17,9 @@ package im.vector.riotredesign.features.home import androidx.core.view.GravityCompat -import androidx.fragment.app.FragmentManager import im.vector.matrix.android.api.session.group.model.GroupSummary import im.vector.riotredesign.R import im.vector.riotredesign.core.extensions.replaceFragment -import im.vector.riotredesign.features.navigation.Navigator import kotlinx.android.synthetic.main.activity_home.* import timber.log.Timber @@ -29,8 +27,6 @@ class HomeNavigator { var activity: HomeActivity? = null - private var rootRoomId: String? = null - fun openSelectedGroup(groupSummary: GroupSummary) { Timber.v("Open selected group ${groupSummary.groupId}") activity?.let { @@ -41,36 +37,4 @@ class HomeNavigator { it.replaceFragment(homeDetailFragment, R.id.homeDetailFragmentContainer) } } - - fun openRoomDetail(roomId: String, - eventId: String?, - navigator: Navigator) { - Timber.v("Open room detail $roomId - $eventId") - activity?.let { - //TODO enable eventId permalink. It doesn't work enough at the moment. - navigator.openRoom(roomId, it) - } - } - - fun openGroupDetail(groupId: String) { - Timber.v("Open group detail $groupId") - } - - fun openUserDetail(userId: String) { - Timber.v("Open user detail $userId") - } - - // Private Methods ***************************************************************************** - - private fun clearBackStack(fragmentManager: FragmentManager) { - if (fragmentManager.backStackEntryCount > 0) { - val first = fragmentManager.getBackStackEntryAt(0) - fragmentManager.popBackStack(first.id, FragmentManager.POP_BACK_STACK_INCLUSIVE) - } - } - - private fun isRoot(roomId: String): Boolean { - return rootRoomId == roomId - } - -} \ No newline at end of file +} diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/HomePermalinkHandler.kt b/vector/src/main/java/im/vector/riotredesign/features/home/PermalinkHandler.kt similarity index 54% rename from vector/src/main/java/im/vector/riotredesign/features/home/HomePermalinkHandler.kt rename to vector/src/main/java/im/vector/riotredesign/features/home/PermalinkHandler.kt index dc387aa5..6bc86972 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/HomePermalinkHandler.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/PermalinkHandler.kt @@ -16,41 +16,40 @@ package im.vector.riotredesign.features.home +import android.content.Context import android.net.Uri import im.vector.matrix.android.api.permalinks.PermalinkData import im.vector.matrix.android.api.permalinks.PermalinkParser +import im.vector.riotredesign.core.utils.openUrlInExternalBrowser import im.vector.riotredesign.features.navigation.Navigator -class HomePermalinkHandler(private val homeNavigator: HomeNavigator, - private val navigator: Navigator) { +class PermalinkHandler(private val navigator: Navigator) { - fun launch(deepLink: String?) { + fun launch(context: Context, deepLink: String?) { val uri = deepLink?.let { Uri.parse(it) } - launch(uri) + launch(context, uri) } - fun launch(deepLink: Uri?) { + fun launch(context: Context, deepLink: Uri?) { if (deepLink == null) { return } - val permalinkData = PermalinkParser.parse(deepLink) - when (permalinkData) { - is PermalinkData.EventLink -> { - homeNavigator.openRoomDetail(permalinkData.roomIdOrAlias, permalinkData.eventId, navigator) + when (val permalinkData = PermalinkParser.parse(deepLink)) { + is PermalinkData.EventLink -> { + navigator.openRoom(context, permalinkData.roomIdOrAlias, permalinkData.eventId) } - is PermalinkData.RoomLink -> { - homeNavigator.openRoomDetail(permalinkData.roomIdOrAlias, null, navigator) + is PermalinkData.RoomLink -> { + navigator.openRoom(context, permalinkData.roomIdOrAlias) } - is PermalinkData.GroupLink -> { - homeNavigator.openGroupDetail(permalinkData.groupId) + is PermalinkData.GroupLink -> { + navigator.openGroupDetail(permalinkData.groupId, context) } - is PermalinkData.UserLink -> { - homeNavigator.openUserDetail(permalinkData.userId) + is PermalinkData.UserLink -> { + navigator.openUserDetail(permalinkData.userId, context) } is PermalinkData.FallbackLink -> { - + openUrlInExternalBrowser(context, permalinkData.uri) } } } - } \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailFragment.kt index c8030c25..985d5f95 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailFragment.kt @@ -74,7 +74,7 @@ import im.vector.riotredesign.features.autocomplete.user.AutocompleteUserPresent import im.vector.riotredesign.features.command.Command import im.vector.riotredesign.features.home.AvatarRenderer import im.vector.riotredesign.features.home.HomeModule -import im.vector.riotredesign.features.home.HomePermalinkHandler +import im.vector.riotredesign.features.home.PermalinkHandler import im.vector.riotredesign.features.home.getColorFromUserId import im.vector.riotredesign.features.home.room.detail.composer.TextComposerActions import im.vector.riotredesign.features.home.room.detail.composer.TextComposerView @@ -167,7 +167,7 @@ class RoomDetailFragment : private val commandAutocompletePolicy = CommandAutocompletePolicy() private val autocompleteCommandPresenter: AutocompleteCommandPresenter by inject { parametersOf(this) } private val autocompleteUserPresenter: AutocompleteUserPresenter by inject { parametersOf(this) } - private val homePermalinkHandler: HomePermalinkHandler by inject() + private val permalinkHandler: PermalinkHandler by inject() private lateinit var scrollOnNewMessageCallback: ScrollOnNewMessageCallback @@ -535,7 +535,8 @@ class RoomDetailFragment : // TimelineEventController.Callback ************************************************************ override fun onUrlClicked(url: String) { - homePermalinkHandler.launch(url) + // TODO Room can be the same + permalinkHandler.launch(requireActivity(), url) } override fun onEventVisible(event: TimelineEvent) { diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt index e7b8b837..957a0d0a 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt @@ -72,7 +72,7 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Callback, O setupRecyclerView() roomListViewModel.subscribe { renderState(it) } roomListViewModel.openRoomLiveData.observeEvent(this) { - navigator.openRoom(it, requireActivity()) + navigator.openRoom(requireActivity(), it) } createChatFabMenu.listener = this diff --git a/vector/src/main/java/im/vector/riotredesign/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/riotredesign/features/navigation/DefaultNavigator.kt index 3dd5c6d9..da796dda 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/navigation/DefaultNavigator.kt @@ -27,12 +27,13 @@ import im.vector.riotredesign.features.home.room.detail.RoomDetailArgs import im.vector.riotredesign.features.roomdirectory.RoomDirectoryActivity import im.vector.riotredesign.features.roomdirectory.roompreview.RoomPreviewActivity import im.vector.riotredesign.features.settings.VectorSettingsActivity +import timber.log.Timber class DefaultNavigator : Navigator { - override fun openRoom(roomId: String, context: Context) { - val args = RoomDetailArgs(roomId) + override fun openRoom(context: Context, roomId: String, eventId: String?) { + val args = RoomDetailArgs(roomId, eventId) val intent = RoomDetailActivity.newIntent(context, args) context.startActivity(intent) } @@ -63,4 +64,12 @@ class DefaultNavigator : Navigator { override fun openKeysBackupManager(context: Context) { context.startActivity(KeysBackupManageActivity.intent(context)) } + + override fun openGroupDetail(groupId: String, context: Context) { + Timber.v("Open group detail $groupId") + } + + override fun openUserDetail(userId: String, context: Context) { + Timber.v("Open user detail $userId") + } } \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/riotredesign/features/navigation/Navigator.kt index 3754529f..d04a9b7a 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/navigation/Navigator.kt @@ -21,7 +21,7 @@ import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoom interface Navigator { - fun openRoom(roomId: String, context: Context) + fun openRoom(context: Context, roomId: String, eventId: String? = null) fun openRoomPreview(publicRoom: PublicRoom, context: Context) @@ -34,4 +34,8 @@ interface Navigator { fun openKeysBackupSetup(context: Context, showManualExport: Boolean) fun openKeysBackupManager(context: Context) + + fun openGroupDetail(groupId: String, context: Context) + + fun openUserDetail(userId: String, context: Context) } \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/PublicRoomsFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/PublicRoomsFragment.kt index 1f680b9e..ce6e24bb 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/PublicRoomsFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/PublicRoomsFragment.kt @@ -122,7 +122,7 @@ class PublicRoomsFragment : VectorBaseFragment(), PublicRoomsController.Callback when (joinState) { JoinState.JOINED -> { - navigator.openRoom(publicRoom.roomId, requireActivity()) + navigator.openRoom(requireActivity(), publicRoom.roomId) } JoinState.NOT_JOINED, JoinState.JOINING_ERROR -> { diff --git a/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/createroom/CreateRoomFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/createroom/CreateRoomFragment.kt index 96e7c60c..07c6c0e3 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/createroom/CreateRoomFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/createroom/CreateRoomFragment.kt @@ -100,7 +100,7 @@ class CreateRoomFragment : VectorBaseFragment(), CreateRoomController.Listener { val async = state.asyncCreateRoomRequest if (async is Success) { // Navigate to freshly created room - navigator.openRoom(async(), requireActivity()) + navigator.openRoom(requireActivity(), async()) navigationViewModel.goTo(RoomDirectoryActivity.Navigation.Close) } else { diff --git a/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt index 3f389a46..1fdd5e09 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt @@ -108,7 +108,7 @@ class RoomPreviewNoPreviewFragment : VectorBaseFragment() { // Quit this screen requireActivity().finish() // Open room - navigator.openRoom(roomPreviewData.roomId, requireActivity()) + navigator.openRoom(requireActivity(), roomPreviewData.roomId) } } } \ No newline at end of file