Refactor filters to simplify their creation/addition

Bug:7688780
Change-Id: I9e1bb860dc9150bed4a255118654f2ca7f1ec3f0
diff --git a/res/layout/filtershow_activity.xml b/res/layout/filtershow_activity.xml
index 8546736..c26d858 100644
--- a/res/layout/filtershow_activity.xml
+++ b/res/layout/filtershow_activity.xml
@@ -312,77 +312,6 @@
                     android:layout_height="wrap_content"
                     android:layout_marginLeft="@dimen/thumbnail_margin"
                     android:orientation="horizontal" >
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/tinyplanetButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/tinyplanet" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/wbalanceButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/wbalance" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/exposureButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/exposure" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/vignetteButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_vignette"
-                        android:text="@string/vignette" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/contrastButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/contrast" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/shadowRecoveryButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/shadow_recovery" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/vibranceButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/vibrance" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/sharpenButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_sharpen"
-                        android:text="@string/sharpness" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/curvesButtonRGB"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_curve"
-                        android:text="@string/curvesRGB" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/hueButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/hue" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/saturationButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/saturation" />
-
-                    <com.android.gallery3d.filtershow.ui.ImageButtonTitle
-                        android:id="@+id/bwfilterButton"
-                        style="@style/FilterShowBottomButton"
-                        android:src="@drawable/filtershow_button_colors_contrast"
-                        android:text="@string/bwfilter" />
 
                 </LinearLayout>
             </HorizontalScrollView>
diff --git a/res/values/filtershow_ids.xml b/res/values/filtershow_ids.xml
new file mode 100644
index 0000000..502d2f8
--- /dev/null
+++ b/res/values/filtershow_ids.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright (C) 2012 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<resources>
+    <!-- Buttons ids for the filters -->
+    <item type="id" name="tinyplanetButton" />
+    <item type="id" name="vignetteButton" />
+    <item type="id" name="vibranceButton" />
+    <item type="id" name="contrastButton" />
+    <item type="id" name="saturationButton" />
+    <item type="id" name="bwfilterButton" />
+    <item type="id" name="wbalanceButton" />
+    <item type="id" name="hueButton" />
+    <item type="id" name="exposureButton" />
+    <item type="id" name="shadowRecoveryButton" />
+    <item type="id" name="sharpenButton" />
+    <item type="id" name="curvesButtonRGB" />
+</resources>
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index cf10a3e..724511a 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -67,6 +67,7 @@
 import com.android.gallery3d.filtershow.filters.ImageFilterRS;
 import com.android.gallery3d.filtershow.filters.ImageFilterSaturated;
 import com.android.gallery3d.filtershow.filters.ImageFilterShadows;
+import com.android.gallery3d.filtershow.filters.ImageFilterSharpen;
 import com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet;
 import com.android.gallery3d.filtershow.filters.ImageFilterVibrance;
 import com.android.gallery3d.filtershow.filters.ImageFilterVignette;
@@ -294,46 +295,32 @@
 
         mPanelController.addPanel(mColorsButton, mListColors, 3);
 
-        int[] recastIDs = {
-                R.id.tinyplanetButton,
-                R.id.vignetteButton,
-                R.id.vibranceButton,
-                R.id.contrastButton,
-                R.id.saturationButton,
-                R.id.bwfilterButton,
-                R.id.wbalanceButton,
-                R.id.hueButton,
-                R.id.exposureButton,
-                R.id.shadowRecoveryButton
-        };
         ImageFilter[] filters = {
                 new ImageFilterTinyPlanet(),
-                new ImageFilterVignette(),
-                new ImageFilterVibrance(),
-                new ImageFilterContrast(),
-                new ImageFilterSaturated(),
-                new ImageFilterBwFilter(),
                 new ImageFilterWBalance(),
-                new ImageFilterHue(),
                 new ImageFilterExposure(),
-                new ImageFilterShadows()
+                new ImageFilterVignette(),
+                new ImageFilterContrast(),
+                new ImageFilterShadows(),
+                new ImageFilterVibrance(),
+                // TODO: move sharpen and curves here
+                // sharpen
+                // curves
+                new ImageFilterHue(),
+                new ImageFilterSaturated(),
+                new ImageFilterBwFilter()
         };
 
         for (int i = 0; i < filters.length; i++) {
             ImageSmallFilter fView = new ImageSmallFilter(this);
-            View v = listColors.findViewById(recastIDs[i]);
-            int pos = listColors.indexOfChild(v);
-            listColors.removeView(v);
-
             filters[i].setParameter(filters[i].getPreviewParameter());
-            if (v instanceof ImageButtonTitle)
-                filters[i].setName(((ImageButtonTitle) v).getText());
+            filters[i].setName(getString(filters[i].getTextId()));
             fView.setImageFilter(filters[i]);
             fView.setController(this);
             fView.setImageLoader(mImageLoader);
-            fView.setId(recastIDs[i]);
+            fView.setId(filters[i].getButtonId());
             mPanelController.addComponent(mColorsButton, fView);
-            listColors.addView(fView, pos);
+            listColors.addView(fView);
         }
 
         int[] overlayIDs = {
diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java
index dd1c6b4..5629e7d 100644
--- a/src/com/android/gallery3d/filtershow/PanelController.java
+++ b/src/com/android/gallery3d/filtershow/PanelController.java
@@ -672,12 +672,12 @@
                 break;
             }
             case R.id.bwfilterButton: {
-            mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
-            String ename = mCurrentImage.getContext().getString(R.string.bwfilter);
-            mUtilityPanel.setEffectName(ename);
-            ensureFilter(ename);
-            break;
-        }
+                mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+                String ename = mCurrentImage.getContext().getString(R.string.bwfilter);
+                mUtilityPanel.setEffectName(ename);
+                ensureFilter(ename);
+                break;
+            }
             case R.id.wbalanceButton: {
                 mCurrentImage = showImageView(R.id.imageShow).setShowControls(false);
                 String ename = mCurrentImage.getContext().getString(R.string.wbalance);
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
index 7f4d5ed..2009449 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
@@ -47,6 +47,18 @@
         filterType = type;
     }
 
