org.telegram.ui.Views.GalleryViewPager.java Source code

Java tutorial

Introduction

Here is the source code for org.telegram.ui.Views.GalleryViewPager.java

Source

/*
 * This is the source code of Telegram for Android v. 1.3.2.
 * It is licensed under GNU GPL v. 2 or later.
 * You should have received a copy of the license in this archive (see LICENSE).
 *
 * Copyright Nikolai Kudashov, 2013.
 */

package org.telegram.ui.Views;

import android.content.Context;
import android.graphics.PointF;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

import org.telegram.messenger.FileLog;

public class GalleryViewPager extends ViewPager {
    PointF last;
    public PZSImageView mCurrentView;

    public GalleryViewPager(Context context) {
        super(context);
    }

    public GalleryViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private float[] handleMotionEvent(MotionEvent event) {
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            last = new PointF(event.getX(0), event.getY(0));
            break;
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
            PointF curr = new PointF(event.getX(0), event.getY(0));
            return new float[] { curr.x - last.x, curr.y - last.y };

        }
        return null;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        try {
            if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) {
                super.onTouchEvent(event);
            }

            if (mCurrentView == null) {
                return super.onTouchEvent(event);
            }

            float[] difference = handleMotionEvent(event);

            if (difference != null && mCurrentView.getOnRightSide() && difference[0] < 0) {
                return super.onTouchEvent(event);
            } else if (difference != null && mCurrentView.getOnLeftSide() && difference[0] > 0) {
                return super.onTouchEvent(event);
            } else if (difference == null && (mCurrentView.getOnLeftSide() || mCurrentView.getOnRightSide())) {
                return super.onTouchEvent(event);
            }

            return false;
        } catch (Exception e) {
            try {
                getAdapter().notifyDataSetChanged();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            FileLog.e("tmessages", e);
        }

        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        try {
            if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) {
                super.onInterceptTouchEvent(event);
            }

            if (mCurrentView == null) {
                return super.onInterceptTouchEvent(event);
            }

            float[] difference = handleMotionEvent(event);

            if (difference != null && difference.length > 0 && mCurrentView.getOnRightSide() && difference[0] < 0) {
                return super.onInterceptTouchEvent(event);
            } else if (difference != null && difference.length > 0 && mCurrentView.getOnLeftSide()
                    && difference[0] > 0) {
                return super.onInterceptTouchEvent(event);
            } else if ((difference == null || difference.length == 0)
                    && (mCurrentView.getOnLeftSide() || mCurrentView.getOnRightSide())) {
                return super.onInterceptTouchEvent(event);
            }
        } catch (Exception e) {
            FileLog.e("tmessages", e);
        }

        return false;
    }
}