diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift index 0e3e8c06b..e1797cc9f 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift @@ -36,20 +36,12 @@ struct HomeScreenViewState: BindableState { var isLoadingRooms: Bool = false - var unencryptedDMs: [HomeScreenRoom] { - searchFilteredRooms.filter { $0.isDirect && !$0.isEncrypted } + var visibleDMs: [HomeScreenRoom] { + searchFilteredRooms.filter { $0.isDirect } } - - var encryptedDMs: [HomeScreenRoom] { - searchFilteredRooms.filter { $0.isDirect && $0.isEncrypted} - } - - var unencryptedRooms: [HomeScreenRoom] { - searchFilteredRooms.filter { !$0.isDirect && !$0.isEncrypted } - } - - var encryptedRooms: [HomeScreenRoom] { - searchFilteredRooms.filter { !$0.isDirect && $0.isEncrypted } + + var visibleRooms: [HomeScreenRoom] { + searchFilteredRooms.filter { !$0.isDirect } } private var searchFilteredRooms: LazyFilterSequence.Elements> { diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift index 674ddb706..68514b67a 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -26,43 +26,22 @@ struct HomeScreen: View { VStack(spacing: 16.0) { if context.viewState.isLoadingRooms { VStack { - Text("Loading rooms") + Text(ElementL10n.loading) ProgressView() } } else { List { - Section("Rooms") { - ForEach(context.viewState.unencryptedRooms) { room in + Section(ElementL10n.rooms) { + ForEach(context.viewState.visibleRooms) { room in RoomCell(room: room, context: context) .listRowBackground(Color.clear) } - - let other = context.viewState.encryptedRooms - - if other.count > 0 { - DisclosureGroup("Encrypted") { - ForEach(other) { room in - RoomCell(room: room, context: context) - } - } - .listRowBackground(Color.clear) - } } - Section("People") { - ForEach(context.viewState.unencryptedDMs) { room in + Section(ElementL10n.bottomActionPeople) { + ForEach(context.viewState.visibleDMs) { room in RoomCell(room: room, context: context) - } - - let other = context.viewState.encryptedDMs - - if other.count > 0 { - DisclosureGroup("Encrypted") { - ForEach(other) { room in - RoomCell(room: room, context: context) - } - } - .listRowBackground(Color.clear) + .listRowBackground(Color.clear) } } } @@ -77,41 +56,46 @@ struct HomeScreen: View { .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .navigationBarLeading) { - HStack { - ZStack { - if let avatar = context.viewState.userAvatar { - Button { context.send(viewAction: .tapUserAvatar) } label: { - Image(uiImage: avatar) - .resizable() - .scaledToFill() - .frame(width: 40, height: 40, alignment: .center) - .mask(Circle()) - } - } else { - EmptyView() - } + Button { context.send(viewAction: .tapUserAvatar) } label: { + HStack { + userAvatarImage + .animation(.default, value: context.viewState.userAvatar) + .transition(.opacity) + + userDisplayNameView + .animation(.default, value: context.viewState.userDisplayName) + .transition(.opacity) } - .animation(.default, value: context.viewState.userAvatar) - .transition(.opacity) - - ZStack { - if let displayName = context.viewState.userDisplayName { - Button { context.send(viewAction: .tapUserAvatar) } label: { - Text("Hello, \(displayName)!") - .font(.subheadline) - .fontWeight(.bold) - .foregroundColor(.primary) - } - } else { - EmptyView() - } - } - .animation(.default, value: context.viewState.userDisplayName) - .transition(.opacity) } } } } + + @ViewBuilder + private var userAvatarImage: some View { + if let avatar = context.viewState.userAvatar { + Image(uiImage: avatar) + .resizable() + .scaledToFill() + .frame(width: 32, height: 32, alignment: .center) + .clipShape(Circle()) + .accessibilityIdentifier("userAvatarImage") + } else { + EmptyView() + } + } + + @ViewBuilder + private var userDisplayNameView: some View { + if let displayName = context.viewState.userDisplayName { + Text(displayName) + .font(.headline) + .fontWeight(.bold) + .foregroundColor(.primary) + } else { + EmptyView() + } + } } struct RoomCell: View { @@ -129,7 +113,7 @@ struct RoomCell: View { .resizable() .scaledToFill() .frame(width: 40, height: 40) - .mask(Circle()) + .clipShape(Circle()) } else { PlaceholderAvatarImage(text: room.displayName ?? room.id) .clipShape(Circle()) @@ -192,11 +176,14 @@ struct HomeScreen_Previews: PreviewProvider { MockRoomSummary(displayName: "Omega", lastMessage: eventBrief)] viewModel.updateWithRoomSummaries(roomSummaries) + viewModel.updateWithUserDisplayName("username") - if let avatarImage = UIImage(systemName: "person.fill.questionmark") { + if let avatarImage = UIImage(systemName: "person.fill") { viewModel.updateWithUserAvatar(avatarImage) } - return HomeScreen(context: viewModel.context) + return NavigationView { + HomeScreen(context: viewModel.context) + } } } diff --git a/changelog.d/pr-121.change b/changelog.d/pr-121.change new file mode 100644 index 000000000..c33bef997 --- /dev/null +++ b/changelog.d/pr-121.change @@ -0,0 +1 @@ +Flatten the room list by removing the encrypted groups.