增加换肤功能

This commit is contained in:
启星
2025-08-14 10:07:49 +08:00
parent f6964c1e89
commit 4f9318d98e
8789 changed files with 978530 additions and 2 deletions

View File

@@ -0,0 +1,45 @@
//
// TCommonFriendCellData.h
// TXIMSDK_TUIKit_iOS
//
// Created by annidyfeng on 2019/5/7.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
NS_ASSUME_NONNULL_BEGIN
@class V2TIMFriendInfo;
@class V2TIMGroupInfo;
typedef NS_ENUM(NSInteger, TUIContactOnlineStatus_Minimalist) {
TUIContactOnlineStatusUnknown_Minimalist = 0,
TUIContactOnlineStatusOnline_Minimalist = 1,
TUIContactOnlineStatusOffline_Minimalist = 2
};
@interface TUICommonContactCellData_Minimalist : TUICommonCellData
- (instancetype)initWithFriend:(V2TIMFriendInfo *)args;
- (instancetype)initWithGroupInfo:(V2TIMGroupInfo *)args;
@property V2TIMFriendInfo *friendProfile;
@property NSString *identifier;
@property NSURL *avatarUrl;
@property NSString *title;
@property UIImage *avatarImage;
@property(nonatomic, copy) NSString *userID;
@property(nonatomic, copy) NSString *groupID;
@property(nonatomic, copy) NSString *groupType;
@property(nonatomic, copy) NSString *faceUrl;
// The flag of indicating the user's online status
@property(nonatomic, assign) TUIContactOnlineStatus_Minimalist onlineStatus;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,54 @@
//
// TCommonFriendCellData.m
// TXIMSDK_TUIKit_iOS
//
// Created by annidyfeng on 2019/5/7.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUICommonContactCellData_Minimalist.h"
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
@implementation TUICommonContactCellData_Minimalist {
V2TIMFriendInfo *_friendProfile;
}
- (instancetype)initWithFriend:(V2TIMFriendInfo *)args {
self = [super init];
if (args.friendRemark.length) {
_title = args.friendRemark;
} else {
_title = [args.userFullInfo showName];
}
_identifier = args.userID;
_avatarUrl = [NSURL URLWithString:args.userFullInfo.faceURL];
_friendProfile = args;
_userID = args.userID;
_faceUrl = args.userFullInfo.faceURL;
return self;
}
- (instancetype)initWithGroupInfo:(V2TIMGroupInfo *)args {
self = [super init];
_title = args.groupName;
_avatarImage = DefaultGroupAvatarImageByGroupType(args.groupType);
_avatarUrl = [NSURL URLWithString:args.faceURL];
_identifier = args.groupID;
_groupID = args.groupID;
_groupType = args.groupType;
_faceUrl = args.faceURL;
return self;
}
- (NSComparisonResult)compare:(TUICommonContactCellData_Minimalist *)data {
return [self.title localizedCompare:data.title];
}
- (CGFloat)heightOfWidth:(CGFloat)width {
return 56;
}
@end

View File

