Cleanup PermalinkHandler and Navigation
This commit is contained in:
parent
73b55fd975
commit
90f420b287
@ -51,7 +51,7 @@ class HomeModule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
scope(HOME_SCOPE) {
|
scope(HOME_SCOPE) {
|
||||||
HomePermalinkHandler(get(), get())
|
PermalinkHandler(get())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fragment scopes
|
// Fragment scopes
|
||||||
|
@ -17,11 +17,9 @@
|
|||||||
package im.vector.riotredesign.features.home
|
package im.vector.riotredesign.features.home
|
||||||
|
|
||||||
import androidx.core.view.GravityCompat
|
import androidx.core.view.GravityCompat
|
||||||
import androidx.fragment.app.FragmentManager
|
|
||||||
import im.vector.matrix.android.api.session.group.model.GroupSummary
|
import im.vector.matrix.android.api.session.group.model.GroupSummary
|
||||||
import im.vector.riotredesign.R
|
import im.vector.riotredesign.R
|
||||||
import im.vector.riotredesign.core.extensions.replaceFragment
|
import im.vector.riotredesign.core.extensions.replaceFragment
|
||||||
import im.vector.riotredesign.features.navigation.Navigator
|
|
||||||
import kotlinx.android.synthetic.main.activity_home.*
|
import kotlinx.android.synthetic.main.activity_home.*
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
@ -29,8 +27,6 @@ class HomeNavigator {
|
|||||||
|
|
||||||
var activity: HomeActivity? = null
|
var activity: HomeActivity? = null
|
||||||
|
|
||||||
private var rootRoomId: String? = null
|
|
||||||
|
|
||||||
fun openSelectedGroup(groupSummary: GroupSummary) {
|
fun openSelectedGroup(groupSummary: GroupSummary) {
|
||||||
Timber.v("Open selected group ${groupSummary.groupId}")
|
Timber.v("Open selected group ${groupSummary.groupId}")
|
||||||
activity?.let {
|
activity?.let {
|
||||||
@ -41,36 +37,4 @@ class HomeNavigator {
|
|||||||
it.replaceFragment(homeDetailFragment, R.id.homeDetailFragmentContainer)
|
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
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -16,41 +16,40 @@
|
|||||||
|
|
||||||
package im.vector.riotredesign.features.home
|
package im.vector.riotredesign.features.home
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import im.vector.matrix.android.api.permalinks.PermalinkData
|
import im.vector.matrix.android.api.permalinks.PermalinkData
|
||||||
import im.vector.matrix.android.api.permalinks.PermalinkParser
|
import im.vector.matrix.android.api.permalinks.PermalinkParser
|
||||||
|
import im.vector.riotredesign.core.utils.openUrlInExternalBrowser
|
||||||
import im.vector.riotredesign.features.navigation.Navigator
|
import im.vector.riotredesign.features.navigation.Navigator
|
||||||
|
|
||||||
class HomePermalinkHandler(private val homeNavigator: HomeNavigator,
|
class PermalinkHandler(private val navigator: Navigator) {
|
||||||
private val navigator: Navigator) {
|
|
||||||
|
|
||||||
fun launch(deepLink: String?) {
|
fun launch(context: Context, deepLink: String?) {
|
||||||
val uri = deepLink?.let { Uri.parse(it) }
|
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) {
|
if (deepLink == null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val permalinkData = PermalinkParser.parse(deepLink)
|
when (val permalinkData = PermalinkParser.parse(deepLink)) {
|
||||||
when (permalinkData) {
|
is PermalinkData.EventLink -> {
|
||||||
is PermalinkData.EventLink -> {
|
navigator.openRoom(context, permalinkData.roomIdOrAlias, permalinkData.eventId)
|
||||||
homeNavigator.openRoomDetail(permalinkData.roomIdOrAlias, permalinkData.eventId, navigator)
|
|
||||||
}
|
}
|
||||||
is PermalinkData.RoomLink -> {
|
is PermalinkData.RoomLink -> {
|
||||||
homeNavigator.openRoomDetail(permalinkData.roomIdOrAlias, null, navigator)
|
navigator.openRoom(context, permalinkData.roomIdOrAlias)
|
||||||
}
|
}
|
||||||
is PermalinkData.GroupLink -> {
|
is PermalinkData.GroupLink -> {
|
||||||
homeNavigator.openGroupDetail(permalinkData.groupId)
|
navigator.openGroupDetail(permalinkData.groupId, context)
|
||||||
}
|
}
|
||||||
is PermalinkData.UserLink -> {
|
is PermalinkData.UserLink -> {
|
||||||
homeNavigator.openUserDetail(permalinkData.userId)
|
navigator.openUserDetail(permalinkData.userId, context)
|
||||||
}
|
}
|
||||||
is PermalinkData.FallbackLink -> {
|
is PermalinkData.FallbackLink -> {
|
||||||
|
openUrlInExternalBrowser(context, permalinkData.uri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -74,7 +74,7 @@ import im.vector.riotredesign.features.autocomplete.user.AutocompleteUserPresent
|
|||||||
import im.vector.riotredesign.features.command.Command
|
import im.vector.riotredesign.features.command.Command
|
||||||
import im.vector.riotredesign.features.home.AvatarRenderer
|
import im.vector.riotredesign.features.home.AvatarRenderer
|
||||||
import im.vector.riotredesign.features.home.HomeModule
|
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.getColorFromUserId
|
||||||
import im.vector.riotredesign.features.home.room.detail.composer.TextComposerActions
|
import im.vector.riotredesign.features.home.room.detail.composer.TextComposerActions
|
||||||
import im.vector.riotredesign.features.home.room.detail.composer.TextComposerView
|
import im.vector.riotredesign.features.home.room.detail.composer.TextComposerView
|
||||||
@ -167,7 +167,7 @@ class RoomDetailFragment :
|
|||||||
private val commandAutocompletePolicy = CommandAutocompletePolicy()
|
private val commandAutocompletePolicy = CommandAutocompletePolicy()
|
||||||
private val autocompleteCommandPresenter: AutocompleteCommandPresenter by inject { parametersOf(this) }
|
private val autocompleteCommandPresenter: AutocompleteCommandPresenter by inject { parametersOf(this) }
|
||||||
private val autocompleteUserPresenter: AutocompleteUserPresenter 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
|
private lateinit var scrollOnNewMessageCallback: ScrollOnNewMessageCallback
|
||||||
|
|
||||||
@ -535,7 +535,8 @@ class RoomDetailFragment :
|
|||||||
// TimelineEventController.Callback ************************************************************
|
// TimelineEventController.Callback ************************************************************
|
||||||
|
|
||||||
override fun onUrlClicked(url: String) {
|
override fun onUrlClicked(url: String) {
|
||||||
homePermalinkHandler.launch(url)
|
// TODO Room can be the same
|
||||||
|
permalinkHandler.launch(requireActivity(), url)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onEventVisible(event: TimelineEvent) {
|
override fun onEventVisible(event: TimelineEvent) {
|
||||||
|
@ -72,7 +72,7 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Callback, O
|
|||||||
setupRecyclerView()
|
setupRecyclerView()
|
||||||
roomListViewModel.subscribe { renderState(it) }
|
roomListViewModel.subscribe { renderState(it) }
|
||||||
roomListViewModel.openRoomLiveData.observeEvent(this) {
|
roomListViewModel.openRoomLiveData.observeEvent(this) {
|
||||||
navigator.openRoom(it, requireActivity())
|
navigator.openRoom(requireActivity(), it)
|
||||||
}
|
}
|
||||||
|
|
||||||
createChatFabMenu.listener = this
|
createChatFabMenu.listener = this
|
||||||
|
@ -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.RoomDirectoryActivity
|
||||||
import im.vector.riotredesign.features.roomdirectory.roompreview.RoomPreviewActivity
|
import im.vector.riotredesign.features.roomdirectory.roompreview.RoomPreviewActivity
|
||||||
import im.vector.riotredesign.features.settings.VectorSettingsActivity
|
import im.vector.riotredesign.features.settings.VectorSettingsActivity
|
||||||
|
import timber.log.Timber
|
||||||
|
|
||||||
class DefaultNavigator : Navigator {
|
class DefaultNavigator : Navigator {
|
||||||
|
|
||||||
|
|
||||||
override fun openRoom(roomId: String, context: Context) {
|
override fun openRoom(context: Context, roomId: String, eventId: String?) {
|
||||||
val args = RoomDetailArgs(roomId)
|
val args = RoomDetailArgs(roomId, eventId)
|
||||||
val intent = RoomDetailActivity.newIntent(context, args)
|
val intent = RoomDetailActivity.newIntent(context, args)
|
||||||
context.startActivity(intent)
|
context.startActivity(intent)
|
||||||
}
|
}
|
||||||
@ -63,4 +64,12 @@ class DefaultNavigator : Navigator {
|
|||||||
override fun openKeysBackupManager(context: Context) {
|
override fun openKeysBackupManager(context: Context) {
|
||||||
context.startActivity(KeysBackupManageActivity.intent(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")
|
||||||
|
}
|
||||||
}
|
}
|
@ -21,7 +21,7 @@ import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoom
|
|||||||
|
|
||||||
interface Navigator {
|
interface Navigator {
|
||||||
|
|
||||||
fun openRoom(roomId: String, context: Context)
|
fun openRoom(context: Context, roomId: String, eventId: String? = null)
|
||||||
|
|
||||||
fun openRoomPreview(publicRoom: PublicRoom, context: Context)
|
fun openRoomPreview(publicRoom: PublicRoom, context: Context)
|
||||||
|
|
||||||
@ -34,4 +34,8 @@ interface Navigator {
|
|||||||
fun openKeysBackupSetup(context: Context, showManualExport: Boolean)
|
fun openKeysBackupSetup(context: Context, showManualExport: Boolean)
|
||||||
|
|
||||||
fun openKeysBackupManager(context: Context)
|
fun openKeysBackupManager(context: Context)
|
||||||
|
|
||||||
|
fun openGroupDetail(groupId: String, context: Context)
|
||||||
|
|
||||||
|
fun openUserDetail(userId: String, context: Context)
|
||||||
}
|
}
|
@ -122,7 +122,7 @@ class PublicRoomsFragment : VectorBaseFragment(), PublicRoomsController.Callback
|
|||||||
|
|
||||||
when (joinState) {
|
when (joinState) {
|
||||||
JoinState.JOINED -> {
|
JoinState.JOINED -> {
|
||||||
navigator.openRoom(publicRoom.roomId, requireActivity())
|
navigator.openRoom(requireActivity(), publicRoom.roomId)
|
||||||
}
|
}
|
||||||
JoinState.NOT_JOINED,
|
JoinState.NOT_JOINED,
|
||||||
JoinState.JOINING_ERROR -> {
|
JoinState.JOINING_ERROR -> {
|
||||||
|
@ -100,7 +100,7 @@ class CreateRoomFragment : VectorBaseFragment(), CreateRoomController.Listener {
|
|||||||
val async = state.asyncCreateRoomRequest
|
val async = state.asyncCreateRoomRequest
|
||||||
if (async is Success) {
|
if (async is Success) {
|
||||||
// Navigate to freshly created room
|
// Navigate to freshly created room
|
||||||
navigator.openRoom(async(), requireActivity())
|
navigator.openRoom(requireActivity(), async())
|
||||||
|
|
||||||
navigationViewModel.goTo(RoomDirectoryActivity.Navigation.Close)
|
navigationViewModel.goTo(RoomDirectoryActivity.Navigation.Close)
|
||||||
} else {
|
} else {
|
||||||
|
@ -108,7 +108,7 @@ class RoomPreviewNoPreviewFragment : VectorBaseFragment() {
|
|||||||
// Quit this screen
|
// Quit this screen
|
||||||
requireActivity().finish()
|
requireActivity().finish()
|
||||||
// Open room
|
// Open room
|
||||||
navigator.openRoom(roomPreviewData.roomId, requireActivity())
|
navigator.openRoom(requireActivity(), roomPreviewData.roomId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user