Skip to content

Commit

Permalink
Merge pull request #99 from gzerad/feature/end-call-feedback
Browse files Browse the repository at this point in the history
Implement call end feedback
  • Loading branch information
gzerad authored Sep 20, 2024
2 parents f0db027 + 561c357 commit 1e8da63
Show file tree
Hide file tree
Showing 9 changed files with 462 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ let package = Package(
],
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(url: "https://github.com/100mslive/100ms-roomkit-models-ios", from: "1.12.0"),
.package(url: "https://github.com/100mslive/100ms-roomkit-models-ios", from: "1.13.0"),
.package(url: "https://github.com/100mslive/Popovers", from: "1.0.0"),
.package(url: "https://github.com/airbnb/lottie-spm.git", from: "4.3.0"),
.package(url: "https://github.com/100mslive/100ms-noise-cancellation-models-ios", from: "1.0.0"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "User Music.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "User Music 1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "User Music 2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ class HMSRoomInfoModel: ObservableObject {
@Published var isNoiseCancellationOnByDefault: Bool = false
@Published var defaultVirtualBackgroundUrl: URL? = nil

@Published var defaultLeaveScreen: HMSRoomLayout.LayoutData.Screens.Leave.DefaultLeaveScreen?

var roomLayout: HMSRoomLayout? {
didSet {
update()
Expand Down Expand Up @@ -125,5 +127,7 @@ class HMSRoomInfoModel: ObservableObject {
defaultVirtualBackgroundUrl = URL(string: defaultVBMedia.url)
}
}

defaultLeaveScreen = layoutData.screens?.leave?.default
}
}
99 changes: 99 additions & 0 deletions Sources/HMSRoomKit/UIComponents/Leave/FlexibleView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
//
// FlexibleView.swift
// HMSRoomKitPreview
//
// Created by Pawan Dixit on 7/29/24.
//

import SwiftUI

struct FlexibleView<Data: Collection, Content: View>: View where Data.Element: Hashable {
let data: Data
let spacing: CGFloat
let alignment: HorizontalAlignment
let content: (Data.Element) -> Content
@State private var availableWidth: CGFloat = 0

var body: some View {
ZStack(alignment: Alignment(horizontal: alignment, vertical: .center)) {
Color.clear
.frame(height: 1)
.readSize { size in
availableWidth = size.width
}

_FlexibleView(
availableWidth: availableWidth,
data: data,
spacing: spacing,
alignment: alignment,
content: content
)
}
}
}

struct _FlexibleView<Data: Collection, Content: View>: View where Data.Element: Hashable {
let availableWidth: CGFloat
let data: Data
let spacing: CGFloat
let alignment: HorizontalAlignment
let content: (Data.Element) -> Content
@State var elementsSize: [Data.Element: CGSize] = [:]

var body : some View {
VStack(alignment: alignment, spacing: spacing) {
ForEach(computeRows(), id: \.self) { rowElements in
HStack(spacing: spacing) {
ForEach(rowElements, id: \.self) { element in
content(element)
.fixedSize()
.readSize { size in
elementsSize[element] = size
}
}
}
}
}
}

func computeRows() -> [[Data.Element]] {
var rows: [[Data.Element]] = [[]]
var currentRow = 0
var remainingWidth = availableWidth

for element in data {
let elementSize = elementsSize[element, default: CGSize(width: availableWidth, height: 1)]

if remainingWidth - (elementSize.width + spacing) >= 0 {
rows[currentRow].append(element)
} else {
currentRow = currentRow + 1
rows.append([element])
remainingWidth = availableWidth
}

remainingWidth = remainingWidth - (elementSize.width + spacing)
}

return rows
}
}

extension View {
func readSize(onChange: @escaping (CGSize) -> Void) -> some View {
background(
GeometryReader { geometryProxy in
Color.clear
.preference(key: HMSSizePreferenceKey.self, value: geometryProxy.size)
}
)
.onPreferenceChange(HMSSizePreferenceKey.self, perform: onChange)
}
}

private struct HMSSizePreferenceKey: PreferenceKey {
static var defaultValue: CGSize = .zero
static func reduce(value: inout CGSize, nextValue: () -> CGSize) {}
}

Loading

0 comments on commit 1e8da63

Please sign in to comment.