@@ -0,0 +1,45 @@
//
// TCommonPendencyCellData.h
// TXIMSDK_TUIKit_iOS
//
// Created by annidyfeng on 2019/5/7.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
@class V2TIMFriendApplication;
NS_ASSUME_NONNULL_BEGIN
@interface TUICommonPendencyCellData_Minimalist : TUICommonCellData
@property V2TIMFriendApplication *application;
@property NSString *identifier;
@property NSURL *avatarUrl;
@property NSString *title;
@property NSString *addSource;
@property NSString *addWording;
@property BOOL isAccepted;
@property BOOL isRejected;
@property SEL cbuttonSelector;
@property SEL cRejectButtonSelector;
@property BOOL hideSource;
- (instancetype)initWithPendency:(V2TIMFriendApplication *)application;
typedef void (^TUICommonPendencyCellDataSuccessCallback)(void);
typedef void (^TUICommonPendencyCellDataFailureCallback)(int code, NSString *msg);
- (void)agreeWithSuccess:(TUICommonPendencyCellDataSuccessCallback)success
failure:(TUICommonPendencyCellDataFailureCallback)failure;
- (void)rejectWithSuccess:(TUICommonPendencyCellDataSuccessCallback)success
failure:(TUICommonPendencyCellDataFailureCallback)failure;
- (void)agree;
- (void)reject;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,92 @@
//
// TUICommonPendencyCellData_Minimalist.m
// TXIMSDK_TUIKit_iOS
//
// Created by annidyfeng on 2019/5/7.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUICommonPendencyCellData_Minimalist.h"
#import <TIMCommon/TIMCommonModel.h>
#import <TUICore/TUIGlobalization.h>
#import <TUICore/TUITool.h>
#import <TUICore/UIView+TUIToast.h>
@implementation TUICommonPendencyCellData_Minimalist
- (instancetype)initWithPendency:(V2TIMFriendApplication *)application {
self = [super init];
_identifier = application.userID;
if (application.nickName.length > 0) {
_title = application.nickName;
} else {
_title = _identifier;
}
if (application.addSource) {
_addSource = [NSString
stringWithFormat:TIMCommonLocalizableString(TUIKitAddFriendSourceFormat), [application.addSource substringFromIndex:@"AddSource_Type_".length]];
}
_addWording = application.addWording;
_avatarUrl = [NSURL URLWithString:application.faceUrl];
_isAccepted = NO;
_application = application;
_hideSource = NO;
return self;
}
- (BOOL)isEqual:(TUICommonPendencyCellData_Minimalist *)object {
return [self.identifier isEqual:object.identifier];
}
- (void)agree {
[self agreeWithSuccess:^{
//Success
} failure:^(int code, NSString * _Nonnull msg) {
//failure
}];
}
- (void)reject {
[self rejectWithSuccess:^{
//Success
} failure:^(int code, NSString * _Nonnull msg) {
//failure
}];
}
- (void)agreeWithSuccess:(TUICommonPendencyCellDataSuccessCallback)success failure:(TUICommonPendencyCellDataFailureCallback)failure {
[[V2TIMManager sharedInstance] acceptFriendApplication:_application
type:V2TIM_FRIEND_ACCEPT_AGREE_AND_ADD
succ:^(V2TIMFriendOperationResult *result) {
if (success) {
success();
}
[TUITool makeToast:TIMCommonLocalizableString(TUIKitFriendApplicationApproved)];
}
fail:^(int code, NSString *msg) {
[TUITool makeToastError:code msg:msg];
if (failure) {
failure(code,msg);
}
}];
}
- (void)rejectWithSuccess:(TUICommonPendencyCellDataSuccessCallback)success failure:(TUICommonPendencyCellDataFailureCallback)failure {
[[V2TIMManager sharedInstance] refuseFriendApplication:_application
succ:^(V2TIMFriendOperationResult *result) {
if (success) {
success();
}
[TUITool makeToast:TIMCommonLocalizableString(TUIKitFirendRequestRejected)];
}
fail:^(int code, NSString *msg) {
if (failure) {
failure(code,msg);
}
[TUITool makeToastError:code msg:msg];
}];
}
@end

View File

@@ -0,0 +1,22 @@
//
// TUIContactAcceptRejectCellData_Minimalist.h
// TUIContact
//
// Created by wyl on 2023/1/5.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface TUIContactAcceptRejectCellData_Minimalist : TUICommonCellData
@property(nonatomic, copy) void (^agreeClickCallback)(void);
@property(nonatomic, copy) void (^rejectClickCallback)(void);
@property(nonatomic, assign) BOOL isAccepted;
@property(nonatomic, assign) BOOL isRejected;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,17 @@
//
// TUIContactAcceptRejectCellData_Minimalist.m
// TUIContact
//
// Created by wyl on 2023/1/5.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIContactAcceptRejectCellData_Minimalist.h"
#import <TIMCommon/TIMDefine.h>
@implementation TUIContactAcceptRejectCellData_Minimalist
- (CGFloat)heightOfWidth:(CGFloat)width {
return kScale390(42);
}
@end

View File

@@ -0,0 +1,24 @@
//
// TUIContactActionCellData_Minimalist.h
// TXIMSDK_TUIKit_iOS
//
// Created by annidyfeng on 2019/6/21.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface TUIContactActionCellData_Minimalist : TUICommonCellData
@property NSString *title;
@property UIImage *icon;
@property NSInteger readNum;
@property(nonatomic, assign) BOOL needBottomLine;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,20 @@
//
// TUIContactActionCellData_Minimalist.m
// TXIMSDK_TUIKit_iOS
//
// Created by annidyfeng on 2019/6/21.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIContactActionCellData_Minimalist.h"
@implementation TUIContactActionCellData_Minimalist
- (instancetype)init {
self = [super init];
if (self) {
self.needBottomLine = YES;
}
return self;
}
@end

View File

