|
@@ -140,6 +140,42 @@ void _ios_add_joystick(GCController *controller, AppDelegate *delegate) {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+static void on_focus_out(ViewController *view_controller, bool *is_focus_out) {
|
|
|
+ if (!*is_focus_out) {
|
|
|
+ *is_focus_out = true;
|
|
|
+ if (OS::get_singleton()->get_main_loop())
|
|
|
+ OS::get_singleton()->get_main_loop()->notification(
|
|
|
+ MainLoop::NOTIFICATION_WM_FOCUS_OUT);
|
|
|
+
|
|
|
+ [view_controller.view stopAnimation];
|
|
|
+ if (OS::get_singleton()->native_video_is_playing()) {
|
|
|
+ OSIPhone::get_singleton()->native_video_focus_out();
|
|
|
+ }
|
|
|
+
|
|
|
+ AudioDriverCoreAudio *audio = dynamic_cast<AudioDriverCoreAudio *>(AudioDriverCoreAudio::get_singleton());
|
|
|
+ if (audio)
|
|
|
+ audio->stop();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void on_focus_in(ViewController *view_controller, bool *is_focus_out) {
|
|
|
+ if (*is_focus_out) {
|
|
|
+ *is_focus_out = false;
|
|
|
+ if (OS::get_singleton()->get_main_loop())
|
|
|
+ OS::get_singleton()->get_main_loop()->notification(
|
|
|
+ MainLoop::NOTIFICATION_WM_FOCUS_IN);
|
|
|
+
|
|
|
+ [view_controller.view startAnimation];
|
|
|
+ if (OSIPhone::get_singleton()->native_video_is_playing()) {
|
|
|
+ OSIPhone::get_singleton()->native_video_unpause();
|
|
|
+ }
|
|
|
+
|
|
|
+ AudioDriverCoreAudio *audio = dynamic_cast<AudioDriverCoreAudio *>(AudioDriverCoreAudio::get_singleton());
|
|
|
+ if (audio)
|
|
|
+ audio->start();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
- (void)controllerWasConnected:(NSNotification *)notification {
|
|
|
// create our dictionary if we don't have one yet
|
|
|
if (ios_joysticks == nil) {
|
|
@@ -569,6 +605,8 @@ static int frame_count = 0;
|
|
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
|
|
CGRect rect = [[UIScreen mainScreen] bounds];
|
|
|
|
|
|
+ is_focus_out = false;
|
|
|
+
|
|
|
[application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
|
|
|
// disable idle timer
|
|
|
// application.idleTimerDisabled = YES;
|
|
@@ -628,6 +666,12 @@ static int frame_count = 0;
|
|
|
|
|
|
[self initGameControllers];
|
|
|
|
|
|
+ [[NSNotificationCenter defaultCenter]
|
|
|
+ addObserver:self
|
|
|
+ selector:@selector(onAudioInterruption:)
|
|
|
+ name:AVAudioSessionInterruptionNotification
|
|
|
+ object:[AVAudioSession sharedInstance]];
|
|
|
+
|
|
|
// OSIPhone::screen_width = rect.size.width - rect.origin.x;
|
|
|
// OSIPhone::screen_height = rect.size.height - rect.origin.y;
|
|
|
|
|
@@ -639,6 +683,18 @@ static int frame_count = 0;
|
|
|
return TRUE;
|
|
|
};
|
|
|
|
|
|
+- (void)onAudioInterruption:(NSNotification *)notification {
|
|
|
+ if ([notification.name isEqualToString:AVAudioSessionInterruptionNotification]) {
|
|
|
+ if ([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeBegan]]) {
|
|
|
+ NSLog(@"Audio interruption began");
|
|
|
+ on_focus_out(view_controller, &is_focus_out);
|
|
|
+ } else if ([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeEnded]]) {
|
|
|
+ NSLog(@"Audio interruption ended");
|
|
|
+ on_focus_in(view_controller, &is_focus_out);
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
- (void)applicationWillTerminate:(UIApplication *)application {
|
|
|
[self deinitGameControllers];
|
|
|
|
|
@@ -656,14 +712,7 @@ static int frame_count = 0;
|
|
|
- (void)applicationDidEnterBackground:(UIApplication *)application {
|
|
|
///@TODO maybe add pause motionManager? and where would we unpause it?
|
|
|
|
|
|
- if (OS::get_singleton()->get_main_loop())
|
|
|
- OS::get_singleton()->get_main_loop()->notification(
|
|
|
- MainLoop::NOTIFICATION_WM_FOCUS_OUT);
|
|
|
-
|
|
|
- [view_controller.view stopAnimation];
|
|
|
- if (OS::get_singleton()->native_video_is_playing()) {
|
|
|
- OSIPhone::get_singleton()->native_video_focus_out();
|
|
|
- };
|
|
|
+ on_focus_out(view_controller, &is_focus_out);
|
|
|
}
|
|
|
|
|
|
- (void)applicationWillEnterForeground:(UIApplication *)application {
|
|
@@ -678,19 +727,7 @@ static int frame_count = 0;
|
|
|
}
|
|
|
|
|
|
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
|
|
- if (OS::get_singleton()->get_main_loop())
|
|
|
- OS::get_singleton()->get_main_loop()->notification(
|
|
|
- MainLoop::NOTIFICATION_WM_FOCUS_IN);
|
|
|
-
|
|
|
- [view_controller.view
|
|
|
- startAnimation]; // FIXME: resume seems to be recommended elsewhere
|
|
|
- if (OSIPhone::get_singleton()->native_video_is_playing()) {
|
|
|
- OSIPhone::get_singleton()->native_video_unpause();
|
|
|
- };
|
|
|
-
|
|
|
- // Fixed audio can not resume if it is interrupted cause by an incoming phone call
|
|
|
- if (AudioDriverCoreAudio::get_singleton() != NULL)
|
|
|
- AudioDriverCoreAudio::get_singleton()->start();
|
|
|
+ on_focus_in(view_controller, &is_focus_out);
|
|
|
}
|
|
|
|
|
|
- (void)dealloc {
|