summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChris Wren <cwren@android.com>2013-03-15 17:19:49 -0400
committerChris Wren <cwren@android.com>2013-03-15 17:19:49 -0400
commitbf44ca22d40dd60b4c30f6a979b80fbd2ffa0078 (patch)
tree0f6ea7c975550bc80c90c91b431d061e469774be /src
parenteb70217554d14807d73cae033b4f756c9b80fe3b (diff)
downloadandroid_packages_screensavers_PhotoTable-bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078.tar.gz
android_packages_screensavers_PhotoTable-bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078.tar.bz2
android_packages_screensavers_PhotoTable-bf44ca22d40dd60b4c30f6a979b80fbd2ffa0078.zip
add swipe-away gesture, and fix focus blink.
Bug: 8387448 Change-Id: I316d21069e0b81f1753c975a67f56f95282c2a8a
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dreams/phototable/EdgeSwipeDetector.java75
-rw-r--r--src/com/android/dreams/phototable/PhotoTable.java13
2 files changed, 85 insertions, 3 deletions
diff --git a/src/com/android/dreams/phototable/EdgeSwipeDetector.java b/src/com/android/dreams/phototable/EdgeSwipeDetector.java
new file mode 100644
index 0000000..98ad6c6
--- /dev/null
+++ b/src/com/android/dreams/phototable/EdgeSwipeDetector.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dreams.phototable;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.view.MotionEvent;
+
+/**
+ * Detect and dispatch edge events.
+ */
+public class EdgeSwipeDetector {
+ private static final String TAG = "EdgeSwipeDetector";
+ private float mEdgeSwipeGutter;
+ private float mEdgeSwipeThreshold;
+ private boolean mEdgeSwipe;
+
+ private final PhotoTable mTable;
+
+ public EdgeSwipeDetector(Context context, PhotoTable table) {
+ mTable = table;
+ final Resources resources = context.getResources();
+ mEdgeSwipeGutter = resources.getInteger(R.integer.table_edge_swipe_gutter) / 1000000f;
+ mEdgeSwipeThreshold = resources.getInteger(R.integer.table_edge_swipe_threshold) / 1000000f;
+ }
+
+ public boolean onTouchEvent(MotionEvent event) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ float edgeGutter = event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax()
+ * mEdgeSwipeGutter;
+ if (event.getX() < edgeGutter) {
+ mEdgeSwipe = true;
+ return true;
+ }
+ break;
+
+ case MotionEvent.ACTION_MOVE:
+ if (mEdgeSwipe) {
+ return true;
+ }
+ break;
+
+ case MotionEvent.ACTION_UP:
+ if (mEdgeSwipe) {
+ mEdgeSwipe = false;
+ float enough = event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax()
+ * mEdgeSwipeThreshold;
+ if (event.getX() > enough) {
+ if (mTable.hasFocus()) {
+ mTable.fling(mTable.getFocused());
+ } else if (mTable.hasSelection()) {
+ mTable.clearSelection();
+ }
+ }
+ return true;
+ }
+ break;
+ }
+ return false;
+ }
+}
diff --git a/src/com/android/dreams/phototable/PhotoTable.java b/src/com/android/dreams/phototable/PhotoTable.java
index e5eb007..a6d5bd7 100644
--- a/src/com/android/dreams/phototable/PhotoTable.java
+++ b/src/com/android/dreams/phototable/PhotoTable.java
@@ -67,6 +67,8 @@ public class PhotoTable extends FrameLayout {
private static final int MAX_SELECTION_TIME = 10000;
private static final int MAX_FOCUS_TIME = 5000;
+ private static final float EDGE_SWIPE_GUTTER = 0.05f;
+ private static final float EDGE_SWIPE_THRESHOLD = 0.25f;
private static Random sRNG = new Random();
private final Launcher mLauncher;
@@ -101,6 +103,7 @@ public class PhotoTable extends FrameLayout {
private View mFocused;
private long mFocusedTime;
private int mHighlightColor;
+ private EdgeSwipeDetector mEdgeSwipeDetector;
public PhotoTable(Context context, AttributeSet as) {
super(context, as);
@@ -128,6 +131,7 @@ public class PhotoTable extends FrameLayout {
getContext().getSharedPreferences(PhotoTableDreamSettings.PREFS_NAME, 0));
mLauncher = new Launcher();
mFocusReaper = new FocusReaper();
+ mEdgeSwipeDetector = new EdgeSwipeDetector(context, this);
mStarted = false;
}
@@ -284,8 +288,6 @@ public class PhotoTable extends FrameLayout {
if (bestFocus == null) {
if (angle < 180f) {
return moveFocus(focus, direction, 180f);
- } else {
- clearFocus();
}
} else {
setFocus(bestFocus);
@@ -362,6 +364,11 @@ public class PhotoTable extends FrameLayout {
}
@Override
+ public boolean onGenericMotionEvent(MotionEvent event) {
+ return mEdgeSwipeDetector.onTouchEvent(event);
+ }
+
+ @Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
if (hasSelection()) {
@@ -554,7 +561,7 @@ public class PhotoTable extends FrameLayout {
final float dist = (float) Math.hypot(delta[0], delta[1]);
final int duration = (int) (1000f * dist / mThrowSpeed);
- fling (photo, delta[0], delta[1], duration, true, true);
+ fling(photo, delta[0], delta[1], duration, true, true);
}
public void fling(final View photo, float dx, float dy, int duration,