Merge "Fix crash introduced with the GeometryMetadata" into gb-ub-photos-arches
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index 6d61441..02ffe75 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -34,13 +34,13 @@
 import com.android.gallery3d.filtershow.filters.ImageFilterBorder;
 import com.android.gallery3d.filtershow.filters.ImageFilterRS;
 import com.android.gallery3d.filtershow.imageshow.ImageBorder;
+import com.android.gallery3d.filtershow.imageshow.ImageCrop;
+import com.android.gallery3d.filtershow.imageshow.ImageFlip;
+import com.android.gallery3d.filtershow.imageshow.ImageRotate;
 import com.android.gallery3d.filtershow.imageshow.ImageShow;
 import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter;
 import com.android.gallery3d.filtershow.imageshow.ImageStraighten;
 import com.android.gallery3d.filtershow.imageshow.ImageZoom;
-import com.android.gallery3d.filtershow.imageshow.ImageFlip;
-import com.android.gallery3d.filtershow.imageshow.ImageCrop;
-import com.android.gallery3d.filtershow.imageshow.ImageRotate;
 import com.android.gallery3d.filtershow.presets.ImagePreset;
 import com.android.gallery3d.filtershow.presets.ImagePresetBW;
 import com.android.gallery3d.filtershow.presets.ImagePresetBWBlue;
@@ -225,6 +225,7 @@
         SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar);
         seekBar.setMax(200);
         mImageShow.setSeekBar(seekBar);
+        mImageZoom.setSeekBar(seekBar);
         mPanelController.setRowPanel(findViewById(R.id.secondRowPanel));
         mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList),
                 findViewById(R.id.compareWithOriginalImage),
diff --git a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
index 8d8024e..54d71ad 100644
--- a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
+++ b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
@@ -232,7 +232,10 @@
             if (bmp != null) {
                 // TODO: this workaround for RS might not be needed ultimately
                 Bitmap bmp2 = bmp.copy(Bitmap.Config.ARGB_8888, true);
+                float scaleFactor = imagePreset.getScaleFactor();
+                imagePreset.setScaleFactor(1.0f);
                 bmp2 = imagePreset.apply(bmp2);
+                imagePreset.setScaleFactor(scaleFactor);
                 mZoomCache.setImage(imagePreset, bounds, bmp2);
                 return bmp2;
             }
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
index ab92e4e..37c5526 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
@@ -21,7 +21,8 @@
         mOutPixelsAllocation = Allocation.createTyped(mRS, mInPixelsAllocation.getType());
     }
 
