xref: /expo/ios/Client/Menu/EXDevMenuWindow.m (revision 9155fd2f)
1// Copyright 2015-present 650 Industries. All rights reserved.
2
3#import "EXDevMenuWindow.h"
4#import "EXDevMenuViewController.h"
5#import "EXDevMenuManager.h"
6
7@interface EXDevMenuWindow ()
8
9@property (nonatomic, strong) EXDevMenuViewController *viewController;
10
11@end
12
13@implementation EXDevMenuWindow
14
15#pragma mark - UIWindow
16
17- (instancetype)init
18{
19  if (self = [super init]) {
20    self.backgroundColor = [UIColor clearColor];
21    self.bounds = [[UIScreen mainScreen] bounds];
22    self.hidden = YES;
23  }
24  return self;
25}
26
27- (void)makeKeyAndVisible
28{
29  [super makeKeyAndVisible];
30
31  // `makeKeyAndVisible` apparently doesn't call `hidden` setter so make sure the root view is attached.
32  [self attachRootViewController];
33}
34
35- (void)setHidden:(BOOL)hidden
36{
37  [super setHidden:hidden];
38
39  // Reset `rootViewController` so it gets appearing/disappearing events that we depend on.
40  if (hidden) {
41    [self detachRootViewController];
42  } else {
43    [self attachRootViewController];
44  }
45}
46
47#pragma mark - internal
48
49- (void)attachRootViewController
50{
51  if (!_viewController) {
52    _viewController = [EXDevMenuViewController new];
53  }
54  self.rootViewController = _viewController;
55}
56
57- (void)detachRootViewController
58{
59  self.rootViewController = nil;
60}
61
62@end
63