From 4b94060491eb14f4f1d40b86012414910325751a Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Thu, 5 Sep 2013 12:14:12 +0200 Subject: Show and hide the wallpaper list in response to touch --- res/layout/wallpaper_picker.xml | 1 + src/com/android/launcher3/CropView.java | 41 ++++++++++++++++++++-- .../android/launcher3/WallpaperPickerActivity.java | 30 ++++++++++++++++ 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/res/layout/wallpaper_picker.xml b/res/layout/wallpaper_picker.xml index 493606da5..347a63e75 100644 --- a/res/layout/wallpaper_picker.xml +++ b/res/layout/wallpaper_picker.xml @@ -37,6 +37,7 @@ android:indeterminateOnly="true" android:background="@android:color/transparent" /> diff --git a/src/com/android/launcher3/CropView.java b/src/com/android/launcher3/CropView.java index 25ab5cdad..6d29be2af 100644 --- a/src/com/android/launcher3/CropView.java +++ b/src/com/android/launcher3/CropView.java @@ -22,6 +22,7 @@ import android.graphics.RectF; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ScaleGestureDetector; +import android.view.ViewConfiguration; import android.view.ScaleGestureDetector.OnScaleGestureListener; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; @@ -32,10 +33,18 @@ import com.android.photos.views.TiledImageView; public class CropView extends TiledImageView implements OnScaleGestureListener { private ScaleGestureDetector mScaleGestureDetector; + private long mTouchDownTime; + private float mFirstX, mFirstY; private float mLastX, mLastY; private float mMinScale; private boolean mTouchEnabled = true; private RectF mTempEdges = new RectF(); + TouchCallback mTouchCallback; + + public interface TouchCallback { + void onTouchDown(); + void onTap(); + } public CropView(Context context) { this(context, null); @@ -152,11 +161,12 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { mTouchEnabled = enabled; } + public void setTouchCallback(TouchCallback cb) { + mTouchCallback = cb; + } + @Override public boolean onTouchEvent(MotionEvent event) { - if (!mTouchEnabled) { - return true; - } int action = event.getActionMasked(); final boolean pointerUp = action == MotionEvent.ACTION_POINTER_UP; final int skipIndex = pointerUp ? event.getActionIndex() : -1; @@ -174,6 +184,31 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { float x = sumX / div; float y = sumY / div; + if (action == MotionEvent.ACTION_DOWN) { + mFirstX = x; + mFirstY = y; + mTouchDownTime = System.currentTimeMillis(); + if (mTouchCallback != null) { + mTouchCallback.onTouchDown(); + } + } else if (action == MotionEvent.ACTION_UP) { + ViewConfiguration config = ViewConfiguration.get(getContext()); + + float squaredDist = (mFirstX - x) * (mFirstX - x) + (mFirstY - y) * (mFirstY - y); + float slop = config.getScaledTouchSlop() * config.getScaledTouchSlop(); + long now = System.currentTimeMillis(); + // only do this if it's a small movement + if (mTouchCallback != null && + squaredDist < slop && + now < mTouchDownTime + ViewConfiguration.getTapTimeout()) { + mTouchCallback.onTap(); + } + } + + if (!mTouchEnabled) { + return true; + } + synchronized (mLock) { mScaleGestureDetector.onTouchEvent(event); switch (action) { diff --git a/src/com/android/launcher3/WallpaperPickerActivity.java b/src/com/android/launcher3/WallpaperPickerActivity.java index 8f323e809..b7226f61b 100644 --- a/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/src/com/android/launcher3/WallpaperPickerActivity.java @@ -45,6 +45,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.WindowManager; +import android.view.animation.DecelerateInterpolator; import android.widget.BaseAdapter; import android.widget.FrameLayout; import android.widget.ImageView; @@ -71,6 +72,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { private View mSelectedThumb; private CropView mCropView; + private boolean mIgnoreNextTap; private static class ThumbnailMetaData { public boolean mLaunchesGallery; @@ -181,6 +183,34 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { setContentView(R.layout.wallpaper_picker); mCropView = (CropView) findViewById(R.id.cropView); + final View wallpaperStrip = findViewById(R.id.wallpaper_strip); + mCropView.setTouchCallback(new CropView.TouchCallback() { + LauncherViewPropertyAnimator mAnim; + public void onTouchDown() { + if (mAnim != null) { + mAnim.cancel(); + } + if (wallpaperStrip.getTranslationY() == 0) { + mIgnoreNextTap = true; + } + mAnim = new LauncherViewPropertyAnimator(wallpaperStrip); + mAnim.translationY(wallpaperStrip.getHeight()) + .setInterpolator(new DecelerateInterpolator(0.75f)); + mAnim.start(); + } + public void onTap() { + boolean ignoreTap = mIgnoreNextTap; + mIgnoreNextTap = false; + if (!ignoreTap) { + if (mAnim != null) { + mAnim.cancel(); + } + mAnim = new LauncherViewPropertyAnimator(wallpaperStrip); + mAnim.translationY(0).setInterpolator(new DecelerateInterpolator(0.75f)); + mAnim.start(); + } + } + }); // Populate the built-in wallpapers findWallpapers(); -- cgit v1.2.3