43 lines
1.5 KiB
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
|