From e493711328ac791539263536ea2374247efef81d Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Sat, 10 May 2014 15:49:00 +0300 Subject: [PATCH] setTimeout improved and clearTimeout, setInterval, clearInterval implemented for Android --- globals/globals.android.ts | 60 ++++++++++++++++++++++++++++++++++---- globals/globals.d.ts | 5 +++- globals/index.ts | 7 +++-- 3 files changed, 63 insertions(+), 9 deletions(-) diff --git a/globals/globals.android.ts b/globals/globals.android.ts index 717a74fbc..9718717cc 100644 --- a/globals/globals.android.ts +++ b/globals/globals.android.ts @@ -1,10 +1,58 @@ /** * Android specific global functions implementation. */ -export function setTimeout(callback: Function, milliseconds: number): void { - new android.os.Handler(android.os.Looper.getMainLooper()).postDelayed( - new java.lang.Runnable({ - run: function () { callback(); } - }), - long(milliseconds)); +var timeoutHandler; +var timeoutCallbacks = {}; + +function createHadlerAndGetId() : number { + if (!timeoutHandler) { + timeoutHandler = new android.os.Handler(android.os.Looper.getMainLooper()); + } + + return new Date().getUTCMilliseconds(); +} + +export function setTimeout(callback: Function, milliseconds: number): number { + var id = createHadlerAndGetId(); + + var runnable = new java.lang.Runnable({ + run: function () { + callback(); + timeoutCallbacks[id] = null; + } + }); + + 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]); + timeoutCallbacks[id] = null; + } +} + +export function setInterval(callback: Function, milliseconds: number): number { + var id = createHadlerAndGetId(); + + var runnable = new java.lang.Runnable({ + run: function () { + callback(); + timeoutHandler.postDelayed(runnable, long(milliseconds)); + } + }); + + if (!timeoutCallbacks[id]) { + timeoutCallbacks[id] = runnable; + } + + timeoutHandler.postDelayed(runnable, long(milliseconds)); + + return id; } diff --git a/globals/globals.d.ts b/globals/globals.d.ts index 953ce8ffa..604d705a6 100644 --- a/globals/globals.d.ts +++ b/globals/globals.d.ts @@ -1,4 +1,7 @@ /** * global functions. */ -export declare function setTimeout(callback: Function, milliseconds: number): void; +export declare function setTimeout(callback: Function, milliseconds: number): number; +export declare function clearTimeout(id: number): void; +export declare function setInterval(callback: Function, milliseconds: number): number; +export declare function clearInterval(id: number): void; \ No newline at end of file diff --git a/globals/index.ts b/globals/index.ts index b7cd37955..0178cdb2c 100644 --- a/globals/index.ts +++ b/globals/index.ts @@ -1,5 +1,8 @@ -declare var module, setTimeout; +declare var module, setTimeout, clearTimeout, setInterval, clearInterval; import globals = require("globals/globals"); module.exports = globals; -setTimeout = globals.setTimeout; \ No newline at end of file +setTimeout = globals.setTimeout; +clearTimeout = globals.clearTimeout; +setInterval = globals.setInterval; +clearInterval = globals.clearTimeout; \ No newline at end of file