From 2fb794dd59f7cf02ca1fcc0b74bff0a658298fbc Mon Sep 17 00:00:00 2001 From: ericdecanini Date: Thu, 18 Aug 2022 14:09:22 +0200 Subject: [PATCH] Fixes space header showing "Empty Space" after switching to newly created space --- vector/src/main/java/im/vector/app/SpaceStateHandler.kt | 2 ++ .../src/main/java/im/vector/app/SpaceStateHandlerImpl.kt | 5 ++++- .../java/im/vector/app/features/home/HomeActivity.kt | 9 ++++++++- .../vector/app/features/navigation/DefaultNavigator.kt | 9 +++++++-- .../java/im/vector/app/features/navigation/Navigator.kt | 7 ++++++- .../vector/app/features/spaces/SpaceCreationActivity.kt | 6 ++++++ .../app/features/spaces/create/CreateSpaceEvents.kt | 2 +- .../app/features/spaces/create/CreateSpaceViewModel.kt | 2 ++ 8 files changed, 36 insertions(+), 6 deletions(-) diff --git a/vector/src/main/java/im/vector/app/SpaceStateHandler.kt b/vector/src/main/java/im/vector/app/SpaceStateHandler.kt index b8f90471e8..2651d62f1a 100644 --- a/vector/src/main/java/im/vector/app/SpaceStateHandler.kt +++ b/vector/src/main/java/im/vector/app/SpaceStateHandler.kt @@ -42,12 +42,14 @@ interface SpaceStateHandler : DefaultLifecycleObserver { * @param session the current active session * @param persistNow if true, the current space will immediately be persisted in shared prefs * @param isForwardNavigation whether this navigation is a forward action to properly handle backstack + * @param overriddenSpaceName overrides the display name of the space being set */ fun setCurrentSpace( spaceId: String?, session: Session? = null, persistNow: Boolean = false, isForwardNavigation: Boolean = true, + overriddenSpaceName: String? = null, ) /** diff --git a/vector/src/main/java/im/vector/app/SpaceStateHandlerImpl.kt b/vector/src/main/java/im/vector/app/SpaceStateHandlerImpl.kt index c36b6de17b..7bd0ac70a6 100644 --- a/vector/src/main/java/im/vector/app/SpaceStateHandlerImpl.kt +++ b/vector/src/main/java/im/vector/app/SpaceStateHandlerImpl.kt @@ -72,10 +72,13 @@ class SpaceStateHandlerImpl @Inject constructor( session: Session?, persistNow: Boolean, isForwardNavigation: Boolean, + overriddenSpaceName: String?, ) { val activeSession = session ?: activeSessionHolder.getSafeActiveSession() ?: return val spaceToLeave = selectedSpaceDataSource.currentValue?.orNull() - val spaceToSet = spaceId?.let { activeSession.getRoomSummary(spaceId) } + val spaceToSet = spaceId?.let { activeSession.getRoomSummary(spaceId) }?.let { + if (overriddenSpaceName != null) it.copy(displayName = overriddenSpaceName) else it + } val sameSpaceSelected = spaceId == spaceToLeave?.roomId if (sameSpaceSelected) { diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 12cdaecdf9..4b86c739a0 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -55,6 +55,8 @@ import im.vector.app.features.analytics.plan.MobileScreen import im.vector.app.features.analytics.plan.ViewRoom import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.disclaimer.showDisclaimerDialog +import im.vector.app.features.home.room.list.actions.RoomListSharedAction +import im.vector.app.features.home.room.list.actions.RoomListSharedActionViewModel import im.vector.app.features.matrixto.MatrixToBottomSheet import im.vector.app.features.matrixto.OriginOfMatrixTo import im.vector.app.features.navigation.Navigator @@ -110,6 +112,7 @@ class HomeActivity : VectorMenuProvider { private lateinit var sharedActionViewModel: HomeSharedActionViewModel + private lateinit var roomListSharedActionViewModel: RoomListSharedActionViewModel private val homeActivityViewModel: HomeActivityViewModel by viewModel() @@ -139,6 +142,7 @@ class HomeActivity : private val createSpaceResultLauncher = registerStartForActivityResult { activityResult -> if (activityResult.resultCode == Activity.RESULT_OK) { val spaceId = SpaceCreationActivity.getCreatedSpaceId(activityResult.data) + val spaceName = SpaceCreationActivity.getCreatedSpaceName(activityResult.data) val defaultRoomId = SpaceCreationActivity.getDefaultRoomId(activityResult.data) val isJustMe = SpaceCreationActivity.isJustMeSpace(activityResult.data) views.drawerLayout.closeDrawer(GravityCompat.START) @@ -155,8 +159,10 @@ class HomeActivity : navigator.switchToSpace( context = this, spaceId = spaceId, - postSwitchOption + postSwitchOption, + overriddenSpaceName = spaceName, ) + roomListSharedActionViewModel.post(RoomListSharedAction.CloseBottomSheet) } } } @@ -205,6 +211,7 @@ class HomeActivity : } } sharedActionViewModel = viewModelProvider[HomeSharedActionViewModel::class.java] + roomListSharedActionViewModel = viewModelProvider[RoomListSharedActionViewModel::class.java] views.drawerLayout.addDrawerListener(drawerListener) if (isFirstCreation()) { if (vectorFeatures.isNewAppLayoutEnabled()) { diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index 38db642287..c661a66767 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -177,12 +177,17 @@ class DefaultNavigator @Inject constructor( startActivity(context, intent, buildTask) } - override fun switchToSpace(context: Context, spaceId: String, postSwitchSpaceAction: Navigator.PostSwitchSpaceAction) { + override fun switchToSpace( + context: Context, + spaceId: String, + postSwitchSpaceAction: Navigator.PostSwitchSpaceAction, + overriddenSpaceName: String?, + ) { if (sessionHolder.getSafeActiveSession()?.getRoomSummary(spaceId) == null) { fatalError("Trying to open an unknown space $spaceId", vectorPreferences.failFast()) return } - spaceStateHandler.setCurrentSpace(spaceId) + spaceStateHandler.setCurrentSpace(spaceId, overriddenSpaceName = overriddenSpaceName) when (postSwitchSpaceAction) { Navigator.PostSwitchSpaceAction.None -> { // go back to home if we are showing room details? diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index 8e01b3ed50..bb59c84555 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -68,7 +68,12 @@ interface Navigator { data class OpenDefaultRoom(val roomId: String, val showShareSheet: Boolean) : PostSwitchSpaceAction() } - fun switchToSpace(context: Context, spaceId: String, postSwitchSpaceAction: PostSwitchSpaceAction) + fun switchToSpace( + context: Context, + spaceId: String, + postSwitchSpaceAction: PostSwitchSpaceAction, + overriddenSpaceName: String? = null, + ) fun openSpacePreview(context: Context, spaceId: String) diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceCreationActivity.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceCreationActivity.kt index 9fa4a53efc..aeca7021eb 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceCreationActivity.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceCreationActivity.kt @@ -104,6 +104,7 @@ class SpaceCreationActivity : SimpleFragmentActivity() { is CreateSpaceEvents.FinishSuccess -> { setResult(RESULT_OK, Intent().apply { putExtra(RESULT_DATA_CREATED_SPACE_ID, it.spaceId) + putExtra(RESULT_DATA_CREATED_SPACE_NAME, it.spaceName) putExtra(RESULT_DATA_DEFAULT_ROOM_ID, it.defaultRoomId) putExtra(RESULT_DATA_CREATED_SPACE_IS_JUST_ME, it.topology == SpaceTopology.JustMe) }) @@ -159,6 +160,7 @@ class SpaceCreationActivity : SimpleFragmentActivity() { companion object { private const val RESULT_DATA_CREATED_SPACE_ID = "RESULT_DATA_CREATED_SPACE_ID" + private const val RESULT_DATA_CREATED_SPACE_NAME = "RESULT_DATA_CREATED_SPACE_NAME" private const val RESULT_DATA_DEFAULT_ROOM_ID = "RESULT_DATA_DEFAULT_ROOM_ID" private const val RESULT_DATA_CREATED_SPACE_IS_JUST_ME = "RESULT_DATA_CREATED_SPACE_IS_JUST_ME" @@ -172,6 +174,10 @@ class SpaceCreationActivity : SimpleFragmentActivity() { return data?.extras?.getString(RESULT_DATA_CREATED_SPACE_ID) } + fun getCreatedSpaceName(data: Intent?): String? { + return data?.extras?.getString(RESULT_DATA_CREATED_SPACE_NAME) + } + fun getDefaultRoomId(data: Intent?): String? { return data?.extras?.getString(RESULT_DATA_DEFAULT_ROOM_ID) } diff --git a/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceEvents.kt b/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceEvents.kt index eeb2ca30ff..45d1700352 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceEvents.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceEvents.kt @@ -25,7 +25,7 @@ sealed class CreateSpaceEvents : VectorViewEvents { object NavigateToAdd3Pid : CreateSpaceEvents() object NavigateToChoosePrivateType : CreateSpaceEvents() object Dismiss : CreateSpaceEvents() - data class FinishSuccess(val spaceId: String, val defaultRoomId: String?, val topology: SpaceTopology?) : CreateSpaceEvents() + data class FinishSuccess(val spaceId: String, val spaceName: String, val defaultRoomId: String?, val topology: SpaceTopology?) : CreateSpaceEvents() data class ShowModalError(val errorMessage: String) : CreateSpaceEvents() object HideModalLoading : CreateSpaceEvents() data class ShowModalLoading(val message: String?) : CreateSpaceEvents() diff --git a/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModel.kt index b680f77df2..761f0f791b 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModel.kt @@ -380,6 +380,7 @@ class CreateSpaceViewModel @AssistedInject constructor( _viewEvents.post( CreateSpaceEvents.FinishSuccess( result.spaceId, + spaceName, result.childIds.firstOrNull(), state.spaceTopology ) @@ -393,6 +394,7 @@ class CreateSpaceViewModel @AssistedInject constructor( _viewEvents.post( CreateSpaceEvents.FinishSuccess( result.spaceId, + spaceName, result.childIds.firstOrNull(), state.spaceTopology )