ifish/Ifish/controllers/IfishTabControllers/消息/IfishIMFiles/Sessions/Card/ViewController/NTESPersonalCardViewControl...

347 lines
15 KiB
Objective-C

//
// NTESPersonCardViewController.m
// NIM
//
// Created by chris on 15/8/18.
// Copyright (c) 2015年 Netease. All rights reserved.
//
#import "NTESPersonalCardViewController.h"
#import "NIMCommonTableDelegate.h"
#import "NIMCommonTableData.h"
#import "Toast+UIView.h"
#import "SVProgressHUD.h"
#import "NTESColorButtonCell.h"
#import "UIView+NTES.h"
//#import "NTESSessionViewController.h"
#import "IfishSessionViewController.h"
#import "NTESBundleSetting.h"
#import "UIAlertView+NTESBlock.h"
#import "NTESUserUtil.h"
//#import "NTESUserInfoSettingViewController.h"
//#import "NTESAliasSettingViewController.h"
@interface NTESPersonalCardViewController ()
@property (nonatomic,strong) NIMCommonTableDelegate *delegator;
@property (nonatomic,copy ) NSArray *data;
@property (nonatomic,copy ) NSString *userId;
@property (nonatomic,strong) NIMUser *user;
@property (nonatomic,strong) UILongPressGestureRecognizer *longPressGesture;
@end
@implementation NTESPersonalCardViewController
- (instancetype)initWithUserId:(NSString *)userId{
self = [super initWithNibName:nil bundle:nil];
if (self) {
_userId = userId;
}
return self;
}
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setUpNav];
//[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onUserInfoHasUpdatedNotification:) name:NIMKitUserInfoHasUpdatedNotification object:nil];
__weak typeof(self) wself = self;
self.delegator = [[NIMCommonTableDelegate alloc] initWithTableData:^NSArray *{
return wself.data;
}];
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:self.tableView];
self.tableView.backgroundColor = UIColorFromRGB(0xe3e6ea);
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.delegate = self.delegator;
self.tableView.dataSource = self.delegator;
[self refresh];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onLongPressNavbar:)];
[self.navigationController.navigationBar addGestureRecognizer:self.longPressGesture];
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.navigationController.navigationBar removeGestureRecognizer:self.longPressGesture];
}
- (void)setUpNav{
self.navigationItem.title = @"个人名片";
if ([self.userId isEqualToString:[[NIMSDK sharedSDK].loginManager currentAccount]]) {
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStyleDone target:self action:@selector(onActionEditMyInfo:)];
self.navigationItem.rightBarButtonItem.tintColor = [UIColor blackColor];
}
}
- (void)refresh{
self.user = [[NIMSDK sharedSDK].userManager userInfo:self.userId];
[self buildData];
[self.tableView reloadData];
}
- (void)buildData{
BOOL isMe = [self.userId isEqualToString:[NIMSDK sharedSDK].loginManager.currentAccount];
BOOL isMyFriend = [NTESUserUtil isMyFriend:self.userId];
BOOL isInBlackList = [[NIMSDK sharedSDK].userManager isUserInBlackList:self.userId];
BOOL needNotify = [[NIMSDK sharedSDK].userManager notifyForNewMsg:self.userId];
NSArray *data = @[
@{
HeaderTitle:@"",
RowContent :@[
@{
ExtraInfo : self.userId.length ? self.user.userId : [NSNull null],
CellClass : @"NTESCardPortraitCell",
RowHeight : @(100),
},
],
FooterTitle:@""
},
@{
HeaderTitle:@"",
RowContent :@[
@{
Title : @"备注名",
DetailTitle : self.user.alias.length ? self.user.alias : @"",
CellAction : @"onActionEditAlias:",
ShowAccessory: @(YES),
Disable : @(!isMyFriend),
},
@{
Title : @"生日",
DetailTitle : self.user.userInfo.birth.length ? self.user.userInfo.birth : @"",
Disable : @(!self.user.userInfo.birth.length),
},
@{
Title : @"手机",
DetailTitle : self.user.userInfo.mobile.length ? self.user.userInfo.mobile : @"",
Disable : @(!self.user.userInfo.mobile.length),
},
@{
Title : @"邮箱",
DetailTitle : self.user.userInfo.email.length ? self.user.userInfo.email : @"",
Disable : @(!self.user.userInfo.email.length),
},
@{
Title : @"签名",
DetailTitle : self.user.userInfo.sign.length ? self.user.userInfo.sign : @"",
Disable : @(!self.user.userInfo.sign.length),
},
],
FooterTitle:@""
},
@{
HeaderTitle:@"",
RowContent :@[
@{
Title : @"消息提醒",
CellClass : @"NTESSettingSwitcherCell",
CellAction : @"onActionNeedNotifyValueChange:",
ExtraInfo : @(needNotify),
Disable : @(isMe),
ForbidSelect : @(YES)
},
],
FooterTitle:@""
},
@{
HeaderTitle:@"",
RowContent :@[
@{
Title : @"黑名单",
CellClass : @"NTESSettingSwitcherCell",
CellAction : @"onActionBlackListValueChange:",
ExtraInfo : @(isInBlackList),
Disable : @(isMe),
ForbidSelect : @(YES)
},
],
FooterTitle:@""
},
@{
HeaderTitle:@"",
RowContent :@[
@{
Title : @"聊天",
CellClass : @"NTESColorButtonCell",
CellAction : @"chat",
ExtraInfo : @(ColorButtonCellStyleBlue),
Disable : @(isMe),
RowHeight : @(60),
ForbidSelect : @(YES),
SepLeftEdge : @(self.view.width),
},
@{
Title : @"删除好友",
CellClass : @"NTESColorButtonCell",
CellAction : @"deleteFriend",
ExtraInfo : @(ColorButtonCellStyleRed),
Disable : @(!isMyFriend || isMe),
RowHeight : @(60),
ForbidSelect : @(YES),
SepLeftEdge : @(self.view.width),
},
@{
Title : @"添加好友",
CellClass : @"NTESColorButtonCell",
CellAction : @"addFriend",
ExtraInfo : @(ColorButtonCellStyleBlue),
Disable : @(isMyFriend || isMe),
RowHeight : @(60),
ForbidSelect : @(YES),
SepLeftEdge : @(self.view.width),
},
],
FooterTitle:@"",
},
];
self.data = [NIMCommonTableSection sectionsWithData:data];
}
#pragma mark - Action
- (void)onActionEditAlias:(id)sender{
// NTESAliasSettingViewController *vc = [[NTESAliasSettingViewController alloc] initWithUserId:self.userId];
//[self.navigationController pushViewController:vc animated:YES];
}
- (void)onActionEditMyInfo:(id)sender{
//NTESUserInfoSettingViewController *vc = [[NTESUserInfoSettingViewController alloc] initWithNibName:nil bundle:nil];
//[self.navigationController pushViewController:vc animated:YES];
}
- (void)onActionBlackListValueChange:(id)sender{
UISwitch *switcher = sender;
[SVProgressHUD show];
__weak typeof(self) wself = self;
if (switcher.on) {
[[NIMSDK sharedSDK].userManager addToBlackList:self.userId completion:^(NSError *error) {
[SVProgressHUD dismiss];
if (!error) {
[wself.view makeToast:@"拉黑成功"];
}else{
[wself.view makeToast:@"拉黑失败"];
[wself refresh];
}
}];
}else{
[[NIMSDK sharedSDK].userManager removeFromBlackBlackList:self.userId completion:^(NSError *error) {
[SVProgressHUD dismiss];
if (!error) {
[wself.view makeToast:@"移除黑名单成功"];
}else{
[wself.view makeToast:@"移除黑名单失败"];
[wself refresh];
}
}];
}
}
- (void)onActionNeedNotifyValueChange:(id)sender{
UISwitch *switcher = sender;
[SVProgressHUD show];
__weak typeof(self) wself = self;
[[NIMSDK sharedSDK].userManager updateNotifyState:switcher.on forUser:self.userId completion:^(NSError *error) { [SVProgressHUD dismiss];
if (error) {
[wself.view makeToast:@"操作失败"];
[wself refresh];
}
}];
}
- (void)chat{
UINavigationController *nav = self.navigationController;
NIMSession *session = [NIMSession session:self.userId type:NIMSessionTypeP2P];
IfishSessionViewController *vc = [[IfishSessionViewController alloc] initWithSession:session];
[nav pushViewController:vc animated:YES];
UIViewController *root = nav.viewControllers[0];
nav.viewControllers = @[root,vc];
}
- (void)addFriend{
NIMUserRequest *request = [[NIMUserRequest alloc] init];
request.userId = self.userId;
request.operation = NIMUserOperationAdd;
if ([[NTESBundleSetting sharedConfig] needVerifyForFriend]) {
request.operation = NIMUserOperationRequest;
request.message = @"跪求通过";
}
NSString *successText = request.operation == NIMUserOperationAdd ? @"添加成功" : @"请求成功";
NSString *failedText = request.operation == NIMUserOperationAdd ? @"添加失败" : @"请求失败";
__weak typeof(self) wself = self;
[SVProgressHUD show];
[[NIMSDK sharedSDK].userManager requestFriend:request completion:^(NSError *error) {
[SVProgressHUD dismiss];
if (!error) {
[wself.view makeToast:successText
];
[wself refresh];
}else{
[wself.view makeToast:failedText
];
}
}];
}
- (void)deleteFriend{
__weak typeof(self) wself = self;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"删除好友" message:@"删除好友后,将同时解除双方的好友关系" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
[alert showAlertWithCompletionHandler:^(NSInteger index) {
if (index == 1) {
[SVProgressHUD show];
[[NIMSDK sharedSDK].userManager deleteFriend:wself.userId completion:^(NSError *error) {
[SVProgressHUD dismiss];
if (!error) {
[wself.view makeToast:@"删除成功"];
[wself refresh];
}else{
[wself.view makeToast:@"删除失败"];
}
}];
}
}];
}
- (void)onUserInfoHasUpdatedNotification:(NSNotification *)notification{
NSDictionary *userInfo = notification.userInfo;
//NSArray *userInfos = userInfo[NIMKitInfoKey];
//if ([userInfos containsObject:self.userId]) {
// [self refresh];
// }
}
#pragma mark - Private
- (void)onLongPressNavbar:(UIGestureRecognizer *)gesture{
if (gesture.state == UIGestureRecognizerStateBegan) {
NSString *title = self.user.description;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"个人信息" message:title delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alert show];
}
}
#pragma mark - 旋转处理 (iOS7)
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[self.tableView reloadData];
}
@end