Flutter Engine
 
Loading...
Searching...
No Matches
FlutterSceneDelegate.mm
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
12
14
15@interface FlutterSceneDelegate () <FlutterSceneLifeCycleProvider>
16@end
17
18@implementation FlutterSceneDelegate
19
20@synthesize sceneLifeCycleDelegate = _sceneLifeCycleDelegate;
21
22- (instancetype)init {
23 if (self = [super init]) {
24 _sceneLifeCycleDelegate = [[FlutterPluginSceneLifeCycleDelegate alloc] init];
25 }
26 return self;
27}
28
29#pragma mark - Connecting and disconnecting the scene
30
31- (void)scene:(UIScene*)scene
32 willConnectToSession:(UISceneSession*)session
33 options:(UISceneConnectionOptions*)connectionOptions {
34 NSObject<UIApplicationDelegate>* appDelegate = FlutterSharedApplication.application.delegate;
35 if ([appDelegate respondsToSelector:@selector(window)] && appDelegate.window.rootViewController) {
36 NSLog(@"WARNING - The UIApplicationDelegate is setting up the UIWindow and "
37 @"UIWindow.rootViewController at launch. This was deprecated after the "
38 @"UISceneDelegate adoption. Setup logic should be moved to a UISceneDelegate.");
39 // If this is not nil we are running into a case where someone is manually
40 // performing root view controller setup in the UIApplicationDelegate.
41 UIWindowScene* windowScene = (UIWindowScene*)scene;
42 [self moveRootViewControllerFrom:appDelegate to:windowScene];
43 }
44 [self.sceneLifeCycleDelegate scene:scene willConnectToSession:session options:connectionOptions];
45}
46
47- (void)sceneDidDisconnect:(UIScene*)scene {
48 [self.sceneLifeCycleDelegate sceneDidDisconnect:scene];
49}
50
51#pragma mark - Transitioning to the foreground
52
53- (void)sceneWillEnterForeground:(UIScene*)scene {
54 [self.sceneLifeCycleDelegate sceneWillEnterForeground:scene];
55}
56
57- (void)sceneDidBecomeActive:(UIScene*)scene {
58 [self.sceneLifeCycleDelegate sceneDidBecomeActive:scene];
59}
60
61#pragma mark - Transitioning to the background
62
63- (void)sceneWillResignActive:(UIScene*)scene {
64 [self.sceneLifeCycleDelegate sceneWillResignActive:scene];
65}
66
67- (void)sceneDidEnterBackground:(UIScene*)scene {
68 [self.sceneLifeCycleDelegate sceneDidEnterBackground:scene];
69}
70
71#pragma mark - Opening URLs
72
73- (void)scene:(UIScene*)scene openURLContexts:(NSSet<UIOpenURLContext*>*)URLContexts {
74 [self.sceneLifeCycleDelegate scene:scene openURLContexts:URLContexts];
75}
76
77#pragma mark - Continuing user activities
78
79- (void)scene:(UIScene*)scene continueUserActivity:(NSUserActivity*)userActivity {
80 [self.sceneLifeCycleDelegate scene:scene continueUserActivity:userActivity];
81}
82
83#pragma mark - Saving the state of the scene
84
85- (NSUserActivity*)stateRestorationActivityForScene:(UIScene*)scene {
86 return [self.sceneLifeCycleDelegate stateRestorationActivityForScene:scene];
87}
88
89- (void)scene:(UIScene*)scene
90 restoreInteractionStateWithUserActivity:(NSUserActivity*)stateRestorationActivity {
91 [self.sceneLifeCycleDelegate scene:scene
92 restoreInteractionStateWithUserActivity:stateRestorationActivity];
93}
94
95#pragma mark - Performing tasks
96
97- (void)windowScene:(UIWindowScene*)windowScene
98 performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem
99 completionHandler:(void (^)(BOOL succeeded))completionHandler {
100 [self.sceneLifeCycleDelegate windowScene:windowScene
101 performActionForShortcutItem:shortcutItem
102 completionHandler:completionHandler];
103}
104
105#pragma mark - Helpers
106
107- (BOOL)registerSceneLifeCycleWithFlutterEngine:(FlutterEngine*)engine {
108 return [self.sceneLifeCycleDelegate registerSceneLifeCycleWithFlutterEngine:engine];
109}
110
111- (BOOL)unregisterSceneLifeCycleWithFlutterEngine:(FlutterEngine*)engine {
112 return [self.sceneLifeCycleDelegate unregisterSceneLifeCycleWithFlutterEngine:engine];
113}
114
115- (void)moveRootViewControllerFrom:(NSObject<UIApplicationDelegate>*)appDelegate
116 to:(UIWindowScene*)windowScene {
117 self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
118 self.window.rootViewController = appDelegate.window.rootViewController;
119 appDelegate.window = self.window;
120 [self.window makeKeyAndVisible];
121}
122@end
FlutterSceneLifeCycleEngineRegistration UIWindow * window
int BOOL