diff options
author | Michael Jurka <mikejurka@google.com> | 2013-08-22 16:01:17 +0200 |
---|---|---|
committer | Michael Jurka <mikejurka@google.com> | 2013-08-22 16:01:17 +0200 |
commit | fbf25c19aa50f4bc2d3479b7ffb08609f2974e9e (patch) | |
tree | b5738ac920b83de1116aaf8f4b9c813af31efa4c | |
parent | 2b931429dbf29633657f060151e5451522b44f15 (diff) | |
download | android_packages_apps_Trebuchet-fbf25c19aa50f4bc2d3479b7ffb08609f2974e9e.tar.gz android_packages_apps_Trebuchet-fbf25c19aa50f4bc2d3479b7ffb08609f2974e9e.tar.bz2 android_packages_apps_Trebuchet-fbf25c19aa50f4bc2d3479b7ffb08609f2974e9e.zip |
Disable zoom/pan for built-in wallpapers
-rw-r--r-- | src/com/android/launcher3/CropView.java | 83 | ||||
-rw-r--r-- | src/com/android/launcher3/WallpaperPickerActivity.java | 3 |
2 files changed, 59 insertions, 27 deletions
diff --git a/src/com/android/launcher3/CropView.java b/src/com/android/launcher3/CropView.java index 5b4928298..f9046432e 100644 --- a/src/com/android/launcher3/CropView.java +++ b/src/com/android/launcher3/CropView.java @@ -17,12 +17,13 @@ package com.android.launcher3; import android.content.Context; -import android.graphics.Bitmap; import android.graphics.RectF; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.ScaleGestureDetector.OnScaleGestureListener; +import android.view.ViewTreeObserver; +import android.view.ViewTreeObserver.OnGlobalLayoutListener; import com.android.photos.views.TiledImageRenderer.TileSource; import com.android.photos.views.TiledImageView; @@ -32,6 +33,8 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { private ScaleGestureDetector mScaleGestureDetector; private float mLastX, mLastY; private float mMinScale; + private boolean mTouchEnabled = true; + private RectF mTempEdges = new RectF(); public CropView(Context context) { this(context, null); @@ -42,7 +45,7 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { mScaleGestureDetector = new ScaleGestureDetector(context, this); } - public RectF getCrop() { + private void getEdgesHelper(RectF edgesOut) { final float width = getWidth(); final float height = getHeight(); final float imageWidth = mRenderer.source.getImageWidth(); @@ -53,13 +56,25 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { float centerY = (height / 2f - mRenderer.centerY + (imageHeight - height) / 2f) * scale + height / 2f; float leftEdge = centerX - imageWidth / 2f * scale; + float rightEdge = centerX + imageWidth / 2f * scale; float topEdge = centerY - imageHeight / 2f * scale; + float bottomEdge = centerY + imageHeight / 2f * scale; - float cropLeft = -leftEdge / scale; - float cropTop = -topEdge / scale; - float cropRight = cropLeft + width / scale; - float cropBottom = cropTop + height / scale; - RectF cropRect = new RectF(cropLeft, cropTop, cropRight, cropBottom); + edgesOut.left = leftEdge; + edgesOut.right = rightEdge; + edgesOut.top = topEdge; + edgesOut.bottom = bottomEdge; + } + + public RectF getCrop() { + final RectF edges = mTempEdges; + getEdgesHelper(edges); + final float scale = mRenderer.scale; + + float cropLeft = -edges.left / scale; + float cropTop = -edges.top / scale; + float cropRight = cropLeft + getWidth() / scale; + float cropBottom = cropTop + getHeight() / scale; return new RectF(cropLeft, cropTop, cropRight, cropBottom); } @@ -102,8 +117,32 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { public void onScaleEnd(ScaleGestureDetector detector) { } + public void moveToUpperLeft() { + if (getWidth() == 0 || getHeight() == 0) { + final ViewTreeObserver observer = getViewTreeObserver(); + observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { + public void onGlobalLayout() { + moveToUpperLeft(); + getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + }); + } + final RectF edges = mTempEdges; + getEdgesHelper(edges); + final float scale = mRenderer.scale; + mRenderer.centerX += Math.ceil(edges.left / scale); + mRenderer.centerY += Math.ceil(edges.top / scale); + } + + public void setTouchEnabled(boolean enabled) { + mTouchEnabled = enabled; + } + @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; @@ -133,30 +172,20 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { if (mRenderer.source != null) { // Adjust position so that the wallpaper covers the entire area // of the screen - final float width = getWidth(); - final float height = getHeight(); - final float imageWidth = mRenderer.source.getImageWidth(); - final float imageHeight = mRenderer.source.getImageHeight(); + final RectF edges = mTempEdges; + getEdgesHelper(edges); final float scale = mRenderer.scale; - float centerX = (width / 2f - mRenderer.centerX + (imageWidth - width) / 2f) - * scale + width / 2f; - float centerY = (height / 2f - mRenderer.centerY + (imageHeight - height) / 2f) - * scale + height / 2f; - float leftEdge = centerX - imageWidth / 2f * scale; - float rightEdge = centerX + imageWidth / 2f * scale; - float topEdge = centerY - imageHeight / 2f * scale; - float bottomEdge = centerY + imageHeight / 2f * scale; - if (leftEdge > 0) { - mRenderer.centerX += Math.ceil(leftEdge / scale); + if (edges.left > 0) { + mRenderer.centerX += Math.ceil(edges.left / scale); } - if (rightEdge < getWidth()) { - mRenderer.centerX += (rightEdge - getWidth()) / scale; + if (edges.right < getWidth()) { + mRenderer.centerX += (edges.right - getWidth()) / scale; } - if (topEdge > 0) { - mRenderer.centerY += Math.ceil(topEdge / scale); + if (edges.top > 0) { + mRenderer.centerY += Math.ceil(edges.top / scale); } - if (bottomEdge < getHeight()) { - mRenderer.centerY += (bottomEdge - getHeight()) / scale; + if (edges.bottom < getHeight()) { + mRenderer.centerY += (edges.bottom - getHeight()) / scale; } } } diff --git a/src/com/android/launcher3/WallpaperPickerActivity.java b/src/com/android/launcher3/WallpaperPickerActivity.java index 03274213f..7c84c7fa6 100644 --- a/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/src/com/android/launcher3/WallpaperPickerActivity.java @@ -95,9 +95,12 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } else if (meta.mGalleryImageUri != null) { mCropView.setTileSource(new BitmapRegionTileSource(WallpaperPickerActivity.this, meta.mGalleryImageUri, 1024, 0), null); + mCropView.setTouchEnabled(true); } else { mCropView.setTileSource(new BitmapRegionTileSource(WallpaperPickerActivity.this, meta.mWallpaperResId, 1024, 0), null); + mCropView.setTouchEnabled(false); + mCropView.moveToUpperLeft(); } } }; |