@@ -0,0 +1,23 @@
//
// TUIContactButtonCellData.h
// TUIContact
//
// Created by wyl on 2022/12/14.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface TUIContactButtonCellData_Minimalist : TUICommonCellData
@property(nonatomic, strong) NSString *title;
@property SEL cbuttonSelector;
@property TUIButtonStyle style;
@property(nonatomic, strong) UIColor *textColor;
@property(nonatomic, assign) BOOL hideSeparatorLine;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,16 @@
//
// TUIContactButtonCellData.m
// TUIContact
//
// Created by wyl on 2022/12/14.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIContactButtonCellData_Minimalist.h"
#import <TIMCommon/TIMDefine.h>
@implementation TUIContactButtonCellData_Minimalist
- (CGFloat)heightOfWidth:(CGFloat)width {
return kScale390(42);
}
@end

View File

@@ -0,0 +1,87 @@
// Created by Tencent on 2023/06/09.
// Copyright © 2023 Tencent. All rights reserved.
/**
* This document declares the modules used to implement the conversation unit data source
* The conversation unit data source (hereinafter referred to as the "data source") contains a series of information and data required for the display of the
* conversation unit, which will be described further below. The data source also contains some business logic, such as getting and generating message overview
* (subTitle), updating conversation information (group message or user message update) and other logic.
*/
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface TUIContactConversationCellData_Minimalist : TUICommonCellData
@property(nonatomic, strong) NSString *conversationID;
@property(nonatomic, strong) NSString *groupID;
@property(nonatomic, strong) NSString *groupType;
@property(nonatomic, strong) NSString *userID;
@property(nonatomic, strong) NSString *title;
@property(nonatomic, strong) NSString *faceUrl;
@property(nonatomic, strong) UIImage *avatarImage;
@property(nonatomic, strong) NSString *draftText;
@property(nonatomic, assign) int unreadCount;
/**
* Conversation Messages Overview (subtitle)
* The overview is responsible for displaying the content/type of the latest message for the corresponding conversation.
* When the latest message is a text message/system message, the content of the overview is the text content of the message.
* When the latest message is a multimedia message, the content of the overview is the name of the corresponding multimedia form, such as: "Animation
* Expression" / "[File]" / "[Voice]" / "[Picture]" / "[Video]", etc. . If there is a draft in the current conversation, the overview content is:
* "[Draft]XXXXX", where XXXXX is the draft content.
*/
@property(nonatomic, strong) NSMutableAttributedString *subTitle;
/**
* seq list of group@ messages
*/
@property(nonatomic, strong) NSMutableArray<NSNumber *> *atMsgSeqs;
/**
* Latest message time
* Save the receive/send time of the latest message in the conversation.
*/
@property(nonatomic, strong) NSDate *time;
/**
* The flag that whether the conversation is pinned to the top
*/
@property(nonatomic, assign) BOOL isOnTop;
/**
* Indicates whether to display the message checkbox
* In the conversation list, the message checkbox is not displayed by default.
* In the message forwarding scenario, the list cell is multiplexed to the select conversation page. When the "Multiple Choice" button is clicked, the
* conversation list becomes multi-selectable. YES: Multiple selection is enable, multiple selection views are displayed; NO: Multiple selection is disable, the
* default view is displayed
*/
@property(nonatomic, assign) BOOL showCheckBox;
/**
* Indicates whether the current message is selected, the default is NO
*/
@property(nonatomic, assign) BOOL selected;
/**
* Whether the current conversation is marked as do-not-disturb for new messages
*/
@property(nonatomic, assign) BOOL isNotDisturb;
/**
* key by which to sort the conversation list
*/
@property(nonatomic, assign) NSUInteger orderKey;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,31 @@
//
// TUIContactConversationCellData.m
// TXIMSDK_TUIKit_iOS
//
// Created by annidyfeng on 2019/5/16.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIContactConversationCellData_Minimalist.h"
#import "TUIDefine.h"
@implementation TUIContactConversationCellData_Minimalist
@synthesize title;
@synthesize userID;
@synthesize groupID;
@synthesize groupType;
@synthesize avatarImage;
@synthesize conversationID;
@synthesize draftText;
@synthesize faceUrl;
- (CGFloat)heightOfWidth:(CGFloat)width {
return TConversationCell_Height;
}
- (BOOL)isEqual:(TUIContactConversationCellData_Minimalist *)object {
return [self.conversationID isEqual:object.conversationID];
}
@end

View File

