RoomMessageExtensionObserver.swift 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //
  2. // RoomMessageExtensionObserver.swift
  3. // TUIRoomKit
  4. //
  5. // Created by janejntang on 2023/6/2.
  6. //
  7. import Foundation
  8. import TUICore
  9. import TIMCommon
  10. class RoomMessageExtensionObserver: NSObject {
  11. static let shared = RoomMessageExtensionObserver()
  12. let roomMessageManager: RoomMessageManager = RoomMessageManager.shared
  13. var settingMenuNavigationController: UINavigationController?
  14. private override init() {
  15. super.init()
  16. }
  17. @objc private func pushChatExtensionRoomSettingsViewController() {
  18. if let nav = settingMenuNavigationController {
  19. let vc = ChatExtensionRoomSettingsViewController(isOpenMicrophone: EngineManager.shared.store.isOpenMicrophone,
  20. isOpenCamera: EngineManager.shared.store.isOpenCamera)
  21. nav.pushViewController(vc, animated: true)
  22. }
  23. }
  24. deinit {
  25. debugPrint("deinit \(self)")
  26. }
  27. }
  28. extension RoomMessageExtensionObserver: TUIExtensionProtocol {
  29. func onGetExtension(_ key: String, param: [AnyHashable : Any]?) -> [TUIExtensionInfo]? {
  30. if key == TUICore_TUIChatExtension_InputViewMoreItem_ClassicExtensionID {
  31. guard let groupID = param?[TUICore_TUIChatExtension_InputViewMoreItem_GroupID] as? String, groupID != "" else { return nil }
  32. guard let isNeedRoom = param?[TUICore_TUIChatExtension_InputViewMoreItem_FilterRoom] as? Bool, !isNeedRoom else { return nil }
  33. let info = TUIExtensionInfo()
  34. info.weight = 200
  35. info.text = .meetingText
  36. let defaultImage = UIImage(named: "room_quick_meeting", in: tuiRoomKitBundle(), compatibleWith: nil) ?? UIImage()
  37. info.icon = TUICoreThemeConvert.getTUIDynamicImage(imageKey: "room_quick_meeting_image", defaultImage: defaultImage)
  38. info.onClicked = { [weak self] param in
  39. guard let self = self else { return }
  40. if let vc = param[TUICore_TUIChatExtension_InputViewMoreItem_PushVC] as? UINavigationController {
  41. self.roomMessageManager.navigateController = vc
  42. }
  43. if let groupId = param[TUICore_TUIChatExtension_InputViewMoreItem_GroupID] as? String {
  44. self.roomMessageManager.groupId = groupId
  45. }
  46. self.roomMessageManager.sendRoomMessageToGroup()
  47. }
  48. return [info]
  49. }
  50. if key == TUICore_TUIContactExtension_MeSettingMenu_ClassicExtensionID {
  51. if let nav = param?[TUICore_TUIContactExtension_MeSettingMenu_Nav] as? UINavigationController {
  52. self.settingMenuNavigationController = nav
  53. }
  54. let data = TUICommonTextCellData()
  55. data.key = .roomDeviceSetText
  56. data.showAccessory = true
  57. let cell = TUICommonTextCell()
  58. cell.fill(with: data)
  59. cell.mm_h = 60
  60. cell.mm_w = UIScreen.main.bounds.width
  61. let tap = UITapGestureRecognizer(target: self, action: #selector(pushChatExtensionRoomSettingsViewController))
  62. cell.addGestureRecognizer(tap)
  63. let info = TUIExtensionInfo()
  64. let param = [TUICore_TUIContactExtension_MeSettingMenu_Weight: 460,
  65. TUICore_TUIContactExtension_MeSettingMenu_View: cell,
  66. TUICore_TUIContactExtension_MeSettingMenu_Data: data,
  67. ] as [String : Any]
  68. info.data = param
  69. return [info]
  70. }
  71. return nil
  72. }
  73. }
  74. private extension String {
  75. static var meetingText: String {
  76. localized("Quick conference")
  77. }
  78. static var roomDeviceSetText: String {
  79. localized("Meeting Settings")
  80. }
  81. }