diff --git a/ui/core/view-common.ts b/ui/core/view-common.ts index 21fcfc732..b757d3611 100644 --- a/ui/core/view-common.ts +++ b/ui/core/view-common.ts @@ -142,14 +142,10 @@ export class View extends proxy.ProxyObject implements definition.View { public _cssClasses: Array = []; - public _gestureObservers: Map>; + public _gestureObservers = {}; public getGestureObservers(type: gestures.GestureTypes): Array { - var result; - if (this._gestureObservers) { - result = this._gestureObservers.get(type) ? this._gestureObservers.get(type).slice(0) : undefined; - } - return result; + return this._gestureObservers[type]; } private _updatingInheritedProperties: boolean; @@ -167,29 +163,11 @@ export class View extends proxy.ProxyObject implements definition.View { } observe(type: gestures.GestureTypes, callback: (args: gestures.GestureEventData) => void, thisArg?: any): void { - var gesturesList = this._getGesturesList(type, true); - gesturesList.push(gestures.observe(this, type, callback, thisArg)); - } + if (!this._gestureObservers[type]) { + this._gestureObservers[type] = []; + } - private _getGesturesList(gestureType: number, createIfNeeded): Array { - if (!gestureType) { - throw new Error("GestureType must be a valid gesture!"); - } - - var list: Array; - if (this._gestureObservers && this._gestureObservers.has(gestureType)) { - list = this._gestureObservers.get(gestureType); - } - else { - if (createIfNeeded) { - list = []; - if (!this._gestureObservers) { - this._gestureObservers = new Map>(); - } - this._gestureObservers.set(gestureType, list); - } - } - return list; + this._gestureObservers[type].push(gestures.observe(this, type, callback, thisArg)); } public addEventListener(arg: string | gestures.GestureTypes, callback: (data: observable.EventData) => void, thisArg?: any) { diff --git a/ui/core/view.android.ts b/ui/core/view.android.ts index aa714a38b..bcf46ce39 100644 --- a/ui/core/view.android.ts +++ b/ui/core/view.android.ts @@ -97,7 +97,7 @@ export class View extends viewCommon.View { } private hasGestureObservers() { - return this._gestureObservers ? this._gestureObservers.size > 0 : false; + return this._gestureObservers && Object.keys(this._gestureObservers).length > 0 } private setOnTouchListener() { @@ -114,18 +114,13 @@ export class View extends viewCommon.View { return false; } - var i; - for (var gestType in gestures.GestureTypes) { - if (gestures.GestureTypes.hasOwnProperty(gestType) && typeof gestures.GestureTypes[gestType] === "number") { - var gestArray = owner.getGestureObservers(parseInt(gestures.GestureTypes[gestType])); - if (gestArray) { - for (i = 0; i < gestArray.length; i++) { - var gestObserver = gestArray[i]; - gestObserver.androidOnTouchEvent(motionEvent); - } - } + for (let type in owner._gestureObservers) { + let list = owner._gestureObservers[type]; + for (let i = 0; i < list.length; i++) { + list[i].androidOnTouchEvent(motionEvent); } } + return owner._nativeView.onTouchEvent(motionEvent); } })); diff --git a/ui/core/view.d.ts b/ui/core/view.d.ts index e635d499d..a085a25df 100644 --- a/ui/core/view.d.ts +++ b/ui/core/view.d.ts @@ -416,7 +416,7 @@ declare module "ui/core/view" { // TODO: Implement logic for stripping these lines out //@private - _gestureObservers: Map>; + _gestureObservers: any; _isInheritedChange(): boolean; _domId: number; _cssClasses: Array; diff --git a/ui/gestures/gestures-common.ts b/ui/gestures/gestures-common.ts index 7752b44cd..641d6e4eb 100644 --- a/ui/gestures/gestures-common.ts +++ b/ui/gestures/gestures-common.ts @@ -126,18 +126,15 @@ export class GesturesObserver implements definition.GesturesObserver { public disconnect() { // remove gesture observer from map if (this.target) { - var gestureObserversArray = this.target._gestureObservers.get(this.type); - if (gestureObserversArray) { - var i; - for (i = 0; i < gestureObserversArray.length; i++) { - if (gestureObserversArray[i].callback === this.callback) { + var list = this.target.getGestureObservers(this.type); + if (list && list.length > 0) { + for (let i = 0; i < list.length; i++) { + if (list[i].callback === this.callback) { break; } } - gestureObserversArray.splice(i, 1); - if (gestureObserversArray.length === 0) { - this.target._gestureObservers.delete(this.type); - } + list.length = 0; + this.target._gestureObservers.delete(this.type); } } this._target = null; diff --git a/ui/gestures/gestures.android.ts b/ui/gestures/gestures.android.ts index 0bfc1f52c..40cc9e577 100644 --- a/ui/gestures/gestures.android.ts +++ b/ui/gestures/gestures.android.ts @@ -185,7 +185,7 @@ class TapAndDoubleTapGestureListener extends android.view.GestureDetector.Simple } public onSingleTapConfirmed(motionEvent: android.view.MotionEvent): boolean { - if (this._type === definition.GestureTypes.tap) { + if (this._type & definition.GestureTypes.tap) { var args = _getArgs(definition.GestureTypes.tap, this._target, motionEvent); _executeCallback(this._observer, args); } @@ -193,7 +193,7 @@ class TapAndDoubleTapGestureListener extends android.view.GestureDetector.Simple } public onDoubleTap(motionEvent: android.view.MotionEvent): boolean { - if (this._type === definition.GestureTypes.doubleTap) { + if (this._type & definition.GestureTypes.doubleTap) { var args = _getArgs(definition.GestureTypes.doubleTap, this._target, motionEvent); _executeCallback(this._observer, args); } @@ -204,12 +204,11 @@ class TapAndDoubleTapGestureListener extends android.view.GestureDetector.Simple return true; } - public onLongPress(motionEvent: android.view.MotionEvent): boolean { - if (this._type === definition.GestureTypes.longPress) { + public onLongPress(motionEvent: android.view.MotionEvent): void { + if (this._type & definition.GestureTypes.longPress) { var args = _getArgs(definition.GestureTypes.longPress, this._target, motionEvent); _executeCallback(this._observer, args); } - return true; } }