Fixes space header showing "Empty Space" after switching to newly created space

This commit is contained in:
ericdecanini 2022-08-18 14:09:22 +02:00
parent fc301c8a2e
commit 2fb794dd59
8 changed files with 36 additions and 6 deletions

View File

@ -42,12 +42,14 @@ interface SpaceStateHandler : DefaultLifecycleObserver {
* @param session the current active session * @param session the current active session
* @param persistNow if true, the current space will immediately be persisted in shared prefs * @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 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( fun setCurrentSpace(
spaceId: String?, spaceId: String?,
session: Session? = null, session: Session? = null,
persistNow: Boolean = false, persistNow: Boolean = false,
isForwardNavigation: Boolean = true, isForwardNavigation: Boolean = true,
overriddenSpaceName: String? = null,
) )
/** /**

View File

@ -72,10 +72,13 @@ class SpaceStateHandlerImpl @Inject constructor(
session: Session?, session: Session?,
persistNow: Boolean, persistNow: Boolean,
isForwardNavigation: Boolean, isForwardNavigation: Boolean,
overriddenSpaceName: String?,
) { ) {
val activeSession = session ?: activeSessionHolder.getSafeActiveSession() ?: return val activeSession = session ?: activeSessionHolder.getSafeActiveSession() ?: return
val spaceToLeave = selectedSpaceDataSource.currentValue?.orNull() 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 val sameSpaceSelected = spaceId == spaceToLeave?.roomId
if (sameSpaceSelected) { if (sameSpaceSelected) {

View File

@ -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.analytics.plan.ViewRoom
import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.crypto.recover.SetupMode
import im.vector.app.features.disclaimer.showDisclaimerDialog 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.MatrixToBottomSheet
import im.vector.app.features.matrixto.OriginOfMatrixTo import im.vector.app.features.matrixto.OriginOfMatrixTo
import im.vector.app.features.navigation.Navigator import im.vector.app.features.navigation.Navigator
@ -110,6 +112,7 @@ class HomeActivity :
VectorMenuProvider { VectorMenuProvider {
private lateinit var sharedActionViewModel: HomeSharedActionViewModel private lateinit var sharedActionViewModel: HomeSharedActionViewModel
private lateinit var roomListSharedActionViewModel: RoomListSharedActionViewModel
private val homeActivityViewModel: HomeActivityViewModel by viewModel() private val homeActivityViewModel: HomeActivityViewModel by viewModel()
@ -139,6 +142,7 @@ class HomeActivity :
private val createSpaceResultLauncher = registerStartForActivityResult { activityResult -> private val createSpaceResultLauncher = registerStartForActivityResult { activityResult ->
if (activityResult.resultCode == Activity.RESULT_OK) { if (activityResult.resultCode == Activity.RESULT_OK) {
val spaceId = SpaceCreationActivity.getCreatedSpaceId(activityResult.data) val spaceId = SpaceCreationActivity.getCreatedSpaceId(activityResult.data)
val spaceName = SpaceCreationActivity.getCreatedSpaceName(activityResult.data)
val defaultRoomId = SpaceCreationActivity.getDefaultRoomId(activityResult.data) val defaultRoomId = SpaceCreationActivity.getDefaultRoomId(activityResult.data)
val isJustMe = SpaceCreationActivity.isJustMeSpace(activityResult.data) val isJustMe = SpaceCreationActivity.isJustMeSpace(activityResult.data)
views.drawerLayout.closeDrawer(GravityCompat.START) views.drawerLayout.closeDrawer(GravityCompat.START)
@ -155,8 +159,10 @@ class HomeActivity :
navigator.switchToSpace( navigator.switchToSpace(
context = this, context = this,
spaceId = spaceId, spaceId = spaceId,
postSwitchOption postSwitchOption,
overriddenSpaceName = spaceName,
) )
roomListSharedActionViewModel.post(RoomListSharedAction.CloseBottomSheet)
} }
} }
} }
@ -205,6 +211,7 @@ class HomeActivity :
} }
} }
sharedActionViewModel = viewModelProvider[HomeSharedActionViewModel::class.java] sharedActionViewModel = viewModelProvider[HomeSharedActionViewModel::class.java]
roomListSharedActionViewModel = viewModelProvider[RoomListSharedActionViewModel::class.java]
views.drawerLayout.addDrawerListener(drawerListener) views.drawerLayout.addDrawerListener(drawerListener)
if (isFirstCreation()) { if (isFirstCreation()) {
if (vectorFeatures.isNewAppLayoutEnabled()) { if (vectorFeatures.isNewAppLayoutEnabled()) {

View File

@ -177,12 +177,17 @@ class DefaultNavigator @Inject constructor(
startActivity(context, intent, buildTask) 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) { if (sessionHolder.getSafeActiveSession()?.getRoomSummary(spaceId) == null) {
fatalError("Trying to open an unknown space $spaceId", vectorPreferences.failFast()) fatalError("Trying to open an unknown space $spaceId", vectorPreferences.failFast())
return return
} }
spaceStateHandler.setCurrentSpace(spaceId) spaceStateHandler.setCurrentSpace(spaceId, overriddenSpaceName = overriddenSpaceName)
when (postSwitchSpaceAction) { when (postSwitchSpaceAction) {
Navigator.PostSwitchSpaceAction.None -> { Navigator.PostSwitchSpaceAction.None -> {
// go back to home if we are showing room details? // go back to home if we are showing room details?

View File

@ -68,7 +68,12 @@ interface Navigator {
data class OpenDefaultRoom(val roomId: String, val showShareSheet: Boolean) : PostSwitchSpaceAction() 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) fun openSpacePreview(context: Context, spaceId: String)

View File

@ -104,6 +104,7 @@ class SpaceCreationActivity : SimpleFragmentActivity() {
is CreateSpaceEvents.FinishSuccess -> { is CreateSpaceEvents.FinishSuccess -> {
setResult(RESULT_OK, Intent().apply { setResult(RESULT_OK, Intent().apply {
putExtra(RESULT_DATA_CREATED_SPACE_ID, it.spaceId) 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_DEFAULT_ROOM_ID, it.defaultRoomId)
putExtra(RESULT_DATA_CREATED_SPACE_IS_JUST_ME, it.topology == SpaceTopology.JustMe) putExtra(RESULT_DATA_CREATED_SPACE_IS_JUST_ME, it.topology == SpaceTopology.JustMe)
}) })
@ -159,6 +160,7 @@ class SpaceCreationActivity : SimpleFragmentActivity() {
companion object { companion object {
private const val RESULT_DATA_CREATED_SPACE_ID = "RESULT_DATA_CREATED_SPACE_ID" 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_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" 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) 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? { fun getDefaultRoomId(data: Intent?): String? {
return data?.extras?.getString(RESULT_DATA_DEFAULT_ROOM_ID) return data?.extras?.getString(RESULT_DATA_DEFAULT_ROOM_ID)
} }

View File

@ -25,7 +25,7 @@ sealed class CreateSpaceEvents : VectorViewEvents {
object NavigateToAdd3Pid : CreateSpaceEvents() object NavigateToAdd3Pid : CreateSpaceEvents()
object NavigateToChoosePrivateType : CreateSpaceEvents() object NavigateToChoosePrivateType : CreateSpaceEvents()
object Dismiss : 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() data class ShowModalError(val errorMessage: String) : CreateSpaceEvents()
object HideModalLoading : CreateSpaceEvents() object HideModalLoading : CreateSpaceEvents()
data class ShowModalLoading(val message: String?) : CreateSpaceEvents() data class ShowModalLoading(val message: String?) : CreateSpaceEvents()

View File

@ -380,6 +380,7 @@ class CreateSpaceViewModel @AssistedInject constructor(
_viewEvents.post( _viewEvents.post(
CreateSpaceEvents.FinishSuccess( CreateSpaceEvents.FinishSuccess(
result.spaceId, result.spaceId,
spaceName,
result.childIds.firstOrNull(), result.childIds.firstOrNull(),
state.spaceTopology state.spaceTopology
) )
@ -393,6 +394,7 @@ class CreateSpaceViewModel @AssistedInject constructor(
_viewEvents.post( _viewEvents.post(
CreateSpaceEvents.FinishSuccess( CreateSpaceEvents.FinishSuccess(
result.spaceId, result.spaceId,
spaceName,
result.childIds.firstOrNull(), result.childIds.firstOrNull(),
state.spaceTopology state.spaceTopology
) )