Files
flipper/iOS/SonarKit/FlipperDiagnosticsViewController.m
John Knox f99ef6996e Summarise state in iOS diagnostics
Summary:
V1 ios diagnostics complete.

This change adds a new section to the ios diagnostics screen that shows the current state of each step required to get sonar working.
The logs (transitions between states) are displayed below it.

SonarClient.mm is technically involved in the UI, by converting enums to emojis, I don't like this
but didn't get obj-C working with C enums so have left it like this for now.

Reviewed By: priteshrnandgaonkar

Differential Revision: D9378212

fbshipit-source-id: 091ce00e898a8038c680555123640b90d753fc09
2018-08-28 04:14:01 -07:00

99 lines
3.3 KiB
Objective-C

#ifdef FB_SONARKIT_ENABLED
#import "FlipperDiagnosticsViewController.h"
#import "SonarClient.h"
#define STATE_VIEW_HEIGHT 300
static NSString *const kSKCellIdentifier = @"FlipperDiagnosticStateTableStableCellIdentifier";
@implementation StateTableDataSource
- (instancetype)initWithElements:(NSArray<NSDictionary *> *)elements {
self = [super init];
if (self) {
_elements = elements;
}
return self;
}
- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
NSInteger row = indexPath.row;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kSKCellIdentifier forIndexPath:indexPath];
cell.textLabel.font = [UIFont fontWithName:@"Arial" size:10];
cell.textLabel.text = [self.elements[row][@"state"] stringByAppendingString:self.elements[row][@"name"]];
return cell;
}
- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.elements count];
}
@end
@implementation FlipperDiagnosticsViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, STATE_VIEW_HEIGHT, self.view.frame.size.width, self.view.frame.size.height - 100 - STATE_VIEW_HEIGHT)];
self.logLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.scrollView.frame.size.height)];
self.logLabel.numberOfLines = 0;
self.logLabel.font = [UIFont fontWithName:@"Arial" size:10];
[self.scrollView addSubview:self.logLabel];
self.stateTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, STATE_VIEW_HEIGHT)];
[self.stateTable registerClass:[UITableViewCell class] forCellReuseIdentifier:kSKCellIdentifier];
self.stateTable.rowHeight = 14;
self.tableDataSource = [[StateTableDataSource alloc] initWithElements:[[SonarClient sharedClient] getStateElements]];
self.stateTable.dataSource = self.tableDataSource;
[self updateLogView];
[self.view addSubview:self.stateTable];
[self.view addSubview:self.scrollView];
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)onUpdate {
FlipperDiagnosticsViewController __weak *weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf updateStateTable];
[weakSelf updateLogView];
});
}
- (void)updateStateTable {
self.tableDataSource.elements = [[SonarClient sharedClient] getStateElements];
[self.stateTable reloadData];
}
- (void)updateLogView {
NSString *state = [[SonarClient sharedClient] getState];
self.logLabel.text = state;
[self.logLabel sizeToFit];
self.scrollView.contentSize = self.logLabel.frame.size;
// Scroll to bottom
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height);
[self.scrollView setContentOffset:bottomOffset animated:YES];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
id<FlipperStateUpdateListener> weakSelf = self;
[[SonarClient sharedClient] subscribeForUpdates:weakSelf];
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationMaskPortrait;
}
@end
#endif