summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2013-09-05 16:12:22 -0700
committerAngus Kong <shkong@google.com>2013-09-06 13:14:50 -0700
commit17e669d695ef2a38d28d5ba2512937836293e9ca (patch)
treef13a591f1e96dc63101abe89e13a0b4f59fea55b
parentcd7b8c13c3372f6124d284d45a5082dc7135ce7a (diff)
downloadandroid_packages_apps_Snap-17e669d695ef2a38d28d5ba2512937836293e9ca.tar.gz
android_packages_apps_Snap-17e669d695ef2a38d28d5ba2512937836293e9ca.tar.bz2
android_packages_apps_Snap-17e669d695ef2a38d28d5ba2512937836293e9ca.zip
Improve swipe gesture in filmstrip.
bug:10552605 bug:10645736 Change-Id: I7f524c191b0d8bd051ce9e1399a1265d0cac2f25
-rw-r--r--src/com/android/camera/ui/FilmStripView.java64
1 files changed, 57 insertions, 7 deletions
diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java
index e56b0df07..607dacf07 100644
--- a/src/com/android/camera/ui/FilmStripView.java
+++ b/src/com/android/camera/ui/FilmStripView.java
@@ -655,7 +655,13 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
mPanoramaViewHelper = helper;
}
- public boolean isAnchoredTo(int id) {
+ /**
+ * Checks if the data is at the center.
+ *
+ * @param id The id of the data to check.
+ * @return {@code True} if the data is currently at the center.
+ */
+ protected boolean isDataAtCenter(int id) {
if (mViewItem[mCurrentItem] == null) {
return false;
}
@@ -1497,7 +1503,7 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
}
public boolean inCameraFullscreen() {
- return isAnchoredTo(0) && inFullScreen()
+ return isDataAtCenter(0) && inFullScreen()
&& (getCurrentViewType() == ImageData.TYPE_STICKY_VIEW);
}
@@ -1849,6 +1855,7 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
return;
}
mCenterX += deltaX;
+ invalidate();
}
@Override
@@ -1939,6 +1946,15 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
@Override
public void goToFilmStrip() {
scaleTo(FILM_STRIP_SCALE, GEOMETRY_ADJUST_TIME_MS);
+
+ final ViewItem nextItem = mViewItem[mCurrentItem + 1];
+ if (mViewItem[mCurrentItem].getID() == 0 &&
+ getCurrentViewType() == ImageData.TYPE_STICKY_VIEW &&
+ nextItem != null) {
+ // Deal with the special case of swiping in camera preview.
+ scrollToPosition(nextItem.getCenterX(), GEOMETRY_ADJUST_TIME_MS, false);
+ }
+
if (mListener != null) {
mListener.onSwitchMode(false);
mBottomControls.setVisibility(View.VISIBLE);
@@ -2084,7 +2100,6 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
public boolean isZoomAnimationRunning() {
return mZoomAnimator != null && mZoomAnimator.isRunning();
}
-
}
private class MyGestureReceiver implements FilmStripGestureRecognizer.Listener {
@@ -2244,16 +2259,51 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
@Override
public boolean onFling(float velocityX, float velocityY) {
+ final ViewItem currItem = mViewItem[mCurrentItem];
+ if (currItem == null) {
+ return false;
+ }
if (Math.abs(velocityX) < Math.abs(velocityY)) {
// ignore vertical fling.
return true;
}
- if (mScale != FILM_STRIP_SCALE) {
- // No fling in other modes.
- return false;
+ // In full-screen, fling of a velocity above a threshold should go to
+ // the next/prev photos
+ if (mScale == FULL_SCREEN_SCALE) {
+ int currItemCenterX = currItem.getCenterX();
+ if (velocityX > 0) { // left
+ if (mCenterX > currItemCenterX) {
+ // The visually previous item is actually the current item.
+ mController.scrollToPosition(
+ currItemCenterX, GEOMETRY_ADJUST_TIME_MS, true);
+ return true;
+ }
+ ViewItem prevItem = mViewItem[mCurrentItem - 1];
+ if (prevItem == null) {
+ return false;
+ }
+ mController.scrollToPosition(
+ prevItem.getCenterX(), GEOMETRY_ADJUST_TIME_MS, true);
+ } else { // right
+ if (mCenterX < currItemCenterX) {
+ // The visually next item is actually the current item.
+ mController.scrollToPosition(
+ currItemCenterX, GEOMETRY_ADJUST_TIME_MS, true);
+ return true;
+ }
+ final ViewItem nextItem = mViewItem[mCurrentItem + 1];
+ if (nextItem == null) {
+ return false;
+ }
+ mController.scrollToPosition(
+ nextItem.getCenterX(), GEOMETRY_ADJUST_TIME_MS, true);
+ }
+ }
+
+ if (mScale == FILM_STRIP_SCALE) {
+ mController.fling(velocityX);
}
- mController.fling(velocityX);
return true;
}