1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "remoting/ios/app/view_utils.h"
- namespace {
- UIWindow* GetAnyKeyWindow() {
- #if !defined(__IPHONE_13_0) || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_13_0
- return [UIApplication sharedApplication].keyWindow;
- #else
- NSArray<UIWindow*>* windows = [UIApplication sharedApplication].windows;
- for (UIWindow* window in windows) {
- if (window.isKeyWindow)
- return window;
- }
- return nil;
- #endif
- }
- } // namespace
- namespace remoting {
- UIViewController* TopPresentingVC() {
- UIViewController* topController = GetAnyKeyWindow().rootViewController;
- while (topController.presentedViewController) {
- topController = topController.presentedViewController;
- }
- return topController;
- }
- UILayoutGuide* SafeAreaLayoutGuideForView(UIView* view) {
- if (@available(iOS 11, *)) {
- return view.safeAreaLayoutGuide;
- } else {
- NSString* kChromeSafeAreaLayoutGuideShim =
- @"ChromotingSafeAreaLayoutGuideShim";
- // Search for an existing shim safe area layout guide:
- for (UILayoutGuide* guide in view.layoutGuides) {
- if ([guide.identifier isEqualToString:kChromeSafeAreaLayoutGuideShim]) {
- return guide;
- }
- }
- // If no existing shim exist, create and return a new one.
- UILayoutGuide* safeAreaLayoutShim = [[UILayoutGuide alloc] init];
- safeAreaLayoutShim.identifier = kChromeSafeAreaLayoutGuideShim;
- [view addLayoutGuide:safeAreaLayoutShim];
- [NSLayoutConstraint activateConstraints:@[
- [safeAreaLayoutShim.leadingAnchor
- constraintEqualToAnchor:view.leadingAnchor],
- [safeAreaLayoutShim.trailingAnchor
- constraintEqualToAnchor:view.trailingAnchor],
- [safeAreaLayoutShim.topAnchor constraintEqualToAnchor:view.topAnchor],
- [safeAreaLayoutShim.bottomAnchor
- constraintEqualToAnchor:view.bottomAnchor]
- ]];
- return safeAreaLayoutShim;
- }
- }
- UIEdgeInsets SafeAreaInsetsForView(UIView* view) {
- if (@available(iOS 11, *)) {
- return view.safeAreaInsets;
- }
- return UIEdgeInsetsZero;
- }
- void PostDelayedAccessibilityNotification(NSString* announcement) {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC),
- dispatch_get_main_queue(), ^{
- UIAccessibilityPostNotification(
- UIAccessibilityAnnouncementNotification, announcement);
- });
- }
- void SetAccessibilityInfoFromImage(UIBarButtonItem* button) {
- button.accessibilityLabel = button.image.accessibilityLabel;
- }
- void SetAccessibilityInfoFromImage(UIButton* button) {
- button.accessibilityLabel =
- [button imageForState:UIControlStateNormal].accessibilityLabel;
- }
- void SetAccessibilityFocusElement(id element) {
- UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification,
- element);
- }
- } // namespace remoting
|