From 18ec21bd07b2f9ccf5a76c407303b3dacbb845fd Mon Sep 17 00:00:00 2001 From: nicolasroard Date: Mon, 8 Oct 2012 16:38:19 -0700 Subject: Fix crash introduced with the GeometryMetadata bug:7224232 bug:7279964 bug:7298708 - Also remove the slide gesture (only use the slider widget) - use scaleFactor to apply sharpen proportionally Change-Id: Icce786cb53f2d3d6feada76c63108a563aaab7a3 --- .../gallery3d/filtershow/FilterShowActivity.java | 7 ++- .../gallery3d/filtershow/cache/ImageLoader.java | 3 + .../filtershow/filters/ImageFilterRS.java | 5 +- .../filtershow/filters/ImageFilterSharpen.java | 13 ++--- .../gallery3d/filtershow/imageshow/ImageShow.java | 67 +++++++++++++--------- .../gallery3d/filtershow/imageshow/ImageZoom.java | 15 +++-- 6 files changed, 67 insertions(+), 43 deletions(-) diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index 6d61441eb..02ffe75b7 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.ImageFilter; 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 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, 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 8d8024ef8..54d71ad77 100644 --- a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java +++ b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java @@ -232,7 +232,10 @@ public class ImageLoader { 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 ab92e4e5c..37c5526b6 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java @@ -21,7 +21,8 @@ public class ImageFilterRS extends ImageFilter { 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 @@ public class ImageFilterRS extends ImageFilter { } 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 3ec7b5f70..d28e40517 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 @@ public class ImageFilterSharpen extends ImageFilterRS { 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 @@ public class ImageFilterSharpen extends ImageFilterRS { 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 d6d3793ce..2c20706a7 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java @@ -60,20 +60,21 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi 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 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi int parameter = getCurrentFilter().getParameter(); updateSeekBar(parameter); } + if (mSeekBar != null) { + mSeekBar.setOnSeekBarChangeListener(this); + } } public void updateSeekBar(int parameter) { @@ -112,7 +116,9 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi public void resetParameter() { onNewValue(0); - mSliderController.reset(); + if (USE_SLIDER_GESTURE) { + mSliderController.reset(); + } } public void setPanelController(PanelController controller) { @@ -152,7 +158,9 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi 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 class ImageShow extends View implements SliderListener, OnSeekBarChangeLi 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 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi 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 class ImageShow extends View implements SliderListener, OnSeekBarChangeLi public Rect getImageBounds() { Rect dst = new Rect(); - mImagePreset.mGeoData.getPhotoBounds().roundOut(dst); + getImagePreset().mGeoData.getPhotoBounds().roundOut(dst); return dst; } @@ -273,7 +284,9 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi 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 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi } } - protected void setDirtyGeometryFlag(){ + protected void setDirtyGeometryFlag() { mDirtyGeometry = true; } - protected void clearDirtyGeometryFlag(){ + protected void clearDirtyGeometryFlag() { mDirtyGeometry = false; } @@ -396,14 +409,14 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi } 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 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi @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 class ImageShow extends View implements SliderListener, OnSeekBarChangeLi } 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 1c5a9b50e..a2b119cfe 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 @@ public class ImageZoom extends ImageSlave implements OnGestureListener, OnDouble 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 @@ public class ImageZoom extends ImageSlave implements OnGestureListener, OnDouble 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 @@ public class ImageZoom extends ImageSlave implements OnGestureListener, OnDouble } @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; -- cgit v1.2.3