NewsBlur/clients/ios/Classes/FriendsListViewController.m
2021-03-26 21:51:02 -07:00

346 lines
12 KiB
Objective-C

//
// FriendsListViewController.m
// NewsBlur
//
// Created by Roy Yang on 7/1/12.
// Copyright (c) 2012 NewsBlur. All rights reserved.
//
#import "FriendsListViewController.h"
#import "NewsBlurAppDelegate.h"
#import "UserProfileViewController.h"
#import "ProfileBadge.h"
#import "MBProgressHUD.h"
#import "UISearchBar+Field.h"
@implementation UINavigationController (DelegateAutomaticDismissKeyboard)
- (BOOL)disablesAutomaticKeyboardDismissal {
return [self.topViewController disablesAutomaticKeyboardDismissal];
}
@end
@interface FriendsListViewController()
@property (readwrite) BOOL inSearch_;
@end
@implementation FriendsListViewController
@synthesize appDelegate;
@synthesize friendSearchBar;
@synthesize friendsTable;
@synthesize suggestedUserProfiles;
@synthesize userProfiles;
@synthesize inSearch_;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.appDelegate = [NewsBlurAppDelegate sharedAppDelegate];
self.navigationItem.title = @"Find Friends";
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle: @"Done"
style: UIBarButtonItemStylePlain
target: self
action: @selector(doCancelButton)];
[self.navigationItem setRightBarButtonItem:cancelButton];
// Do any additional setup after loading the view from its nib.
self.appDelegate = (NewsBlurAppDelegate *)[[UIApplication sharedApplication] delegate];
self.view.frame = CGRectMake(0, 0, 320, 416);
self.preferredContentSize = self.view.frame.size;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.view.backgroundColor = UIColorFromRGB(NEWSBLUR_WHITE_COLOR);
self.friendsTable.backgroundColor = UIColorFromRGB(NEWSBLUR_WHITE_COLOR);
[self.friendSearchBar becomeFirstResponder];
}
//- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// return YES;
//}
//
//- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
// [self.friendsTable reloadData];
//}
- (void)doCancelButton {
[appDelegate.modalNavigationController dismissViewControllerAnimated:YES completion:nil];
}
#pragma mark - UISearchBar delegate methods
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if (searchText.length == 0) {
self.userProfiles = nil;
self.inSearch_ = NO;
[self.friendsTable reloadData];
} else {
self.inSearch_ = YES;
[self loadFriendsList:searchText];
}
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)theSearchBar {
[theSearchBar resignFirstResponder];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[searchBar resignFirstResponder];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
searchBar.text = nil;
}
- (void)loadFriendsList:(NSString *)query {
NSString *urlString = [NSString stringWithFormat:@"%@/social/find_friends?query=%@&limit=10",
self.appDelegate.url,
query];
[appDelegate GET:urlString parameters:nil target:self success:@selector(requestFinished:) failure:@selector(informError:)];
}
- (void)loadSuggestedFriendsList {
NSString *urlString = [NSString stringWithFormat:@"%@/social/load_user_friends",
self.appDelegate.url];
[appDelegate GET:urlString parameters:nil target:self success:@selector(loadSuggestedFriendsListFinished:) failure:@selector(informError:)];
}
- (void)loadSuggestedFriendsListFinished:(NSDictionary *)results {
int code = [[results valueForKey:@"code"] intValue];
if (code == -1) {
return;
}
self.suggestedUserProfiles = [results objectForKey:@"recommended_users"];
[self.friendsTable reloadData];
}
- (void)requestFinished:(NSDictionary *)results {
if (self.inSearch_) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
int code = [[results valueForKey:@"code"] intValue];
if (code == -1) {
return;
}
self.userProfiles = [results objectForKey:@"profiles"];
[self.friendsTable reloadData];
}
}
- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}
#pragma mark - Table view data source
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0;
// if (self.inSearch_){
// return 0;
// } else {
// if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){
// return 28;
// }else{
// return 21;
// }
// }
}
- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {
int headerLabelHeight, folderImageViewY;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
headerLabelHeight = 28;
folderImageViewY = 3;
} else {
headerLabelHeight = 20;
folderImageViewY = 0;
}
// create the parent view that will hold header Label
UIControl* customView = [[UIControl alloc]
initWithFrame:CGRectMake(0.0, 0.0,
tableView.bounds.size.width, headerLabelHeight + 1)];
UIView *borderTop = [[UIView alloc]
initWithFrame:CGRectMake(0.0, 0,
tableView.bounds.size.width, 1.0)];
borderTop.backgroundColor = UIColorFromRGB(0xe0e0e0);
borderTop.opaque = NO;
[customView addSubview:borderTop];
UIView *borderBottom = [[UIView alloc]
initWithFrame:CGRectMake(0.0, headerLabelHeight,
tableView.bounds.size.width, 1.0)];
borderBottom.backgroundColor = [UIColorFromRGB(0xB7BDC6) colorWithAlphaComponent:0.5];
borderBottom.opaque = NO;
[customView addSubview:borderBottom];
UILabel * headerLabel = [[UILabel alloc] initWithFrame:CGRectZero];
customView.opaque = NO;
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.opaque = NO;
headerLabel.textColor = [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:1.0];
headerLabel.highlightedTextColor = UIColorFromRGB(NEWSBLUR_WHITE_COLOR);
headerLabel.font = [UIFont boldSystemFontOfSize:11];
headerLabel.frame = CGRectMake(36.0, 1.0, 286.0, headerLabelHeight);
headerLabel.shadowColor = [UIColor colorWithRed:.94 green:0.94 blue:0.97 alpha:1.0];
headerLabel.shadowOffset = CGSizeMake(0.0, 1.0);
headerLabel.text = @"RECOMMENDED PEOPLE TO FOLLOW";
customView.backgroundColor = [UIColorFromRGB(0xD7DDE6)
colorWithAlphaComponent:0.8];
[customView addSubview:headerLabel];
UIImage *folderImage;
int folderImageViewX = 10;
folderImage = [UIImage imageNamed:@"group.png"];
folderImageViewX = 9;
UIImageView *folderImageView = [[UIImageView alloc] initWithImage:folderImage];
folderImageView.frame = CGRectMake(folderImageViewX, folderImageViewY, 20, 20);
[customView addSubview:folderImageView];
[customView setAutoresizingMask:UIViewAutoresizingNone];
return customView;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 140;
}
- (void)searchDisplayController:(UISearchController *)controller didLoadSearchResultsTableView:(UITableView *)tableView {
tableView.rowHeight = 140.0f;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (self.inSearch_){
NSInteger userCount = [self.userProfiles count];
return userCount;
} else {
NSInteger userCount = [self.suggestedUserProfiles count];
if (!userCount) {
return 3;
}
return userCount;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CGRect vb = self.view.bounds;
static NSString *CellIdentifier = @"ProfileBadgeCellIdentifier";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:nil];
} else {
[[[cell contentView] subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];
}
ProfileBadge *badge = [[ProfileBadge alloc] init];
badge.frame = CGRectMake(5, 5, vb.size.width - 35, self.view.frame.size.height);
if (self.inSearch_){
NSInteger userProfileCount = [self.userProfiles count];
if (userProfileCount) {
if (userProfileCount > indexPath.row) {
[badge refreshWithProfile:[self.userProfiles objectAtIndex:indexPath.row] showStats:NO withWidth:vb.size.width - 35 - 10];
[cell.contentView addSubview:badge];
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
}
} else {
// add a NO FRIENDS TO SUGGEST message on either the first or second row depending on iphone/ipad
int row = 0;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
row = 1;
}
if (indexPath.row == row) {
UILabel *msg = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, vb.size.width, 140)];
[cell.contentView addSubview:msg];
msg.text = @"No results.";
msg.textColor = UIColorFromRGB(0x7a7a7a);
if (vb.size.width > 320) {
msg.font = [UIFont fontWithName:@"WhitneySSm-Medium" size: 21.0];
} else {
msg.font = [UIFont fontWithName:@"WhitneySSm-Medium" size: 15.0];
}
msg.textAlignment = NSTextAlignmentCenter;
}
}
}
cell.backgroundColor = UIColorFromRGB(NEWSBLUR_WHITE_COLOR);
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[self.friendSearchBar resignFirstResponder];
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.friendSearchBar resignFirstResponder];
}
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
NSInteger currentRow = indexPath.row;
NSInteger row = currentRow;
appDelegate.activeUserProfileId = [[self.userProfiles objectAtIndex:row] objectForKey:@"user_id"];
appDelegate.activeUserProfileName = [[self.userProfiles objectAtIndex:row] objectForKey:@"username"];
[self.friendSearchBar resignFirstResponder];
// adding Done button
UIBarButtonItem *donebutton = [[UIBarButtonItem alloc]
initWithTitle:@"Close"
style:UIBarButtonItemStyleDone
target:self
action:@selector(hideUserProfileModal)];
// instantiate a new userProfileController
UserProfileViewController *newUserProfile = [[UserProfileViewController alloc] init];
newUserProfile.navigationItem.rightBarButtonItem = donebutton;
newUserProfile.navigationItem.title = appDelegate.activeUserProfileName;
appDelegate.userProfileViewController = newUserProfile;
[appDelegate.modalNavigationController showViewController:newUserProfile sender:self];
[appDelegate.userProfileViewController getUserProfile];
}
- (void)hideUserProfileModal {
[appDelegate.modalNavigationController dismissViewControllerAnimated:YES completion:nil];
}
@end