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 cc202868cc..b4943ce1b4 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
@@ -199,43 +199,13 @@ class HomeActivity :
when (sharedAction) {
is HomeActivitySharedAction.OpenDrawer -> views.drawerLayout.openDrawer(GravityCompat.START)
is HomeActivitySharedAction.CloseDrawer -> views.drawerLayout.closeDrawer(GravityCompat.START)
- is HomeActivitySharedAction.OpenGroup -> {
- views.drawerLayout.closeDrawer(GravityCompat.START)
-
- // Temporary
- // When switching from space to group or group to space, we need to reload the fragment
- // To be removed when dropping legacy groups
- if (sharedAction.clearFragment) {
- replaceFragment(views.homeDetailFragmentContainer, HomeDetailFragment::class.java, allowStateLoss = true)
- } else {
- // nop
- }
- // we might want to delay that to avoid having the drawer animation lagging
- // would be probably better to let the drawer do that? in the on closed callback?
- }
- is HomeActivitySharedAction.OpenSpacePreview -> {
- startActivity(SpacePreviewActivity.newIntent(this, sharedAction.spaceId))
- }
- is HomeActivitySharedAction.AddSpace -> {
- createSpaceResultLauncher.launch(SpaceCreationActivity.newIntent(this))
- }
- is HomeActivitySharedAction.ShowSpaceSettings -> {
- // open bottom sheet
- SpaceSettingsMenuBottomSheet
- .newInstance(sharedAction.spaceId, object : SpaceSettingsMenuBottomSheet.InteractionListener {
- override fun onShareSpaceSelected(spaceId: String) {
- ShareSpaceBottomSheet.show(supportFragmentManager, spaceId)
- }
- })
- .show(supportFragmentManager, "SPACE_SETTINGS")
- }
- is HomeActivitySharedAction.OpenSpaceInvite -> {
- SpaceInviteBottomSheet.newInstance(sharedAction.spaceId)
- .show(supportFragmentManager, "SPACE_INVITE")
- }
- HomeActivitySharedAction.SendSpaceFeedBack -> {
- bugReporter.openBugReportScreen(this, ReportType.SPACE_BETA_FEEDBACK)
- }
+ is HomeActivitySharedAction.OpenGroup -> openGroup(sharedAction.shouldClearFragment)
+ is HomeActivitySharedAction.OpenSpacePreview -> startActivity(SpacePreviewActivity.newIntent(this, sharedAction.spaceId))
+ is HomeActivitySharedAction.AddSpace -> createSpaceResultLauncher.launch(SpaceCreationActivity.newIntent(this))
+ is HomeActivitySharedAction.ShowSpaceSettings -> showSpaceSettings(sharedAction.spaceId)
+ is HomeActivitySharedAction.OpenSpaceInvite -> openSpaceInvite(sharedAction.spaceId)
+ HomeActivitySharedAction.SendSpaceFeedBack -> bugReporter.openBugReportScreen(this, ReportType.SPACE_BETA_FEEDBACK)
+ HomeActivitySharedAction.CloseGroup -> closeGroup()
}
}
.launchIn(lifecycleScope)
@@ -272,6 +242,37 @@ class HomeActivity :
homeActivityViewModel.handle(HomeActivityViewActions.ViewStarted)
}
+ private fun openGroup(shouldClearFragment: Boolean) {
+ views.drawerLayout.closeDrawer(GravityCompat.START)
+
+ // When switching from space to group or group to space, we need to reload the fragment
+ if (shouldClearFragment) {
+ replaceFragment(views.homeDetailFragmentContainer, HomeDetailFragment::class.java, allowStateLoss = true)
+ } else {
+ // do nothing
+ }
+ }
+
+ private fun showSpaceSettings(spaceId: String) {
+ // open bottom sheet
+ SpaceSettingsMenuBottomSheet
+ .newInstance(spaceId, object : SpaceSettingsMenuBottomSheet.InteractionListener {
+ override fun onShareSpaceSelected(spaceId: String) {
+ ShareSpaceBottomSheet.show(supportFragmentManager, spaceId)
+ }
+ })
+ .show(supportFragmentManager, "SPACE_SETTINGS")
+ }
+
+ private fun openSpaceInvite(spaceId: String) {
+ SpaceInviteBottomSheet.newInstance(spaceId)
+ .show(supportFragmentManager, "SPACE_INVITE")
+ }
+
+ private fun closeGroup() {
+ views.drawerLayout.openDrawer(GravityCompat.START)
+ }
+
private fun handleShowAnalyticsOptIn() {
navigator.openAnalyticsOptIn(this)
}
diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivitySharedAction.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivitySharedAction.kt
index 6047a1e55e..cebde7fe0a 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeActivitySharedAction.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeActivitySharedAction.kt
@@ -24,7 +24,8 @@ import im.vector.app.core.platform.VectorSharedAction
sealed class HomeActivitySharedAction : VectorSharedAction {
object OpenDrawer : HomeActivitySharedAction()
object CloseDrawer : HomeActivitySharedAction()
- data class OpenGroup(val clearFragment: Boolean) : HomeActivitySharedAction()
+ data class OpenGroup(val shouldClearFragment: Boolean) : HomeActivitySharedAction()
+ object CloseGroup : HomeActivitySharedAction()
object AddSpace : HomeActivitySharedAction()
data class OpenSpacePreview(val spaceId: String) : HomeActivitySharedAction()
data class OpenSpaceInvite(val spaceId: String) : HomeActivitySharedAction()
diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
index 2753ba817d..9ab1ad60e7 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
@@ -60,6 +60,11 @@ import org.matrix.android.sdk.api.session.group.model.GroupSummary
import org.matrix.android.sdk.api.session.room.model.RoomSummary
import javax.inject.Inject
+/*
+ * TODO:
+ * 1) Change the hamburger menu to a back button when in a space
+ * 2) Make the back navigation button follow the same behaviour
+ */
class HomeDetailFragment @Inject constructor(
private val avatarRenderer: AvatarRenderer,
private val colorProvider: ColorProvider,
@@ -130,12 +135,8 @@ class HomeDetailFragment @Inject constructor(
viewModel.onEach(HomeDetailViewState::roomGroupingMethod) { roomGroupingMethod ->
when (roomGroupingMethod) {
- is RoomGroupingMethod.ByLegacyGroup -> {
- onGroupChange(roomGroupingMethod.groupSummary)
- }
- is RoomGroupingMethod.BySpace -> {
- onSpaceChange(roomGroupingMethod.spaceSummary)
- }
+ is RoomGroupingMethod.ByLegacyGroup -> onGroupChange(roomGroupingMethod.groupSummary)
+ is RoomGroupingMethod.BySpace -> onSpaceChange(roomGroupingMethod.spaceSummary)
}
}
@@ -147,6 +148,10 @@ class HomeDetailFragment @Inject constructor(
updateTabVisibilitySafely(R.id.bottom_action_dial_pad, showDialPadTab)
}
+ views.groupToolbarNavigateUp.setOnClickListener {
+ navigateUpOneParentSpace()
+ }
+
viewModel.observeViewEvents { viewEvent ->
when (viewEvent) {
HomeDetailViewEvents.CallStarted -> handleCallStarted()
@@ -157,7 +162,6 @@ class HomeDetailFragment @Inject constructor(
unknownDeviceDetectorSharedViewModel.onEach { state ->
state.unknownSessions.invoke()?.let { unknownDevices ->
-// Timber.v("## Detector Triggerred in fragment - ${unknownDevices.firstOrNull()}")
if (unknownDevices.firstOrNull()?.currentSessionTrust == true) {
val uid = "review_login"
alertManager.cancelAlert(uid)
@@ -190,6 +194,15 @@ class HomeDetailFragment @Inject constructor(
}
}
+ private fun navigateUpOneParentSpace() = with(appStateHandler) {
+ val parentId = when (val roomGroupingMethod = getCurrentRoomGroupingMethod()) {
+ is RoomGroupingMethod.BySpace -> roomGroupingMethod.spaceSummary?.flattenParentIds?.firstOrNull { it.isNotBlank() }
+ else -> null
+ }
+ setCurrentSpace(parentId)
+ sharedActionViewModel.post(HomeActivitySharedAction.CloseGroup)
+ }
+
private fun handleCallStarted() {
dismissLoadingDialog()
val fragmentTag = HomeTab.DialPad.toFragmentTag()
@@ -203,20 +216,16 @@ class HomeDetailFragment @Inject constructor(
override fun onResume() {
super.onResume()
- // update notification tab if needed
updateTabVisibilitySafely(R.id.bottom_action_notification, vectorPreferences.labAddNotificationTab())
callManager.checkForProtocolsSupportIfNeeded()
+ refreshSpaceState()
+ }
- // Current space/group is not live so at least refresh toolbar on resume
- appStateHandler.getCurrentRoomGroupingMethod()?.let { roomGroupingMethod ->
- when (roomGroupingMethod) {
- is RoomGroupingMethod.ByLegacyGroup -> {
- onGroupChange(roomGroupingMethod.groupSummary)
- }
- is RoomGroupingMethod.BySpace -> {
- onSpaceChange(roomGroupingMethod.spaceSummary)
- }
- }
+ private fun refreshSpaceState() {
+ when (val roomGroupingMethod = appStateHandler.getCurrentRoomGroupingMethod()) {
+ is RoomGroupingMethod.ByLegacyGroup -> onGroupChange(roomGroupingMethod.groupSummary)
+ is RoomGroupingMethod.BySpace -> onSpaceChange(roomGroupingMethod.spaceSummary)
+ else -> Unit
}
}
@@ -260,12 +269,12 @@ class HomeDetailFragment @Inject constructor(
viewBinder = VerificationVectorAlert.ViewBinder(user, avatarRenderer)
colorInt = colorProvider.getColorFromAttribute(R.attr.colorPrimary)
contentAction = Runnable {
- (weakCurrentActivity?.get() as? VectorBaseActivity<*>)?.let {
+ (weakCurrentActivity?.get() as? VectorBaseActivity<*>)?.let { activity ->
// mark as ignored to avoid showing it again
unknownDeviceDetectorSharedViewModel.handle(
UnknownDeviceDetectorSharedViewModel.Action.IgnoreDevice(oldUnverified.mapNotNull { it.deviceId })
)
- it.navigator.openSettings(it, EXTRA_DIRECT_ACCESS_SECURITY_PRIVACY_MANAGE_SESSIONS)
+ activity.navigator.openSettings(activity, EXTRA_DIRECT_ACCESS_SECURITY_PRIVACY_MANAGE_SESSIONS)
}
}
dismissedAction = Runnable {
@@ -289,9 +298,13 @@ class HomeDetailFragment @Inject constructor(
private fun onSpaceChange(spaceSummary: RoomSummary?) {
if (spaceSummary == null) {
views.groupToolbarSpaceTitleView.isVisible = false
+ views.groupToolbarAvatarImageView.isVisible = true
+ views.groupToolbarNavigateUp.isVisible = false
} else {
views.groupToolbarSpaceTitleView.isVisible = true
views.groupToolbarSpaceTitleView.text = spaceSummary.displayName
+ views.groupToolbarAvatarImageView.isVisible = false
+ views.groupToolbarNavigateUp.isVisible = true
}
}
@@ -324,11 +337,11 @@ class HomeDetailFragment @Inject constructor(
withState(viewModel) {
when (it.roomGroupingMethod) {
is RoomGroupingMethod.ByLegacyGroup -> {
- // nothing do far
+ // do nothing
}
is RoomGroupingMethod.BySpace -> {
- it.roomGroupingMethod.spaceSummary?.let {
- sharedActionViewModel.post(HomeActivitySharedAction.ShowSpaceSettings(it.roomId))
+ it.roomGroupingMethod.spaceSummary?.let { spaceSummary ->
+ sharedActionViewModel.post(HomeActivitySharedAction.ShowSpaceSettings(spaceSummary.roomId))
}
}
}
@@ -348,17 +361,6 @@ class HomeDetailFragment @Inject constructor(
viewModel.handle(HomeDetailAction.SwitchTab(tab))
true
}
-
-// val menuView = bottomNavigationView.getChildAt(0) as BottomNavigationMenuView
-
-// bottomNavigationView.getOrCreateBadge()
-// menuView.forEachIndexed { index, view ->
-// val itemView = view as BottomNavigationItemView
-// val badgeLayout = LayoutInflater.from(requireContext()).inflate(R.layout.vector_home_badge_unread_layout, menuView, false)
-// val unreadCounterBadgeView: UnreadCounterBadgeView = badgeLayout.findViewById(R.id.actionUnreadCounterBadgeView)
-// itemView.addView(badgeLayout)
-// unreadCounterBadgeViews.add(index, unreadCounterBadgeView)
-// }
}
private fun updateUIForTab(tab: HomeTab) {
diff --git a/vector/src/main/res/drawable/ic_arrow_back.xml b/vector/src/main/res/drawable/ic_arrow_back.xml
new file mode 100644
index 0000000000..8452791cfd
--- /dev/null
+++ b/vector/src/main/res/drawable/ic_arrow_back.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/vector/src/main/res/layout/fragment_home_detail.xml b/vector/src/main/res/layout/fragment_home_detail.xml
index a53f001125..c734f55a4e 100644
--- a/vector/src/main/res/layout/fragment_home_detail.xml
+++ b/vector/src/main/res/layout/fragment_home_detail.xml
@@ -38,6 +38,7 @@
android:layout_height="40dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
+ android:visibility="gone"
android:contentDescription="@string/a11y_open_drawer"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -74,6 +75,20 @@
+
+
-
\ No newline at end of file
+
diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml
index 3e6bdad70b..c0421c7d6c 100644
--- a/vector/src/main/res/values/strings.xml
+++ b/vector/src/main/res/values/strings.xml
@@ -1777,6 +1777,7 @@
Send attachment
Open the navigation drawer
+ Navigate up one space
Open the create room menu
Close the create room menu…
Create a new direct conversation