Signed-off-by: Marcel Müller <marcel-mueller@gmx.de>
This commit is contained in:
Marcel Müller 2022-10-31 16:52:29 +01:00
Родитель 5a0c03de2b
Коммит 448dcdb442
21 изменённых файлов: 148 добавлений и 326 удалений

Просмотреть файл

@ -38,7 +38,6 @@
1F98DF9C28E7484700E05174 /* ReferenceDeckView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F98DF9B28E7484700E05174 /* ReferenceDeckView.swift */; };
1F98DF9E28E7485000E05174 /* ReferenceDeckView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F98DF9D28E7485000E05174 /* ReferenceDeckView.xib */; };
1FA20C8A284001D80062B4F3 /* DebounceWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FA20C89284001D80062B4F3 /* DebounceWebView.swift */; };
1FADF2E528EAE28F0074A532 /* iOS13Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1FADF2E428EAE28F0074A532 /* iOS13Main.storyboard */; };
1FB52E762842C75E00AC741B /* QRCodeLoginController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB52E752842C75E00AC741B /* QRCodeLoginController.swift */; };
1FB6678F28CE381300D29F8D /* SubtitleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB6678E28CE381300D29F8D /* SubtitleTableViewCell.swift */; };
1FD9182928C55A73009092AB /* BGTaskHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD9182828C55A73009092AB /* BGTaskHelper.swift */; };
@ -393,7 +392,6 @@
1F98DF9B28E7484700E05174 /* ReferenceDeckView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReferenceDeckView.swift; sourceTree = "<group>"; };
1F98DF9D28E7485000E05174 /* ReferenceDeckView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ReferenceDeckView.xib; sourceTree = "<group>"; };
1FA20C89284001D80062B4F3 /* DebounceWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebounceWebView.swift; sourceTree = "<group>"; };
1FADF2E428EAE28F0074A532 /* iOS13Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = iOS13Main.storyboard; sourceTree = "<group>"; };
1FB52E752842C75E00AC741B /* QRCodeLoginController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginController.swift; sourceTree = "<group>"; };
1FB6678E28CE381300D29F8D /* SubtitleTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubtitleTableViewCell.swift; sourceTree = "<group>"; };
1FD9182828C55A73009092AB /* BGTaskHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BGTaskHelper.swift; sourceTree = "<group>"; };
@ -920,7 +918,6 @@
2C6085C11FB1063700B36A6E /* NextcloudTalk.entitlements */,
2CA1CCAB1F067F35002FE6A2 /* Images.xcassets */,
2C0574941EDD9E8E00D9E7F2 /* Info.plist */,
1FADF2E428EAE28F0074A532 /* iOS13Main.storyboard */,
2C05748C1EDD9E8E00D9E7F2 /* Main.storyboard */,
2C1D13A1253760EE00EC0533 /* LaunchScreen.xib */,
2C7F47AC20289B9600081CC7 /* Localizable.strings */,
@ -1645,7 +1642,6 @@
2CC007BE20D8F24B0096D91F /* RoomCreation2TableViewController.xib in Resources */,
2CC32E9327F45AE000BB8C39 /* ReactionsViewCell.xib in Resources */,
2C330372255E6EBC00BDB4E4 /* InfoPlist.strings in Resources */,
1FADF2E528EAE28F0074A532 /* iOS13Main.storyboard in Resources */,
2C78EFA11F828C41008AFA74 /* CallViewController.xib in Resources */,
2C3780C5210F4A26003F9AE8 /* HeaderWithButton.xib in Resources */,
2CC007B920D8139D0096D91F /* RoomCreationTableViewController.xib in Resources */,

Просмотреть файл

