TiOSApp

//
// Programming by Andree Heyroth, Syncro-Concept
// programming language is Firemonkey / Delphi from Embarcadero
// http://www.syncro-concept.de
//
// Please add this unit to an existing package or create a new one.
// After compiling and installing the package the following methods will be
// available through the object inspector:
//
// OnapplicationdidFinishLaunchingWithOptions
// OnapplicationWillResignActive
// OnapplicationDidEnterBackground
// OnapplicationWillEnterForeground
// OnapplicationDidBecomeActive
// OnapplicationWillTerminate
//
// The methods will be calles each time when the app-events with the same
// name are fired
//
// ---------------------------------------------------------------------------
//
{$IFDEF FPC}
//{$mode objfpc}{$H+}
{$modeswitch objectivec1}
{$ENDIF}

unit AppDelegateU;

interface

uses
SysUtils, Classes, FMX_Types
{$IFDEF FPC}
, FMX_Platform_iOS, iPhoneAll
{$ENDIF}
;

{$IFDEF FPC}
type
TiOSApplicationBase = objcclass (UIResponder, UIApplicationDelegateProtocol)
public
function applicationdidFinishLaunchingWithOptions(application: UIApplication; launchOptions: NSDictionary): Boolean; message 'application:applicationdidFinishLaunchingWithOptions:';
procedure applicationWillResignActive(application: UIApplication); message 'applicationWillResignActive:';
procedure applicationDidEnterBackground(application: UIApplication); message 'applicationDidEnterBackground:';
procedure applicationWillEnterForeground(application: UIApplication); message 'applicationWillEnterForeground:';
procedure applicationDidBecomeActive(application: UIApplication); message 'applicationDidBecomeActive:';
procedure applicationWillTerminate(application: UIApplication); message 'applicationWillTerminate:';
end;
{$ENDIF}

type
TiOSAppEvent = procedure of object;

type
TiOSApp = class(TFmxObject)
private
{$IFDEF FPC}
delegate : TiOSApplicationBase;
{$ENDIF}
FOnapplicationdidFinishLaunchingWithOptions: TiOSAppEvent;
FOnapplicationWillResignActive: TiOSAppEvent;
FOnapplicationDidEnterBackground: TiOSAppEvent;
FOnapplicationWillEnterForeground: TiOSAppEvent;
FOnapplicationDidBecomeActive: TiOSAppEvent;
FOnapplicationWillTerminate: TiOSAppEvent;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property OnapplicationdidFinishLaunchingWithOptions: TiOSAppEvent read FOnapplicationdidFinishLaunchingWithOptions write FOnapplicationdidFinishLaunchingWithOptions;
property OnapplicationWillResignActive: TiOSAppEvent read FOnapplicationWillResignActive write FOnapplicationWillResignActive;
property OnapplicationDidEnterBackground: TiOSAppEvent read FOnapplicationDidEnterBackground write FOnapplicationDidEnterBackground;
property OnapplicationWillEnterForeground: TiOSAppEvent read FOnapplicationWillEnterForeground write FOnapplicationWillEnterForeground;
property OnapplicationDidBecomeActive: TiOSAppEvent read FOnapplicationDidBecomeActive write FOnapplicationDidBecomeActive;
property OnapplicationWillTerminate: TiOSAppEvent read FOnapplicationWillTerminate write FOnapplicationWillTerminate;
end;

var
GlobaliOSAppVar: TiOSApp;

procedure Register;

implementation

constructor TiOSApp.Create(AOwner: TComponent);
begin
if Assigned(GlobaliOSAppVar) then begin
//raise Exception.Create('I won''t let you have more than one of these things (AppDelegate) ...');
exit;
end;
inherited;
{$IFDEF FPC}
delegate := TiOSApplicationBase.alloc.init;
UIApplication.sharedApplication.setDelegate (delegate);
GlobaliOSAppVar := self;
{$ENDIF}
end;

destructor TiOSApp.Destroy;
begin
{$IFDEF FPC}
delegate.Release;
// window.release;
// viewcontroller.release;
{$ENDIF}
inherited;
end;

{$IFDEF FPC}
function TiOSApplicationBase.applicationdidFinishLaunchingWithOptions(application: UIApplication; launchOptions: NSDictionary): Boolean;
begin
if not assigned (GlobaliOSAppVar) then begin
exit;
end;
if Assigned(GlobaliOSAppVar.FOnapplicationdidFinishLaunchingWithOptions) then
GlobaliOSAppVar.FOnapplicationdidFinishLaunchingWithOptions;

Result := True;
end;

procedure TiOSApplicationBase.applicationWillResignActive(application: UIApplication);
begin
if not assigned (GlobaliOSAppVar) then begin
exit;
end;
if Assigned(GlobaliOSAppVar.FOnapplicationWillResignActive) then
GlobaliOSAppVar.FOnapplicationWillResignActive;
end;

procedure TiOSApplicationBase.applicationDidEnterBackground(application: UIApplication);
begin
if not assigned (GlobaliOSAppVar) then begin
exit;
end;
if Assigned(GlobaliOSAppVar.FOnapplicationDidEnterBackground) then
GlobaliOSAppVar.FOnapplicationDidEnterBackground;
end;

procedure TiOSApplicationBase.applicationWillEnterForeground(application: UIApplication);
begin
if not assigned (GlobaliOSAppVar) then begin
exit;
end;
if Assigned(GlobaliOSAppVar.FOnapplicationWillEnterForeground) then
GlobaliOSAppVar.FOnapplicationWillEnterForeground;
end;

procedure TiOSApplicationBase.applicationDidBecomeActive(application: UIApplication);
begin
if not assigned (GlobaliOSAppVar) then begin
exit;
end;
if Assigned(GlobaliOSAppVar.FOnapplicationDidBecomeActive) then
GlobaliOSAppVar.FOnapplicationDidBecomeActive;
end;

procedure TiOSApplicationBase.applicationWillTerminate(application: UIApplication);
begin
if not assigned (GlobaliOSAppVar) then begin
exit;
end;
if Assigned(GlobaliOSAppVar.FOnapplicationWillTerminate) then
GlobaliOSAppVar.FOnapplicationWillTerminate;
end;
{$ENDIF}

procedure Register;
begin
RegisterComponents('iOS', [TiOSApp]);
end;

end.