TUIChatExtensionObserver_Minimalist.m 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //
  2. // TUIChatExtensionObserver_Minimalist.m
  3. // TUIChat
  4. //
  5. // Created by harvy on 2023/4/3.
  6. // Copyright © 2023 Tencent. All rights reserved.
  7. //
  8. #import "TUIChatExtensionObserver_Minimalist.h"
  9. #import <TUICore/TUICore.h>
  10. #import <TUICore/TUIDefine.h>
  11. #import "TUIC2CChatViewController_Minimalist.h"
  12. #import "TUIGroupChatViewController_Minimalist.h"
  13. @interface TUIChatExtensionObserver_Minimalist () <TUIExtensionProtocol>
  14. @end
  15. @implementation TUIChatExtensionObserver_Minimalist
  16. + (void)load {
  17. [TUICore registerExtension:TUICore_TUIContactExtension_FriendProfileActionMenu_MinimalistExtensionID
  18. object:TUIChatExtensionObserver_Minimalist.shareInstance];
  19. [TUICore registerExtension:TUICore_TUIContactExtension_GroupInfoCardActionMenu_MinimalistExtensionID
  20. object:TUIChatExtensionObserver_Minimalist.shareInstance];
  21. [TUICore registerExtension:TUICore_TUIChatExtension_NavigationMoreItem_MinimalistExtensionID object:TUIChatExtensionObserver_Minimalist.shareInstance];
  22. }
  23. static id gShareinstance = nil;
  24. + (instancetype)shareInstance {
  25. static dispatch_once_t onceToken;
  26. dispatch_once(&onceToken, ^{
  27. gShareinstance = [[self alloc] init];
  28. });
  29. return gShareinstance;
  30. }
  31. #pragma mark - TUIExtensionProtocol
  32. - (NSArray<TUIExtensionInfo *> *)onGetExtension:(NSString *)extensionID param:(NSDictionary *)param {
  33. if (![extensionID isKindOfClass:NSString.class]) {
  34. return nil;
  35. }
  36. if ([extensionID isEqualToString:TUICore_TUIContactExtension_FriendProfileActionMenu_MinimalistExtensionID]) {
  37. return [self getFriendProfileActionMenuExtensionForMinimalistContact:param];
  38. } else if ([extensionID isEqualToString:TUICore_TUIContactExtension_GroupInfoCardActionMenu_MinimalistExtensionID]) {
  39. return [self getGroupInfoCardActionMenuActionMenuExtensionForMinimalistContact:param];
  40. } else {
  41. return nil;
  42. }
  43. }
  44. - (NSArray<TUIExtensionInfo *> *)getFriendProfileActionMenuExtensionForMinimalistContact:(NSDictionary *)param {
  45. TUIExtensionInfo *info = [[TUIExtensionInfo alloc] init];
  46. info.weight = 300;
  47. info.text = TIMCommonLocalizableString(TUIKitMessage);
  48. ;
  49. info.icon = TUIDynamicImage(@"", TUIThemeModuleContact_Minimalist, [UIImage imageNamed:TUIContactImagePath_Minimalist(@"contact_info_message")]);
  50. info.onClicked = ^(NSDictionary *_Nonnull actionParam) {
  51. NSString *userID = [actionParam tui_objectForKey:TUICore_TUIContactExtension_FriendProfileActionMenu_UserID asClass:NSString.class];
  52. UIImage *icon = actionParam[TUICore_TUIContactExtension_FriendProfileActionMenu_UserIcon];
  53. NSString *userName = [actionParam tui_objectForKey:TUICore_TUIContactExtension_FriendProfileActionMenu_UserName asClass:NSString.class];
  54. UINavigationController *pushVC = [actionParam tui_objectForKey:TUICore_TUIContactExtension_FriendProfileActionMenu_PushVC
  55. asClass:UINavigationController.class];
  56. if (userID.length > 0 && pushVC) {
  57. TUIChatConversationModel *conversationModel = [[TUIChatConversationModel alloc] init];
  58. conversationModel.title = userName;
  59. conversationModel.userID = userID;
  60. conversationModel.conversationID = [NSString stringWithFormat:@"c2c_%@", userID];
  61. conversationModel.avatarImage = icon ?: [UIImage new];
  62. TUIBaseChatViewController_Minimalist *chatVC = [[TUIC2CChatViewController_Minimalist alloc] init];
  63. chatVC.conversationData = conversationModel;
  64. chatVC.title = conversationModel.title;
  65. for (UIViewController *vc in pushVC.childViewControllers) {
  66. if ([vc isKindOfClass:chatVC.class]) {
  67. [pushVC popToViewController:vc animated:YES];
  68. return;
  69. }
  70. }
  71. [pushVC pushViewController:chatVC animated:YES];
  72. }
  73. };
  74. return @[ info ];
  75. }
  76. - (NSArray<TUIExtensionInfo *> *)getGroupInfoCardActionMenuActionMenuExtensionForMinimalistContact:(NSDictionary *)param {
  77. TUIExtensionInfo *info = [[TUIExtensionInfo alloc] init];
  78. info.weight = 300;
  79. info.text = TIMCommonLocalizableString(TUIKitMessage);
  80. ;
  81. info.icon = TUIDynamicImage(@"", TUIThemeModuleContact_Minimalist, [UIImage imageNamed:TUIContactImagePath_Minimalist(@"contact_info_message")]);
  82. info.onClicked = ^(NSDictionary *_Nonnull actionParam) {
  83. NSString *groupID = [actionParam tui_objectForKey:TUICore_TUIContactExtension_GroupInfoCardActionMenu_GroupID asClass:NSString.class];
  84. UINavigationController *pushVC = [actionParam tui_objectForKey:TUICore_TUIContactExtension_GroupInfoCardActionMenu_PushVC
  85. asClass:UINavigationController.class];
  86. if (groupID.length > 0 && pushVC) {
  87. TUIChatConversationModel *conversationModel = [[TUIChatConversationModel alloc] init];
  88. conversationModel.groupID = groupID;
  89. conversationModel.conversationID = [NSString stringWithFormat:@"group_%@", groupID];
  90. TUIBaseChatViewController_Minimalist *chatVC = [[TUIGroupChatViewController_Minimalist alloc] init];
  91. chatVC.conversationData = conversationModel;
  92. chatVC.title = conversationModel.title;
  93. for (UIViewController *vc in pushVC.childViewControllers) {
  94. if ([vc isKindOfClass:chatVC.class]) {
  95. [pushVC popToViewController:vc animated:YES];
  96. return;
  97. }
  98. }
  99. [pushVC pushViewController:chatVC animated:YES];
  100. }
  101. };
  102. return @[ info ];
  103. }
  104. @end