iOS/Sources/Extensions/NotificationContent/NotificationErrorViewController.swift
Zac West 85b5ec4579
Support attachments which aren't downloaded in advance (#1610)
## Summary
Allows attachments to be loaded on-the-fly in the content extension if they are not present.

## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#510

## Any other notes
- Adds `lazy` as an option to the `attachment` dictionary. When true, this prevents the attachment from being downloaded except when displayed in the content extension.  
  
This is similar, but not identical, to hide-thumbnail. Hiding the thumbnail still uses the internal storage of the notifications which are limited to e.g. 50mb. However, we'd still want to pre-load those attachments even if the thumbnail is hidden.
- Retries non-lazy attachments which failed due to a network error when the content extension opens.
2021-05-01 12:58:30 -07:00

55 lines
1.6 KiB
Swift

import Foundation
import PromiseKit
import UIKit
import UserNotificationsUI
class NotificationErrorViewController: UIViewController, NotificationCategory {
let label = UILabel()
required init(notification: UNNotification, attachmentURL: URL?) throws {
fatalError("not meant to be used in the list of potentials, just directly set")
}
init(error: Error) {
super.init(nibName: nil, bundle: nil)
label.text = error.localizedDescription
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
label.numberOfLines = 0
label.textAlignment = .center
if #available(iOS 13, *) {
label.textColor = .systemRed
} else {
label.textColor = .red
}
view.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
label.topAnchor.constraint(equalTo: view.topAnchor),
label.leadingAnchor.constraint(equalTo: view.leadingAnchor),
label.trailingAnchor.constraint(equalTo: view.trailingAnchor),
label.bottomAnchor.constraint(equalTo: view.bottomAnchor),
])
}
func start() -> Promise<Void> {
.value(())
}
var mediaPlayPauseButtonType: UNNotificationContentExtensionMediaPlayPauseButtonType { .none }
var mediaPlayPauseButtonFrame: CGRect?
var mediaPlayPauseButtonTintColor: UIColor?
func mediaPlay() {}
func mediaPause() {}
}