-    public void createFilter(android.content.res.Resources res) {
+    public void createFilter(android.content.res.Resources res, float scaleFactor,
+            boolean highQuality) {
     }
 
     public void runFilter() {
@@ -38,7 +39,7 @@
         }
         try {
             prepare(bitmap);
-            createFilter(mResources);
+            createFilter(mResources, scaleFactor, highQuality);
             runFilter();
             update(bitmap);
         } catch (android.renderscript.RSIllegalArgumentException e) {
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java
index 3ec7b5f..d28e405 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java
@@ -1,12 +1,6 @@
 
 package com.android.gallery3d.filtershow.filters;
 
-import android.graphics.Bitmap;
-import android.util.Log;
-import android.renderscript.Element;
-import android.renderscript.Script;
-import android.renderscript.ScriptC;
-
 import com.android.gallery3d.R;
 
 public class ImageFilterSharpen extends ImageFilterRS {
@@ -18,11 +12,13 @@
         mName = "Sharpen";
     }
 
-    public void createFilter(android.content.res.Resources res) {
+    @Override
+    public void createFilter(android.content.res.Resources res, float scaleFactor,
+            boolean highQuality) {
         int w = mInPixelsAllocation.getType().getX();
         int h = mInPixelsAllocation.getType().getY();
 
-        float p1 = mParameter;
+        float p1 = mParameter * scaleFactor;
         float value = p1 / 100.0f;
         float f[] = new float[9];
         float p = value;
@@ -43,6 +39,7 @@
         mScript.set_gHeight(h);
     }
 
+    @Override
     public void runFilter() {
         mScript.set_gIn(mInPixelsAllocation);
         mScript.bind_gPixels(mInPixelsAllocation);
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index d6d3793..2c20706 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -60,20 +60,21 @@
     protected Bitmap mForegroundImage = null;
     protected Bitmap mFilteredImage = null;
 
+    private final boolean USE_SLIDER_GESTURE = false; // set to true to have
+                                                      // slider gesture
     protected SliderController mSliderController = new SliderController();
 
     private HistoryAdapter mHistoryAdapter = null;
     private ImageStateAdapter mImageStateAdapter = null;
 
-    protected GeometryMetadata getGeometry(){
-        return new GeometryMetadata(mImagePreset.mGeoData);
+    protected GeometryMetadata getGeometry() {
+        return new GeometryMetadata(getImagePreset().mGeoData);
     }
 
-    public void setGeometry(GeometryMetadata d){
-        mImagePreset.mGeoData.set(d);
+    public void setGeometry(GeometryMetadata d) {
+        getImagePreset().mGeoData.set(d);
     }
 
-
     private boolean mShowControls = false;
     private boolean mShowOriginal = false;
     private String mToast = null;
@@ -93,6 +94,9 @@
             int parameter = getCurrentFilter().getParameter();
             updateSeekBar(parameter);
         }
+        if (mSeekBar != null) {
+            mSeekBar.setOnSeekBarChangeListener(this);
+        }
     }
 
     public void updateSeekBar(int parameter) {
@@ -112,7 +116,9 @@
 
     public void resetParameter() {
         onNewValue(0);
-        mSliderController.reset();
+        if (USE_SLIDER_GESTURE) {
+            mSliderController.reset();
+        }
     }
 
     public void setPanelController(PanelController controller) {
@@ -152,7 +158,9 @@
 
     public ImageShow(Context context, AttributeSet attrs) {
         super(context, attrs);
-        mSliderController.setListener(this);
+        if (USE_SLIDER_GESTURE) {
+            mSliderController.setListener(this);
+        }
         mHistoryAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row,
                 R.id.rowTextView);
         mImageStateAdapter = new ImageStateAdapter(context,
@@ -161,7 +169,9 @@
 
     public ImageShow(Context context) {
         super(context);
-        mSliderController.setListener(this);
+        if (USE_SLIDER_GESTURE) {
+            mSliderController.setListener(this);
+        }
         mHistoryAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row,
                 R.id.rowTextView);
     }
@@ -171,13 +181,14 @@
         int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
         int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
         setMeasuredDimension(parentWidth, parentHeight);
-        mSliderController.setWidth(parentWidth);
-        mSliderController.setHeight(parentHeight);
+        if (USE_SLIDER_GESTURE) {
+            mSliderController.setWidth(parentWidth);
+            mSliderController.setHeight(parentHeight);
+        }
     }
 
     public void setSeekBar(SeekBar seekBar) {
         mSeekBar = seekBar;
-        mSeekBar.setOnSeekBarChangeListener(this);
     }
 
     public void setCurrentFilter(ImageFilter filter) {
@@ -213,7 +224,7 @@
 
     public Rect getImageBounds() {
         Rect dst = new Rect();
-        mImagePreset.mGeoData.getPhotoBounds().roundOut(dst);
+        getImagePreset().mGeoData.getPhotoBounds().roundOut(dst);
         return dst;
     }
 
@@ -273,7 +284,9 @@
         canvas.drawLine(0, 0, getWidth(), 0, mPaint);
 
         if (showControls()) {
-            mSliderController.onDraw(canvas);
+            if (USE_SLIDER_GESTURE) {
+                mSliderController.onDraw(canvas);
+            }
         }
 
         drawToast(canvas);
@@ -383,11 +396,11 @@
         }
     }
 
-    protected void setDirtyGeometryFlag(){
+    protected void setDirtyGeometryFlag() {
         mDirtyGeometry = true;
     }
 
-    protected void clearDirtyGeometryFlag(){
+    protected void clearDirtyGeometryFlag() {
         mDirtyGeometry = false;
     }
 
@@ -396,14 +409,14 @@
     }
 
     private void imageSizeChanged(Bitmap image) {
-        if(image == null || mImagePreset == null)
+        if (image == null || getImagePreset() == null)
             return;
         float w = image.getWidth();
         float h = image.getHeight();
         RectF r = new RectF(0, 0, w, h);
-        RectF c = new RectF(w/4f, h/4f, w * 3/4f, h * 3/4f);
-        mImagePreset.mGeoData.setPhotoBounds(r);
-        mImagePreset.mGeoData.setCropBounds(c);
+        RectF c = new RectF(w / 4f, h / 4f, w * 3 / 4f, h * 3 / 4f);
+        getImagePreset().mGeoData.setPhotoBounds(r);
+        getImagePreset().mGeoData.setCropBounds(c);
         setDirtyGeometryFlag();
     }
 
@@ -423,7 +436,9 @@
     @Override
     public boolean onTouchEvent(MotionEvent event) {
         super.onTouchEvent(event);
-        mSliderController.onTouchEvent(event);
+        if (USE_SLIDER_GESTURE) {
+            mSliderController.onTouchEvent(event);
+        }
         invalidate();
         return true;
     }
@@ -450,19 +465,19 @@
     }
 
     public float getImageRotation() {
-        return mImagePreset.mGeoData.getRotation();
+        return getImagePreset().mGeoData.getRotation();
     }
 
     public float getImageRotationZoomFactor() {
-        return mImagePreset.mGeoData.getScaleFactor();
+        return getImagePreset().mGeoData.getScaleFactor();
     }
 
-    public void setImageRotation(float r){
-        mImagePreset.mGeoData.setRotation(r);
+    public void setImageRotation(float r) {
+        getImagePreset().mGeoData.setRotation(r);
     }
 
-    public void setImageRotationZoomFactor(float f){
-        mImagePreset.mGeoData.setScaleFactor(f);
+    public void setImageRotationZoomFactor(float f) {
+        getImagePreset().mGeoData.setScaleFactor(f);
     }
 
     public void setImageRotation(float imageRotation,
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java b/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
index 1c5a9b5..a2b119c 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
@@ -1,11 +1,8 @@
 package com.android.gallery3d.filtershow.imageshow;
 
-import com.android.gallery3d.filtershow.presets.ImagePreset;
-
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
-import android.graphics.Paint;
 import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.view.GestureDetector;
@@ -33,12 +30,14 @@
         mGestureDetector = new GestureDetector(context, this);
     }
 
+    @Override
     public boolean onTouchEvent(MotionEvent event) {
         boolean ret = mGestureDetector.onTouchEvent(event);
         ret = super.onTouchEvent(event);
         return ret;
     }
 
+    @Override
     public void onTouchDown(float x, float y) {
         super.onTouchDown(x, y);
         if (mZoomedIn || mTouchDown) {
@@ -64,10 +63,12 @@
         mZoomBounds = new Rect(left, top, left + mw * 2, top + mh * 2);
     }
 
+    @Override
     public void onTouchUp() {
         mTouchDown = false;
     }
 
+    @Override
     public void onDraw(Canvas canvas) {
         drawBackground(canvas);
         Bitmap filteredImage = null;
@@ -121,7 +122,13 @@
     }
 
     @Override
-    public boolean onDoubleTap(MotionEvent arg0) {
+    public boolean onDoubleTap(MotionEvent event) {
+
+        if (!mZoomedIn) {
+            onTouchDown(event.getX(), event.getY());
+        } else {
+            onTouchUp();
+        }
         mZoomedIn = !mZoomedIn;
         invalidate();
         return false;