Files
yinmeng-ios/xplan-ios/Main/Mine/View/XPPermissionsViewController.m
2023-01-04 14:43:47 +08:00

294 lines
9.8 KiB
Objective-C

//
// XPPermissionsViewController.m
// xplan-ios
//
// Created by zu on 2021/12/28.
//
#import "XPPermissionsViewController.h"
#import <Masonry/Masonry.h>
#import <Photos/Photos.h>
#import <AVFoundation/AVFoundation.h>
#import "XPMacro.h"
#import "ThemeColor.h"
#import "NSArray+Safe.h"
@interface XPPermissionCell : UITableViewCell
@property (nonatomic, strong) UIImageView * icon;
@property (nonatomic, strong) UILabel * name;
@property (nonatomic, strong) UILabel * tip;
@end
@implementation XPPermissionCell
- (instancetype)init {
if (self == [super init]) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.backgroundColor = UIColor.clearColor;
[self.contentView addSubview:self.icon];
[self.contentView addSubview:self.name];
[self.contentView addSubview:self.tip];
self.contentView.backgroundColor = ThemeColor.appCellBackgroundColor;
self.contentView.layer.masksToBounds = YES;
self.contentView.layer.cornerRadius = 8;
[self.icon mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.contentView);
make.left.mas_equalTo(self.contentView).offset(15);
}];
[self.name mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.icon.mas_right).offset(8);
make.top.mas_equalTo(self.contentView).offset(16);
}];
[self.tip mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.icon.mas_right).offset(8);
make.bottom.mas_equalTo(self.contentView).offset(-16);
}];
}
return self;
}
- (UIImageView *)icon {
if (!_icon) {
_icon = [[UIImageView alloc] init];
}
return _icon;
}
- (UILabel *)name {
if (!_name) {
_name = [[UILabel alloc] init];
_name.textColor = ThemeColor.mainTextColor;
_name.font = [UIFont systemFontOfSize:14];
}
return _name;
}
- (UILabel *)tip {
if (!_tip) {
_tip = [[UILabel alloc] init];
_tip.textColor = ThemeColor.secondTextColor;
_tip.font = [UIFont systemFontOfSize:13];
}
return _tip;
}
@end
@interface XPPermissionsViewController ()<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic,strong) UITableView * tableView;
@property (nonatomic, strong) NSMutableArray<NSString *> * permissionIcons;
@property (nonatomic, strong) NSMutableArray<NSString *> * permissionNames;
@property (nonatomic, strong) NSMutableArray<NSString *> * permissionTips;
@property (nonatomic, strong) UIView * empty;
@property (nonatomic, strong) UIImageView * emptyImage;
@property (nonatomic, strong) UILabel * emptyTip;
@property (nonatomic, strong) UIView * footer;
@property (nonatomic, strong) UILabel * footerTip;
@property (nonatomic, strong) UIButton * gotoSetting;
@end
@implementation XPPermissionsViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"系统权限管理";
[self.empty addSubview:self.emptyImage];
[self.empty addSubview:self.emptyTip];
[self.view addSubview:self.tableView];
[self.footer addSubview:self.footerTip];
[self.footer addSubview:self.gotoSetting];
[self.view addSubview:self.footer];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.bottom.mas_equalTo(self.view).insets(UIEdgeInsetsMake(16, 16, 16, 16));
}];
[self.emptyImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.empty);
make.top.mas_equalTo(self.empty).offset(200);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
[self.emptyTip mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.empty);
make.top.mas_equalTo(self.emptyImage.mas_bottom).offset(16);
}];
[self.footer mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.view).offset(-kSafeAreaBottomHeight);
make.height.mas_equalTo(100);
}];
[self.footerTip mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.footer);
make.top.mas_equalTo(self.footer).offset(24);
}];
[self.gotoSetting mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.footer);
make.top.mas_equalTo(self.footerTip.mas_bottom).offset(40);
}];
}
- (void)viewWillAppear:(BOOL)animated {
PHAuthorizationStatus phStatus = [PHPhotoLibrary authorizationStatus];
if (phStatus == PHAuthorizationStatusAuthorized) {
[self.permissionNames addObject:@"照片"];
[self.permissionTips addObject:@"读取相册或者存储图片到相册"];
[self.permissionIcons addObject:@"mine_setting_permission_album"];
}
AVAuthorizationStatus microPhoneStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
if (microPhoneStatus == AVAuthorizationStatusAuthorized) {
[self.permissionNames addObject:@"麦克风"];
[self.permissionTips addObject:@"录制音频"];
[self.permissionIcons addObject:@"mine_setting_permission_voice"];
}
AVAuthorizationStatus cameraStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (cameraStatus == AVAuthorizationStatusAuthorized) {
[self.permissionNames addObject:@"相机"];
[self.permissionTips addObject:@"拍摄照片或录制视频"];
[self.permissionIcons addObject:@"mine_setting_permission_camera"];
}
}
- (void)gotoSettingClick:(UIButton *)sender {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
tableView.backgroundView = self.permissionNames.count == 0 ? self.empty : nil;
return self.permissionNames.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if (section == 0) {
return 0.001f;
}
return 16.f;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 70.f;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor clearColor];
return view;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger section = indexPath.section;
XPPermissionCell * cell = [[XPPermissionCell alloc] init];
cell.icon.image = [UIImage imageNamed:[self.permissionIcons safeObjectAtIndex1:section]];
cell.name.text = [self.permissionNames safeObjectAtIndex1:section];
cell.tip.text = [self.permissionTips safeObjectAtIndex1:section];
return cell;
}
- (UITableView *)tableView {
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.showsVerticalScrollIndicator = NO;
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.backgroundColor = [UIColor clearColor];
[_tableView registerClass:[XPPermissionCell class] forCellReuseIdentifier:NSStringFromClass([XPPermissionCell class])];
}
return _tableView;
}
- (NSMutableArray<NSString *> *)permissionIcons {
if (!_permissionIcons) {
_permissionIcons = [[NSMutableArray alloc] init];
}
return _permissionIcons;
}
- (NSMutableArray<NSString *> *)permissionNames {
if (!_permissionNames) {
_permissionNames = [[NSMutableArray alloc] init];
}
return _permissionNames;
}
- (NSMutableArray<NSString *> *)permissionTips {
if (!_permissionTips) {
_permissionTips = [[NSMutableArray alloc] init];
}
return _permissionTips;
}
- (UIView *)empty {
if (!_empty) {
_empty = [[UIView alloc] init];
}
return _empty;
}
- (UIImageView *)emptyImage {
if (!_emptyImage) {
_emptyImage = [[UIImageView alloc] init];
_emptyImage.contentMode = UIViewContentModeScaleAspectFit;
_emptyImage.image = [UIImage imageNamed:@"common_empty"];
}
return _emptyImage;
}
- (UILabel *)emptyTip {
if (!_emptyTip) {
_emptyTip = [[UILabel alloc] init];
_emptyTip.textColor = ThemeColor.secondTextColor;
_emptyTip.font = [UIFont systemFontOfSize:12];
_emptyTip.text = @"未有已授权的系统权限";
}
return _emptyTip;
}
- (UIView *)footer {
if (!_footer) {
_footer = [[UIView alloc] init];
}
return _footer;
}
- (UILabel *)footerTip {
if (!_footerTip) {
_footerTip = [[UILabel alloc] init];
_footerTip.textColor = ThemeColor.mainTextColor;
_footerTip.font = [UIFont systemFontOfSize:12];
_footerTip.text = @"—— 仅展示能查询到的已授权系统权限 ——";
}
return _footerTip;
}
- (UIButton *)gotoSetting {
if (!_gotoSetting) {
_gotoSetting = [UIButton buttonWithType:UIButtonTypeCustom];
[_gotoSetting setTitle:@"前往系统设置>" forState:UIControlStateNormal];
[_gotoSetting setTitleColor:ThemeColor.appMainColor forState:UIControlStateNormal];
_gotoSetting.titleLabel.font = [UIFont systemFontOfSize:14];
_gotoSetting.titleLabel.adjustsFontSizeToFitWidth = YES;
[_gotoSetting addTarget:self action:@selector(gotoSettingClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _gotoSetting;
}
@end