mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00

Instead of waiting for zone.js to patch our global declarations and break the lazy module loading optimizations there, we'll let it patch stuff before "globals" gets loaded, so that it doesn't touch (and break) the code there. Of course, that requires that functions that need legit patching need to be made aware of the zone, or get patched later on. The global.zonedCallback function makes that easy, and we use it for setTimeout/setInterval.
71 lines
1.6 KiB
TypeScript
71 lines
1.6 KiB
TypeScript
/**
|
|
* Android specific timer functions implementation.
|
|
*/
|
|
var timeoutHandler;
|
|
var timeoutCallbacks = {};
|
|
var timerId = 0;
|
|
|
|
function createHandlerAndGetId(): number {
|
|
if (!timeoutHandler) {
|
|
timeoutHandler = new android.os.Handler(android.os.Looper.getMainLooper());
|
|
}
|
|
|
|
timerId++;
|
|
return timerId;
|
|
}
|
|
|
|
export function setTimeout(callback: Function, milliseconds = 0): number {
|
|
const id = createHandlerAndGetId();
|
|
const zoneBound = zonedCallback(callback);
|
|
|
|
var runnable = new java.lang.Runnable({
|
|
run: () => {
|
|
zoneBound();
|
|
|
|
if (timeoutCallbacks[id]) {
|
|
delete timeoutCallbacks[id];
|
|
}
|
|
}
|
|
});
|
|
|
|
if (!timeoutCallbacks[id]) {
|
|
timeoutCallbacks[id] = runnable;
|
|
}
|
|
|
|
timeoutHandler.postDelayed(runnable, long(milliseconds));
|
|
|
|
return id;
|
|
}
|
|
|
|
export function clearTimeout(id: number): void {
|
|
if (timeoutCallbacks[id]) {
|
|
timeoutHandler.removeCallbacks(timeoutCallbacks[id]);
|
|
delete timeoutCallbacks[id];
|
|
}
|
|
}
|
|
|
|
export function setInterval(callback: Function, milliseconds = 0): number {
|
|
const id = createHandlerAndGetId();
|
|
const handler = timeoutHandler;
|
|
const zoneBound = zonedCallback(callback);
|
|
|
|
var runnable = new java.lang.Runnable({
|
|
run: () => {
|
|
zoneBound();
|
|
if (timeoutCallbacks[id]) {
|
|
handler.postDelayed(runnable, long(milliseconds));
|
|
}
|
|
}
|
|
});
|
|
|
|
if (!timeoutCallbacks[id]) {
|
|
timeoutCallbacks[id] = runnable;
|
|
}
|
|
|
|
timeoutHandler.postDelayed(runnable, long(milliseconds));
|
|
|
|
return id;
|
|
}
|
|
|
|
export var clearInterval = clearTimeout;
|