@@ -0,0 +1,19 @@
//
// TUIContactProfileCardCellData_Minimalist.h
// TUIContact
//
// Created by cologne on 2023/2/1.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface TUIContactProfileCardCellData_Minimalist : TUIProfileCardCellData
@property(nonatomic, assign) BOOL showGroupType;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,27 @@
//
// TUIContactProfileCardCellData_Minimalist.m
// TUIContact
//
// Created by cologne on 2023/2/1.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIContactProfileCardCellData_Minimalist.h"
#import <TIMCommon/TIMDefine.h>
#import <TUICore/TUIThemeManager.h>
@implementation TUIContactProfileCardCellData_Minimalist
- (instancetype)init {
self = [super init];
if (self) {
self.avatarImage = DefaultAvatarImage;
}
return self;
}
- (CGFloat)heightOfWidth:(CGFloat)width {
return kScale390(86);
}
@end

View File

@@ -0,0 +1,44 @@
//
// TUIFindContactCellModel_Minimalist.h
// TUIContact
//
// Created by harvy on 2021/12/13.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
@class V2TIMUserFullInfo;
@class V2TIMGroupInfo;
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, TUIFindContactType_Minimalist) {
TUIFindContactTypeC2C_Minimalist = 1,
TUIFindContactTypeGroup_Minimalist = 2,
};
@class TUIFindContactCellModel_Minimalist;
typedef void (^TUIFindContactOnCallback_Minimalist)(TUIFindContactCellModel_Minimalist *);
@interface TUIFindContactCellModel_Minimalist : NSObject
@property(nonatomic, assign) TUIFindContactType_Minimalist type;
@property(nonatomic, strong) UIImage *avatar;
@property(nonatomic, strong) NSURL *avatarUrl;
@property(nonatomic, copy) NSString *mainTitle;
@property(nonatomic, copy) NSString *subTitle;
@property(nonatomic, copy) NSString *desc;
/**
* c2c-> userID, group->groupID
* If the conversation type is c2c, contactID represents userid; if the conversation type is group, contactID represents groupID
*/
@property(nonatomic, copy) NSString *contactID;
@property(nonatomic, strong) V2TIMUserFullInfo *userInfo;
@property(nonatomic, strong) V2TIMGroupInfo *groupInfo;
@property(nonatomic, copy) TUIFindContactOnCallback_Minimalist onClick;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,13 @@
//
// TUIFindContactCellModel.m
// TUIContact
//
// Created by harvy on 2021/12/13.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIFindContactCellModel_Minimalist.h"
@implementation TUIFindContactCellModel_Minimalist
@end

View File

@@ -0,0 +1,22 @@
//
// TUIMemberInfoCellData_Minimalist.h
// TUIGroup
//
// Created by wyl on 2023/1/9.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "TUIMemberInfoCellData.h"
NS_ASSUME_NONNULL_BEGIN
@interface TUIMemberInfoCellData_Minimalist : NSObject
@property(nonatomic, copy) NSString *identifier;
@property(nonatomic, strong) UIImage *avatar;
@property(nonatomic, copy) NSString *avatarUrl;
@property(nonatomic, copy) NSString *name;
@property(nonatomic, assign) TUIMemberInfoCellStyle style;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,13 @@
//
// TUIMemberInfoCellData_Minimalist.m
// TUIGroup
//
// Created by wyl on 2023/1/9.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIMemberInfoCellData_Minimalist.h"
@implementation TUIMemberInfoCellData_Minimalist
@end

View File

@@ -0,0 +1,17 @@
//
// TUIProfileCardCellData_Minimalist.h
// Masonry
//
// Created by wyl on 2022/12/6.
// Copyright © 2023 Tencent. All rights reserved.
//
#import <TIMCommon/TIMCommonModel.h>
NS_ASSUME_NONNULL_BEGIN
@interface TUIProfileCardCellData_Minimalist : TUIProfileCardCellData
@property(nonatomic, assign) BOOL showGroupType;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,27 @@
//
// TUIProfileCardCellData_Minimalist.m
// Masonry
//
// Created by wyl on 2022/12/6.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIProfileCardCellData_Minimalist.h"
#import <TIMCommon/TIMDefine.h>
#import <TUICore/TUIThemeManager.h>
@implementation TUIProfileCardCellData_Minimalist
- (instancetype)init {
self = [super init];
if (self) {
self.avatarImage = DefaultAvatarImage;
}
return self;
}
- (CGFloat)heightOfWidth:(CGFloat)width {
return kScale390(86);
}
@end