    /**
     * A base class for all event recognisers in Sencha Touch.
     *
     * Sencha Touch, by default, includes various different {@link Ext.event.recognizer.Recognizer} subclasses to recognise
     * events happening in your application.
     *
     * ## Default recognisers
     *
     * * {@link Ext.event.recognizer.Tap}
     * * {@link Ext.event.recognizer.DoubleTap}
     * * {@link Ext.event.recognizer.LongPress}
     * * {@link Ext.event.recognizer.Drag}
     * * {@link Ext.event.recognizer.HorizontalSwipe}
     * * {@link Ext.event.recognizer.Pinch}
     * * {@link Ext.event.recognizer.Rotate}
     *
     * ## Additional recognisers
     *
     * * {@link Ext.event.recognizer.VerticalSwipe}
     *
     * If you want to create custom recognisers, or disable recognisers in your Sencha Touch application, please refer to the
     * documentation in {@link Ext#setup}.
     *
     * @private
     */
    Ext.define('Ext.event.recognizer.Recognizer', {
        mixins: ['Ext.mixin.Identifiable'],

        handledEvents: [],

        config: {
            onRecognized: Ext.emptyFn,
            onFailed: Ext.emptyFn,
            callbackScope: null
        },

        constructor: function(config) {
            this.initConfig(config);

            return this;
        },

        getHandledEvents: function() {
            return this.handledEvents;
        },

        onStart: Ext.emptyFn,

        onEnd: Ext.emptyFn,

        fail: function() {
            this.getOnFailed().apply(this.getCallbackScope(), arguments);

            return false;
        },

        fire: function() {
            this.getOnRecognized().apply(this.getCallbackScope(), arguments);
        }
    });