You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // FLEXNetworkSettingsTableViewController.m // FLEXInjected // // Created by Ryan Olson on 2/20/15. // //
#import "FLEXNetworkSettingsTableViewController.h" #import "FLEXNetworkObserver.h" #import "FLEXNetworkRecorder.h" #import "FLEXUtility.h"
@interface FLEXNetworkSettingsTableViewController () <UIActionSheetDelegate>
@property (nonatomic, copy) NSArray<UITableViewCell *> *cells;
@property (nonatomic) UITableViewCell *cacheLimitCell;
@end
@implementation FLEXNetworkSettingsTableViewController
- (instancetype)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:UITableViewStyleGrouped]; if (self) {
} return self; }
- (void)viewDidLoad { [super viewDidLoad];
NSMutableArray<UITableViewCell *> *mutableCells = [NSMutableArray array];
UITableViewCell *networkDebuggingCell = [self switchCellWithTitle:@"Network Debugging" toggleAction:@selector(networkDebuggingToggled:) isOn:[FLEXNetworkObserver isEnabled]]; [mutableCells addObject:networkDebuggingCell];
UITableViewCell *cacheMediaResponsesCell = [self switchCellWithTitle:@"Cache Media Responses" toggleAction:@selector(cacheMediaResponsesToggled:) isOn:NO]; [mutableCells addObject:cacheMediaResponsesCell];
NSUInteger currentCacheLimit = [[FLEXNetworkRecorder defaultRecorder] responseCacheByteLimit]; const NSUInteger fiftyMega = 50 * 1024 * 1024; NSString *cacheLimitTitle = [self titleForCacheLimitCellWithValue:currentCacheLimit]; self.cacheLimitCell = [self sliderCellWithTitle:cacheLimitTitle changedAction:@selector(cacheLimitAdjusted:) minimum:0.0 maximum:fiftyMega initialValue:currentCacheLimit]; [mutableCells addObject:self.cacheLimitCell];
UITableViewCell *clearRecordedRequestsCell = [self buttonCellWithTitle:@"❌ Clear Recorded Requests" touchUpAction:@selector(clearRequestsTapped:) isDestructive:YES]; [mutableCells addObject:clearRecordedRequestsCell];
self.cells = mutableCells; }
#pragma mark - Settings Actions
- (void)networkDebuggingToggled:(UISwitch *)sender { [FLEXNetworkObserver setEnabled:sender.isOn]; }
- (void)cacheMediaResponsesToggled:(UISwitch *)sender { [[FLEXNetworkRecorder defaultRecorder] setShouldCacheMediaResponses:sender.isOn]; }
- (void)cacheLimitAdjusted:(UISlider *)sender { [[FLEXNetworkRecorder defaultRecorder] setResponseCacheByteLimit:sender.value]; self.cacheLimitCell.textLabel.text = [self titleForCacheLimitCellWithValue:sender.value]; }
- (void)clearRequestsTapped:(UIButton *)sender { [FLEXAlert makeSheet:^(FLEXAlert *make) { make.button(@"Cancel").cancelStyle(); make.button(@"Clear Recorded Requests").destructiveStyle().handler(^(NSArray *strings) { [[FLEXNetworkRecorder defaultRecorder] clearRecordedActivity]; }); } showFrom:self];
self.popoverPresentationController.sourceView = sender; self.popoverPresentationController.sourceRect = sender.bounds; }
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; }
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.cells.count; }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { return self.cells[indexPath.row]; }
#pragma mark - Helpers
- (UITableViewCell *)switchCellWithTitle:(NSString *)title toggleAction:(SEL)toggleAction isOn:(BOOL)isOn { UITableViewCell *cell = [UITableViewCell new]; cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.textLabel.text = title; cell.textLabel.font = [[self class] cellTitleFont];
UISwitch *theSwitch = [UISwitch new]; theSwitch.on = isOn; [theSwitch addTarget:self action:toggleAction forControlEvents:UIControlEventValueChanged];
CGFloat switchOriginY = round((cell.contentView.frame.size.height - theSwitch.frame.size.height) / 2.0); CGFloat switchOriginX = CGRectGetMaxX(cell.contentView.frame) - theSwitch.frame.size.width - self.tableView.separatorInset.left; theSwitch.frame = CGRectMake(switchOriginX, switchOriginY, theSwitch.frame.size.width, theSwitch.frame.size.height); theSwitch.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; [cell.contentView addSubview:theSwitch];
return cell; }
- (UITableViewCell *)buttonCellWithTitle:(NSString *)title touchUpAction:(SEL)action isDestructive:(BOOL)isDestructive { UITableViewCell *buttonCell = [UITableViewCell new]; buttonCell.selectionStyle = UITableViewCellSelectionStyleNone;
UIButton *actionButton = [UIButton buttonWithType:UIButtonTypeSystem]; [actionButton setTitle:title forState:UIControlStateNormal]; if (isDestructive) { actionButton.tintColor = UIColor.redColor; } actionButton.titleLabel.font = [[self class] cellTitleFont]; [actionButton addTarget:self action:@selector(clearRequestsTapped:) forControlEvents:UIControlEventTouchUpInside];
[buttonCell.contentView addSubview:actionButton]; actionButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; actionButton.frame = buttonCell.contentView.frame; actionButton.contentEdgeInsets = UIEdgeInsetsMake(0.0, self.tableView.separatorInset.left, 0.0, self.tableView.separatorInset.left); actionButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
return buttonCell; }
- (NSString *)titleForCacheLimitCellWithValue:(long long)cacheLimit { NSInteger limitInMB = round(cacheLimit / (1024 * 1024)); return [NSString stringWithFormat:@"Cache Limit (%ld MB)", (long)limitInMB]; }
- (UITableViewCell *)sliderCellWithTitle:(NSString *)title changedAction:(SEL)changedAction minimum:(CGFloat)minimum maximum:(CGFloat)maximum initialValue:(CGFloat)initialValue { UITableViewCell *sliderCell = [UITableViewCell new]; sliderCell.selectionStyle = UITableViewCellSelectionStyleNone; sliderCell.textLabel.text = title; sliderCell.textLabel.font = [[self class] cellTitleFont];
UISlider *slider = [UISlider new]; slider.minimumValue = minimum; slider.maximumValue = maximum; slider.value = initialValue; [slider addTarget:self action:changedAction forControlEvents:UIControlEventValueChanged]; [slider sizeToFit];
CGFloat sliderWidth = round(sliderCell.contentView.frame.size.width * 2.0 / 5.0); CGFloat sliderOriginY = round((sliderCell.contentView.frame.size.height - slider.frame.size.height) / 2.0); CGFloat sliderOriginX = CGRectGetMaxX(sliderCell.contentView.frame) - sliderWidth - self.tableView.separatorInset.left; slider.frame = CGRectMake(sliderOriginX, sliderOriginY, sliderWidth, slider.frame.size.height); slider.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; [sliderCell.contentView addSubview:slider];
return sliderCell; }
+ (UIFont *)cellTitleFont { return [FLEXUtility defaultFontOfSize:14.0]; }
@end
|