-
Notifications
You must be signed in to change notification settings - Fork 26
[Enhancement]Implement static frame pipeline for PiP #724
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Enhancement]Implement static frame pipeline for PiP #724
Conversation
Public Interface+ public struct PictureInPictureParticipantImageView: View
+
+ public var body: some View
+
+
+ public init(imageURL: URL? = nil,@ViewBuilder contentProvider: () -> some View)
public final class SerialActorQueue: Sendable
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
+ public func cancelAll()
- public func sync(_ block: @Sendable @escaping () async throws -> Void)async throws
+ public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
+ public func sync(_ block: @Sendable @escaping () async throws -> Void)async throws |
SDK Size
|
02ce9a8
to
fae5854
Compare
Public Interface+ public struct PictureInPictureParticipantImageView: View
+
+ public var body: some View
+
+
+ public init(imageURL: URL? = nil,@ViewBuilder contentProvider: () -> some View)
public final class SerialActorQueue: Sendable
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
+ public func cancelAll()
- public func sync(_ block: @Sendable @escaping () async throws -> Void)async throws
+ public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
+ public func sync(_ block: @Sendable @escaping () async throws -> Void)async throws |
1a1dc2d
to
febb279
Compare
Public Interface+ public struct PictureInPictureParticipantImageView: View
+
+ public var body: some View
+
+
+ public init(imageURL: URL? = nil,@ViewBuilder contentProvider: () -> some View)
public final class SerialActorQueue: Sendable
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
+ public func cancelAll()
- public func sync(_ block: @Sendable @escaping () async throws -> Void)async throws
+ public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
+ public func sync(_ block: @Sendable @escaping () async throws -> Void)async throws |
febb279
to
3a3058f
Compare
Public Interface+ public struct PictureInPictureParticipantImageView: View
+
+ public var body: some View
+
+
+ public init(imageURL: URL? = nil,@ViewBuilder contentProvider: () -> some View)
public final class SerialActorQueue: Sendable
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
+ public func cancelAll()
- public func sync(_ block: @Sendable @escaping () async throws -> Void)async throws
+ public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
+ public func sync(_ block: @Sendable @escaping () async throws -> Void)async throws |
8b9dd39
to
8fb61a0
Compare
Public Interface+ public struct PictureInPictureParticipantImageView: View
+
+ public var body: some View
+
+
+ public init(imageURL: URL? = nil,@ViewBuilder contentProvider: () -> some View)
|
8fb61a0
to
c6881fd
Compare
Public Interface🚀 No changes affecting the public interface. |
1 similar comment
Public Interface🚀 No changes affecting the public interface. |
a1a26ec
to
e6f762c
Compare
Public Interface🚀 No changes affecting the public interface. |
1 similar comment
Public Interface🚀 No changes affecting the public interface. |
f12c77a
to
ae5dcdd
Compare
Public Interface+ public final class AnyViewFactory: ViewFactory
+
+ public init(_ factory: T)
+
+
+ public func makeCallControlsView(viewModel: CallViewModel)-> some View
+ public func makeOutgoingCallView(viewModel: CallViewModel)-> some View
+ public func makeJoiningCallView(viewModel: CallViewModel)-> some View
+ public func makeIncomingCallView(viewModel: CallViewModel,callInfo: IncomingCall)-> some View
+ public func makeWaitingLocalUserView(viewModel: CallViewModel)-> some View
+ public func makeVideoParticipantsView(viewModel: CallViewModel,availableFrame: CGRect,onChangeTrackVisibility: @escaping @MainActor(CallParticipant, Bool) -> Void)-> some View
+ public func makeVideoParticipantView(participant: CallParticipant,id: String,availableFrame: CGRect,contentMode: UIView.ContentMode,customData: [String: RawJSON],call: Call?)-> some View
+ public func makeVideoCallParticipantModifier(participant: CallParticipant,call: Call?,availableFrame: CGRect,ratio: CGFloat,showAllInfo: Bool)-> any ViewModifier
+ public func makeCallView(viewModel: CallViewModel)-> some View
+ public func makeMinimizedCallView(viewModel: CallViewModel)-> some View
+ public func makeCallTopView(viewModel: CallViewModel)-> some View
+ public func makeParticipantsListView(viewModel: CallViewModel)-> some View
+ public func makeScreenSharingView(viewModel: CallViewModel,screensharingSession: ScreenSharingSession,availableFrame: CGRect)-> some View
+ public func makeLobbyView(viewModel: CallViewModel,lobbyInfo: LobbyInfo,callSettings: Binding<CallSettings>)-> some View
+ public func makeReconnectionView(viewModel: CallViewModel)-> some View
+ public func makeLocalParticipantViewModifier(localParticipant: CallParticipant,callSettings: Binding<CallSettings>,call: Call?)-> any ViewModifier
+ public func makeUserAvatar(_ user: User,with options: UserAvatarViewOptions)-> some View
|
ae5dcdd
to
f78066b
Compare
Public Interface+ public final class AnyViewFactory: ViewFactory
+
+ public init(_ factory: T)
+
+
+ public func makeCallControlsView(viewModel: CallViewModel)-> some View
+ public func makeOutgoingCallView(viewModel: CallViewModel)-> some View
+ public func makeJoiningCallView(viewModel: CallViewModel)-> some View
+ public func makeIncomingCallView(viewModel: CallViewModel,callInfo: IncomingCall)-> some View
+ public func makeWaitingLocalUserView(viewModel: CallViewModel)-> some View
+ public func makeVideoParticipantsView(viewModel: CallViewModel,availableFrame: CGRect,onChangeTrackVisibility: @escaping @MainActor(CallParticipant, Bool) -> Void)-> some View
+ public func makeVideoParticipantView(participant: CallParticipant,id: String,availableFrame: CGRect,contentMode: UIView.ContentMode,customData: [String: RawJSON],call: Call?)-> some View
+ public func makeVideoCallParticipantModifier(participant: CallParticipant,call: Call?,availableFrame: CGRect,ratio: CGFloat,showAllInfo: Bool)-> any ViewModifier
+ public func makeCallView(viewModel: CallViewModel)-> some View
+ public func makeMinimizedCallView(viewModel: CallViewModel)-> some View
+ public func makeCallTopView(viewModel: CallViewModel)-> some View
+ public func makeParticipantsListView(viewModel: CallViewModel)-> some View
+ public func makeScreenSharingView(viewModel: CallViewModel,screensharingSession: ScreenSharingSession,availableFrame: CGRect)-> some View
+ public func makeLobbyView(viewModel: CallViewModel,lobbyInfo: LobbyInfo,callSettings: Binding<CallSettings>)-> some View
+ public func makeReconnectionView(viewModel: CallViewModel)-> some View
+ public func makeLocalParticipantViewModifier(localParticipant: CallParticipant,callSettings: Binding<CallSettings>,call: Call?)-> any ViewModifier
+ public func makeUserAvatar(_ user: User,with options: UserAvatarViewOptions)-> some View
+ public protocol InternetConnectionProtocol
+ public enum Status: Equatable
+
+ case unknown
+ case available(Quality)
+ case unavailable
+ public enum Quality: Equatable
+
+ case great
+ case expensive
+ case constrained
+ extension InternetConnection: InjectionKey
+
+ nonisolated public static var currentValue: InternetConnectionProtocol
+ extension InternetConnection.Status
+
+ public var isAvailable: Bool
+ public final class InternetConnection: @unchecked Sendable
|
Public Interface+ public final class InternetConnection: @unchecked Sendable
+ public enum Quality: Equatable
+
+ case great
+ case expensive
+ case constrained
+ public final class AnyViewFactory: ViewFactory
+
+ public init(_ factory: T)
+
+
+ public func makeCallControlsView(viewModel: CallViewModel)-> some View
+ public func makeOutgoingCallView(viewModel: CallViewModel)-> some View
+ public func makeJoiningCallView(viewModel: CallViewModel)-> some View
+ public func makeIncomingCallView(viewModel: CallViewModel,callInfo: IncomingCall)-> some View
+ public func makeWaitingLocalUserView(viewModel: CallViewModel)-> some View
+ public func makeVideoParticipantsView(viewModel: CallViewModel,availableFrame: CGRect,onChangeTrackVisibility: @escaping @MainActor(CallParticipant, Bool) -> Void)-> some View
+ public func makeVideoParticipantView(participant: CallParticipant,id: String,availableFrame: CGRect,contentMode: UIView.ContentMode,customData: [String: RawJSON],call: Call?)-> some View
+ public func makeVideoCallParticipantModifier(participant: CallParticipant,call: Call?,availableFrame: CGRect,ratio: CGFloat,showAllInfo: Bool)-> any ViewModifier
+ public func makeCallView(viewModel: CallViewModel)-> some View
+ public func makeMinimizedCallView(viewModel: CallViewModel)-> some View
+ public func makeCallTopView(viewModel: CallViewModel)-> some View
+ public func makeParticipantsListView(viewModel: CallViewModel)-> some View
+ public func makeScreenSharingView(viewModel: CallViewModel,screensharingSession: ScreenSharingSession,availableFrame: CGRect)-> some View
+ public func makeLobbyView(viewModel: CallViewModel,lobbyInfo: LobbyInfo,callSettings: Binding<CallSettings>)-> some View
+ public func makeReconnectionView(viewModel: CallViewModel)-> some View
+ public func makeLocalParticipantViewModifier(localParticipant: CallParticipant,callSettings: Binding<CallSettings>,call: Call?)-> any ViewModifier
+ public func makeUserAvatar(_ user: User,with options: UserAvatarViewOptions)-> some View
+ public protocol InternetConnectionProtocol
+ public enum Status: Equatable
+
+ case unknown
+ case available(Quality)
+ case unavailable
+ extension InternetConnection: InjectionKey
+
+ nonisolated public static var currentValue: InternetConnectionProtocol
+ extension InternetConnection.Status
+
+ public var isAvailable: Bool
|
Public Interface+ public enum Status: Equatable
+
+ case unknown
+ case available(Quality)
+ case unavailable
+ public protocol InternetConnectionProtocol
+ public enum Quality: Equatable
+
+ case great
+ case expensive
+ case constrained
+ public final class AnyViewFactory: ViewFactory
+
+ public init(_ factory: T)
+
+
+ public func makeCallControlsView(viewModel: CallViewModel)-> some View
+ public func makeOutgoingCallView(viewModel: CallViewModel)-> some View
+ public func makeJoiningCallView(viewModel: CallViewModel)-> some View
+ public func makeIncomingCallView(viewModel: CallViewModel,callInfo: IncomingCall)-> some View
+ public func makeWaitingLocalUserView(viewModel: CallViewModel)-> some View
+ public func makeVideoParticipantsView(viewModel: CallViewModel,availableFrame: CGRect,onChangeTrackVisibility: @escaping @MainActor(CallParticipant, Bool) -> Void)-> some View
+ public func makeVideoParticipantView(participant: CallParticipant,id: String,availableFrame: CGRect,contentMode: UIView.ContentMode,customData: [String: RawJSON],call: Call?)-> some View
+ public func makeVideoCallParticipantModifier(participant: CallParticipant,call: Call?,availableFrame: CGRect,ratio: CGFloat,showAllInfo: Bool)-> any ViewModifier
+ public func makeCallView(viewModel: CallViewModel)-> some View
+ public func makeMinimizedCallView(viewModel: CallViewModel)-> some View
+ public func makeCallTopView(viewModel: CallViewModel)-> some View
+ public func makeParticipantsListView(viewModel: CallViewModel)-> some View
+ public func makeScreenSharingView(viewModel: CallViewModel,screensharingSession: ScreenSharingSession,availableFrame: CGRect)-> some View
+ public func makeLobbyView(viewModel: CallViewModel,lobbyInfo: LobbyInfo,callSettings: Binding<CallSettings>)-> some View
+ public func makeReconnectionView(viewModel: CallViewModel)-> some View
+ public func makeLocalParticipantViewModifier(localParticipant: CallParticipant,callSettings: Binding<CallSettings>,call: Call?)-> any ViewModifier
+ public func makeUserAvatar(_ user: User,with options: UserAvatarViewOptions)-> some View
+ extension InternetConnection: InjectionKey
+
+ nonisolated public static var currentValue: InternetConnectionProtocol
+ public final class InternetConnection: @unchecked Sendable
+ extension InternetConnection.Status
+
+ public var isAvailable: Bool
|
@@ -26,7 +26,7 @@ extension Notification { | |||
/// | |||
/// Basically, it's a wrapper over legacy monitor based on `Reachability` (iOS 11 only) | |||
/// and default monitor based on `Network`.`NWPathMonitor` (iOS 12+). | |||
class InternetConnection: @unchecked Sendable { | |||
public final class InternetConnection: @unchecked Sendable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Making Internet connection public so it can be use from SwiftUI SDK. Let me know your thoughts
Public Interface+ public enum InternetConnectionQuality: Equatable, Sendable
+
+ case great
+ case expensive
+ case constrained
+ extension InternetConnectionStatus
+
+ public var isAvailable: Bool
+ public enum InternetConnectionStatus: Equatable, Sendable
+
+ case unknown
+ case available(InternetConnectionQuality)
+ case unavailable
+ public protocol InternetConnectionProtocol
+ extension InternetConnection: InjectionKey
+
+ nonisolated public static var currentValue: InternetConnectionProtocol
|
e60fdda
to
433f2b0
Compare
Public Interface+ extension InternetConnectionStatus
+
+ public var isAvailable: Bool
+ public protocol InternetConnectionProtocol
+ public enum InternetConnectionQuality: Equatable, Sendable
+
+ case great
+ case expensive
+ case constrained
+ public enum InternetConnectionStatus: Equatable, Sendable
+
+ case unknown
+ case available(InternetConnectionQuality)
+ case unavailable
+ extension InternetConnection: InjectionKey
+
+ nonisolated public static var currentValue: InternetConnectionProtocol
|
a95c43a
to
0054ff8
Compare
Public Interface+ public protocol InternetConnectionProtocol
+ public enum InternetConnectionStatus: Equatable, Sendable
+
+ case unknown
+ case available(InternetConnectionQuality)
+ case unavailable
+ extension InternetConnection: InjectionKey
+
+ nonisolated public static var currentValue: InternetConnectionProtocol
+ extension InternetConnectionStatus
+
+ public var isAvailable: Bool
+ public enum InternetConnectionQuality: Equatable, Sendable
+
+ case great
+ case expensive
+ case constrained
|
|
Public Interface+ public enum InternetConnectionStatus: Equatable, Sendable
+
+ case unknown
+ case available(InternetConnectionQuality)
+ case unavailable
+ extension InternetConnectionStatus
+
+ public var isAvailable: Bool
+ extension InternetConnection: InjectionKey
+
+ nonisolated public static var currentValue: InternetConnectionProtocol
+ public protocol InternetConnectionProtocol
+ public enum InternetConnectionQuality: Equatable, Sendable
+
+ case great
+ case expensive
+ case constrained
|
🔗 Issue Links
Resolves https://linear.app/stream/issue/IOS-802/picture-in-picture-improvements
Resolves https://linear.app/stream/issue/IOS-701/[blink]picture-in-picture-black-window-when-no-one-has-video
Resolves https://linear.app/stream/issue/IOS-502/[video][reconnection]-pip-should-not-disappear-on-rejoin
🎯 Goal
Improve Picture-in-Picture by:
🧪 Manual Testing Notes
☑️ Contributor Checklist