OSDN Git Service

Fix back button behaviour
authornicolasroard <nicolasroard@google.com>
Wed, 17 Oct 2012 22:11:53 +0000 (15:11 -0700)
committernicolasroard <nicolasroard@google.com>
Wed, 17 Oct 2012 22:43:51 +0000 (15:43 -0700)
bug:7290000
bug:7256201
Change-Id: Ia6f5726b0602c45e98566bcb5e027686e7f2fe57

src/com/android/gallery3d/filtershow/FilterShowActivity.java
src/com/android/gallery3d/filtershow/filters/ImageFilter.java
src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java
src/com/android/gallery3d/filtershow/filters/ImageFilterCurves.java
src/com/android/gallery3d/filtershow/filters/ImageFilterFx.java
src/com/android/gallery3d/filtershow/filters/ImageFilterParametricBorder.java
src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java
src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java
src/com/android/gallery3d/filtershow/presets/ImagePreset.java

index 162d2c1..74d4813 100644 (file)
@@ -115,6 +115,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
 
     private WeakReference<ProgressDialog> mSavingProgressDialog;
     private static final int SEEK_BAR_MAX = 600;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -536,7 +537,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
         filter.setSelected(true);
         mCurrentImageSmallFilter = filter;
 
-        filter.setImageFilter(new ImageFilterFx(null,getString(R.string.ffx_original)));
+        filter.setImageFilter(new ImageFilterFx(null, getString(R.string.ffx_original)));
 
         filter.setController(this);
         filter.setImageLoader(mImageLoader);
@@ -726,7 +727,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
     @Override
     public void onBackPressed() {
         if (mPanelController.onBackPressed()) {
-            finish();
+            saveImage();
         }
     }
 
