Merge pull request #656 from NativeScript/notifications

Notifications
This commit is contained in:
Rossen Hristov
2015-09-02 09:15:04 +03:00
6 changed files with 30 additions and 34 deletions

View File

@ -512,14 +512,15 @@ declare module "application" {
* @param notificationName A string containing the name of the notification.
* @param onReceiveCallback A callback function that will be called each time the observer receives a notification.
*/
addNotificationObserver(notificationName: string, onReceiveCallback: (notification: NSNotification) => void): void;
addNotificationObserver(notificationName: string, onReceiveCallback: (notification: NSNotification) => void): any;
/**
* Removes the observer for the specified notification from the default notification center.
* For more information, please visit 'https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/#//apple_ref/occ/instm/NSNotificationCenter/addObserver:selector:name:object:'
* @param observer The observer that was returned from the addNotificationObserver method.
* @param notificationName A string containing the name of the notification.
* @param onReceiveCallback A callback function that will be called each time the observer receives a notification.
*/
removeNotificationObserver(notificationName: string): void;
removeNotificationObserver(observer: any, notificationName: string): void;
}
}

View File

@ -37,14 +37,14 @@ class Window extends UIWindow {
}
}
class NotificationReceiver extends NSObject {
class NotificationObserver extends NSObject {
private _onReceiveCallback: (notification: NSNotification) => void;
static new(): NotificationReceiver {
return <NotificationReceiver>super.new();
static new(): NotificationObserver {
return <NotificationObserver>super.new();
}
public initWithCallback(onReceiveCallback: (notification: NSNotification) => void): NotificationReceiver {
public initWithCallback(onReceiveCallback: (notification: NSNotification) => void): NotificationObserver {
this._onReceiveCallback = onReceiveCallback;
return this;
}
@ -62,11 +62,12 @@ class IOSApplication implements definition.iOSApplication {
public rootController: any;
private _delegate: typeof UIApplicationDelegate;
private _registeredObservers = {};
private _currentOrientation = UIDevice.currentDevice().orientation;
private _window: Window;
private _observers: Array<NotificationObserver>;
constructor() {
this._observers = new Array<NotificationObserver>();
this.addNotificationObserver(UIApplicationDidFinishLaunchingNotification, this.didFinishLaunchingWithOptions.bind(this));
this.addNotificationObserver(UIApplicationDidBecomeActiveNotification, this.didBecomeActive.bind(this));
this.addNotificationObserver(UIApplicationDidEnterBackgroundNotification, this.didEnterBackground.bind(this));
@ -88,15 +89,17 @@ class IOSApplication implements definition.iOSApplication {
}
}
public addNotificationObserver(notificationName: string, onReceiveCallback: (notification: NSNotification) => void) {
var observer = NotificationReceiver.new().initWithCallback(onReceiveCallback);
public addNotificationObserver(notificationName: string, onReceiveCallback: (notification: NSNotification) => void): NotificationObserver {
var observer = NotificationObserver.new().initWithCallback(onReceiveCallback);
NSNotificationCenter.defaultCenter().addObserverSelectorNameObject(observer, "onReceive", notificationName, null);
this._registeredObservers[notificationName] = observer;
this._observers.push(observer);
return observer;
}
public removeNotificationObserver(notificationName: string) {
var observer = this._registeredObservers[notificationName];
if (observer) {
public removeNotificationObserver(observer: any, notificationName: string) {
var index = this._observers.indexOf(observer);
if (index >= 0) {
this._observers.splice(index, 1);
NSNotificationCenter.defaultCenter().removeObserverNameObject(observer, notificationName, null);
}
}

View File

@ -2,13 +2,4 @@
application.mainModule = "main-page";
application.on(application.exitEvent, () => {
if (application.android) {
application.android.unregisterBroadcastReceiver(android.content.Intent.ACTION_BATTERY_CHANGED);
}
else {
application.ios.removeNotificationObserver(UIDeviceBatteryLevelDidChangeNotification);
}
});
application.start();

View File

@ -5,6 +5,16 @@ import labelModule = require("ui/label");
var batteryLabel: labelModule.Label;
var registered = false;
var batteryObserver: any;
application.on(application.exitEvent, () => {
if (application.android) {
application.android.unregisterBroadcastReceiver(android.content.Intent.ACTION_BATTERY_CHANGED);
}
else {
application.ios.removeNotificationObserver(batteryObserver, UIDeviceBatteryLevelDidChangeNotification);
}
});
export function onPageLoaded(args: observable.EventData) {
var page = <pages.Page>args.object;
@ -34,7 +44,7 @@ export function onPageLoaded(args: observable.EventData) {
}
UIDevice.currentDevice().batteryMonitoringEnabled = true;
onReceiveCallback(null);
application.ios.addNotificationObserver(UIDeviceBatteryLevelDidChangeNotification, onReceiveCallback);
batteryObserver = application.ios.addNotificationObserver(UIDeviceBatteryLevelDidChangeNotification, onReceiveCallback);
}
registered = true;
}

View File

@ -2,13 +2,4 @@
application.mainModule = "main-page";
application.on(application.exitEvent, () => {
if (application.android) {
application.android.unregisterBroadcastReceiver(android.content.Intent.ACTION_BATTERY_CHANGED);
}
else {
application.ios.removeNotificationObserver(UIDeviceBatteryLevelDidChangeNotification);
}
});
application.start();

View File

@ -10,7 +10,7 @@ global.moduleMerge(commonTests, exports);
// ``` JavaScript
//// Add the notification observer
if (app.ios) {
app.ios.addNotificationObserver(UIDeviceBatteryLevelDidChangeNotification,
var observer = app.ios.addNotificationObserver(UIDeviceBatteryLevelDidChangeNotification,
function onReceiveCallback(notification: NSNotification) {
var percent = UIDevice.currentDevice().batteryLevel * 100;
var message = "Battery: " + percent + "%";
@ -19,7 +19,7 @@ if (app.ios) {
}
//// When no longer needed, remove the notification observer
if (app.ios) {
app.ios.removeNotificationObserver(UIDeviceBatteryLevelDidChangeNotification);
app.ios.removeNotificationObserver(observer, UIDeviceBatteryLevelDidChangeNotification);
}
// ```
// </snippet>