amplify-swift/Amplify/DevMenu/AmplifyDevMenu.swift

43 lines
1.5 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
#if canImport(UIKit)
import Foundation
import SwiftUI
import UIKit
/// Presents a developer menu using the provided `DevMenuPresentationContextProvider`
/// upon notification from a `TriggerRecognizer`. Default recognizer is a `LongPressGestureRecognizer`
public final class AmplifyDevMenu: DevMenuBehavior, TriggerDelegate {
weak var devMenuPresentationContextProvider: DevMenuPresentationContextProvider?
var triggerRecognizer: TriggerRecognizer?
init(devMenuPresentationContextProvider: DevMenuPresentationContextProvider) {
self.devMenuPresentationContextProvider = devMenuPresentationContextProvider
self.triggerRecognizer = LongPressGestureRecognizer(
uiWindow: devMenuPresentationContextProvider.devMenuPresentationContext())
triggerRecognizer?.updateTriggerDelegate(delegate: self)
}
public func onTrigger(triggerRecognizer: TriggerRecognizer) {
showMenu()
}
public func showMenu() {
guard let rootViewController =
devMenuPresentationContextProvider?.devMenuPresentationContext().rootViewController else {
Amplify.Logging.warn(DevMenuStringConstants.logTag +
"RootViewController of the UIWindow is nil")
return
}
let viewController = UIHostingController(rootView: DevMenuList())
rootViewController.present(viewController, animated: true)
}
}
#endif