@@ -814,8 +815,12 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
     }
 
     public void saveImage() {
-        showSavingProgress();
-        mImageShow.saveImage(this, null);
+        if (mImageShow.hasModifications()) {
+            showSavingProgress();
+            mImageShow.saveImage(this, null);
+        } else {
+            finish();
+        }
     }
 
     static {
index 36f2b10..78a8351 100644 (file)
@@ -38,6 +38,13 @@ public class ImageFilter implements Cloneable {
         return filter;
     }
 
+    public boolean isNil() {
+        if (mParameter == mDefaultParameter) {
+            return true;
+        }
+        return false;
+    }
+
     public void setName(String name) {
         mName = name;
     }
index dd7d17c..4291fe4 100644 (file)
@@ -23,6 +23,14 @@ public class ImageFilterBorder extends ImageFilter {
     }
 
     @Override
+    public boolean isNil() {
+        if (mNinePatch == null) {
+            return  true;
+        }
+        return false;
+    }
+
+    @Override
     public boolean same(ImageFilter filter) {
         boolean isBorderFilter = super.same(filter);
         if (!isBorderFilter) {
index 3e8d298..0f05a1c 100644 (file)
@@ -27,6 +27,16 @@ public class ImageFilterCurves extends ImageFilter {
     }
 
     @Override
+    public boolean isNil() {
+        for (int i = 0; i < 4; i++) {
+            if (mSplines[i] != null && !mSplines[i].isOriginal()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
     public boolean same(ImageFilter filter) {
         boolean isCurveFilter = super.same(filter);
         if (!isCurveFilter) {
index 93cde1f..4fc43a7 100644 (file)
@@ -2,12 +2,6 @@
 package com.android.gallery3d.filtershow.filters;
 
 import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.util.Log;
-
-import com.android.gallery3d.R;
-
-import java.util.Arrays;
 
 public class ImageFilterFx extends ImageFilter {
     private static final String TAG = "ImageFilterFx";
@@ -26,8 +20,17 @@ public class ImageFilterFx extends ImageFilter {
         return filter;
     }
 
+    @Override
+    public boolean isNil() {
+        if (fxBitmap != null) {
+            return false;
+        }
+        return true;
+    }
+
     native protected void nativeApplyFilter(Bitmap bitmap, int w, int h,Bitmap  fxBitmap, int fxw, int fxh);
 
+    @Override
     public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) {
         if (fxBitmap==null)
             return bitmap;
index 3649d28..66dad78 100644 (file)
@@ -31,6 +31,11 @@ public class ImageFilterParametricBorder extends ImageFilter {
     }
 
     @Override
+    public boolean isNil() {
+        return false;
+    }
+
+    @Override
     public boolean same(ImageFilter filter) {
         boolean isBorderFilter = super.same(filter);
         if (!isBorderFilter) {
index 352fa5b..164b6f9 100644 (file)
@@ -26,6 +26,7 @@ public class GeometryMetadata {
     // Applied in order: rotate, crop, scale.
     // Do not scale saved image (presumably?).
     private static final ImageFilterGeometry mImageFilter = new ImageFilterGeometry();
+    private static final String LOGTAG = "GeometryMetadata";
     private float mScaleFactor = 1.0f;
     private float mRotation = 0;
     private float mStraightenRotation = 0;
@@ -46,7 +47,26 @@ public class GeometryMetadata {
         set(g);
     }
 
+    public boolean hasModifications() {
+        if (mScaleFactor != 1.0f) {
+            return true;
+        }
+        if (mRotation != 0) {
+            return true;
+        }
+        if (mStraightenRotation != 0) {
+            return true;
+        }
+        if (!mCropBounds.equals(mPhotoBounds)) {
+            return true;
+        }
+        return false;
+    }
+
     public Bitmap apply(Bitmap original, float scaleFactor, boolean highQuality) {
+        if (!hasModifications()) {
+            return original;
+        }
         mImageFilter.setGeometryMetadata(this);
         Bitmap m = mImageFilter.apply(original, scaleFactor, highQuality);
         return m;
index 3b074bf..09cdb79 100644 (file)
@@ -141,6 +141,13 @@ public class ImageShow extends View implements SliderListener, OnSeekBarChangeLi
 
     }
 
+    public boolean hasModifications() {
+        if (getImagePreset() == null) {
+            return false;
+        }
+        return getImagePreset().hasModifications();
+    }
+
     public void resetParameter() {
         onNewValue(getCurrentFilter().getDefaultParameter());
         if (USE_SLIDER_GESTURE) {
index 25112ad..0cf6389 100644 (file)
@@ -33,7 +33,6 @@ public class ImageSmallBorder extends ImageSmallFilter {
         getFilteredImage();
         canvas.drawColor(mBackgroundColor);
         // TODO: simplify & make faster...
-        mPaint.setColor(mInnerBorderColor);
         RectF border = new RectF(mMargin, 2*mMargin, getWidth() - mMargin - 1, getWidth());
 
         if (mIsSelected) {
@@ -41,7 +40,7 @@ public class ImageSmallBorder extends ImageSmallFilter {
             canvas.drawRect(0, mMargin, getWidth(), getWidth() + mMargin, mPaint);
         }
 
-        canvas.drawLine(0, 0, getWidth(), 0, mPaint);
+        mPaint.setColor(mInnerBorderColor);
         mPaint.setStrokeWidth(mInnerBorderWidth);
         Path path = new Path();
         path.addRect(border, Path.Direction.CCW);
@@ -51,7 +50,7 @@ public class ImageSmallBorder extends ImageSmallFilter {
         canvas.save();
         canvas.clipRect(mMargin + 1, 2*mMargin, getWidth() - mMargin - 2, getWidth() - 1,
                 Region.Op.INTERSECT);
-        canvas.translate(mMarginmMargin + 1);
+        canvas.translate(mMargin + 1, 2*mMargin + 1);
         canvas.scale(mImageScaleFactor, mImageScaleFactor);
         Rect d = new Rect(0, 0, getWidth(), getWidth());
         drawImage(canvas, mFilteredImage, d);
index 42dbcb9..f303d4c 100644 (file)
@@ -37,7 +37,9 @@ public class ImagePreset {
 
     public ImagePreset(ImagePreset source, String historyName) {
         this(source);
-        if (historyName!=null) setHistoryName(historyName);
+        if (historyName != null) {
+            setHistoryName(historyName);
+        }
     }
 
     public ImagePreset(ImagePreset source) {
@@ -58,6 +60,22 @@ public class ImagePreset {
         mGeoData.set(source.mGeoData);
     }
 
+    public boolean hasModifications() {
+        if (mImageBorder != null && !mImageBorder.isNil()) {
+            return true;
+        }
+        if (mGeoData.hasModifications()) {
+            return true;
+        }
+        for (int i = 0; i < mFilters.size(); i++) {
+            ImageFilter filter = mFilters.elementAt(i);
+            if (!filter.isNil()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public void setGeometry(GeometryMetadata m) {
         mGeoData.set(m);
     }
@@ -123,27 +141,25 @@ public class ImagePreset {
 
     public void add(ImageFilter filter) {
 
-        if (filter.getFilterType() == ImageFilter.TYPE_BORDER){
+        if (filter.getFilterType() == ImageFilter.TYPE_BORDER) {
             setHistoryName("Border");
             setBorder(filter);
-        } else if (filter.getFilterType() == ImageFilter.TYPE_FX){
-
+        } else if (filter.getFilterType() == ImageFilter.TYPE_FX) {
             boolean found = false;
             for (int i = 0; i < mFilters.size(); i++) {
                 byte type = mFilters.get(i).getFilterType();
                 if (found) {
-                    if (type != ImageFilter.TYPE_VIGNETTE){
+                    if (type != ImageFilter.TYPE_VIGNETTE) {
                         mFilters.remove(i);
                         continue;
                     }
                 }
-                if (type==ImageFilter.TYPE_FX){
+                if (type == ImageFilter.TYPE_FX) {
                     mFilters.remove(i);
                     mFilters.add(i, filter);
                     setHistoryName(filter.getName());
                     found = true;
                 }
-
             }
             if (!found) {
                 mFilters.add(filter);