public void OnEndDrag(PointerEventData eventData)
    {
        CorrectingUtils.PointerEventCorrecting(ref eventData, -launcherModel.navigationBarHeight);
        if (!touchInfo.touchable)
        {
            return;
        }

        //		Debug.Log ("OnEndDrag");
        mLauncherController.Log(TAG, "OnEndDrag eventData.position:" + eventData.position);
        if (mIconDragController.IsIconDragMode() && eventData.pointerId == touchInfo.iconDragId)
        {
            mIconDragController.OnIconEndDrag(eventData, currentPage);
//			mLauncherController.Log (TAG, "1 eventData.pointerId:"+eventData.pointerId);
            touchInfo.iconDragId = -1;
            //			return;
        }
        else if (eventData.pointerId == touchInfo.pageDragId)
        {
//			mLauncherController.Log (TAG, "2 eventData.pointerId:"+eventData.pointerId);
//			touchInfo.pageBeginDrag = false;
//			touchInfo.currentTouchPos = Vector2.zero;
//			EndSlide (eventData);
        }
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        CorrectingUtils.PointerEventCorrecting(ref eventData, -launcherModel.navigationBarHeight);
        if (!touchInfo.touchable)
        {
            return;
        }

        mLauncherController.Log(TAG, "OnPointerUp eventData.position:" + eventData.position);
        cancelSelected();
        longClickUtils.OnPointerUp(eventData);
//		mLauncherController.Log (TAG, "OnPointerUp eventData.pointerId:"+eventData.pointerId+" touchInfo.pageDragId:"+touchInfo.pageDragId);
        if (mIconDragController.IsIconDragMode() && eventData.pointerId == touchInfo.iconDragId)
        {
            mIconDragController.OnIconPointerUp(eventData, gameObject);
            Invoke("OnIconRelease", LauncherController.ANIM_DURATION);
        }
        else if (eventData.pointerId == touchInfo.pageDragId)
        {
            mLauncherController.Log(TAG, "OnPointerUp touchInfo.isInterceptClick:" + touchInfo.isInterceptClick);
//			if (!touchInfo.isInterceptClick) {
//				return;
//			}
            float disX = Mathf.Abs(touchInfo.pointerDownX - eventData.position.x);
            float disY = Mathf.Abs(touchInfo.pointerDownY - eventData.position.y);
            //		Debug.Log ("disX:"+disX+" disY:"+disY);
            mLauncherController.Log(TAG, "disX:" + disX + " disY:" + disY);
            if (disX >= moveBalance || disY >= moveBalance)
            {
                touchInfo.isInterceptClick = true;
            }
            else
            {
                touchInfo.isInterceptClick = false;
            }

            if (!touchInfo.isInterceptClick)
            {
                return;
            }

            DragPage(eventData);
            cancelPageDrag();
            EndSlide(eventData);
        }
    }
    public void OnLongClick(PointerEventData eventData)
    {
        CorrectingUtils.PointerEventCorrecting(ref eventData, -launcherModel.navigationBarHeight);
        int index = PointToIndex(eventData.position);
        App app   = mLauncherController.appList [index];

        if (app.isPlaceholder)
        {
            return;
        }
        cancelPageDrag();
        mLauncherController.Log(TAG, "OnLongClick eventData.position:" + eventData.position);
        mIconDragController.OnIconLongClick(eventData, currentPage);
        touchInfo.iconDragId       = eventData.pointerId;
        touchInfo.isInterceptClick = true;
        mLauncherController.CreateNewPageAndFill();         //create a new page
//		mLauncherController.Log (TAG, "OnLongClick  pageSize:"+mLauncherController.pageController.pageSize+" appList size:"+mLauncherController.appList.Count+" pageList size:"+mLauncherController.pageList.Count);
    }
    private void SetDraggedPosition(PointerEventData eventData)
    {
        if (dragOnSurfaces && eventData.pointerEnter != null && eventData.pointerEnter.transform as RectTransform != null)
        {
            m_DraggingPlanes[eventData.pointerId] = eventData.pointerEnter.transform as RectTransform;
        }

        RectTransform rt = m_DraggingIcons[eventData.pointerId].GetComponent <RectTransform>();

        CorrectingUtils.PointerEventCorrecting(ref eventData, launcherModel.navigationBarHeight);
        Vector3 globalMousePos;

        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_DraggingPlanes[eventData.pointerId], eventData.position - offset, eventData.pressEventCamera, out globalMousePos))
        {
            rt.position = globalMousePos;
            rt.rotation = m_DraggingPlanes[eventData.pointerId].rotation;

            Vector3 pos3D = new Vector3(rt.anchoredPosition3D.x, rt.anchoredPosition3D.y, LauncherController.ICON_RISING_DISTANCE);
            rt.anchoredPosition3D = pos3D;
            Debug.Log("rt.position:" + rt.position);
        }
    }
    //listener callback

    #region IPointerDownHandler implementation
    public void OnPointerDown(PointerEventData eventData)
    {
        mLauncherController.Log(TAG, "OnPointerDown");
        CorrectingUtils.PointerEventCorrecting(ref eventData, -launcherModel.navigationBarHeight);
        if (!touchInfo.touchable)
        {
            mLauncherController.Log(TAG, "OnPointerDown !touchInfo.touchable");
            return;
        }

        int index = PointToIndex(eventData.position);

        mLauncherController.Log(TAG, "OnPointerDown PointToIndex index:" + index);
        App app = mLauncherController.appList [index];

        mLauncherController.Log(TAG, "OnPointerDown app:" + app.appName);
        if (!mIconDragController.IsIconDragMode())
        {
            longClickUtils.OnPointerDown(eventData);
            touchInfo.pointerDownX = eventData.position.x;
            touchInfo.pointerDownY = eventData.position.y;
            if (!app.isPlaceholder)
            {
                mLauncherController.Log(TAG, "OnPointerDown showSelected");
                showSelected(eventData);
            }
        }

        if (!touchInfo.pageBeginDrag)
        {
            //			Debug.Log ("OnBeginDrag time:"+Time.time);
            mLauncherController.Log(TAG, "OnPointerDown:if (!touchInfo.pageBeginDrag) ");
            touchInfo.beginTime       = Time.time;
            touchInfo.currentTouchPos = eventData.position;
            touchInfo.beginDragPos    = eventData.position;
            touchInfo.pageBeginDrag   = true;
            touchInfo.pageDragId      = eventData.pointerId;
        }
    }
    public void OnDrag(PointerEventData eventData)
    {
        CorrectingUtils.PointerEventCorrecting(ref eventData, -launcherModel.navigationBarHeight);
        if (!touchInfo.touchable)
        {
            return;
        }
//		mLauncherController.Log (TAG, "OnDrag eventData.position:"+eventData.position);
        if (mIconDragController.IsIconDragMode() && eventData.pointerId == touchInfo.iconDragId)
        {
//			mLauncherController.Log (TAG, "1 eventData.pointerId:"+eventData.pointerId);
            DragIcon(eventData);
        }
        else if (eventData.pointerId == touchInfo.pageDragId)
        {
//			mLauncherController.Log (TAG, "2 eventData.pointerId:"+eventData.pointerId);
            if (!touchInfo.isInterceptClick)
            {
                return;
            }
            DragPage(eventData);
        }
    }
    public void OnBeginDrag(PointerEventData eventData)
    {
        CorrectingUtils.PointerEventCorrecting(ref eventData, -launcherModel.navigationBarHeight);
        if (!touchInfo.touchable)
        {
            mLauncherController.Log(TAG, "!touchInfo.touchable");
            return;
        }

        //		Debug.Log ("OnPointerDown:"+eventData.position);
        mLauncherController.Log(TAG, "OnBeginDrag eventData.position:" + eventData.position);
        if (mIconDragController.IsIconDragMode() && eventData.pointerId == touchInfo.iconDragId)
        {
//			mLauncherController.Log (TAG, "1 eventData.pointerId:"+eventData.pointerId);
            mIconDragController.OnIconBeginDrag(eventData, currentPage);
            //			return;
        }
        else
        {
//			mLauncherController.Log (TAG, "2 eventData.pointerId:"+eventData.pointerId);
            float disX = Mathf.Abs(touchInfo.pointerDownX - eventData.position.x);
            float disY = Mathf.Abs(touchInfo.pointerDownY - eventData.position.y);
            //		Debug.Log ("disX:"+disX+" disY:"+disY);
            mLauncherController.Log(TAG, "disX:" + disX + " disY:" + disY);
            if (disX >= moveBalance || disY >= moveBalance)
            {
                touchInfo.isInterceptClick = true;
                longClickUtils.cancel();
                DragPage(eventData);
            }
            else
            {
                touchInfo.isInterceptClick = false;
            }
        }
    }