Files
featherVoice/TUIKit/TUIMultimediaPlugin/Common/View/TUIMultimediaAuthorizationPrompter.m
2025-08-08 10:49:36 +08:00

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