141 lines
6.0 KiB
Objective-C
141 lines
6.0 KiB
Objective-C
// Copyright (c) 2024 Tencent. All rights reserved.
|
|
// Author: eddardliu
|
|
|
|
#import "TUIMultimediaAuthorizationPrompter.h"
|
|
#import <SafariServices/SafariServices.h>
|
|
#import "TUIMultimediaPlugin/TUIMultimediaSignatureChecker.h"
|
|
#import "TUIMultimediaPlugin/TUIMultimediaCommon.h"
|
|
|
|
#define IM_MULTIMEDIA_PLUGIN_DOCUMENT_URL @"https://cloud.tencent.com/document/product/269/113290"
|
|
|
|
@interface TUIMultimediaAuthorizationPrompter () {
|
|
UIButton *_confirmButton;
|
|
}
|
|
|
|
@property (nonatomic, copy) void (^dismissHandler)(void);
|
|
|
|
@end
|
|
|
|
@implementation TUIMultimediaAuthorizationPrompter
|
|
|
|
+ (BOOL) verifyPermissionGranted:(UIViewController*)parentView {
|
|
if ([[TUIMultimediaSignatureChecker shareInstance] isFunctionSupport]) {
|
|
return YES;
|
|
}
|
|
NSLog(@"signature checker do not support function.");
|
|
if (parentView != nil) {
|
|
[TUIMultimediaAuthorizationPrompter showPrompterDialogInViewController:parentView];
|
|
}
|
|
return NO;
|
|
}
|
|
|
|
+ (void)showPrompterDialogInViewController:(UIViewController *)presentingVC {
|
|
TUIMultimediaAuthorizationPrompter *dialog = [[TUIMultimediaAuthorizationPrompter alloc] init];
|
|
dialog.modalPresentationStyle = UIModalPresentationOverCurrentContext;
|
|
dialog.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
|
|
[presentingVC presentViewController:dialog animated:YES completion:nil];
|
|
}
|
|
|
|
- (void)viewDidLoad {
|
|
[super viewDidLoad];
|
|
[self setupUI];
|
|
}
|
|
|
|
- (void)setupUI {
|
|
self.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
|
|
|
|
UIView *container = [[UIView alloc] init];
|
|
container.backgroundColor = [UIColor tertiarySystemBackgroundColor];
|
|
container.layer.cornerRadius = 16;
|
|
container.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[self.view addSubview:container];
|
|
|
|
UIStackView *titleStack = [[UIStackView alloc] init];
|
|
titleStack.axis = UILayoutConstraintAxisHorizontal;
|
|
titleStack.spacing = 12;
|
|
UILabel *titleLabel = [[UILabel alloc] init];
|
|
titleLabel.text = [TUIMultimediaCommon localizedStringForKey:@"prompter"];
|
|
titleLabel.font = [UIFont systemFontOfSize:20];
|
|
titleLabel.textColor = [UIColor labelColor];
|
|
[titleStack addArrangedSubview:titleLabel];
|
|
|
|
UILabel *prompter = [[UILabel alloc] init];
|
|
prompter.numberOfLines = 0;
|
|
prompter.text = [TUIMultimediaCommon localizedStringForKey:@"authorization_prompter"];
|
|
prompter.font = [UIFont systemFontOfSize:14];
|
|
prompter.textColor = [UIColor secondaryLabelColor];
|
|
|
|
UITextView *prompter_access_docments = [[UITextView alloc] init];
|
|
prompter_access_docments.editable = NO;
|
|
prompter_access_docments.scrollEnabled = NO;
|
|
prompter_access_docments.backgroundColor = [UIColor clearColor];
|
|
prompter_access_docments.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
|
|
NSString* prompter_accessing_documents = [TUIMultimediaCommon localizedStringForKey:@"authorization_prompter_accessing_documents"];
|
|
NSString* documents_title = [TUIMultimediaCommon localizedStringForKey:@"authorization_prompter_documents_title"];
|
|
NSRange title_range = [prompter_accessing_documents rangeOfString:documents_title];
|
|
|
|
NSMutableAttributedString *linkText = [[NSMutableAttributedString alloc] initWithString:prompter_accessing_documents];
|
|
[linkText addAttribute:NSLinkAttributeName
|
|
value:IM_MULTIMEDIA_PLUGIN_DOCUMENT_URL
|
|
range:title_range];
|
|
prompter_access_docments.attributedText = linkText;
|
|
prompter_access_docments.tintColor = [UIColor systemBlueColor];
|
|
prompter_access_docments.font = [UIFont systemFontOfSize:14];
|
|
prompter_access_docments.textColor = [UIColor secondaryLabelColor];
|
|
|
|
|
|
UILabel *prompter_remove_module = [[UILabel alloc] init];
|
|
prompter_remove_module.numberOfLines = 0;
|
|
prompter_remove_module.text = [TUIMultimediaCommon localizedStringForKey:@"authorization_prompter_remove_module"];
|
|
prompter_remove_module.font = [UIFont systemFontOfSize:14];
|
|
prompter_remove_module.textColor = [UIColor secondaryLabelColor];
|
|
|
|
|
|
_confirmButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
|
[_confirmButton setTitle:[TUIMultimediaCommon localizedStringForKey:@"ok"] forState:UIControlStateNormal];
|
|
[_confirmButton addTarget:self
|
|
action:@selector(confirmAction)
|
|
forControlEvents:UIControlEventTouchUpInside];
|
|
_confirmButton.titleLabel.font = [UIFont systemFontOfSize:16];
|
|
|
|
|
|
UIStackView *stack = [[UIStackView alloc] initWithArrangedSubviews:@[
|
|
titleStack, prompter, prompter_access_docments, prompter_remove_module, _confirmButton
|
|
]];
|
|
stack.axis = UILayoutConstraintAxisVertical;
|
|
stack.spacing = 6;
|
|
stack.alignment = UIStackViewAlignmentLeading;
|
|
stack.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[container addSubview:stack];
|
|
|
|
[NSLayoutConstraint activateConstraints:@[
|
|
[container.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor],
|
|
[container.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor],
|
|
[container.widthAnchor constraintEqualToAnchor:self.view.widthAnchor
|
|
multiplier:0.8],
|
|
|
|
[stack.topAnchor constraintEqualToAnchor:container.topAnchor constant:20],
|
|
[stack.leadingAnchor constraintEqualToAnchor:container.leadingAnchor constant:20],
|
|
[stack.trailingAnchor constraintEqualToAnchor:container.trailingAnchor constant:-20],
|
|
[stack.bottomAnchor constraintEqualToAnchor:container.bottomAnchor constant:-20],
|
|
|
|
[_confirmButton.leadingAnchor constraintEqualToAnchor:stack.leadingAnchor]
|
|
]];
|
|
}
|
|
|
|
- (void)confirmAction {
|
|
[self dismissViewControllerAnimated:YES completion:nil];
|
|
}
|
|
|
|
#pragma mark - UITextViewDelegate
|
|
- (BOOL)textView:(UITextView *)textView
|
|
shouldInteractWithURL:(NSURL *)URL
|
|
inRange:(NSRange)characterRange
|
|
interaction:(UITextItemInteraction)interaction {
|
|
SFSafariViewController *safari = [[SFSafariViewController alloc] initWithURL:URL];
|
|
[self presentViewController:safari animated:YES completion:nil];
|
|
return NO;
|
|
}
|
|
|
|
@end
|