| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2023 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- #if os(iOS)
- import UIKit
- import WebKit
- /** @class AuthWebView
- @brief A class responsible for creating a WKWebView for use within Firebase Auth.
- */
- @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
- class AuthWebView: UIView {
- lazy var webView: WKWebView = createWebView()
- lazy var spinner: UIActivityIndicatorView = createSpinner()
- override init(frame: CGRect) {
- super.init(frame: frame)
- backgroundColor = .white
- initializeSubviews()
- }
- @available(*, unavailable)
- required init?(coder aDecoder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- private func initializeSubviews() {
- let webView = createWebView()
- let spinner = createSpinner()
- // The order of the following controls z-order.
- addSubview(webView)
- addSubview(spinner)
- layoutSubviews()
- self.webView = webView
- self.spinner = spinner
- }
- override func layoutSubviews() {
- super.layoutSubviews()
- let height = bounds.size.height
- let width = bounds.size.width
- webView.frame = CGRect(x: 0, y: 0, width: width, height: height)
- spinner.center = webView.center
- }
- private func createWebView() -> WKWebView {
- let webView = WKWebView(frame: .zero)
- // Trickery to make the web view not do weird things (like showing a black background when
- // the prompt in the navigation bar animates changes.)
- webView.isOpaque = false
- webView.backgroundColor = .clear
- webView.scrollView.isOpaque = false
- webView.scrollView.backgroundColor = .clear
- webView.scrollView.bounces = false
- webView.scrollView.alwaysBounceVertical = false
- webView.scrollView.alwaysBounceHorizontal = false
- return webView
- }
- private func createSpinner() -> UIActivityIndicatorView {
- return UIActivityIndicatorView(style: .medium)
- }
- }
- #endif
|