diff --git a/Moonlight TV/Info.plist b/Moonlight TV/Info.plist
index 39be5c6..8455c40 100644
--- a/Moonlight TV/Info.plist
+++ b/Moonlight TV/Info.plist
@@ -20,6 +20,15 @@
1.0
CFBundleVersion
1
+ GCSupportedGameControllers
+
+
+ ProfileName
+ ExtendedGamepad
+
+
+ GCSupportsControllerUserInteraction
+
LSRequiresIPhoneOS
UIMainStoryboardFile
diff --git a/Moonlight TV/ViewController.m b/Moonlight TV/ViewController.m
index 58b0155..5430d22 100644
--- a/Moonlight TV/ViewController.m
+++ b/Moonlight TV/ViewController.m
@@ -791,4 +791,68 @@ static NSMutableSet* hostList;
return nil;
}
+-(void)beginForegroundRefresh
+{
+ if (!_background) {
+ // This will kick off box art caching
+ [self updateHosts];
+
+ [_discMan startDiscovery];
+
+ // This will refresh the applist when a paired host is selected
+ if (_selectedHost != nil && _selectedHost.pairState == PairStatePaired) {
+ [self hostClicked:_selectedHost view:nil];
+ }
+ }
+}
+
+-(void)handleReturnToForeground
+{
+ _background = NO;
+
+ [self beginForegroundRefresh];
+}
+
+-(void)handleEnterBackground
+{
+ _background = YES;
+
+ [_discMan stopDiscovery];
+}
+
+- (void)viewDidAppear:(BOOL)animated
+{
+ [super viewDidAppear:animated];
+
+ //[self.navigationController setNavigationBarHidden:NO animated:YES];
+
+ // Hide 1px border line
+ UIImage* fakeImage = [[UIImage alloc] init];
+ [self.navigationController.navigationBar setShadowImage:fakeImage];
+ [self.navigationController.navigationBar setBackgroundImage:fakeImage forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
+
+ [[NSNotificationCenter defaultCenter] addObserver: self
+ selector: @selector(handleReturnToForeground)
+ name: UIApplicationDidBecomeActiveNotification
+ object: nil];
+
+ [[NSNotificationCenter defaultCenter] addObserver: self
+ selector: @selector(handleEnterBackground)
+ name: UIApplicationWillResignActiveNotification
+ object: nil];
+
+ // We can get here on home press while streaming
+ // since the stream view segues to us just before
+ // entering the background. We can't check the app
+ // state here (since it's in transition), so we have
+ // to use this function that will use our internal
+ // state here to determine whether we're foreground.
+ //
+ // Note that this is neccessary here as we may enter
+ // this view via an error dialog from the stream
+ // view, so we won't get a return to active notification
+ // for that which would normally fire beginForegroundRefresh.
+ [self beginForegroundRefresh];
+}
+
@end
diff --git a/Moonlight.xcodeproj/project.pbxproj b/Moonlight.xcodeproj/project.pbxproj
index 159aa66..e611739 100644
--- a/Moonlight.xcodeproj/project.pbxproj
+++ b/Moonlight.xcodeproj/project.pbxproj
@@ -13,6 +13,7 @@
9865DC36213287F30005B9B9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FB290D0319B2C406004C83CF /* AppDelegate.m */; };
9865DC37213287FE0005B9B9 /* StreamFrameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB89462719F646E200339C8A /* StreamFrameViewController.m */; };
9865DC38213287FE0005B9B9 /* LoadingFrameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB4A23B71A9D3637004D2EF2 /* LoadingFrameViewController.m */; };
+ 9865DC3C2132922E0005B9B9 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9865DC3B2132922E0005B9B9 /* GameController.framework */; };
9890CF6B203B7EE1006C4B06 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9890CF6A203B7EE1006C4B06 /* libxml2.tbd */; };
98CFB82F1CAD481B0048EF74 /* libmoonlight-common.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 98AB2E841CAD46840089BB98 /* libmoonlight-common.a */; };
98D5856D1C0EA79600F6CC00 /* TemporaryHost.m in Sources */ = {isa = PBXBuildFile; fileRef = 98D5856C1C0EA79600F6CC00 /* TemporaryHost.m */; };
@@ -66,7 +67,6 @@
FB1A681A213284FB00507771 /* UIAppView.m in Sources */ = {isa = PBXBuildFile; fileRef = FBDE86E519F82297001C18A8 /* UIAppView.m */; };
FB1A681B213284FB00507771 /* ComputerScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1D59961BBCCB6400F482CA /* ComputerScrollView.m */; };
FB1A681C213284FB00507771 /* AppCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1D59991BBCCD7E00F482CA /* AppCollectionView.m */; };
- FB1A681D213286E400507771 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FB290D0319B2C406004C83CF /* AppDelegate.m */; };
FB1A681E21328A1B00507771 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FB290D0819B2C406004C83CF /* Images.xcassets */; };
FB1D59971BBCCB6400F482CA /* ComputerScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1D59961BBCCB6400F482CA /* ComputerScrollView.m */; };
FB1D599A1BBCCD7E00F482CA /* AppCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1D59991BBCCD7E00F482CA /* AppCollectionView.m */; };
@@ -163,6 +163,7 @@
98132E8C20BC9A62007A053F /* Moonlight v1.1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Moonlight v1.1.xcdatamodel"; sourceTree = ""; };
9832D1341BBCD5C50036EF48 /* TemporaryApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TemporaryApp.h; path = Database/TemporaryApp.h; sourceTree = ""; };
9832D1351BBCD5C50036EF48 /* TemporaryApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TemporaryApp.m; path = Database/TemporaryApp.m; sourceTree = ""; };
+ 9865DC3B2132922E0005B9B9 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS11.4.sdk/System/Library/Frameworks/GameController.framework; sourceTree = DEVELOPER_DIR; };
98878AE0206A226D00586E90 /* OSPortabilityDefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSPortabilityDefs.h; sourceTree = ""; };
9890CF6A203B7EE1006C4B06 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; };
98AB2E7F1CAD46830089BB98 /* moonlight-common.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "moonlight-common.xcodeproj"; path = "moonlight-common/moonlight-common.xcodeproj"; sourceTree = ""; };
@@ -377,6 +378,7 @@
buildActionMask = 2147483647;
files = (
9865DC30213260B40005B9B9 /* libmoonlight-common-tv.a in Frameworks */,
+ 9865DC3C2132922E0005B9B9 /* GameController.framework in Frameworks */,
FB1A67EA21324DF300507771 /* libxml2.tbd in Frameworks */,
FB1A67E821324DE300507771 /* libopus.a in Frameworks */,
FB1A67E621324DD600507771 /* libcrypto.a in Frameworks */,
@@ -470,6 +472,7 @@
FB290CF019B2C406004C83CF /* Frameworks */ = {
isa = PBXGroup;
children = (
+ 9865DC3B2132922E0005B9B9 /* GameController.framework */,
FB1A67E921324DF300507771 /* libxml2.tbd */,
FB1A67E421324A1F00507771 /* CoreData.framework */,
9890CF6A203B7EE1006C4B06 /* libxml2.tbd */,
@@ -901,6 +904,11 @@
FB1A67522132419700507771 = {
CreatedOnToolsVersion = 9.4.1;
ProvisioningStyle = Automatic;
+ SystemCapabilities = {
+ com.apple.GameControllers.appletvos = {
+ enabled = 1;
+ };
+ };
};
FB290CED19B2C406004C83CF = {
DevelopmentTeam = DM46QST4M7;
@@ -996,7 +1004,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 9865DC36213287F30005B9B9 /* AppDelegate.m in Sources */,
+ 9865DC36213287F30005B9B9 /* AppDelegate.m in Sources */,
FB1A6819213284FB00507771 /* UIComputerView.m in Sources */,
FB1A681A213284FB00507771 /* UIAppView.m in Sources */,
FB1A681B213284FB00507771 /* ComputerScrollView.m in Sources */,