summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/imageshow
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-09-06 17:21:55 -0700
committernicolasroard <nicolasroard@google.com>2013-09-06 17:39:46 -0700
commit32cc4dd751569721aa19218b4d947145577060d0 (patch)
tree5f2a8a96cb1bb08a94e0ca8abbf1c03bffbe242a /src/com/android/gallery3d/filtershow/imageshow
parent98b296ffc50e11b7950acf1d0df850b617913131 (diff)
downloadandroid_packages_apps_Gallery2-32cc4dd751569721aa19218b4d947145577060d0.tar.gz
android_packages_apps_Gallery2-32cc4dd751569721aa19218b4d947145577060d0.tar.bz2
android_packages_apps_Gallery2-32cc4dd751569721aa19218b4d947145577060d0.zip
Fix UI performances / glitches
- load/process thumbnails fully in background - fix reveal slider - fix race condition when loading - better memory usage - fix loading spinner (wasn't shown!) Change-Id: Id78163556d8ee1c3ad04eae16fe1bf06f4312405
Diffstat (limited to 'src/com/android/gallery3d/filtershow/imageshow')
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java30
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/MasterImage.java33
2 files changed, 61 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 77eaf4dc7..813d76172 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -30,6 +30,7 @@ import android.graphics.Rect;
import android.graphics.Shader;
import android.graphics.drawable.NinePatchDrawable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
@@ -91,6 +92,7 @@ public class ImageShow extends View implements OnGestureListener,
Point mOriginalTranslation = new Point();
float mOriginalScale;
float mStartFocusX, mStartFocusY;
+
private enum InteractionMode {
NONE,
SCALE,
@@ -235,6 +237,19 @@ public class ImageShow extends View implements OnGestureListener,
getWidth() - 2*mShadowMargin,
getHeight() - 2*mShadowMargin);
+ MasterImage img = MasterImage.getImage();
+ // Hide the loading indicator as needed
+ if (img.isFirstLoad() && getFilteredImage() != null) {
+ if ((img.getLoadedPreset() == null)
+ || (img.getLoadedPreset() != null
+ && img.getLoadedPreset().equals(img.getCurrentPreset()))) {
+ img.setFirstLoad(false);
+ mActivity.stopLoadingIndicator();
+ } else if (img.getLoadedPreset() != null) {
+ return;
+ }
+ }
+
float cx = canvas.getWidth()/2.0f;
float cy = canvas.getHeight()/2.0f;
float scaleFactor = MasterImage.getImage().getScaleFactor();
@@ -327,6 +342,10 @@ public class ImageShow extends View implements OnGestureListener,
float x = centerX - maskW * maskScale;
float y = centerY - maskH * maskScale;
+ Point point = mActivity.hintTouchPoint(this);
+ x = point.x - maskW * maskScale;
+ y = point.y - maskH * maskScale;
+
// Prepare the shader
mShaderMatrix.reset();
mShaderMatrix.setScale(1.0f / maskScale, 1.0f / maskScale);
@@ -472,6 +491,17 @@ public class ImageShow extends View implements OnGestureListener,
Rect d = new Rect(mImageBounds.left, mImageBounds.top,
mImageBounds.left + px, mImageBounds.top + py);
+ if (mShowOriginalDirection == UNVEIL_HORIZONTAL) {
+ if (mTouchDown.x - mTouch.x > 0) {
+ d.set(mImageBounds.left + px, mImageBounds.top,
+ mImageBounds.right, mImageBounds.top + py);
+ }
+ } else {
+ if (mTouchDown.y - mTouch.y > 0) {
+ d.set(mImageBounds.left, mImageBounds.top + py,
+ mImageBounds.left + px, mImageBounds.bottom);
+ }
+ }
canvas.clipRect(d);
drawImage(canvas, image, false);
Paint paint = new Paint();
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
index c562e4a88..3af8c4a2a 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -19,11 +19,13 @@ package com.android.gallery3d.filtershow.imageshow;
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.net.Uri;
+import android.util.Log;
import com.android.gallery3d.exif.ExifTag;
import com.android.gallery3d.filtershow.FilterShowActivity;
@@ -70,6 +72,7 @@ public class MasterImage implements RenderingRequestCaller {
private Bitmap mOriginalBitmapSmall = null;
private Bitmap mOriginalBitmapLarge = null;
private Bitmap mOriginalBitmapHighres = null;
+ private Bitmap mTemporaryThumbnail = null;
private int mOrientation;
private Rect mOriginalBounds;
private final Vector<ImageShow> mLoadListeners = new Vector<ImageShow>();
@@ -113,6 +116,8 @@ public class MasterImage implements RenderingRequestCaller {
private List<ExifTag> mEXIF;
private BitmapCache mBitmapCache = new BitmapCache();
+ private boolean mFirstLoad;
+
private MasterImage() {
}
@@ -128,6 +133,14 @@ public class MasterImage implements RenderingRequestCaller {
return sMasterImage;
}
+ public void setFirstLoad(boolean firstLoad) {
+ mFirstLoad = firstLoad;
+ }
+
+ public boolean isFirstLoad() {
+ return mFirstLoad;
+ }
+
public Bitmap getOriginalBitmapSmall() {
return mOriginalBitmapSmall;
}
@@ -421,8 +434,8 @@ public class MasterImage implements RenderingRequestCaller {
mPreviousPreset = getPreviewBuffer().getConsumer().getPreset();
if (newRepresentation instanceof FilterUserPresetRepresentation) {
mCurrentLookAnimation = CIRCLE_ANIMATION;
- mAnimator = ValueAnimator.ofFloat(0, 20);
- mAnimator.setDuration(500);
+ mAnimator = ValueAnimator.ofFloat(0, 40);
+ mAnimator.setDuration(650);
}
if (newRepresentation instanceof FilterRotateRepresentation) {
mCurrentLookAnimation = ROTATE_ANIMATION;
@@ -535,6 +548,12 @@ public class MasterImage implements RenderingRequestCaller {
}
public void invalidatePreview() {
+ if (mPreset == null) {
+ return;
+ }
+ if (mPreset.nbFilters() == 0) {
+ MasterImage.getImage().setFirstLoad(false);
+ }
mPreviewPreset.enqueuePreset(mPreset);
mPreviewBuffer.invalidate();
invalidatePartialPreview();
@@ -700,6 +719,16 @@ public class MasterImage implements RenderingRequestCaller {
needsUpdatePartialPreview();
}
+ public Bitmap getTemporaryThumbnailBitmap() {
+ if (mTemporaryThumbnail == null
+ && getOriginalBitmapSmall() != null) {
+ mTemporaryThumbnail = getOriginalBitmapSmall().copy(Bitmap.Config.ARGB_8888, true);
+ Canvas canvas = new Canvas(mTemporaryThumbnail);
+ canvas.drawARGB(200, 80, 80, 80);
+ }
+ return mTemporaryThumbnail;
+ }
+
public Bitmap getThumbnailBitmap() {
return getOriginalBitmapSmall();
}