97 lines
3.3 KiB
Swift
97 lines
3.3 KiB
Swift
//
|
|
// FloatingWindowStatusView.swift
|
|
// TUICallKit
|
|
//
|
|
// Created by noah on 2023/11/20.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class FloatingWindowGroupStatusView: UIView {
|
|
|
|
let isCameraOpenObserver = Observer()
|
|
let isMicMuteObserver = Observer()
|
|
|
|
let videoImageView: UIImageView = {
|
|
let imageView = UIImageView()
|
|
let imageName = TUICallState.instance.isCameraOpen.value ? "icon_float_group_video_on" : "icon_float_group_video_off"
|
|
if let image = TUICallKitCommon.getBundleImage(name: imageName) {
|
|
imageView.image = image
|
|
}
|
|
return imageView
|
|
}()
|
|
|
|
let audioImageView: UIImageView = {
|
|
let imageView = UIImageView()
|
|
let imageName = TUICallState.instance.isMicMute.value ? "icon_float_group_audio_off" : "icon_float_group_audio_on"
|
|
if let image = TUICallKitCommon.getBundleImage(name: imageName) {
|
|
imageView.image = image
|
|
}
|
|
return imageView
|
|
}()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
registerObserveState()
|
|
constructViewHierarchy()
|
|
activateConstraints()
|
|
backgroundColor = TUICoreDefineConvert.getTUICallKitDynamicColor(colorKey: "callkit_float_window_group_status_view_bg_color",
|
|
defaultHex: "#F9F6F4")
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
deinit {
|
|
TUICallState.instance.isCameraOpen.removeObserver(isCameraOpenObserver)
|
|
TUICallState.instance.isMicMute.removeObserver(isMicMuteObserver)
|
|
}
|
|
|
|
func constructViewHierarchy() {
|
|
addSubview(videoImageView)
|
|
addSubview(audioImageView)
|
|
}
|
|
|
|
func activateConstraints() {
|
|
videoImageView.snp.makeConstraints { make in
|
|
make.centerY.equalTo(self)
|
|
make.leading.equalTo(self).offset(14.scaleWidth())
|
|
make.width.height.equalTo(16.scaleWidth())
|
|
}
|
|
audioImageView.snp.makeConstraints { make in
|
|
make.centerY.equalTo(self)
|
|
make.trailing.equalTo(self).offset(-14.scaleWidth())
|
|
make.width.height.equalTo(16.scaleWidth())
|
|
}
|
|
}
|
|
|
|
// MARK: Register TUICallState Observer && Update UI
|
|
func registerObserveState() {
|
|
isCameraOpenChange()
|
|
isMicMuteChange()
|
|
}
|
|
|
|
func isCameraOpenChange() {
|
|
TUICallState.instance.isCameraOpen.addObserver(isCameraOpenObserver, closure: { [weak self] newValue, _ in
|
|
guard let self = self else { return }
|
|
let imageName = newValue ? "icon_float_group_video_on" : "icon_float_group_video_off"
|
|
if let image = TUICallKitCommon.getBundleImage(name: imageName) {
|
|
self.videoImageView.image = image
|
|
}
|
|
|
|
})
|
|
}
|
|
|
|
func isMicMuteChange() {
|
|
TUICallState.instance.isMicMute.addObserver(isMicMuteObserver, closure: { [weak self] newValue, _ in
|
|
guard let self = self else { return }
|
|
let imageName = newValue ? "icon_float_group_audio_off" : "icon_float_group_audio_on"
|
|
if let image = TUICallKitCommon.getBundleImage(name: imageName) {
|
|
self.audioImageView.image = image
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|