|
|
|
|
@ -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 {
|
|
|
|
|
|