1bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren/*
2bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * Copyright (C) 2013 The Android Open Source Project
3bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren *
4bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * Licensed under the Apache License, Version 2.0 (the "License");
5bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * you may not use this file except in compliance with the License.
6bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * You may obtain a copy of the License at
7bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren *
8bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren *      http://www.apache.org/licenses/LICENSE-2.0
9bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren *
10bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * Unless required by applicable law or agreed to in writing, software
11bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * distributed under the License is distributed on an "AS IS" BASIS,
12bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * See the License for the specific language governing permissions and
14bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * limitations under the License.
15bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren */
16bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wrenpackage com.android.dreams.phototable;
17bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren
18bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wrenimport android.content.Context;
19bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wrenimport android.content.res.Resources;
20bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wrenimport android.view.MotionEvent;
21bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren
22bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren/**
23bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren * Detect and dispatch edge events.
24bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren */
25bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wrenpublic class EdgeSwipeDetector {
2688d80f4471c900628e2cb6eef23029b99af48e09Chris Wren    @SuppressWarnings("unused")
27bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    private static final String TAG = "EdgeSwipeDetector";
28bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    private float mEdgeSwipeGutter;
29bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    private float mEdgeSwipeThreshold;
30bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    private boolean mEdgeSwipe;
31bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren
32bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    private final PhotoTable mTable;
33bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren
34bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    public EdgeSwipeDetector(Context context, PhotoTable table) {
35bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren        mTable = table;
36bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren        final Resources resources = context.getResources();
37bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren        mEdgeSwipeGutter = resources.getInteger(R.integer.table_edge_swipe_gutter) / 1000000f;
38bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren        mEdgeSwipeThreshold = resources.getInteger(R.integer.table_edge_swipe_threshold) / 1000000f;
39bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    }
40bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren
41bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    public boolean onTouchEvent(MotionEvent event) {
42bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren        switch (event.getAction()) {
43bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren            case MotionEvent.ACTION_DOWN:
44bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                float edgeGutter = event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax()
45bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                        * mEdgeSwipeGutter;
46bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                if (event.getX() < edgeGutter) {
47bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                    mEdgeSwipe = true;
48bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                    return true;
49bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                }
50bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                break;
51bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren
52bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren            case MotionEvent.ACTION_MOVE:
53bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                if (mEdgeSwipe) {
54bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                    return true;
55bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                }
56bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                break;
57bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren
58bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren            case MotionEvent.ACTION_UP:
59bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                if (mEdgeSwipe) {
60bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                    mEdgeSwipe = false;
61bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                    float enough = event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax()
62bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                            * mEdgeSwipeThreshold;
63bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                    if (event.getX() > enough) {
64bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                        if (mTable.hasFocus()) {
6588d80f4471c900628e2cb6eef23029b99af48e09Chris Wren                            mTable.fling(mTable.getFocus());
66bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                        } else if (mTable.hasSelection()) {
67bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                            mTable.clearSelection();
68bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                        }
69bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                    }
70bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                    return true;
71bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                }
72bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren                break;
73bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren        }
74bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren        return false;
75bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren    }
76bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078Chris Wren}
77