@ -84,22 +84,12 @@
[self registerBackgroundFetchTask];
if (@available(iOS 14.0, *)) {
[NCUserInterfaceController sharedInstance].mainSplitViewController = (NCSplitViewController *) self.window.rootViewController;
[NCUserInterfaceController sharedInstance].mainViewController = (NCSplitViewController *) self.window.rootViewController;
[NCUserInterfaceController sharedInstance].roomsTableViewController = [NCUserInterfaceController sharedInstance].mainSplitViewController.viewControllers.firstObject.childViewControllers.firstObject;
if (@available(iOS 14.5, *)) {
[NCUserInterfaceController sharedInstance].mainSplitViewController.displayModeButtonVisibility = UISplitViewControllerDisplayModeButtonVisibilityNever;
}
} else {
// We're using iOS 14 specific APIs for splitView, so fall back in case they're not supported
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iOS13Main" bundle:[NSBundle mainBundle]];
UIViewController *vc = [storyboard instantiateInitialViewController];
[NCUserInterfaceController sharedInstance].mainSplitViewController = (NCSplitViewController *) self.window.rootViewController;
[NCUserInterfaceController sharedInstance].mainViewController = (NCSplitViewController *) self.window.rootViewController;
[NCUserInterfaceController sharedInstance].roomsTableViewController = [NCUserInterfaceController sharedInstance].mainSplitViewController.viewControllers.firstObject.childViewControllers.firstObject;
self.window.rootViewController = vc;
[NCUserInterfaceController sharedInstance].mainViewController = (NCNavigationController *) self.window.rootViewController;
if (@available(iOS 14.5, *)) {
[NCUserInterfaceController sharedInstance].mainSplitViewController.displayModeButtonVisibility = UISplitViewControllerDisplayModeButtonVisibilityNever;
}
return YES;

Просмотреть файл

@ -99,7 +99,7 @@ NSTimeInterval const kCallKitManagerCheckCallStateEverySeconds = 5.0;
- (CXProvider *)provider
{
if (!_provider) {
CXProviderConfiguration *configuration = [[CXProviderConfiguration alloc] initWithLocalizedName:talkAppName];
CXProviderConfiguration *configuration = [[CXProviderConfiguration alloc] init];
configuration.supportsVideo = YES;
configuration.maximumCallGroups = 1;
configuration.maximumCallsPerCallGroup = 1;

Просмотреть файл

@ -450,12 +450,10 @@
_userStatusImageView.contentMode = UIViewContentModeCenter;
_userStatusImageView.layer.cornerRadius = 6;
_userStatusImageView.clipsToBounds = YES;
_userStatusImageView.backgroundColor = self.backgroundColor;
if (@available(iOS 14.0, *)) {
// When a background color is set directly to the cell it seems that there is no background configuration.
// In this class, even when no background color is set, the background configuration is nil.
_userStatusImageView.backgroundColor = (self.backgroundColor) ? self.backgroundColor : [[self backgroundConfiguration] backgroundColor];
}
// When a background color is set directly to the cell it seems that there is no background configuration.
// In this class, even when no background color is set, the background configuration is nil.
_userStatusImageView.backgroundColor = (self.backgroundColor) ? self.backgroundColor : [[self backgroundConfiguration] backgroundColor];
}
}

Просмотреть файл

@ -86,11 +86,9 @@ CGFloat const kContactsTableCellTitleFontSize = 17.0f;
_userStatusImageView.contentMode = UIViewContentModeCenter;
_userStatusImageView.layer.cornerRadius = 10;
_userStatusImageView.clipsToBounds = YES;
_userStatusImageView.backgroundColor = self.backgroundColor;
if (@available(iOS 14.0, *)) {
// When a background color is set directly to the cell it seems that there is no background configuration.
_userStatusImageView.backgroundColor = (self.backgroundColor) ? self.backgroundColor : [[self backgroundConfiguration] backgroundColor];
}
// When a background color is set directly to the cell it seems that there is no background configuration.
_userStatusImageView.backgroundColor = (self.backgroundColor) ? self.backgroundColor : [[self backgroundConfiguration] backgroundColor];
}
}

Просмотреть файл

@ -35,7 +35,7 @@ class DebounceWebView: WKWebView {
previousPasteTimestamp = currentPasteTimestamp
}
super.paste(sender)
}
}

Просмотреть файл

