From b8379866da5db3780716c206db60fd9af0155b50 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Thu, 30 Jun 2022 00:58:35 +0300 Subject: [PATCH 1/4] #121 Flatten the room list --- .../Screens/HomeScreen/HomeScreenModels.swift | 18 +++------- .../Screens/HomeScreen/View/HomeScreen.swift | 34 ++++--------------- 2 files changed, 11 insertions(+), 41 deletions(-) diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift index 0e3e8c06be..e1797cc9fb 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 674ddb706c..892f88e985 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -26,44 +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) - } } } .listStyle(.plain) @@ -97,7 +75,7 @@ struct HomeScreen: View { ZStack { if let displayName = context.viewState.userDisplayName { Button { context.send(viewAction: .tapUserAvatar) } label: { - Text("Hello, \(displayName)!") + Text(displayName) .font(.subheadline) .fontWeight(.bold) .foregroundColor(.primary) From c9906f3e2ce6a8c90168e39ca602dba77d3a080d Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Thu, 30 Jun 2022 01:02:24 +0300 Subject: [PATCH 2/4] #121 Add changelog --- changelog.d/pr-121.change | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/pr-121.change diff --git a/changelog.d/pr-121.change b/changelog.d/pr-121.change new file mode 100644 index 0000000000..c33bef9979 --- /dev/null +++ b/changelog.d/pr-121.change @@ -0,0 +1 @@ +Flatten the room list by removing the encrypted groups. From a9eb68f8c8fd8341eb45ed33b9fbb15d8cbbade3 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Thu, 30 Jun 2022 02:32:01 +0300 Subject: [PATCH 3/4] #121 UI tweaks for avatar and display name and preview --- .../Screens/HomeScreen/View/HomeScreen.swift | 79 +++++++++++-------- 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift index 892f88e985..1e7fd58c0b 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -41,6 +41,7 @@ struct HomeScreen: View { Section(ElementL10n.bottomActionPeople) { ForEach(context.viewState.visibleDMs) { room in RoomCell(room: room, context: context) + .listRowBackground(Color.clear) } } } @@ -55,41 +56,48 @@ 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() - } - } - .animation(.default, value: context.viewState.userAvatar) - .transition(.opacity) - - ZStack { - if let displayName = context.viewState.userDisplayName { - Button { context.send(viewAction: .tapUserAvatar) } label: { - Text(displayName) - .font(.subheadline) - .fontWeight(.bold) - .foregroundColor(.primary) - } - } else { - EmptyView() - } - } - .animation(.default, value: context.viewState.userDisplayName) - .transition(.opacity) + HStack(spacing: 0) { + userAvatarImage + .animation(.default, value: context.viewState.userAvatar) + .transition(.opacity) + + userDisplayNameView + .animation(.default, value: context.viewState.userDisplayName) + .transition(.opacity) } } } } + + @ViewBuilder + private var userAvatarImage: some View { + if let avatar = context.viewState.userAvatar { + Button { context.send(viewAction: .tapUserAvatar) } label: { + 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 { + Button { context.send(viewAction: .tapUserAvatar) } label: { + Text(displayName) + .font(.headline) + .fontWeight(.bold) + .foregroundColor(.primary) + } + } else { + EmptyView() + } + } } struct RoomCell: View { @@ -107,7 +115,7 @@ struct RoomCell: View { .resizable() .scaledToFill() .frame(width: 40, height: 40) - .mask(Circle()) + .clipShape(Circle()) } else { PlaceholderAvatarImage(text: room.displayName ?? room.id) .clipShape(Circle()) @@ -170,11 +178,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) + } } } From 4d98c91f0db182dc621c37d34a262b8f495077f9 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Thu, 30 Jun 2022 11:52:49 +0300 Subject: [PATCH 4/4] #121 Make avatar and label one button --- .../Screens/HomeScreen/View/HomeScreen.swift | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift index 1e7fd58c0b..68514b67ac 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -56,14 +56,16 @@ struct HomeScreen: View { .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .navigationBarLeading) { - HStack(spacing: 0) { - userAvatarImage - .animation(.default, value: context.viewState.userAvatar) - .transition(.opacity) + 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) + userDisplayNameView + .animation(.default, value: context.viewState.userDisplayName) + .transition(.opacity) + } } } } @@ -72,14 +74,12 @@ struct HomeScreen: View { @ViewBuilder private var userAvatarImage: some View { if let avatar = context.viewState.userAvatar { - Button { context.send(viewAction: .tapUserAvatar) } label: { - Image(uiImage: avatar) - .resizable() - .scaledToFill() - .frame(width: 32, height: 32, alignment: .center) - .clipShape(Circle()) - .accessibilityIdentifier("userAvatarImage") - } + Image(uiImage: avatar) + .resizable() + .scaledToFill() + .frame(width: 32, height: 32, alignment: .center) + .clipShape(Circle()) + .accessibilityIdentifier("userAvatarImage") } else { EmptyView() } @@ -88,12 +88,10 @@ struct HomeScreen: View { @ViewBuilder private var userDisplayNameView: some View { if let displayName = context.viewState.userDisplayName { - Button { context.send(viewAction: .tapUserAvatar) } label: { - Text(displayName) - .font(.headline) - .fontWeight(.bold) - .foregroundColor(.primary) - } + Text(displayName) + .font(.headline) + .fontWeight(.bold) + .foregroundColor(.primary) } else { EmptyView() }