+    public int getButtonId() {
+        return 0;
+    }
+
+    public int getTextId() {
+        return 0;
+    }
+
+    public int getOverlayBitmaps() {
+        return 0;
+    }
+
     @Override
     public ImageFilter clone() throws CloneNotSupportedException {
         ImageFilter filter = (ImageFilter) super.clone();
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBwFilter.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterBwFilter.java
index 558abe3..1bb5c76 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBwFilter.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterBwFilter.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 import android.graphics.Color;
 
@@ -29,6 +31,16 @@
     }
 
     @Override
+    public int getButtonId() {
+        return R.id.bwfilterButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.bwfilter;
+    }
+
+    @Override
     public ImageFilter clone() throws CloneNotSupportedException {
         ImageFilterBwFilter filter = (ImageFilterBwFilter) super.clone();
         return filter;
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterContrast.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterContrast.java
index 0c3bb37..70e3d85 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterContrast.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterContrast.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 
 public class ImageFilterContrast extends ImageFilter {
@@ -24,6 +26,16 @@
         mName = "Contrast";
     }
 
+    @Override
+    public int getButtonId() {
+        return R.id.contrastButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.contrast;
+    }
+
     native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, float strength);
 
     @Override
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterExposure.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterExposure.java
index e38dc8e..63f8601 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterExposure.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterExposure.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 
 public class ImageFilterExposure extends ImageFilter {
@@ -24,6 +26,16 @@
         mName = "Exposure";
     }
 
+    @Override
+    public int getButtonId() {
+        return R.id.exposureButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.exposure;
+    }
+
     native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, float bright);
 
     @Override
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterHue.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterHue.java
index 279718e..e2ea388 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterHue.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterHue.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 
 public class ImageFilterHue extends ImageFilter {
@@ -29,6 +31,16 @@
     }
 
     @Override
+    public int getButtonId() {
+        return R.id.hueButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.hue;
+    }
+
+    @Override
     public ImageFilter clone() throws CloneNotSupportedException {
         ImageFilterHue filter = (ImageFilterHue) super.clone();
         filter.cmatrix = new ColorSpaceMatrix(cmatrix);
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterSaturated.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterSaturated.java
index 1d34591..129165b 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterSaturated.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterSaturated.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 
 public class ImageFilterSaturated extends ImageFilter {
@@ -24,6 +26,16 @@
         mName = "Saturated";
     }
 
+    @Override
+    public int getButtonId() {
+        return R.id.saturationButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.saturation;
+    }
+
     native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, float saturation);
 
     @Override
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterShadows.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterShadows.java
index 4e6b848..de8fcd5 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterShadows.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterShadows.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 
 public class ImageFilterShadows extends ImageFilter {
@@ -26,6 +28,16 @@
     }
 
     @Override
+    public int getButtonId() {
+        return R.id.shadowRecoveryButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.shadow_recovery;
+    }
+
+    @Override
     public ImageFilter clone() throws CloneNotSupportedException {
         ImageFilterShadows filter = (ImageFilterShadows) super.clone();
         return filter;
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java
index a355539..db29a8a 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java
@@ -28,6 +28,11 @@
     }
 
     @Override
+    public int getButtonId() {
+        return R.id.sharpenButton;
+    }
+
+    @Override
     public void createFilter(android.content.res.Resources res, float scaleFactor,
             boolean highQuality) {
         int w = mInPixelsAllocation.getType().getX();
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
index effd89e..36bd626 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java
@@ -22,6 +22,7 @@
 
 import com.adobe.xmp.XMPException;
 import com.adobe.xmp.XMPMeta;
+import com.android.gallery3d.R;
 import com.android.gallery3d.app.Log;
 import com.android.gallery3d.filtershow.presets.ImagePreset;
 
@@ -59,6 +60,16 @@
         mAngle = 0;
     }
 
+    @Override
+    public int getButtonId() {
+        return R.id.tinyplanetButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.tinyplanet;
+    }
+
     public void setAngle(float angle) {
         mAngle = angle;
     }
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterVibrance.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterVibrance.java
index 34f8b24..7720d04 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterVibrance.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterVibrance.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 
 public class ImageFilterVibrance extends ImageFilter {
@@ -24,6 +26,16 @@
         mName = "Vibrance";
     }
 
+    @Override
+    public int getButtonId() {
+        return R.id.vibranceButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.vibrance;
+    }
+
     native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, float bright);
 
     @Override
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java
index 7a471e5..3c904fa 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 
 public class ImageFilterVignette extends ImageFilter {
@@ -25,6 +27,16 @@
         mName = "Vignette";
     }
 
+    @Override
+    public int getButtonId() {
+        return R.id.vignetteButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.vignette;
+    }
+
     native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, float strength);
 
     @Override
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java
index 35d439a..b2842f2 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterWBalance.java
@@ -16,6 +16,8 @@
 
 package com.android.gallery3d.filtershow.filters;
 
+import com.android.gallery3d.R;
+
 import android.graphics.Bitmap;
 
 public class ImageFilterWBalance extends ImageFilter {
@@ -26,6 +28,16 @@
         mName = "WBalance";
     }
 
+    @Override
+    public int getButtonId() {
+        return R.id.wbalanceButton;
+    }
+
+    @Override
+    public int getTextId() {
+        return R.string.wbalance;
+    }
+
     native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, int locX, int locY);
 
     @Override