@ -396,7 +396,7 @@ class DiagnosticsTableViewController: UITableViewController {
cell.textLabel?.text = NSLocalizedString("Location access", comment: "")
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
switch CLLocationManager().authorizationStatus {
case .authorizedAlways, .authorizedWhenInUse:
cell.detailTextLabel?.text = allowedString

Просмотреть файл

@ -370,7 +370,7 @@ NSString * const NCLocalNotificationJoinChatNotification = @"NCLocalN
{
// Called when a notification is delivered to a foreground app.
[[NSNotificationCenter defaultCenter] postNotificationName:NCNotificationControllerWillPresentNotification object:self userInfo:nil];
completionHandler(UNNotificationPresentationOptionAlert);
completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);
// Remove the notification from Notification Center if it is from the active account
NSString *notificationAccountId = [notification.request.content.userInfo objectForKey:@"accountId"];

Просмотреть файл

@ -27,7 +27,7 @@
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.preferredDisplayMode = .allVisible
self.preferredDisplayMode = .oneBesideSecondary
// As we always show the columns on iPads, we don't need gesture support
self.presentsWithGesture = false
@ -46,48 +46,44 @@
return
}
if #available(iOS 14.0, *) {
if let navController = self.viewController(for: .secondary) as? UINavigationController,
viewController is RoomsTableViewController {
if let navController = self.viewController(for: .secondary) as? UINavigationController,
viewController is RoomsTableViewController {
// MovingFromParentViewController is always false in case of a rootViewController,
// because of this, the chat will never be left in NCChatViewController
// (see viewDidDisappear). So we have to leave the chat here, if collapsed
if let chatViewController = getActiveChatViewController() {
chatViewController.leaveChat()
}
// Make sure the chatViewController gets properly deallocated
setViewController(placeholderViewController, for: .secondary)
navController.setViewControllers([placeholderViewController], animated: false)
// MovingFromParentViewController is always false in case of a rootViewController,
// because of this, the chat will never be left in NCChatViewController
// (see viewDidDisappear). So we have to leave the chat here, if collapsed
if let chatViewController = getActiveChatViewController() {
chatViewController.leaveChat()
}
// Make sure the chatViewController gets properly deallocated
setViewController(placeholderViewController, for: .secondary)
navController.setViewControllers([placeholderViewController], animated: false)
}
}
override func showDetailViewController(_ vc: UIViewController, sender: Any?) {
if #available(iOS 14.0, *) {
if !isCollapsed {
// When another room is selected while there's still an active chatViewController
// we need to make sure the active one is removed (applies to expanded mode only)
if let navController = self.viewController(for: .secondary) as? UINavigationController {
navController.popToRootViewController(animated: false)
}
if !isCollapsed {
// When another room is selected while there's still an active chatViewController
// we need to make sure the active one is removed (applies to expanded mode only)
if let navController = self.viewController(for: .secondary) as? UINavigationController {
navController.popToRootViewController(animated: false)
}
}
super.showDetailViewController(vc, sender: sender)
super.showDetailViewController(vc, sender: sender)
if isCollapsed {
// Make sure we don't have accidentally a placeholderView in our navigation
// while in collapsed mode
if let navController = self.viewController(for: .secondary) as? UINavigationController,
vc is NCChatViewController {
if isCollapsed {
// Make sure we don't have accidentally a placeholderView in our navigation
// while in collapsed mode
if let navController = self.viewController(for: .secondary) as? UINavigationController,
vc is NCChatViewController {
// Only set the viewController if there's actually an active one shown by showDetailViewController
// Otherwise UI might break or crash (view not loaded correctly)
// This might happen if a chatViewController is shown by a push notification
if self.hasActiveChatViewController() {
navController.setViewControllers([vc], animated: false)
}
// Only set the viewController if there's actually an active one shown by showDetailViewController
// Otherwise UI might break or crash (view not loaded correctly)
// This might happen if a chatViewController is shown by a push notification
if self.hasActiveChatViewController() {
navController.setViewControllers([vc], animated: false)
}
}
}
@ -102,21 +98,19 @@
}
func getActiveViewController<T: UIViewController>() -> T? {
if #available(iOS 14.0, *) {
// In case we have a collapsed view, we need to retrieve the viewController this way
if let navController = self.viewController(for: .secondary) as? UINavigationController {
for secondaryViewController in navController.viewControllers {
if let activeViewController = secondaryViewController as? T {
return activeViewController
}
// In case we have a collapsed view, we need to retrieve the viewController this way
if let navController = self.viewController(for: .secondary) as? UINavigationController {
for secondaryViewController in navController.viewControllers {
if let activeViewController = secondaryViewController as? T {
return activeViewController
}
}
}
if let navController = self.viewController(for: .primary) as? UINavigationController {
for primaryViewController in navController.viewControllers {
if let activeViewController = primaryViewController as? T {
return activeViewController
}
if let navController = self.viewController(for: .primary) as? UINavigationController {
for primaryViewController in navController.viewControllers {
if let activeViewController = primaryViewController as? T {
return activeViewController
}
}
}
@ -124,7 +118,6 @@
return nil
}
@available(iOS 14.0, *)
func splitViewController(_ svc: UISplitViewController, topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column) -> UISplitViewController.Column {
// When we rotate the device and the splitViewController gets collapsed
// we need to determine if we're still in a chat or not.
@ -136,7 +129,6 @@
return .primary
}
@available(iOS 14.0, *)
func splitViewControllerDidExpand(_ svc: UISplitViewController) {
if let navController = self.viewController(for: .secondary) as? UINavigationController {
if hasActiveChatViewController() {
@ -151,7 +143,6 @@
}
}
@available(iOS 14.0, *)
func splitViewControllerDidCollapse(_ svc: UISplitViewController) {
if hasActiveChatViewController() {
// If we collapse (only show one column) and there's a active chatViewController
@ -162,7 +153,6 @@
}
}
@available(iOS 14.0, *)
func popSecondaryColumnToRootViewController() {
if let navController = self.viewController(for: .secondary) as? UINavigationController {
if let chatViewController = getActiveChatViewController() {

Просмотреть файл

@ -325,10 +325,8 @@
{
[_mainViewController dismissViewControllerAnimated:YES completion:nil];
if (@available(iOS 14.0, *)) {
[_mainSplitViewController popSecondaryColumnToRootViewController];
[_mainSplitViewController showColumn:UISplitViewControllerColumnPrimary];
}
[_mainSplitViewController popSecondaryColumnToRootViewController];
[_mainSplitViewController showColumn:UISplitViewControllerColumnPrimary];
}
@ -336,25 +334,21 @@
{
[self presentConversationsList];
if (@available(iOS 14.0, *)) {
if (_mainSplitViewController.transitionCoordinator == nil) {
// No ongoing animations -> show chatViewController directly
[_mainSplitViewController showDetailViewController:chatViewController sender:self];
} else {
// Wait until the splitViewController finished all it's animations.
// Otherwise the chatViewController might end up in the wrong column.
// This mainly happens when being in a conversation and tapping a push notification
// of another conversation.
[_mainSplitViewController.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// Nothing to do here, we are only interested in the completion block
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
dispatch_async(dispatch_get_main_queue(), ^{
[self->_mainSplitViewController showDetailViewController:chatViewController sender:self];
});
}];
}
if (_mainSplitViewController.transitionCoordinator == nil) {
// No ongoing animations -> show chatViewController directly
[_mainSplitViewController showDetailViewController:chatViewController sender:self];
} else {
[(UINavigationController *)_mainViewController pushViewController:chatViewController animated:YES];
// Wait until the splitViewController finished all it's animations.
// Otherwise the chatViewController might end up in the wrong column.
// This mainly happens when being in a conversation and tapping a push notification
// of another conversation.
[_mainSplitViewController.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// Nothing to do here, we are only interested in the completion block
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
dispatch_async(dispatch_get_main_queue(), ^{
[self->_mainSplitViewController showDetailViewController:chatViewController sender:self];
});
}];
}
[_roomsTableViewController setSelectedRoomToken:chatViewController.room.token];

Просмотреть файл

@ -406,11 +406,7 @@ static NSString *const nextcloudScheme = @"nextcloud:";
+ (BOOL)isiOSAppOnMac
{
if (@available(iOS 14.0, *)) {
return [NSProcessInfo processInfo].isiOSAppOnMac;
}
return false;
return [NSProcessInfo processInfo].isiOSAppOnMac;
}
+ (NSString *)removeHTMLFromString:(NSString *)string

Просмотреть файл

@ -21,15 +21,15 @@
import Foundation
import QRCodeReader
@objc public protocol QRCodeLoginControllerDelegate {
@objc public protocol QRCodeLoginControllerDelegate {
@objc func readLoginDetails(serverUrl: String?, user: String?, password: String?)
}
@objc public class QRCodeLoginController: NSObject, QRCodeReaderViewControllerDelegate {
lazy var reader: QRCodeReader = QRCodeReader()
weak var delegate: UIViewController?
lazy var readerVC: QRCodeReaderViewController = {
let builder = QRCodeReaderViewControllerBuilder {
$0.reader = QRCodeReader(metadataObjectTypes: [.qr], captureDevicePosition: .back)
@ -37,40 +37,40 @@ import QRCodeReader
$0.preferredStatusBarStyle = .lightContent
$0.showOverlayView = true
$0.rectOfInterest = CGRect(x: 0.2, y: 0.2, width: 0.6, height: 0.6)
$0.reader.stopScanningWhenCodeIsFound = false
}
return QRCodeReaderViewController(builder: builder)
}()
override init() {
}
@objc public init(delegate: UIViewController) {
self.delegate = delegate
}
@objc func scan() {
guard checkScanPermissions() else { return }
readerVC.modalPresentationStyle = .formSheet
readerVC.delegate = self
readerVC.completionBlock = { (_: QRCodeReaderResult?) in
self.readerVC.dismiss(animated: true, completion: nil)
}
delegate?.present(readerVC, animated: true, completion: nil)
}
private func checkScanPermissions() -> Bool {
do {
return try QRCodeReader.supportsMetadataObjectTypes()
} catch let error as NSError {
let alert: UIAlertController
switch error.code {
case -11852:
alert = UIAlertController(
@ -78,7 +78,7 @@ import QRCodeReader
message: NSLocalizedString("Camera access is not allowed. Check your settings.", comment: ""),
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: NSLocalizedString("Settings", comment: ""), style: .default, handler: { _ in
DispatchQueue.main.async {
if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
@ -86,7 +86,7 @@ import QRCodeReader
}
}
}))
alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, handler: nil))
default:
alert = UIAlertController(
@ -94,24 +94,24 @@ import QRCodeReader
message: NSLocalizedString("Scanning QR Codes is not supported on this device.", comment: ""),
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .cancel, handler: nil))
}
delegate?.present(alert, animated: true, completion: nil)
return false
}
}
public func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
reader.stopScanning()
if let urlComponents = NSURLComponents(string: result.value), var path = urlComponents.path, urlComponents.scheme == "nc", urlComponents.host == "login" {
if path.starts(with: "/") {
path.removeFirst()
}
if path.contains("user:") && path.contains("password:") && path.contains("server:") {
let pathArray = path.components(separatedBy: "&")
if pathArray.count == 3 {
@ -119,14 +119,14 @@ import QRCodeReader
let user = pathArray[0].replacingOccurrences(of: "user:", with: "")
let password = pathArray[1].replacingOccurrences(of: "password:", with: "")
let serverUrl = pathArray[2].replacingOccurrences(of: "server:", with: "")
(self.delegate as? QRCodeLoginControllerDelegate)?.readLoginDetails(serverUrl: serverUrl, user: user, password: password)
return
}
}
}
}
public func readerDidCancel(_ reader: QRCodeReaderViewController) {
reader.stopScanning()
}

Просмотреть файл

@ -89,8 +89,6 @@ import Foundation
referenceDescription.isHidden = true
}
let activeAccount = NCDatabaseManager.sharedInstance().activeAccount()
if let thumbUrlString = reference["thumb"] as? String,
let request = NCAPIController.sharedInstance().createReferenceThumbnailRequest(forUrl: thumbUrlString) {

Просмотреть файл

@ -221,9 +221,8 @@ typedef enum FileAction {
_lobbyDatePicker = [[UIDatePicker alloc] init];
_lobbyDatePicker.datePickerMode = UIDatePickerModeDateAndTime;
if (@available(iOS 13.4, *)) {
_lobbyDatePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
}
_lobbyDatePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
_lobbyDateTextField = [[UITextField alloc] initWithFrame:CGRectMake(0, 00, 150, 30)];
_lobbyDateTextField.textAlignment = NSTextAlignmentRight;
_lobbyDateTextField.placeholder = NSLocalizedString(@"Manual", @"TRANSLATORS this is used when no meeting start time is set and the meeting will be started manually");

Просмотреть файл

@ -173,11 +173,9 @@ CGFloat const kRoomTableCellHeight = 74.0f;
_userStatusImageView.contentMode = UIViewContentModeCenter;
_userStatusImageView.layer.cornerRadius = 10;
_userStatusImageView.clipsToBounds = YES;
_userStatusImageView.backgroundColor = self.backgroundColor;
if (@available(iOS 14.0, *)) {
// When a background color is set directly to the cell it seems that there is no background configuration.
_userStatusImageView.backgroundColor = (self.backgroundColor) ? self.backgroundColor : [[self backgroundConfiguration] backgroundColor];
}
// When a background color is set directly to the cell it seems that there is no background configuration.
_userStatusImageView.backgroundColor = (self.backgroundColor) ? self.backgroundColor : [[self backgroundConfiguration] backgroundColor];
}
}

Просмотреть файл

@ -243,11 +243,7 @@ typedef void (^FetchRoomsCompletionBlock)(BOOL success);
self.clearsSelectionOnViewWillAppear = self.splitViewController.isCollapsed;
if (@available(iOS 14.0, *)) {
if (self.splitViewController.isCollapsed) {
[self setSelectedRoomToken:nil];
}
} else {
if (self.splitViewController.isCollapsed) {
[self setSelectedRoomToken:nil];
}
}

Просмотреть файл

@ -369,7 +369,7 @@ class SettingsTableViewController: UITableViewController, UITextFieldDelegate {
}
if isStoredResolution {
action.setValue(UIImage(named: "checkmark")?.withRenderingMode(_:.alwaysOriginal), forKey: "image")
action.setValue(UIImage(named: "checkmark")?.withRenderingMode(_: .alwaysOriginal), forKey: "image")
}
optionsActionSheet.addAction(action)
}
@ -395,7 +395,7 @@ class SettingsTableViewController: UITableViewController, UITextFieldDelegate {
self.tableView.reloadData()
}
if browser == defaultBrowser {
action.setValue(UIImage(named: "checkmark")?.withRenderingMode(_:.alwaysOriginal), forKey: "image")
action.setValue(UIImage(named: "checkmark")?.withRenderingMode(_: .alwaysOriginal), forKey: "image")
}
optionsActionSheet.addAction(action)
}

Просмотреть файл

@ -136,8 +136,10 @@ typedef enum ShareLocationSection {
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
- (void)locationManagerDidChangeAuthorization:(CLLocationManager *)manager
{
CLAuthorizationStatus status = manager.authorizationStatus;
_myLocationButton.hidden = YES;
if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusAuthorizedAlways) {
_myLocationButton.hidden = NO;
@ -274,18 +276,16 @@ typedef enum ShareLocationSection {
- (void)searchForNearbyPlaces
{
if (@available(iOS 14.0, *)) {
MKLocalPointsOfInterestRequest *request = [[MKLocalPointsOfInterestRequest alloc] initWithCoordinateRegion:self.mapView.region];
MKLocalSearch *search = [[MKLocalSearch alloc] initWithPointsOfInterestRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse * _Nullable response, NSError * _Nullable error) {
if (response) {
dispatch_async(dispatch_get_main_queue(), ^{
self->_nearbyPlaces = response.mapItems;
[self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:kShareLocationSectionNearby] withRowAnimation:UITableViewRowAnimationNone];
});
}
}];
}
MKLocalPointsOfInterestRequest *request = [[MKLocalPointsOfInterestRequest alloc] initWithCoordinateRegion:self.mapView.region];
MKLocalSearch *search = [[MKLocalSearch alloc] initWithPointsOfInterestRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse * _Nullable response, NSError * _Nullable error) {
if (response) {
dispatch_async(dispatch_get_main_queue(), ^{
self->_nearbyPlaces = response.mapItems;
[self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:kShareLocationSectionNearby] withRowAnimation:UITableViewRowAnimationNone];
});
}
}];
}
- (void)searchForPlacesWithString:(NSString *)searchString

Просмотреть файл

@ -183,16 +183,14 @@ class UserStatusMessageViewController: UIViewController, UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField is EmojiTextField {
if #available(iOS 10.2, *) {
if string.isSingleEmoji == false {
self.setStatusIconInView(icon: nil)
} else {
self.setStatusIconInView(icon: string)
}
} else {
if string.isSingleEmoji == false {
self.setStatusIconInView(icon: nil)
} else {
self.setStatusIconInView(icon: string)
}
textField.endEditing(true)
return false
}

Просмотреть файл

@ -53,33 +53,31 @@
self.navigationController.navigationBar.tintColor = [NCAppBranding themeTextColor];
self.navigationController.navigationBar.translucent = NO;
self.navigationController.navigationBar.barTintColor = [NCAppBranding themeColor];
UIColor *themeColor = [NCAppBranding themeColor];
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
[appearance configureWithOpaqueBackground];
appearance.backgroundColor = themeColor;
appearance.titleTextAttributes = @{NSForegroundColorAttributeName:[NCAppBranding themeTextColor]};
self.navigationItem.standardAppearance = appearance;
self.navigationItem.compactAppearance = appearance;
self.navigationItem.scrollEdgeAppearance = appearance;
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self action:@selector(closeViewController)];
if (@available(iOS 13.0, *)) {
UIColor *themeColor = [NCAppBranding themeColor];
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
[appearance configureWithOpaqueBackground];
appearance.backgroundColor = themeColor;
appearance.titleTextAttributes = @{NSForegroundColorAttributeName:[NCAppBranding themeTextColor]};
self.navigationItem.standardAppearance = appearance;
self.navigationItem.compactAppearance = appearance;
self.navigationItem.scrollEdgeAppearance = appearance;
self.navigationController.navigationBar.topItem.leftBarButtonItem = cancelButton;
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self action:@selector(closeViewController)];
self.navigationController.navigationBar.topItem.leftBarButtonItem = cancelButton;
_activityIndicator = [[UIActivityIndicatorView alloc] init];
_activityIndicator.color = [NCAppBranding themeTextColor];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self->_activityIndicator];
[_activityIndicator startAnimating];
_supportedLocales = @[@"de", @"it", @"en", @"fr", @"es"];
[self checkPermissionAndStartTranscription];
}
_activityIndicator = [[UIActivityIndicatorView alloc] init];
_activityIndicator.color = [NCAppBranding themeTextColor];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self->_activityIndicator];
[_activityIndicator startAnimating];
_supportedLocales = @[@"de", @"it", @"en", @"fr", @"es"];
[self checkPermissionAndStartTranscription];
}
- (void)closeViewController
@ -87,7 +85,7 @@
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)checkPermissionAndStartTranscription API_AVAILABLE(ios(13.0))
- (void)checkPermissionAndStartTranscription
{
[SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status){
dispatch_async(dispatch_get_main_queue(), ^{
@ -101,7 +99,7 @@
}];
}
- (void)showLocaleSelection API_AVAILABLE(ios(13.0))
- (void)showLocaleSelection
{
UIAlertController *optionsActionSheet = [UIAlertController alertControllerWithTitle:nil
message:nil
@ -137,7 +135,7 @@
[self presentViewController:optionsActionSheet animated:YES completion:nil];
}
- (void)transcribeWithLocale:(NSLocale *)locale API_AVAILABLE(ios(13.0))
- (void)transcribeWithLocale:(NSLocale *)locale
{
SFSpeechRecognizer *speechRecognizer = [[SFSpeechRecognizer alloc] initWithLocale:locale];
SFSpeechURLRecognitionRequest *speechRecognitionRequest = [[SFSpeechURLRecognitionRequest alloc] initWithURL:_audioFileUrl];

Просмотреть файл

@ -1,127 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="lDR-Z7-uv9">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Rooms Table View Controller-->
<scene sceneID="Vbx-je-b0o">
<objects>
<tableViewController extendedLayoutIncludesOpaqueBars="YES" id="d5a-it-gRL" customClass="RoomsTableViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="pE7-Go-f5G">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="lNr-59-sMg">
<rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="lNr-59-sMg" id="WiD-wD-jK1">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</tableViewCellContentView>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="d5a-it-gRL" id="Cfp-CP-VeH"/>
<outlet property="delegate" destination="d5a-it-gRL" id="bDT-EF-LeB"/>
</connections>
</tableView>
<navigationItem key="navigationItem" id="Xw3-a9-moF">
<barButtonItem key="rightBarButtonItem" style="plain" systemItem="add" id="0h6-8z-cdO">
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<connections>
<action selector="addButtonPressed:" destination="d5a-it-gRL" id="luT-Ui-CeU"/>
</connections>
</barButtonItem>
</navigationItem>
<connections>
<outlet property="addButton" destination="0h6-8z-cdO" id="MYi-pi-ZFM"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Dw9-Dz-er8" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1356" y="-76"/>
</scene>
<!--Settings Table View Controller-->
<scene sceneID="ZbW-mC-4pI">
<objects>
<tableViewController id="IZS-G3-LBe" customClass="SettingsTableViewController" customModule="NextcloudTalk" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="b5X-rI-l6i">
<rect key="frame" x="0.0" y="0.0" width="375" height="623"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="y90-mb-BxJ">
<rect key="frame" x="0.0" y="49.5" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="y90-mb-BxJ" id="XO0-Yu-aVx">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
</tableViewCellContentView>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="IZS-G3-LBe" id="cuA-h8-0E0"/>
<outlet property="delegate" destination="IZS-G3-LBe" id="vZ7-0q-aW2"/>
</connections>
</tableView>
<navigationItem key="navigationItem" id="Pp3-yk-a14">
<barButtonItem key="leftBarButtonItem" style="plain" systemItem="cancel" id="Gz2-po-4Ua">
<connections>
<action selector="cancelButtonPressed:" destination="IZS-G3-LBe" id="zzB-Uz-Wpo"/>
</connections>
</barButtonItem>
</navigationItem>
<connections>
<outlet property="cancelButton" destination="Gz2-po-4Ua" id="96j-HY-dJv"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="7ze-MS-nZa" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1799" y="-868"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="WPn-o2-Zlg">
<objects>
<navigationController storyboardIdentifier="settingsNC" id="h6t-CT-B8r" customClass="NCNavigationController" sceneMemberID="viewController">
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" translucent="NO" prompted="NO"/>
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" translucent="NO" id="Mqg-tq-GRj">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="IZS-G3-LBe" kind="relationship" relationship="rootViewController" id="muZ-2w-5f8"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Lh2-Pq-2Uq" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="847" y="-868"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="ICr-oC-JdW">
<objects>
<navigationController id="lDR-Z7-uv9" customClass="NCNavigationController" sceneMemberID="viewController">
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" translucent="NO" prompted="NO"/>
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" translucent="NO" id="hHa-bu-9bX">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="d5a-it-gRL" kind="relationship" relationship="rootViewController" id="gNl-MZ-rMG"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="NwQ-7h-CfU" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="404" y="-76"/>
</scene>
</scenes>
<resources>
<systemColor name="groupTableViewBackgroundColor">
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
</resources>
</document>