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 */,