diff --git a/declarations.d.ts b/declarations.d.ts index 00eef4ad2..a97d8e50a 100644 --- a/declarations.d.ts +++ b/declarations.d.ts @@ -146,6 +146,10 @@ declare function setInterval(callback: Function, milliseconds?: number): number; */ declare function clearInterval(id: number): void; +//@private +declare function zonedCallback(callback: Function): Function; +//@endprivate + declare class WeakRef { constructor(obj: T); get(): T; diff --git a/globals/globals.ts b/globals/globals.ts index a166615e2..4fea68af0 100644 --- a/globals/globals.ts +++ b/globals/globals.ts @@ -29,6 +29,14 @@ global.loadModule = function(name: string): any { } } +global.zonedCallback = function(callback: Function): Function { + if (global.zone) { + return global.zone.bind(callback); + } else { + return callback; + } +} + global.registerModule("timer", () => require("timer")); global.registerModule("ui/dialogs", () => require("ui/dialogs")); global.registerModule("xhr", () => require("xhr")); diff --git a/timer/timer.android.ts b/timer/timer.android.ts index 8b2dc7d3d..5e362d083 100644 --- a/timer/timer.android.ts +++ b/timer/timer.android.ts @@ -15,11 +15,12 @@ function createHandlerAndGetId(): number { } export function setTimeout(callback: Function, milliseconds = 0): number { - var id = createHandlerAndGetId(); + const id = createHandlerAndGetId(); + const zoneBound = zonedCallback(callback); var runnable = new java.lang.Runnable({ run: () => { - callback(); + zoneBound(); if (timeoutCallbacks[id]) { delete timeoutCallbacks[id]; @@ -44,12 +45,13 @@ export function clearTimeout(id: number): void { } export function setInterval(callback: Function, milliseconds = 0): number { - var id = createHandlerAndGetId(); - var handler = timeoutHandler; + const id = createHandlerAndGetId(); + const handler = timeoutHandler; + const zoneBound = zonedCallback(callback); var runnable = new java.lang.Runnable({ run: () => { - callback(); + zoneBound(); if (timeoutCallbacks[id]) { handler.postDelayed(runnable, long(milliseconds)); } diff --git a/timer/timer.ios.ts b/timer/timer.ios.ts index aadd91b32..d97d4fc04 100644 --- a/timer/timer.ios.ts +++ b/timer/timer.ios.ts @@ -40,7 +40,7 @@ function createTimerAndGetId(callback: Function, milliseconds: number, shouldRep } export function setTimeout(callback: Function, milliseconds = 0): number { - return createTimerAndGetId(callback, milliseconds, false); + return createTimerAndGetId(zonedCallback(callback), milliseconds, false); } export function clearTimeout(id: number): void { @@ -51,7 +51,7 @@ export function clearTimeout(id: number): void { } export function setInterval(callback: Function, milliseconds = 0): number { - return createTimerAndGetId(callback, milliseconds, true); + return createTimerAndGetId(zonedCallback(callback), milliseconds, true); } export var clearInterval = clearTimeout;