Merge changes Ie4ea31b8,I87ff245c am: 1fce6e83f1
am: a2801f323d

Change-Id: I0c867441cafa2fe66d27321298ac8396735ba0ff
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..ca9a173
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,44 @@
+android_app {
+    name: "Gallery2",
+
+    static_libs: [
+        "androidx.fragment_fragment",
+        "androidx.legacy_legacy-support-core-ui",
+        "androidx.core_core",
+        "androidx.legacy_legacy-support-v13",
+        "com.android.gallery3d.common2",
+        "xmp_toolkit",
+        "mp4parser",
+    ],
+
+    srcs: [
+        "src/**/*.java",
+        "src_pd/**/*.java",
+    ],
+
+    resource_dirs: ["res"],
+
+    product_specific: true,
+
+    overrides: [
+        "Gallery",
+        "Gallery3D",
+        "GalleryNew3D",
+    ],
+
+    sdk_version: "current",
+
+    jni_libs: [
+        "libjni_eglfence",
+        "libjni_filtershow_filters",
+        "libjni_jpegstream",
+    ],
+
+    optimize: {
+        proguard_flags_files: ["proguard.flags"],
+    },
+
+    libs: ["org.apache.http.legacy"],
+
+    jarjar_rules: "jarjar-rules.txt",
+}
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index 22ad707..0000000
--- a/Android.mk
+++ /dev/null
@@ -1,49 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_STATIC_ANDROID_LIBRARIES := \
-    androidx.fragment_fragment \
-    androidx.legacy_legacy-support-core-ui \
-    androidx.core_core \
-    androidx.legacy_legacy-support-v13
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    com.android.gallery3d.common2 \
-    xmp_toolkit \
-    mp4parser
-
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, src) \
-    $(call all-renderscript-files-under, src) \
-    $(call all-java-files-under, src_pd)
-
-LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
-
-LOCAL_USE_AAPT2 := true
-
-LOCAL_PACKAGE_NAME := Gallery2
-
-LOCAL_PRODUCT_MODULE := true
-
-LOCAL_OVERRIDES_PACKAGES := Gallery Gallery3D GalleryNew3D
-
-LOCAL_SDK_VERSION := current
-
-LOCAL_JNI_SHARED_LIBRARIES := \
-    libjni_eglfence \
-    libjni_filtershow_filters \
-    libjni_jpegstream
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-
-LOCAL_JAVA_LIBRARIES += org.apache.http.legacy
-
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-
-include $(BUILD_PACKAGE)
-
-# Use the following include to make gallery test apk
-include $(call all-makefiles-under, $(LOCAL_PATH))
diff --git a/gallerycommon/Android.bp b/gallerycommon/Android.bp
new file mode 100644
index 0000000..9ce3e9f
--- /dev/null
+++ b/gallerycommon/Android.bp
@@ -0,0 +1,19 @@
+// Copyright 2011, 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.
+
+java_library {
+    name: "com.android.gallery3d.common2",
+    srcs: ["src/**/*.java"],
+    sdk_version: "16",
+}
diff --git a/gallerycommon/Android.mk b/gallerycommon/Android.mk
deleted file mode 100644
index 1d34147..0000000
--- a/gallerycommon/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2011, 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.
-
-LOCAL_PATH := $(call my-dir)
-
-# Build the com.android.emailcommon static library. At the moment, this includes
-# the emailcommon files themselves plus everything under src/org (apache code).  All of our
-# AIDL files are also compiled into the static library
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := com.android.gallery3d.common2
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_SDK_VERSION := 16
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/jni/Android.bp b/jni/Android.bp
new file mode 100644
index 0000000..0c0ecb7
--- /dev/null
+++ b/jni/Android.bp
@@ -0,0 +1,66 @@
+cc_defaults {
+    name: "gallery2_jni_defaults",
+    product_specific: true,
+
+    cflags: [
+        "-Wall",
+        "-Wextra",
+        "-Werror",
+
+        // to fix implicit conversion from 'int' to 'char', (255 to -1, 128 to -128)
+        "-Wno-error=constant-conversion",
+
+        "-Wno-unused-parameter",
+    ],
+    sdk_version: "9",
+    shared_libs: ["liblog"],
+}
+
+cc_library_shared {
+    name: "libjni_eglfence",
+    defaults: ["gallery2_jni_defaults"],
+
+    cflags: ["-DEGL_EGLEXT_PROTOTYPES"],
+    shared_libs: ["libEGL"],
+    srcs: ["jni_egl_fence.cpp"],
+}
+
+// Filtershow
+cc_library_shared {
+    name: "libjni_filtershow_filters",
+    defaults: ["gallery2_jni_defaults"],
+
+    srcs: [
+        "filters/gradient.c",
+        "filters/saturated.c",
+        "filters/exposure.c",
+        "filters/edge.c",
+        "filters/contrast.c",
+        "filters/hue.c",
+        "filters/shadows.c",
+        "filters/highlight.c",
+        "filters/hsv.c",
+        "filters/vibrance.c",
+        "filters/geometry.c",
+        "filters/negative.c",
+        "filters/redEyeMath.c",
+        "filters/fx.c",
+        "filters/wbalance.c",
+        "filters/redeye.c",
+        "filters/bwfilter.c",
+        "filters/tinyplanet.cc",
+        "filters/kmeans.cc",
+    ],
+
+    cflags: [
+        "-ffast-math",
+        "-O3",
+        "-funroll-loops",
+    ],
+    shared_libs: ["libjnigraphics"],
+    arch: {
+        arm: {
+            instruction_set: "arm",
+        },
+    },
+}
diff --git a/jni/Android.mk b/jni/Android.mk
deleted file mode 100644
index c08d7be..0000000
--- a/jni/Android.mk
+++ /dev/null
@@ -1,63 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-Gallery2_jni_cflags := \
-    -Wall -Wextra -Werror \
-    -Wno-error=constant-conversion \
-    -Wno-unused-parameter \
-
-# to fix implicit conversion from 'int' to 'char', (255 to -1, 128 to -128)
-
-include $(CLEAR_VARS)
-
-LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES
-LOCAL_CFLAGS += $(Gallery2_jni_cflags)
-
-LOCAL_SRC_FILES := jni_egl_fence.cpp
-
-LOCAL_SDK_VERSION := 9
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := libjni_eglfence
-
-LOCAL_PRODUCT_MODULE := true
-
-LOCAL_LDLIBS := -llog -lEGL
-
-
-include $(BUILD_SHARED_LIBRARY)
-
-# Filtershow
-
-include $(CLEAR_VARS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_SDK_VERSION := 9
-LOCAL_MODULE    := libjni_filtershow_filters
-LOCAL_PRODUCT_MODULE := true
-LOCAL_SRC_FILES := filters/gradient.c \
-                   filters/saturated.c \
-                   filters/exposure.c \
-                   filters/edge.c \
-                   filters/contrast.c \
-                   filters/hue.c \
-                   filters/shadows.c \
-                   filters/highlight.c \
-                   filters/hsv.c \
-                   filters/vibrance.c \
-                   filters/geometry.c \
-                   filters/negative.c \
-                   filters/redEyeMath.c \
-                   filters/fx.c \
-                   filters/wbalance.c \
-                   filters/redeye.c \
-                   filters/bwfilter.c \
-                   filters/tinyplanet.cc \
-                   filters/kmeans.cc
-
-LOCAL_CFLAGS += -ffast-math -O3 -funroll-loops
-LOCAL_CFLAGS += $(Gallery2_jni_cflags)
-LOCAL_LDLIBS := -llog -ljnigraphics
-LOCAL_ARM_MODE := arm
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/jni/Application.mk b/jni/Application.mk
deleted file mode 100644
index 22d188e..0000000
--- a/jni/Application.mk
+++ /dev/null
@@ -1 +0,0 @@
-APP_PLATFORM := android-9
diff --git a/jni_jpegstream/Android.bp b/jni_jpegstream/Android.bp
new file mode 100644
index 0000000..49350c6
--- /dev/null
+++ b/jni_jpegstream/Android.bp
@@ -0,0 +1,37 @@
+// Jpeg Streaming native
+cc_library_shared {
+    name: "libjni_jpegstream",
+    product_specific: true,
+
+    static_libs: ["libjpeg_static_ndk"],
+    shared_libs: ["liblog"],
+
+    arch: {
+        arm: {
+            instruction_set: "arm",
+        },
+    },
+    cflags: [
+        "-ffast-math",
+        "-O3",
+        "-funroll-loops",
+
+        "-Wall",
+        "-Wextra",
+        "-Werror",
+    ],
+    local_include_dirs: ["src"],
+    sdk_version: "17",
+    stl: "c++_static",
+
+    srcs: [
+        "src/inputstream_wrapper.cpp",
+        "src/jpegstream.cpp",
+        "src/jerr_hook.cpp",
+        "src/jpeg_hook.cpp",
+        "src/jpeg_writer.cpp",
+        "src/jpeg_reader.cpp",
+        "src/outputstream_wrapper.cpp",
+        "src/stream_wrapper.cpp",
+    ],
+}
diff --git a/jni_jpegstream/Android.mk b/jni_jpegstream/Android.mk
deleted file mode 100644
index f1ea324..0000000
--- a/jni_jpegstream/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-# Jpeg Streaming native
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE        := libjni_jpegstream
-
-LOCAL_NDK_STL_VARIANT := c++_static
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH) \
-                    $(LOCAL_PATH)/src
-
-LOCAL_STATIC_LIBRARIES := libjpeg_static_ndk
-
-LOCAL_SDK_VERSION   := 17
-LOCAL_ARM_MODE := arm
-LOCAL_PRODUCT_MODULE := true
-
-LOCAL_CFLAGS    += -ffast-math -O3 -funroll-loops
-LOCAL_CFLAGS += -Wall -Wextra -Werror
-LOCAL_LDLIBS := -llog
-
-LOCAL_CPP_EXTENSION := .cpp
-LOCAL_SRC_FILES     := \
-    src/inputstream_wrapper.cpp \
-    src/jpegstream.cpp \
-    src/jerr_hook.cpp \
-    src/jpeg_hook.cpp \
-    src/jpeg_writer.cpp \
-    src/jpeg_reader.cpp \
-    src/outputstream_wrapper.cpp \
-    src/stream_wrapper.cpp
-
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/res/layout/editor_grad_button.xml b/res/layout/editor_grad_button.xml
deleted file mode 100644
index 4d1b10b..0000000
--- a/res/layout/editor_grad_button.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2013 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_weight="1"
-    android:layout_alignParentTop="true"
-    android:layout_marginLeft="26dp"
-    android:layout_marginTop="21dp"
-    android:orientation="horizontal" >
-
-  <com.android.gallery3d.filtershow.ui.FramedTextButton
-      android:id="@+id/editorGradButton"
-      android:layout_width="84dip"
-      android:layout_height="84dip"
-      android:layout_gravity="center_vertical|left"
-      android:background="@drawable/filtershow_button_background"
-      android:scaleType="centerInside"
-      android:visibility="visible"
-      android:text="@string/editor_grad_style" />
-
-  <ToggleButton
-      android:id="@+id/editor_grad_new"
-      android:layout_width="84dip"
-      android:layout_height="84dip"
-      android:layout_gravity="center_vertical|left"
-      android:background="@drawable/filtershow_grad_button"
-      android:scaleType="centerInside"
-      android:visibility="visible"
-      android:textOff="@string/editor_grad_new"
-      android:textOn="@string/editor_grad_new" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/filtershow_grad_editor.xml b/res/layout/filtershow_grad_editor.xml
deleted file mode 100644
index 6c4721e..0000000
--- a/res/layout/filtershow_grad_editor.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2013 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/gradEditor"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_weight="1" >
-
-    <com.android.gallery3d.filtershow.imageshow.ImageGrad
-        android:id="@+id/imageShow"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
-
- </FrameLayout>
\ No newline at end of file
diff --git a/res/layout/filtershow_vignette_editor.xml b/res/layout/filtershow_vignette_editor.xml
deleted file mode 100644
index 9c9b4cb..0000000
--- a/res/layout/filtershow_vignette_editor.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2013 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:iconbutton="http://schemas.android.com/apk/res/com.android.gallery3d"
-    android:id="@+id/vignetteEditor"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_weight="1" >
-
-    <com.android.gallery3d.filtershow.imageshow.ImageVignette
-        android:id="@+id/imageVignette"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
-
- </FrameLayout>
\ No newline at end of file
diff --git a/res/values/filtershow_ids.xml b/res/values/filtershow_ids.xml
index 460da61..b22d1a5 100644
--- a/res/values/filtershow_ids.xml
+++ b/res/values/filtershow_ids.xml
@@ -48,6 +48,4 @@
     <item type="id" name="editorRotate" />
     <item type="id" name="editorStraighten" />
     <item type="id" name="editorParametric" />
-    <item type="id" name="editorGrad" />
-    <item type="id" name="editorChanSat" />
 </resources>
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index d0bc29a..937c529 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -79,11 +79,9 @@
 import com.android.gallery3d.filtershow.data.UserPresetsManager;
 import com.android.gallery3d.filtershow.editors.BasicEditor;
 import com.android.gallery3d.filtershow.editors.Editor;
-import com.android.gallery3d.filtershow.editors.EditorChanSat;
 import com.android.gallery3d.filtershow.editors.EditorColorBorder;
 import com.android.gallery3d.filtershow.editors.EditorCrop;
 import com.android.gallery3d.filtershow.editors.EditorDraw;
-import com.android.gallery3d.filtershow.editors.EditorGrad;
 import com.android.gallery3d.filtershow.editors.EditorManager;
 import com.android.gallery3d.filtershow.editors.EditorMirror;
 import com.android.gallery3d.filtershow.editors.EditorPanel;
@@ -516,8 +514,6 @@
     }
 
     private void fillEditors() {
-        mEditorPlaceHolder.addEditor(new EditorChanSat());
-        mEditorPlaceHolder.addEditor(new EditorGrad());
         mEditorPlaceHolder.addEditor(new EditorDraw());
         mEditorPlaceHolder.addEditor(new EditorColorBorder());
         mEditorPlaceHolder.addEditor(new BasicEditor());
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorChanSat.java b/src/com/android/gallery3d/filtershow/editors/EditorChanSat.java
deleted file mode 100644
index abf0a69..0000000
--- a/src/com/android/gallery3d/filtershow/editors/EditorChanSat.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-package com.android.gallery3d.filtershow.editors;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.os.Handler;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-import android.widget.PopupMenu;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-
-import android.widget.TextView;
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.FilterShowActivity;
-import com.android.gallery3d.filtershow.controller.BasicParameterStyle;
-import com.android.gallery3d.filtershow.controller.BitmapCaller;
-import com.android.gallery3d.filtershow.controller.FilterView;
-import com.android.gallery3d.filtershow.controller.Parameter;
-import com.android.gallery3d.filtershow.filters.FilterBasicRepresentation;
-import com.android.gallery3d.filtershow.filters.FilterChanSatRepresentation;
-import com.android.gallery3d.filtershow.filters.FilterRepresentation;
-import com.android.gallery3d.filtershow.imageshow.MasterImage;
-import com.android.gallery3d.filtershow.pipeline.ImagePreset;
-
-public class EditorChanSat extends ParametricEditor implements OnSeekBarChangeListener, FilterView {
-    public static final int ID = R.id.editorChanSat;
-    private final String LOGTAG = "EditorGrunge";
-    private SwapButton mButton;
-    private final Handler mHandler = new Handler();
-
-    private SeekBar mMainBar;
-    private SeekBar mRedBar;
-    private SeekBar mYellowBar;
-    private SeekBar mGreenBar;
-    private SeekBar mCyanBar;
-    private SeekBar mBlueBar;
-    private SeekBar mMagentaBar;
-    private TextView mMainValue;
-    private TextView mRedValue;
-    private TextView mYellowValue;
-    private TextView mGreenValue;
-    private TextView mCyanValue;
-    private TextView mBlueValue;
-    private TextView mMagentaValue;
-
-    int[] mMenuStrings = {
-            R.string.editor_chan_sat_main,
-            R.string.editor_chan_sat_red,
-            R.string.editor_chan_sat_yellow,
-            R.string.editor_chan_sat_green,
-            R.string.editor_chan_sat_cyan,
-            R.string.editor_chan_sat_blue,
-            R.string.editor_chan_sat_magenta
-    };
-
-    String mCurrentlyEditing = null;
-
-    public EditorChanSat() {
-        super(ID, R.layout.filtershow_default_editor, R.id.basicEditor);
-    }
-
-    @Override
-    public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
-        FilterRepresentation rep = getLocalRepresentation();
-        if (rep == null || !(rep instanceof FilterChanSatRepresentation)) {
-            return "";
-        }
-        FilterChanSatRepresentation csrep = (FilterChanSatRepresentation) rep;
-        int mode = csrep.getParameterMode();
-        String paramString;
-
-        paramString = mContext.getString(mMenuStrings[mode]);
-
-        int val = csrep.getCurrentParameter();
-        return paramString + ((val > 0) ? " +" : " ") + val;
-    }
-
-    @Override
-    public void openUtilityPanel(final LinearLayout accessoryViewList) {
-        mButton = (SwapButton) accessoryViewList.findViewById(R.id.applyEffect);
-        mButton.setText(mContext.getString(R.string.editor_chan_sat_main));
-
-        if (useCompact(mContext)) {
-            final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), mButton);
-
-            popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_chan_sat,
-                    popupMenu.getMenu());
-
-            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
-                @Override
-                public boolean onMenuItemClick(MenuItem item) {
-                    selectMenuItem(item);
-                    return true;
-                }
-            });
-            mButton.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View arg0) {
-                    popupMenu.show();
-                    ((FilterShowActivity)mContext).onShowMenu(popupMenu);
-                }
-            });
-            mButton.setListener(this);
-
-            FilterChanSatRepresentation csrep = getChanSatRep();
-            String menuString = mContext.getString(mMenuStrings[0]);
-            switchToMode(csrep, FilterChanSatRepresentation.MODE_MASTER, menuString);
-        } else {
-            mButton.setText(mContext.getString(R.string.saturation));
-        }
-    }
-
-    @Override
-    public void reflectCurrentFilter() {
-        if (useCompact(mContext)) {
-            super.reflectCurrentFilter();
-            updateText();
-            return;
-        }
-        mLocalRepresentation = null;
-        if (getLocalRepresentation() != null
-                && getLocalRepresentation() instanceof FilterChanSatRepresentation) {
-            FilterChanSatRepresentation rep =
-                    (FilterChanSatRepresentation) getLocalRepresentation();
-            int value = rep.getValue(FilterChanSatRepresentation.MODE_MASTER);
-            mMainBar.setProgress(value + 100);
-            mMainValue.setText("" + value);
-            value = rep.getValue(FilterChanSatRepresentation.MODE_RED);
-            mRedBar.setProgress(value + 100);
-            mRedValue.setText("" + value);
-            value = rep.getValue(FilterChanSatRepresentation.MODE_YELLOW);
-            mYellowBar.setProgress(value + 100);
-            mYellowValue.setText("" + value);
-            value = rep.getValue(FilterChanSatRepresentation.MODE_GREEN);
-            mGreenBar.setProgress(value + 100);
-            mGreenValue.setText("" + value);
-            value = rep.getValue(FilterChanSatRepresentation.MODE_CYAN);
-            mCyanBar.setProgress(value + 100);
-            mCyanValue.setText("" + value);
-            value = rep.getValue(FilterChanSatRepresentation.MODE_BLUE);
-            mBlueBar.setProgress(value + 100);
-            mBlueValue.setText("" + value);
-            value = rep.getValue(FilterChanSatRepresentation.MODE_MAGENTA);
-            mMagentaBar.setProgress(value + 100);
-            mMagentaValue.setText("" + value);
-            String text = mContext.getString(rep.getTextId()).toUpperCase();
-            mFilterTitle.setText(text);
-            updateText();
-        }
-    }
-
-    @Override
-    public void setUtilityPanelUI(View actionButton, View editControl) {
-        if (useCompact(mContext)) {
-            super.setUtilityPanelUI(actionButton, editControl);
-            return;
-        }
-        mActionButton = actionButton;
-        mEditControl = editControl;
-        mEditTitle.setCompoundDrawables(null, null, null, null);
-        LinearLayout group = (LinearLayout) editControl;
-        LayoutInflater inflater =
-                (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        LinearLayout controls = (LinearLayout) inflater.inflate(
-                R.layout.filtershow_saturation_controls, group, false);
-        ViewGroup.LayoutParams lp = new LinearLayout.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-        controls.setLayoutParams(lp);
-        group.removeAllViews();
-        group.addView(controls);
-        mMainBar = (SeekBar) controls.findViewById(R.id.mainSeekbar);
-        mMainBar.setMax(200);
-        mMainBar.setOnSeekBarChangeListener(this);
-        mMainValue = (TextView) controls.findViewById(R.id.mainValue);
-        mRedBar = (SeekBar) controls.findViewById(R.id.redSeekBar);
-        mRedBar.setMax(200);
-        mRedBar.setOnSeekBarChangeListener(this);
-        mRedValue = (TextView) controls.findViewById(R.id.redValue);
-        mYellowBar = (SeekBar) controls.findViewById(R.id.yellowSeekBar);
-        mYellowBar.setMax(200);
-        mYellowBar.setOnSeekBarChangeListener(this);
-        mYellowValue = (TextView) controls.findViewById(R.id.yellowValue);
-        mGreenBar = (SeekBar) controls.findViewById(R.id.greenSeekBar);
-        mGreenBar.setMax(200);
-        mGreenBar.setOnSeekBarChangeListener(this);
-        mGreenValue = (TextView) controls.findViewById(R.id.greenValue);
-        mCyanBar = (SeekBar) controls.findViewById(R.id.cyanSeekBar);
-        mCyanBar.setMax(200);
-        mCyanBar.setOnSeekBarChangeListener(this);
-        mCyanValue = (TextView) controls.findViewById(R.id.cyanValue);
-        mBlueBar = (SeekBar) controls.findViewById(R.id.blueSeekBar);
-        mBlueBar.setMax(200);
-        mBlueBar.setOnSeekBarChangeListener(this);
-        mBlueValue = (TextView) controls.findViewById(R.id.blueValue);
-        mMagentaBar = (SeekBar) controls.findViewById(R.id.magentaSeekBar);
-        mMagentaBar.setMax(200);
-        mMagentaBar.setOnSeekBarChangeListener(this);
-        mMagentaValue = (TextView) controls.findViewById(R.id.magentaValue);
-    }
-
-    public int getParameterIndex(int id) {
-        switch (id) {
-            case R.id.editor_chan_sat_main:
-                return FilterChanSatRepresentation.MODE_MASTER;
-            case R.id.editor_chan_sat_red:
-                return FilterChanSatRepresentation.MODE_RED;
-            case R.id.editor_chan_sat_yellow:
-                return FilterChanSatRepresentation.MODE_YELLOW;
-            case R.id.editor_chan_sat_green:
-                return FilterChanSatRepresentation.MODE_GREEN;
-            case R.id.editor_chan_sat_cyan:
-                return FilterChanSatRepresentation.MODE_CYAN;
-            case R.id.editor_chan_sat_blue:
-                return FilterChanSatRepresentation.MODE_BLUE;
-            case R.id.editor_chan_sat_magenta:
-                return FilterChanSatRepresentation.MODE_MAGENTA;
-        }
-        return -1;
-    }
-
-    @Override
-    public void detach() {
-        if (mButton == null) {
-            return;
-        }
-        mButton.setListener(null);
-        mButton.setOnClickListener(null);
-    }
-
-    private void updateSeekBar(FilterChanSatRepresentation rep) {
-        mControl.updateUI();
-    }
-
-    @Override
-    protected Parameter getParameterToEdit(FilterRepresentation rep) {
-        if (rep instanceof FilterChanSatRepresentation) {
-            FilterChanSatRepresentation csrep = (FilterChanSatRepresentation) rep;
-            Parameter param = csrep.getFilterParameter(csrep.getParameterMode());
-            if (param instanceof BasicParameterStyle) {
-                param.setFilterView(EditorChanSat.this);
-            }
-            return param;
-        }
-        return null;
-    }
-
-    private FilterChanSatRepresentation getChanSatRep() {
-        FilterRepresentation rep = getLocalRepresentation();
-        if (rep != null
-                && rep instanceof FilterChanSatRepresentation) {
-            FilterChanSatRepresentation csrep = (FilterChanSatRepresentation) rep;
-            return csrep;
-        }
-        return null;
-    }
-
-    @Override
-    public void computeIcon(int n, BitmapCaller caller) {
-        FilterChanSatRepresentation rep = getChanSatRep();
-        if (rep == null) return;
-        rep = (FilterChanSatRepresentation) rep.copy();
-        ImagePreset preset = new ImagePreset();
-        preset.addFilter(rep);
-        Bitmap src = MasterImage.getImage().getThumbnailBitmap();
-        caller.available(src);
-    }
-
-    protected void selectMenuItem(MenuItem item) {
-        if (getLocalRepresentation() != null
-                && getLocalRepresentation() instanceof FilterChanSatRepresentation) {
-            FilterChanSatRepresentation csrep =
-                    (FilterChanSatRepresentation) getLocalRepresentation();
-
-            switchToMode(csrep, getParameterIndex(item.getItemId()), item.getTitle().toString());
-
-        }
-    }
-
-    protected void switchToMode(FilterChanSatRepresentation csrep, int mode, String title) {
-        if (csrep == null) {
-            return;
-        }
-        csrep.setParameterMode(mode);
-        mCurrentlyEditing = title;
-        mButton.setText(mCurrentlyEditing);
-        {
-            Parameter param = getParameterToEdit(csrep);
-
-            control(param, mEditControl);
-        }
-        updateSeekBar(csrep);
-        mView.invalidate();
-    }
-
-    @Override
-    public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) {
-        FilterChanSatRepresentation rep = getChanSatRep();
-        int value = progress - 100;
-        switch (sbar.getId()) {
-            case R.id.mainSeekbar:
-                rep.setParameterMode(FilterChanSatRepresentation.MODE_MASTER);
-                mMainValue.setText("" + value);
-                break;
-            case R.id.redSeekBar:
-                rep.setParameterMode(FilterChanSatRepresentation.MODE_RED);
-                mRedValue.setText("" + value);
-                break;
-            case R.id.yellowSeekBar:
-                rep.setParameterMode(FilterChanSatRepresentation.MODE_YELLOW);
-                mYellowValue.setText("" + value);
-                break;
-            case R.id.greenSeekBar:
-                rep.setParameterMode(FilterChanSatRepresentation.MODE_GREEN);
-                mGreenValue.setText("" + value);
-                break;
-            case R.id.cyanSeekBar:
-                rep.setParameterMode(FilterChanSatRepresentation.MODE_CYAN);
-                mCyanValue.setText("" + value);
-                break;
-            case R.id.blueSeekBar:
-                rep.setParameterMode(FilterChanSatRepresentation.MODE_BLUE);
-                mBlueValue.setText("" + value);
-                break;
-            case R.id.magentaSeekBar:
-                rep.setParameterMode(FilterChanSatRepresentation.MODE_MAGENTA);
-                mMagentaValue.setText("" + value);
-                break;
-        }
-        rep.setCurrentParameter(value);
-        commitLocalRepresentation();
-    }
-
-    @Override
-    public void swapLeft(MenuItem item) {
-        super.swapLeft(item);
-        mButton.setTranslationX(0);
-        mButton.animate().translationX(mButton.getWidth()).setDuration(SwapButton.ANIM_DURATION);
-        Runnable updateButton = new Runnable() {
-            @Override
-            public void run() {
-                mButton.animate().cancel();
-                mButton.setTranslationX(0);
-            }
-        };
-        mHandler.postDelayed(updateButton, SwapButton.ANIM_DURATION);
-        selectMenuItem(item);
-    }
-
-    @Override
-    public void swapRight(MenuItem item) {
-        super.swapRight(item);
-        mButton.setTranslationX(0);
-        mButton.animate().translationX(-mButton.getWidth()).setDuration(SwapButton.ANIM_DURATION);
-        Runnable updateButton = new Runnable() {
-            @Override
-            public void run() {
-                mButton.animate().cancel();
-                mButton.setTranslationX(0);
-            }
-        };
-        mHandler.postDelayed(updateButton, SwapButton.ANIM_DURATION);
-        selectMenuItem(item);
-    }
-}
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorGrad.java b/src/com/android/gallery3d/filtershow/editors/EditorGrad.java
deleted file mode 100644
index 0591216..0000000
--- a/src/com/android/gallery3d/filtershow/editors/EditorGrad.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-package com.android.gallery3d.filtershow.editors;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.FrameLayout;
-import android.widget.LinearLayout;
-import android.widget.PopupMenu;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-import android.widget.ToggleButton;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.FilterShowActivity;
-import com.android.gallery3d.filtershow.controller.Control;
-import com.android.gallery3d.filtershow.controller.FilterView;
-import com.android.gallery3d.filtershow.controller.Parameter;
-import com.android.gallery3d.filtershow.controller.ParameterActionAndInt;
-import com.android.gallery3d.filtershow.filters.FilterGradRepresentation;
-import com.android.gallery3d.filtershow.filters.FilterRepresentation;
-import com.android.gallery3d.filtershow.imageshow.ImageGrad;
-import com.android.gallery3d.filtershow.imageshow.MasterImage;
-
-public class EditorGrad extends ParametricEditor
-        implements OnSeekBarChangeListener, ParameterActionAndInt {
-    private static final String LOGTAG = "EditorGrad";
-    public static final int ID = R.id.editorGrad;
-    PopupMenu mPopupMenu;
-    ToggleButton mAddModeButton;
-    String mEffectName = "";
-    private static final int MODE_BRIGHTNESS = FilterGradRepresentation.PARAM_BRIGHTNESS;
-    private static final int MODE_SATURATION = FilterGradRepresentation.PARAM_SATURATION;
-    private static final int MODE_CONTRAST = FilterGradRepresentation.PARAM_CONTRAST;
-    private static final int ADD_ICON = R.drawable.ic_grad_add;
-    private static final int DEL_ICON = R.drawable.ic_grad_del;
-    private int mSliderMode = MODE_BRIGHTNESS;
-    ImageGrad mImageGrad;
-    ParamAdapter []mAdapters = new ParamAdapter[3];
-    public EditorGrad() {
-        super(ID, R.layout.filtershow_grad_editor, R.id.gradEditor);
-    }
-
-    @Override
-    public void createEditor(Context context, FrameLayout frameLayout) {
-        super.createEditor(context, frameLayout);
-        mImageGrad = (ImageGrad) mImageShow;
-        mImageGrad.setEditor(this);
-
-    }
-
-    public void clearAddMode() {
-        mAddModeButton.setChecked(false);
-        FilterRepresentation tmpRep = getLocalRepresentation();
-        if (tmpRep instanceof FilterGradRepresentation) {
-            updateMenuItems((FilterGradRepresentation) tmpRep);
-        }
-    }
-
-    @Override
-    public void reflectCurrentFilter() {
-        super.reflectCurrentFilter();
-        FilterRepresentation tmpRep = getLocalRepresentation();
-        if (tmpRep instanceof FilterGradRepresentation) {
-            FilterGradRepresentation rep = (FilterGradRepresentation) tmpRep;
-            boolean f = rep.showParameterValue();
-
-            mImageGrad.setRepresentation(rep);
-        }
-    }
-
-    public void updateSeekBar(FilterGradRepresentation rep) {
-        if (ParametricEditor.useCompact(mContext)) {
-            mControl.updateUI();
-        } else {
-            updateParameters();
-        }
-    }
-
-    @Override
-    public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) {
-        FilterRepresentation tmpRep = getLocalRepresentation();
-        if (tmpRep instanceof FilterGradRepresentation) {
-            FilterGradRepresentation rep = (FilterGradRepresentation) tmpRep;
-            int min = rep.getParameterMin(mSliderMode);
-            int value = progress + min;
-            rep.setParameter(mSliderMode, value);
-            mView.invalidate();
-            commitLocalRepresentation();
-        }
-    }
-
-    @Override
-    public void openUtilityPanel(final LinearLayout accessoryViewList) {
-        Button view = (Button) accessoryViewList.findViewById(R.id.applyEffect);
-        if (useCompact(mContext)) {
-            view.setText(mContext.getString(R.string.editor_grad_brightness));
-            view.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View arg0) {
-                    showPopupMenu(accessoryViewList);
-                }
-            });
-
-            setUpPopupMenu(view);
-            setEffectName();
-        } else {
-            view.setText(mContext.getString(R.string.grad));
-        }
-    }
-
-    private void updateMenuItems(FilterGradRepresentation rep) {
-        int n = rep.getNumberOfBands();
-    }
-
-    public void setEffectName() {
-        if (mPopupMenu != null) {
-            MenuItem item = mPopupMenu.getMenu().findItem(R.id.editor_grad_brightness);
-            mEffectName = item.getTitle().toString();
-        }
-    }
-
-    @Override
-    public void setUtilityPanelUI(View actionButton, View editControl) {
-        if (ParametricEditor.useCompact(mContext)) {
-            super.setUtilityPanelUI(actionButton, editControl);
-            return;
-        }
-        mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar);
-        if (mSeekBar != null) {
-            mSeekBar.setVisibility(View.GONE);
-        }
-        LayoutInflater inflater =
-                (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        LinearLayout lp = (LinearLayout) inflater.inflate(
-                R.layout.filtershow_grad_ui, (ViewGroup) editControl, true);
-
-        mAdapters[0] = new ParamAdapter(R.id.gradContrastSeekBar, R.id.gradContrastValue,
-                lp, MODE_CONTRAST);
-        mAdapters[1] = new ParamAdapter(R.id.gradBrightnessSeekBar, R.id.gradBrightnessValue,
-                lp, MODE_BRIGHTNESS);
-        mAdapters[2] = new ParamAdapter(R.id.gradSaturationSeekBar, R.id.gradSaturationValue,
-                lp, MODE_SATURATION);
-        lp.findViewById(R.id.gradAddButton).setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                fireLeftAction();
-            }
-        });
-        lp.findViewById(R.id.gradDelButton).setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                fireRightAction();
-            }
-        });
-        setMenuIcon(false);
-    }
-
-    public void updateParameters() {
-        FilterGradRepresentation rep = getGradRepresentation();
-        for (int i = 0; i < mAdapters.length; i++) {
-            mAdapters[i].updateValues(rep);
-        }
-    }
-
-    private class ParamAdapter implements OnSeekBarChangeListener {
-        SeekBar mSlider;
-        TextView mTextView;
-        int mMin = -100;
-        int mMax = 100;
-        int mMode;
-
-        public ParamAdapter(int seekId, int textId, LinearLayout layout, int mode) {
-            mSlider = (SeekBar) layout.findViewById(seekId);
-            mTextView = (TextView) layout.findViewById(textId);
-            mSlider.setMax(mMax - mMin);
-            mMode = mode;
-            FilterGradRepresentation rep = getGradRepresentation();
-            if (rep != null){
-                updateValues(rep);
-            }
-            mSlider.setOnSeekBarChangeListener(this);
-        }
-
-        public void updateValues(FilterGradRepresentation rep) {
-            int value = rep.getParameter(mMode);
-            mTextView.setText(Integer.toString(value));
-            mSlider.setProgress(value - mMin);
-        }
-
-        @Override
-        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-            FilterGradRepresentation rep = getGradRepresentation();
-            int value = progress + mMin;
-            rep.setParameter(mMode, value);
-            if (mSliderMode != mMode) {
-                mSliderMode = mMode;
-                mEffectName = mContext.getResources().getString(getModeNameid(mMode));
-                mEffectName = mEffectName.toUpperCase();
-            }
-            mTextView.setText(Integer.toString(value));
-            mView.invalidate();
-            commitLocalRepresentation();
-        }
-
-        private int getModeNameid(int mode) {
-            switch (mode) {
-                case MODE_CONTRAST:
-                    return R.string.editor_grad_contrast;
-                case MODE_BRIGHTNESS:
-                    return R.string.editor_grad_brightness;
-                case MODE_SATURATION:
-                    return R.string.editor_grad_saturation;
-            }
-            return 0;
-        }
-
-        @Override
-        public void onStartTrackingTouch(SeekBar seekBar) {
-
-        }
-
-        @Override
-        public void onStopTrackingTouch(SeekBar seekBar) {
-
-        }
-    }
-
-    private void showPopupMenu(LinearLayout accessoryViewList) {
-        Button button = (Button) accessoryViewList.findViewById(R.id.applyEffect);
-        if (button == null) {
-            return;
-        }
-
-        if (mPopupMenu == null) {
-            setUpPopupMenu(button);
-        }
-        mPopupMenu.show();
-        ((FilterShowActivity)mContext).onShowMenu(mPopupMenu);
-    }
-
-    private void setUpPopupMenu(Button button) {
-        mPopupMenu = new PopupMenu(mImageShow.getActivity(), button);
-        mPopupMenu.getMenuInflater()
-                .inflate(R.menu.filtershow_menu_grad, mPopupMenu.getMenu());
-        FilterGradRepresentation rep = (FilterGradRepresentation) getLocalRepresentation();
-        if (rep == null) {
-            return;
-        }
-        updateMenuItems(rep);
-        hackFixStrings(mPopupMenu.getMenu());
-        setEffectName();
-        updateText();
-
-        mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
-            @Override
-            public boolean onMenuItemClick(MenuItem item) {
-                FilterRepresentation tmpRep = getLocalRepresentation();
-
-                if (tmpRep instanceof FilterGradRepresentation) {
-                    FilterGradRepresentation rep = (FilterGradRepresentation) tmpRep;
-                    int cmdID = item.getItemId();
-                    switch (cmdID) {
-                        case R.id.editor_grad_brightness:
-                            mSliderMode = MODE_BRIGHTNESS;
-                            mEffectName = item.getTitle().toString();
-                            break;
-                        case R.id.editor_grad_contrast:
-                            mSliderMode = MODE_CONTRAST;
-                            mEffectName = item.getTitle().toString();
-                            break;
-                        case R.id.editor_grad_saturation:
-                            mSliderMode = MODE_SATURATION;
-                            mEffectName = item.getTitle().toString();
-                            break;
-                    }
-                    updateMenuItems(rep);
-                    updateSeekBar(rep);
-
-                    commitLocalRepresentation();
-                    mView.invalidate();
-                }
-                return true;
-            }
-        });
-    }
-
-    @Override
-    public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
-        FilterGradRepresentation rep = getGradRepresentation();
-        if (rep == null) {
-            return mEffectName;
-        }
-        int val = rep.getParameter(mSliderMode);
-        return mEffectName.toUpperCase() + ((val > 0) ? " +" : " ") + val;
-    }
-
-    private FilterGradRepresentation getGradRepresentation() {
-        FilterRepresentation tmpRep = getLocalRepresentation();
-        if (tmpRep instanceof FilterGradRepresentation) {
-            return (FilterGradRepresentation) tmpRep;
-        }
-        return null;
-    }
-
-    @Override
-    public int getMaximum() {
-        FilterGradRepresentation rep = getGradRepresentation();
-        if (rep == null) {
-            return 0;
-        }
-        return rep.getParameterMax(mSliderMode);
-    }
-
-    @Override
-    public int getMinimum() {
-        FilterGradRepresentation rep = getGradRepresentation();
-        if (rep == null) {
-            return 0;
-        }
-        return rep.getParameterMin(mSliderMode);
-    }
-
-    @Override
-    public int getDefaultValue() {
-        return 0;
-    }
-
-    @Override
-    public int getValue() {
-        FilterGradRepresentation rep = getGradRepresentation();
-        if (rep == null) {
-            return 0;
-        }
-        return rep.getParameter(mSliderMode);
-    }
-
-    @Override
-    public String getValueString() {
-        return null;
-    }
-
-    @Override
-    public void setValue(int value) {
-        FilterGradRepresentation rep = getGradRepresentation();
-        if (rep == null) {
-            return;
-        }
-        rep.setParameter(mSliderMode, value);
-    }
-
-    @Override
-    public String getParameterName() {
-        return mEffectName;
-    }
-
-    @Override
-    public String getParameterType() {
-        return sParameterType;
-    }
-
-    @Override
-    public void setController(Control c) {
-
-    }
-
-    @Override
-    public void fireLeftAction() {
-        FilterGradRepresentation rep = getGradRepresentation();
-        if (rep == null) {
-            return;
-        }
-        rep.addBand(MasterImage.getImage().getOriginalBounds());
-        updateMenuItems(rep);
-        updateSeekBar(rep);
-
-        commitLocalRepresentation();
-        mView.invalidate();
-    }
-
-    @Override
-    public int getLeftIcon() {
-        return ADD_ICON;
-    }
-
-    @Override
-    public void fireRightAction() {
-        FilterGradRepresentation rep = getGradRepresentation();
-        if (rep == null) {
-            return;
-        }
-        rep.deleteCurrentBand();
-
-        updateMenuItems(rep);
-        updateSeekBar(rep);
-        commitLocalRepresentation();
-        mView.invalidate();
-    }
-
-    @Override
-    public int getRightIcon() {
-        return DEL_ICON;
-    }
-
-    @Override
-    public void setFilterView(FilterView editor) {
-
-    }
-
-    @Override
-    public void copyFrom(Parameter src) {
-
-    }
-}
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorVignette.java b/src/com/android/gallery3d/filtershow/editors/EditorVignette.java
deleted file mode 100644
index 630a1a9..0000000
--- a/src/com/android/gallery3d/filtershow/editors/EditorVignette.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.filtershow.editors;
-
-import android.content.Context;
-import android.os.Handler;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.LinearLayout;
-import android.widget.PopupMenu;
-import android.widget.SeekBar;
-import android.widget.TextView;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.FilterShowActivity;
-import com.android.gallery3d.filtershow.controller.BasicParameterInt;
-import com.android.gallery3d.filtershow.controller.Parameter;
-import com.android.gallery3d.filtershow.filters.FilterVignetteRepresentation;
-import com.android.gallery3d.filtershow.filters.FilterRepresentation;
-import com.android.gallery3d.filtershow.imageshow.ImageVignette;
-
-public class EditorVignette extends ParametricEditor {
-    public static final int ID = R.id.vignetteEditor;
-    private static final String LOGTAG = "EditorVignettePlanet";
-    ImageVignette mImageVignette;
-
-    private SeekBar mVignetteBar;
-    private SeekBar mExposureBar;
-    private SeekBar mSaturationBar;
-    private SeekBar mContrastBar;
-    private SeekBar mFalloffBar;
-
-
-    private TextView mVignetteValue;
-    private TextView mExposureValue;
-    private TextView mSaturationValue;
-    private TextView mContrastValue;
-    private TextView mFalloffValue;
-
-    private SwapButton mButton;
-    private final Handler mHandler = new Handler();
-
-    int[] mMenuStrings = {
-            R.string.vignette_main,
-            R.string.vignette_exposure,
-            R.string.vignette_saturation,
-            R.string.vignette_contrast,
-            R.string.vignette_falloff,
-    };
-
-    String mCurrentlyEditing = null;
-
-
-    public EditorVignette() {
-        super(ID, R.layout.filtershow_vignette_editor, R.id.imageVignette);
-    }
-
-    @Override
-    public void createEditor(Context context, FrameLayout frameLayout) {
-        super.createEditor(context, frameLayout);
-        mImageVignette = (ImageVignette) mImageShow;
-        mImageVignette.setEditor(this);
-    }
-
-    @Override
-    public void reflectCurrentFilter() {
-        if (useCompact(mContext)) {
-            super.reflectCurrentFilter();
-
-            FilterRepresentation rep = getLocalRepresentation();
-            if (rep != null && getLocalRepresentation() instanceof FilterVignetteRepresentation) {
-                FilterVignetteRepresentation drawRep = (FilterVignetteRepresentation) rep;
-                mImageVignette.setRepresentation(drawRep);
-            }
-            updateText();
-            return;
-        }
-        mLocalRepresentation = null;
-        if (getLocalRepresentation() != null
-                && getLocalRepresentation() instanceof FilterVignetteRepresentation) {
-            FilterVignetteRepresentation rep =
-                    (FilterVignetteRepresentation) getLocalRepresentation();
-            int min;
-            int []mode = {
-                    FilterVignetteRepresentation.MODE_VIGNETTE,
-                    FilterVignetteRepresentation.MODE_EXPOSURE,
-                    FilterVignetteRepresentation.MODE_SATURATION,
-                    FilterVignetteRepresentation.MODE_CONTRAST,
-                    FilterVignetteRepresentation.MODE_FALLOFF
-            };
-            SeekBar []sliders = {
-                    mVignetteBar,
-                    mExposureBar,
-                    mSaturationBar,
-                    mContrastBar,
-                    mFalloffBar
-            };
-            TextView []label = {
-                    mVignetteValue,
-                    mExposureValue,
-                    mSaturationValue,
-                    mContrastValue,
-                    mFalloffValue
-            };
-            for (int i = 0; i < mode.length; i++) {
-                BasicParameterInt p = (BasicParameterInt) rep.getFilterParameter(mode[i]);
-                int value = p.getValue();
-                sliders[i].setMax(p.getMaximum() - p.getMinimum());
-                sliders[i].setProgress(value - p.getMinimum());
-                label[i].setText("" + value);
-            }
-
-            mImageVignette.setRepresentation(rep);
-            String text = mContext.getString(rep.getTextId()).toUpperCase();
-            mFilterTitle.setText(text);
-            updateText();
-        }
-    }
-
-
-
-    @Override
-    public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
-        FilterRepresentation rep = getLocalRepresentation();
-        if (rep == null || !(rep instanceof FilterVignetteRepresentation)) {
-            return "";
-        }
-        FilterVignetteRepresentation csrep = (FilterVignetteRepresentation) rep;
-        int mode = csrep.getParameterMode();
-        String paramString;
-
-        paramString = mContext.getString(mMenuStrings[mode]);
-
-        int val = csrep.getCurrentParameter();
-        return paramString + ((val > 0) ? " +" : " ") + val;
-    }
-
-    @Override
-    public void openUtilityPanel(final LinearLayout accessoryViewList) {
-        mButton = (SwapButton) accessoryViewList.findViewById(R.id.applyEffect);
-        mButton.setText(mContext.getString(R.string.vignette_main));
-
-        if (useCompact(mContext)) {
-            final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), mButton);
-
-            popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_vignette,
-                    popupMenu.getMenu());
-
-            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
-                @Override
-                public boolean onMenuItemClick(MenuItem item) {
-                    selectMenuItem(item);
-                    return true;
-                }
-            });
-            mButton.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View arg0) {
-                    popupMenu.show();
-                    ((FilterShowActivity)mContext).onShowMenu(popupMenu);
-                }
-            });
-            mButton.setListener(this);
-
-            FilterVignetteRepresentation csrep = getVignetteRep();
-            String menuString = mContext.getString(mMenuStrings[0]);
-            switchToMode(csrep, FilterVignetteRepresentation.MODE_VIGNETTE, menuString);
-        } else {
-            mButton.setText(mContext.getString(R.string.vignette_main));
-        }
-    }
-
-    @Override
-    public void setUtilityPanelUI(View actionButton, View editControl) {
-        if (useCompact(mContext)) {
-            super.setUtilityPanelUI(actionButton, editControl);
-            return;
-        }
-        mActionButton = actionButton;
-        mEditControl = editControl;
-        mEditTitle.setCompoundDrawables(null, null, null, null);
-        LinearLayout group = (LinearLayout) editControl;
-        LayoutInflater inflater =
-                (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        LinearLayout controls = (LinearLayout) inflater.inflate(
-                R.layout.filtershow_vignette_controls, group, false);
-        ViewGroup.LayoutParams lp = new LinearLayout.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-        controls.setLayoutParams(lp);
-        group.removeAllViews();
-        group.addView(controls);
-
-        mVignetteBar = (SeekBar) controls.findViewById(R.id.mainVignetteSeekbar);
-        mVignetteBar.setMax(200);
-        mVignetteBar.setOnSeekBarChangeListener(this);
-        mVignetteValue = (TextView) controls.findViewById(R.id.mainVignetteValue);
-        mExposureBar = (SeekBar) controls.findViewById(R.id.exposureSeekBar);
-        mExposureBar.setMax(200);
-        mExposureBar.setOnSeekBarChangeListener(this);
-        mExposureValue = (TextView) controls.findViewById(R.id.exposureValue);
-        mSaturationBar = (SeekBar) controls.findViewById(R.id.saturationSeekBar);
-        mSaturationBar.setMax(200);
-        mSaturationBar.setOnSeekBarChangeListener(this);
-        mSaturationValue = (TextView) controls.findViewById(R.id.saturationValue);
-        mContrastBar = (SeekBar) controls.findViewById(R.id.contrastSeekBar);
-        mContrastBar.setMax(200);
-        mContrastBar.setOnSeekBarChangeListener(this);
-        mContrastValue = (TextView) controls.findViewById(R.id.contrastValue);
-        mFalloffBar = (SeekBar) controls.findViewById(R.id.falloffSeekBar);
-        mFalloffBar.setMax(200);
-        mFalloffBar.setOnSeekBarChangeListener(this);
-        mFalloffValue = (TextView) controls.findViewById(R.id.falloffValue);
-    }
-
-    public int getParameterIndex(int id) {
-        switch (id) {
-            case R.id.editor_vignette_main:
-                return FilterVignetteRepresentation.MODE_VIGNETTE;
-            case R.id.editor_vignette_saturation:
-                return FilterVignetteRepresentation.MODE_SATURATION;
-            case R.id.editor_vignette_contrast:
-                return FilterVignetteRepresentation.MODE_CONTRAST;
-            case R.id.editor_vignette_exposure:
-                return FilterVignetteRepresentation.MODE_EXPOSURE;
-            case R.id.editor_vignette_falloff:
-                return FilterVignetteRepresentation.MODE_FALLOFF;
-        }
-        return -1;
-    }
-
-    @Override
-    public void detach() {
-        if (mButton == null) {
-            return;
-        }
-        mButton.setListener(null);
-        mButton.setOnClickListener(null);
-    }
-
-    private void updateSeekBar(FilterVignetteRepresentation rep) {
-        mControl.updateUI();
-    }
-
-    @Override
-    protected Parameter getParameterToEdit(FilterRepresentation rep) {
-        if (rep instanceof FilterVignetteRepresentation) {
-            FilterVignetteRepresentation csrep = (FilterVignetteRepresentation) rep;
-            Parameter param = csrep.getFilterParameter(csrep.getParameterMode());
-
-            return param;
-        }
-        return null;
-    }
-
-    private FilterVignetteRepresentation getVignetteRep() {
-        FilterRepresentation rep = getLocalRepresentation();
-        if (rep != null
-                && rep instanceof FilterVignetteRepresentation) {
-            FilterVignetteRepresentation csrep = (FilterVignetteRepresentation) rep;
-            return csrep;
-        }
-        return null;
-    }
-
-    protected void selectMenuItem(MenuItem item) {
-        if (getLocalRepresentation() != null
-                && getLocalRepresentation() instanceof FilterVignetteRepresentation) {
-            FilterVignetteRepresentation csrep =
-                    (FilterVignetteRepresentation) getLocalRepresentation();
-
-            switchToMode(csrep, getParameterIndex(item.getItemId()), item.getTitle().toString());
-        }
-    }
-
-    protected void switchToMode(FilterVignetteRepresentation csrep, int mode, String title) {
-        if (csrep == null) {
-            return;
-        }
-        csrep.setParameterMode(mode);
-        mCurrentlyEditing = title;
-        mButton.setText(mCurrentlyEditing);
-        {
-            Parameter param = getParameterToEdit(csrep);
-
-            control(param, mEditControl);
-        }
-        updateSeekBar(csrep);
-        mView.invalidate();
-    }
-
-    @Override
-    public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) {
-        FilterVignetteRepresentation rep = getVignetteRep();
-        int value = progress;
-        BasicParameterInt  p;
-        switch (sbar.getId()) {
-            case R.id.mainVignetteSeekbar:
-                rep.setParameterMode(FilterVignetteRepresentation.MODE_VIGNETTE);
-                p = rep.getFilterParameter(rep.getParameterMode());
-                value += p.getMinimum();
-                mVignetteValue.setText("" + value);
-                break;
-            case R.id.exposureSeekBar:
-                rep.setParameterMode(FilterVignetteRepresentation.MODE_EXPOSURE);
-                p = rep.getFilterParameter(rep.getParameterMode());
-                value += p.getMinimum();
-                mExposureValue.setText("" + value);
-                break;
-            case R.id.saturationSeekBar:
-                rep.setParameterMode(FilterVignetteRepresentation.MODE_SATURATION);
-                p = rep.getFilterParameter(rep.getParameterMode());
-                value += p.getMinimum();
-                mSaturationValue.setText("" + value);
-                break;
-            case R.id.contrastSeekBar:
-                rep.setParameterMode(FilterVignetteRepresentation.MODE_CONTRAST);
-                p = rep.getFilterParameter(rep.getParameterMode());
-                value += p.getMinimum();
-                mContrastValue.setText("" + value);
-                break;
-            case R.id.falloffSeekBar:
-                rep.setParameterMode(FilterVignetteRepresentation.MODE_FALLOFF);
-                p = rep.getFilterParameter(rep.getParameterMode());
-                value += p.getMinimum();
-                mFalloffValue.setText("" + value);
-                break;
-        }
-        rep.setCurrentParameter(value);
-        commitLocalRepresentation();
-    }
-
-    @Override
-    public void swapLeft(MenuItem item) {
-        super.swapLeft(item);
-        mButton.setTranslationX(0);
-        mButton.animate().translationX(mButton.getWidth()).setDuration(SwapButton.ANIM_DURATION);
-        Runnable updateButton = new Runnable() {
-            @Override
-            public void run() {
-                mButton.animate().cancel();
-                mButton.setTranslationX(0);
-            }
-        };
-        mHandler.postDelayed(updateButton, SwapButton.ANIM_DURATION);
-        selectMenuItem(item);
-    }
-
-    @Override
-    public void swapRight(MenuItem item) {
-        super.swapRight(item);
-        mButton.setTranslationX(0);
-        mButton.animate().translationX(-mButton.getWidth()).setDuration(SwapButton.ANIM_DURATION);
-        Runnable updateButton = new Runnable() {
-            @Override
-            public void run() {
-                mButton.animate().cancel();
-                mButton.setTranslationX(0);
-            }
-        };
-        mHandler.postDelayed(updateButton, SwapButton.ANIM_DURATION);
-        selectMenuItem(item);
-    }
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
index 8350ff3..b79381d 100644
--- a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
+++ b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
@@ -107,31 +107,18 @@
         }
     }
 
-    public void freeRSFilterScripts() {
-        for (Class c : mFilters.keySet()) {
-            ImageFilter filter = mFilters.get(c);
-            if (filter != null && filter instanceof ImageFilterRS) {
-                ((ImageFilterRS) filter).resetScripts();
-            }
-        }
-    }
-
     protected void addFilterClasses(Vector<Class> filters) {
         filters.add(ImageFilterTinyPlanet.class);
         filters.add(ImageFilterRedEye.class);
         filters.add(ImageFilterWBalance.class);
         filters.add(ImageFilterExposure.class);
-        filters.add(ImageFilterVignette.class);
-        filters.add(ImageFilterGrad.class);
         filters.add(ImageFilterContrast.class);
         filters.add(ImageFilterShadows.class);
         filters.add(ImageFilterHighlights.class);
         filters.add(ImageFilterVibrance.class);
-        filters.add(ImageFilterSharpen.class);
         filters.add(ImageFilterCurves.class);
         filters.add(ImageFilterDraw.class);
         filters.add(ImageFilterHue.class);
-        filters.add(ImageFilterChanSat.class);
         filters.add(ImageFilterSaturated.class);
         filters.add(ImageFilterBwFilter.class);
         filters.add(ImageFilterNegative.class);
@@ -289,16 +276,12 @@
         mEffects.add(getRepresentation(ImageFilterTinyPlanet.class));
         mEffects.add(getRepresentation(ImageFilterWBalance.class));
         mEffects.add(getRepresentation(ImageFilterExposure.class));
-        mEffects.add(getRepresentation(ImageFilterVignette.class));
-        mEffects.add(getRepresentation(ImageFilterGrad.class));
         mEffects.add(getRepresentation(ImageFilterContrast.class));
         mEffects.add(getRepresentation(ImageFilterShadows.class));
         mEffects.add(getRepresentation(ImageFilterHighlights.class));
         mEffects.add(getRepresentation(ImageFilterVibrance.class));
-        mEffects.add(getRepresentation(ImageFilterSharpen.class));
         mEffects.add(getRepresentation(ImageFilterCurves.class));
         mEffects.add(getRepresentation(ImageFilterHue.class));
-        mEffects.add(getRepresentation(ImageFilterChanSat.class));
         mEffects.add(getRepresentation(ImageFilterBwFilter.class));
         mEffects.add(getRepresentation(ImageFilterNegative.class));
         mEffects.add(getRepresentation(ImageFilterEdge.class));
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterChanSatRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterChanSatRepresentation.java
deleted file mode 100644
index 6c5274d..0000000
--- a/src/com/android/gallery3d/filtershow/filters/FilterChanSatRepresentation.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-
-package com.android.gallery3d.filtershow.filters;
-
-import android.util.JsonReader;
-import android.util.JsonWriter;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.controller.BasicParameterInt;
-import com.android.gallery3d.filtershow.controller.Parameter;
-import com.android.gallery3d.filtershow.controller.ParameterSet;
-import com.android.gallery3d.filtershow.editors.EditorChanSat;
-import com.android.gallery3d.filtershow.imageshow.ControlPoint;
-import com.android.gallery3d.filtershow.imageshow.Spline;
-
-import java.io.IOException;
-import java.util.Vector;
-
-/**
- * Representation for a filter that has per channel & Master saturation
- */
-public class FilterChanSatRepresentation extends FilterRepresentation implements ParameterSet {
-    private static final String LOGTAG = "FilterChanSatRepresentation";
-    private static final String ARGS = "ARGS";
-    private static final String SERIALIZATION_NAME = "channelsaturation";
-
-    public static final int MODE_MASTER = 0;
-    public static final int MODE_RED = 1;
-    public static final int MODE_YELLOW = 2;
-    public static final int MODE_GREEN = 3;
-    public static final int MODE_CYAN = 4;
-    public static final int MODE_BLUE = 5;
-    public static final int MODE_MAGENTA = 6;
-    private int mParameterMode = MODE_MASTER;
-
-    private static int MINSAT = -100;
-    private static int MAXSAT = 100;
-    private BasicParameterInt mParamMaster = new BasicParameterInt(MODE_MASTER, 0, MINSAT, MAXSAT);
-    private BasicParameterInt mParamRed = new BasicParameterInt(MODE_RED, 0, MINSAT, MAXSAT);
-    private BasicParameterInt mParamYellow = new BasicParameterInt(MODE_YELLOW, 0, MINSAT, MAXSAT);
-    private BasicParameterInt mParamGreen = new BasicParameterInt(MODE_GREEN, 0, MINSAT, MAXSAT);
-    private BasicParameterInt mParamCyan = new BasicParameterInt(MODE_CYAN, 0, MINSAT, MAXSAT);
-    private BasicParameterInt mParamBlue = new BasicParameterInt(MODE_BLUE, 0, MINSAT, MAXSAT);
-    private BasicParameterInt mParamMagenta = new BasicParameterInt(MODE_MAGENTA, 0, MINSAT, MAXSAT);
-
-    private BasicParameterInt[] mAllParam = {
-            mParamMaster,
-            mParamRed,
-            mParamYellow,
-            mParamGreen,
-            mParamCyan,
-            mParamBlue,
-            mParamMagenta};
-
-    public FilterChanSatRepresentation() {
-        super("ChannelSaturation");
-        setTextId(R.string.saturation);
-        setFilterType(FilterRepresentation.TYPE_NORMAL);
-        setSerializationName(SERIALIZATION_NAME);
-        setFilterClass(ImageFilterChanSat.class);
-        setEditorId(EditorChanSat.ID);
-        setSupportsPartialRendering(true);
-    }
-
-    public String toString() {
-        return getName() + " : " + mParamRed + ", " + mParamCyan + ", " + mParamRed
-                + ", " + mParamGreen + ", " + mParamMaster + ", " + mParamYellow;
-    }
-
-    @Override
-    public FilterRepresentation copy() {
-        FilterChanSatRepresentation representation = new FilterChanSatRepresentation();
-        copyAllParameters(representation);
-        return representation;
-    }
-
-    @Override
-    protected void copyAllParameters(FilterRepresentation representation) {
-        super.copyAllParameters(representation);
-        representation.useParametersFrom(this);
-    }
-
-    public void useParametersFrom(FilterRepresentation a) {
-        if (a instanceof FilterChanSatRepresentation) {
-            FilterChanSatRepresentation representation = (FilterChanSatRepresentation) a;
-
-            for (int i = 0; i < mAllParam.length; i++) {
-                mAllParam[i].copyFrom(representation.mAllParam[i]);
-            }
-        }
-    }
-
-    @Override
-    public boolean equals(FilterRepresentation representation) {
-        if (!super.equals(representation)) {
-            return false;
-        }
-        if (representation instanceof FilterChanSatRepresentation) {
-            FilterChanSatRepresentation rep = (FilterChanSatRepresentation) representation;
-            for (int i = 0; i < mAllParam.length; i++) {
-                if (rep.getValue(i) != getValue(i))
-                    return false;
-            }
-            return true;
-        }
-        return false;
-    }
-
-    public int getValue(int mode) {
-        return mAllParam[mode].getValue();
-    }
-
-    public void setValue(int mode, int value) {
-        mAllParam[mode].setValue(value);
-    }
-
-    public int getMinimum() {
-        return mParamMaster.getMinimum();
-    }
-
-    public int getMaximum() {
-        return mParamMaster.getMaximum();
-    }
-
-    public int getParameterMode() {
-        return mParameterMode;
-    }
-
-    public void setParameterMode(int parameterMode) {
-        mParameterMode = parameterMode;
-    }
-
-    public int getCurrentParameter() {
-        return getValue(mParameterMode);
-    }
-
-    public void setCurrentParameter(int value) {
-        setValue(mParameterMode, value);
-    }
-
-    @Override
-    public int getNumberOfParameters() {
-        return 6;
-    }
-
-    @Override
-    public Parameter getFilterParameter(int index) {
-        return mAllParam[index];
-    }
-
-    @Override
-    public void serializeRepresentation(JsonWriter writer) throws IOException {
-        writer.beginObject();
-
-        writer.name(ARGS);
-        writer.beginArray();
-        writer.value(getValue(MODE_MASTER));
-        writer.value(getValue(MODE_RED));
-        writer.value(getValue(MODE_YELLOW));
-        writer.value(getValue(MODE_GREEN));
-        writer.value(getValue(MODE_CYAN));
-        writer.value(getValue(MODE_BLUE));
-        writer.value(getValue(MODE_MAGENTA));
-        writer.endArray();
-        writer.endObject();
-    }
-
-    @Override
-    public void deSerializeRepresentation(JsonReader sreader) throws IOException {
-        sreader.beginObject();
-
-        while (sreader.hasNext()) {
-            String name = sreader.nextName();
-            if (name.startsWith(ARGS)) {
-                sreader.beginArray();
-                sreader.hasNext();
-                setValue(MODE_MASTER, sreader.nextInt());
-                sreader.hasNext();
-                setValue(MODE_RED, sreader.nextInt());
-                sreader.hasNext();
-                setValue(MODE_YELLOW, sreader.nextInt());
-                sreader.hasNext();
-                setValue(MODE_GREEN, sreader.nextInt());
-                sreader.hasNext();
-                setValue(MODE_CYAN, sreader.nextInt());
-                sreader.hasNext();
-                setValue(MODE_BLUE, sreader.nextInt());
-                sreader.hasNext();
-                setValue(MODE_MAGENTA, sreader.nextInt());
-                sreader.hasNext();
-                sreader.endArray();
-            } else {
-                sreader.skipValue();
-            }
-        }
-        sreader.endObject();
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterGradRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterGradRepresentation.java
deleted file mode 100644
index 928c3ea..0000000
--- a/src/com/android/gallery3d/filtershow/filters/FilterGradRepresentation.java
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-package com.android.gallery3d.filtershow.filters;
-
-import android.graphics.Rect;
-import android.util.JsonReader;
-import android.util.JsonWriter;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.editors.EditorGrad;
-import com.android.gallery3d.filtershow.imageshow.MasterImage;
-import com.android.gallery3d.filtershow.imageshow.Line;
-
-import java.io.IOException;
-import java.util.Vector;
-
-public class FilterGradRepresentation extends FilterRepresentation
-        implements Line {
-    private static final String LOGTAG = "FilterGradRepresentation";
-    public static final int MAX_POINTS = 16;
-    public static final int PARAM_BRIGHTNESS = 0;
-    public static final int PARAM_SATURATION = 1;
-    public static final int PARAM_CONTRAST = 2;
-    private static final double ADD_MIN_DIST = .05;
-    private static String LINE_NAME = "Point";
-    private static final  String SERIALIZATION_NAME = "grad";
-
-    public FilterGradRepresentation() {
-        super("Grad");
-        setSerializationName(SERIALIZATION_NAME);
-        creatExample();
-        setOverlayId(R.drawable.filtershow_button_grad);
-        setFilterClass(ImageFilterGrad.class);
-        setTextId(R.string.grad);
-        setEditorId(EditorGrad.ID);
-    }
-
-    public void trimVector(){
-        int n = mBands.size();
-        for (int i = n; i < MAX_POINTS; i++) {
-            mBands.add(new Band());
-        }
-        for (int i = MAX_POINTS; i <  n; i++) {
-            mBands.remove(i);
-        }
-    }
-
-    Vector<Band> mBands = new Vector<Band>();
-    Band mCurrentBand;
-
-    static class Band {
-        private boolean mask = true;
-
-        private int xPos1 = -1;
-        private int yPos1 = 100;
-        private int xPos2 = -1;
-        private int yPos2 = 100;
-        private int brightness = -40;
-        private int contrast = 0;
-        private int saturation = 0;
-
-
-        public Band() {
-        }
-
-        public Band(int x, int y) {
-            xPos1 = x;
-            yPos1 = y+30;
-            xPos2 = x;
-            yPos2 = y-30;
-        }
-
-        public Band(Band copy) {
-            mask = copy.mask;
-            xPos1 = copy.xPos1;
-            yPos1 = copy.yPos1;
-            xPos2 = copy.xPos2;
-            yPos2 = copy.yPos2;
-            brightness = copy.brightness;
-            contrast = copy.contrast;
-            saturation = copy.saturation;
-        }
-
-    }
-
-    @Override
-    public String toString() {
-        int count = 0;
-        for (Band point : mBands) {
-            if (!point.mask) {
-                count++;
-            }
-        }
-        return "c=" + mBands.indexOf(mCurrentBand) + "[" + mBands.size() + "]" + count;
-    }
-
-    private void creatExample() {
-        Band p = new Band();
-        p.mask = false;
-        p.xPos1 = -1;
-        p.yPos1 = 100;
-        p.xPos2 = -1;
-        p.yPos2 = 100;
-        p.brightness = -50;
-        p.contrast = 0;
-        p.saturation = 0;
-        mBands.add(0, p);
-        mCurrentBand = p;
-        trimVector();
-    }
-
-    @Override
-    public void useParametersFrom(FilterRepresentation a) {
-            FilterGradRepresentation rep = (FilterGradRepresentation) a;
-            Vector<Band> tmpBands = new Vector<Band>();
-            int n = (rep.mCurrentBand == null) ? 0 : rep.mBands.indexOf(rep.mCurrentBand);
-            for (Band band : rep.mBands) {
-                tmpBands.add(new Band(band));
-            }
-            mCurrentBand = null;
-            mBands = tmpBands;
-            mCurrentBand = mBands.elementAt(n);
-    }
-
-    @Override
-    public FilterRepresentation copy() {
-        FilterGradRepresentation representation = new FilterGradRepresentation();
-        copyAllParameters(representation);
-        return representation;
-    }
-
-    @Override
-    protected void copyAllParameters(FilterRepresentation representation) {
-        super.copyAllParameters(representation);
-        representation.useParametersFrom(this);
-    }
-
-    @Override
-    public boolean equals(FilterRepresentation representation) {
-        if (representation instanceof FilterGradRepresentation) {
-            FilterGradRepresentation rep = (FilterGradRepresentation) representation;
-            int n = getNumberOfBands();
-            if (rep.getNumberOfBands() != n) {
-                return false;
-            }
-            for (int i = 0; i < mBands.size(); i++) {
-                Band b1 = mBands.get(i);
-                Band b2 = rep.mBands.get(i);
-                if (b1.mask != b2.mask
-                        || b1.brightness != b2.brightness
-                        || b1.contrast != b2.contrast
-                        || b1.saturation != b2.saturation
-                        || b1.xPos1 != b2.xPos1
-                        || b1.xPos2 != b2.xPos2
-                        || b1.yPos1 != b2.yPos1
-                        || b1.yPos2 != b2.yPos2) {
-                    return false;
-                }
-            }
-            return true;
-        }
-        return false;
-    }
-
-    public int getNumberOfBands() {
-        int count = 0;
-        for (Band point : mBands) {
-            if (!point.mask) {
-                count++;
-            }
-        }
-        return count;
-    }
-
-    public int addBand(Rect rect) {
-        mBands.add(0, mCurrentBand = new Band(rect.centerX(), rect.centerY()));
-        mCurrentBand.mask = false;
-        int x = (mCurrentBand.xPos1 + mCurrentBand.xPos2)/2;
-        int y = (mCurrentBand.yPos1 + mCurrentBand.yPos2)/2;
-        double addDelta = ADD_MIN_DIST * Math.max(rect.width(), rect.height());
-        boolean moved = true;
-        int count = 0;
-        int toMove =  mBands.indexOf(mCurrentBand);
-
-        while (moved) {
-            moved = false;
-            count++;
-            if (count > 14) {
-                break;
-            }
-
-            for (Band point : mBands) {
-                if (point.mask) {
-                    break;
-                }
-            }
-
-            for (Band point : mBands) {
-                if (point.mask) {
-                    break;
-                }
-                int index = mBands.indexOf(point);
-
-                if (toMove != index) {
-                    double dist = Math.hypot(point.xPos1 - x, point.yPos1 - y);
-                    if (dist < addDelta) {
-                        moved = true;
-                        mCurrentBand.xPos1 += addDelta;
-                        mCurrentBand.yPos1 += addDelta;
-                        mCurrentBand.xPos2 += addDelta;
-                        mCurrentBand.yPos2 += addDelta;
-                        x = (mCurrentBand.xPos1 + mCurrentBand.xPos2)/2;
-                        y = (mCurrentBand.yPos1 + mCurrentBand.yPos2)/2;
-
-                        if (mCurrentBand.yPos1 > rect.bottom) {
-                            mCurrentBand.yPos1 = (int) (rect.top + addDelta);
-                        }
-                        if (mCurrentBand.xPos1 > rect.right) {
-                            mCurrentBand.xPos1 = (int) (rect.left + addDelta);
-                        }
-                    }
-                }
-            }
-        }
-        trimVector();
-        return 0;
-    }
-
-    public void deleteCurrentBand() {
-        int index = mBands.indexOf(mCurrentBand);
-        mBands.remove(mCurrentBand);
-        trimVector();
-        if (getNumberOfBands() == 0) {
-            addBand(MasterImage.getImage().getOriginalBounds());
-        }
-        mCurrentBand = mBands.get(0);
-    }
-
-    public void  nextPoint(){
-        int index = mBands.indexOf(mCurrentBand);
-        int tmp = index;
-        Band point;
-        int k = 0;
-        do  {
-            index =   (index+1)% mBands.size();
-            point = mBands.get(index);
-            if (k++ >= mBands.size()) {
-                break;
-            }
-        }
-        while (point.mask == true);
-        mCurrentBand = mBands.get(index);
-    }
-
-    public void setSelectedPoint(int pos) {
-        mCurrentBand = mBands.get(pos);
-    }
-
-    public int getSelectedPoint() {
-        return mBands.indexOf(mCurrentBand);
-    }
-
-    public boolean[] getMask() {
-        boolean[] ret = new boolean[mBands.size()];
-        int i = 0;
-        for (Band point : mBands) {
-            ret[i++] = !point.mask;
-        }
-        return ret;
-    }
-
-    public int[] getXPos1() {
-        int[] ret = new int[mBands.size()];
-        int i = 0;
-        for (Band point : mBands) {
-            ret[i++] = point.xPos1;
-        }
-        return ret;
-    }
-
-    public int[] getYPos1() {
-        int[] ret = new int[mBands.size()];
-        int i = 0;
-        for (Band point : mBands) {
-            ret[i++] = point.yPos1;
-        }
-        return ret;
-    }
-
-    public int[] getXPos2() {
-        int[] ret = new int[mBands.size()];
-        int i = 0;
-        for (Band point : mBands) {
-            ret[i++] = point.xPos2;
-        }
-        return ret;
-    }
-
-    public int[] getYPos2() {
-        int[] ret = new int[mBands.size()];
-        int i = 0;
-        for (Band point : mBands) {
-            ret[i++] = point.yPos2;
-        }
-        return ret;
-    }
-
-    public int[] getBrightness() {
-        int[] ret = new int[mBands.size()];
-        int i = 0;
-        for (Band point : mBands) {
-            ret[i++] = point.brightness;
-        }
-        return ret;
-    }
-
-    public int[] getContrast() {
-        int[] ret = new int[mBands.size()];
-        int i = 0;
-        for (Band point : mBands) {
-            ret[i++] = point.contrast;
-        }
-        return ret;
-    }
-
-    public int[] getSaturation() {
-        int[] ret = new int[mBands.size()];
-        int i = 0;
-        for (Band point : mBands) {
-            ret[i++] = point.saturation;
-        }
-        return ret;
-    }
-
-    public int getParameter(int type) {
-        switch (type){
-            case PARAM_BRIGHTNESS:
-                return mCurrentBand.brightness;
-            case PARAM_SATURATION:
-                return mCurrentBand.saturation;
-            case PARAM_CONTRAST:
-                return mCurrentBand.contrast;
-        }
-        throw new IllegalArgumentException("no such type " + type);
-    }
-
-    public int getParameterMax(int type) {
-        switch (type) {
-            case PARAM_BRIGHTNESS:
-                return 100;
-            case PARAM_SATURATION:
-                return 100;
-            case PARAM_CONTRAST:
-                return 100;
-        }
-        throw new IllegalArgumentException("no such type " + type);
-    }
-
-    public int getParameterMin(int type) {
-        switch (type) {
-            case PARAM_BRIGHTNESS:
-                return -100;
-            case PARAM_SATURATION:
-                return -100;
-            case PARAM_CONTRAST:
-                return -100;
-        }
-        throw new IllegalArgumentException("no such type " + type);
-    }
-
-    public void setParameter(int type, int value) {
-        mCurrentBand.mask = false;
-        switch (type) {
-            case PARAM_BRIGHTNESS:
-                mCurrentBand.brightness = value;
-                break;
-            case PARAM_SATURATION:
-                mCurrentBand.saturation = value;
-                break;
-            case PARAM_CONTRAST:
-                mCurrentBand.contrast = value;
-                break;
-            default:
-                throw new IllegalArgumentException("no such type " + type);
-        }
-    }
-
-    @Override
-    public void setPoint1(float x, float y) {
-        mCurrentBand.xPos1 = (int)x;
-        mCurrentBand.yPos1 = (int)y;
-    }
-
-    @Override
-    public void setPoint2(float x, float y) {
-        mCurrentBand.xPos2 = (int)x;
-        mCurrentBand.yPos2 = (int)y;
-    }
-
-    @Override
-    public float getPoint1X() {
-        return mCurrentBand.xPos1;
-    }
-
-    @Override
-    public float getPoint1Y() {
-        return mCurrentBand.yPos1;
-    }
-    @Override
-    public float getPoint2X() {
-        return mCurrentBand.xPos2;
-    }
-
-    @Override
-    public float getPoint2Y() {
-        return mCurrentBand.yPos2;
-    }
-
-    @Override
-    public void serializeRepresentation(JsonWriter writer) throws IOException {
-        writer.beginObject();
-        int len = mBands.size();
-        int count = 0;
-
-        for (int i = 0; i < len; i++) {
-            Band point = mBands.get(i);
-            if (point.mask) {
-                continue;
-            }
-            writer.name(LINE_NAME + count);
-            count++;
-            writer.beginArray();
-            writer.value(point.xPos1);
-            writer.value(point.yPos1);
-            writer.value(point.xPos2);
-            writer.value(point.yPos2);
-            writer.value(point.brightness);
-            writer.value(point.contrast);
-            writer.value(point.saturation);
-            writer.endArray();
-        }
-        writer.endObject();
-    }
-
-    @Override
-    public void deSerializeRepresentation(JsonReader sreader) throws IOException {
-        sreader.beginObject();
-        Vector<Band> points = new Vector<Band>();
-
-        while (sreader.hasNext()) {
-            String name = sreader.nextName();
-            if (name.startsWith(LINE_NAME)) {
-                int pointNo = Integer.parseInt(name.substring(LINE_NAME.length()));
-                sreader.beginArray();
-                Band p = new Band();
-                p.mask = false;
-                sreader.hasNext();
-                p.xPos1 = sreader.nextInt();
-                sreader.hasNext();
-                p.yPos1 = sreader.nextInt();
-                sreader.hasNext();
-                p.xPos2 = sreader.nextInt();
-                sreader.hasNext();
-                p.yPos2 = sreader.nextInt();
-                sreader.hasNext();
-                p.brightness = sreader.nextInt();
-                sreader.hasNext();
-                p.contrast = sreader.nextInt();
-                sreader.hasNext();
-                p.saturation = sreader.nextInt();
-                sreader.hasNext();
-                sreader.endArray();
-                points.add(p);
-
-            } else {
-                sreader.skipValue();
-            }
-        }
-        mBands = points;
-        trimVector();
-        mCurrentBand = mBands.get(0);
-        sreader.endObject();
-    }
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterVignetteRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterVignetteRepresentation.java
deleted file mode 100644
index 512594f..0000000
--- a/src/com/android/gallery3d/filtershow/filters/FilterVignetteRepresentation.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.filtershow.filters;
-
-import android.util.JsonReader;
-import android.util.JsonWriter;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.controller.BasicParameterInt;
-import com.android.gallery3d.filtershow.controller.Parameter;
-import com.android.gallery3d.filtershow.editors.EditorVignette;
-import com.android.gallery3d.filtershow.imageshow.Oval;
-
-import java.io.IOException;
-
-public class FilterVignetteRepresentation extends FilterRepresentation implements Oval {
-    private static final String LOGTAG = "FilterVignetteRepresentation";
-
-    private float mCenterX = .5f;
-    private float mCenterY = .5f;
-    private float mRadiusX = .5f;
-    private float mRadiusY = .5f;
-    public static final int MODE_VIGNETTE = 0;
-    public static final int MODE_EXPOSURE = 1;
-    public static final int MODE_SATURATION = 2;
-    public static final int MODE_CONTRAST = 3;
-    public static final int MODE_FALLOFF = 4;
-    private static int MIN = -100;
-    private static int MAX = 100;
-    private static int MAXFALLOF = 200;
-
-    private BasicParameterInt mParamVignette = new BasicParameterInt(MODE_VIGNETTE, 50, MIN, MAX);
-    private BasicParameterInt mParamExposure = new BasicParameterInt(MODE_EXPOSURE, 0, MIN, MAX);
-    private BasicParameterInt mParamSaturation = new BasicParameterInt(MODE_SATURATION, 0, MIN, MAX);
-    private BasicParameterInt mParamContrast = new BasicParameterInt(MODE_CONTRAST, 0, MIN, MAX);
-    private BasicParameterInt mParamFalloff = new BasicParameterInt(MODE_FALLOFF, 40, 0, MAXFALLOF);
-    private BasicParameterInt[] mAllParam = {
-            mParamVignette,
-            mParamExposure,
-            mParamSaturation,
-            mParamContrast,
-            mParamFalloff};
-    private int mParameterMode;
-
-    public FilterVignetteRepresentation() {
-        super("Vignette");
-        setSerializationName("VIGNETTE");
-        setShowParameterValue(true);
-        setFilterType(FilterRepresentation.TYPE_VIGNETTE);
-        setTextId(R.string.vignette);
-        setEditorId(EditorVignette.ID);
-        setName("Vignette");
-        setFilterClass(ImageFilterVignette.class);
-    }
-
-    @Override
-    public void useParametersFrom(FilterRepresentation a) {
-        super.useParametersFrom(a);
-        FilterVignetteRepresentation rep = (FilterVignetteRepresentation) a;
-        mCenterX = rep.mCenterX;
-        mCenterY = rep.mCenterY;
-        mRadiusX = rep.mRadiusX;
-        mRadiusY = rep.mRadiusY;
-        mParamVignette.setValue(rep.mParamVignette.getValue());
-        mParamExposure.setValue(rep.mParamExposure.getValue());
-        mParamSaturation.setValue(rep.mParamSaturation.getValue());
-        mParamContrast.setValue(rep.mParamContrast.getValue());
-        mParamFalloff.setValue(rep.mParamFalloff.getValue());
-    }
-
-    public int getValue(int mode) {
-        return mAllParam[mode].getValue();
-    }
-
-    public void setValue(int mode, int value) {
-        mAllParam[mode].setValue(value);
-    }
-
-    @Override
-    public String toString() {
-        return getName() + " : " + mCenterX + ", " + mCenterY + " radius: " + mRadiusX;
-    }
-
-    @Override
-    public FilterRepresentation copy() {
-        FilterVignetteRepresentation representation = new FilterVignetteRepresentation();
-        copyAllParameters(representation);
-        return representation;
-    }
-
-    @Override
-    protected void copyAllParameters(FilterRepresentation representation) {
-        super.copyAllParameters(representation);
-        representation.useParametersFrom(this);
-    }
-
-    @Override
-    public void setCenter(float centerX, float centerY) {
-        mCenterX = centerX;
-        mCenterY = centerY;
-    }
-
-    @Override
-    public float getCenterX() {
-        return mCenterX;
-    }
-
-    @Override
-    public float getCenterY() {
-        return mCenterY;
-    }
-
-    @Override
-    public void setRadius(float radiusX, float radiusY) {
-        mRadiusX = radiusX;
-        mRadiusY = radiusY;
-    }
-
-    @Override
-    public void setRadiusX(float radiusX) {
-        mRadiusX = radiusX;
-    }
-
-    @Override
-    public void setRadiusY(float radiusY) {
-        mRadiusY = radiusY;
-    }
-
-    @Override
-    public float getRadiusX() {
-        return mRadiusX;
-    }
-
-    @Override
-    public float getRadiusY() {
-        return mRadiusY;
-    }
-
-    public boolean isCenterSet() {
-        return !Float.isNaN(mCenterX);
-    }
-
-    @Override
-    public boolean isNil() {
-        return false;
-    }
-
-    @Override
-    public boolean equals(FilterRepresentation representation) {
-        if (!super.equals(representation)) {
-            return false;
-        }
-        if (representation instanceof FilterVignetteRepresentation) {
-            FilterVignetteRepresentation rep = (FilterVignetteRepresentation) representation;
-            for (int i = 0; i < mAllParam.length; i++) {
-                if (mAllParam[i].getValue() != rep.mAllParam[i].getValue())
-                    return false;
-            }
-            if (rep.getCenterX() == getCenterX()
-                    && rep.getCenterY() == getCenterY()
-                    && rep.getRadiusX() == getRadiusX()
-                    && rep.getRadiusY() == getRadiusY()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private static final String ELLIPSE = "ellipse";
-    private static final String ARGS = "adjust";
-    @Override
-    public void serializeRepresentation(JsonWriter writer) throws IOException {
-        writer.beginObject();
-        writer.name(ELLIPSE);
-        writer.beginArray();
-        writer.value(mCenterX);
-        writer.value(mCenterY);
-        writer.value(mRadiusX);
-        writer.value(mRadiusY);
-        writer.endArray();
-
-        writer.name(ARGS);
-        writer.beginArray();
-        writer.value(mParamVignette.getValue());
-        writer.value(mParamExposure.getValue());
-        writer.value(mParamSaturation.getValue());
-        writer.value(mParamContrast.getValue());
-        writer.value(mParamFalloff.getValue());
-        writer.endArray();
-        writer.endObject();
-    }
-
-
-    @Override
-    public void deSerializeRepresentation(JsonReader sreader) throws IOException {
-        sreader.beginObject();
-
-        while (sreader.hasNext()) {
-            String name = sreader.nextName();
-            if (name.startsWith(ELLIPSE)) {
-                sreader.beginArray();
-                sreader.hasNext();
-                mCenterX = (float) sreader.nextDouble();
-                sreader.hasNext();
-                mCenterY = (float) sreader.nextDouble();
-                sreader.hasNext();
-                mRadiusX = (float) sreader.nextDouble();
-                sreader.hasNext();
-                mRadiusY = (float) sreader.nextDouble();
-                sreader.hasNext();
-                sreader.endArray();
-            } else if (name.startsWith(ARGS)) {
-                sreader.beginArray();
-                sreader.hasNext();
-                mParamVignette.setValue(sreader.nextInt());
-                sreader.hasNext();
-                mParamExposure.setValue(sreader.nextInt());
-                sreader.hasNext();
-                mParamSaturation.setValue(sreader.nextInt());
-                sreader.hasNext();
-                mParamContrast.setValue(sreader.nextInt());
-                sreader.hasNext();
-                mParamFalloff.setValue(sreader.nextInt());
-                sreader.hasNext();
-                sreader.endArray();
-            } else  {
-                sreader.skipValue();
-            }
-        }
-        sreader.endObject();
-    }
-    public int getParameterMode() {
-        return mParameterMode;
-    }
-
-    public void setParameterMode(int parameterMode) {
-        mParameterMode = parameterMode;
-    }
-
-    public int getCurrentParameter() {
-        return getValue(mParameterMode);
-    }
-
-    public void setCurrentParameter(int value) {
-        setValue(mParameterMode, value);
-    }
-
-    public BasicParameterInt getFilterParameter(int index) {
-        return mAllParam[index];
-    }
-
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterChanSat.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterChanSat.java
deleted file mode 100644
index 8482eac..0000000
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterChanSat.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-
-package com.android.gallery3d.filtershow.filters;
-
-import android.graphics.Bitmap;
-import android.graphics.Matrix;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.RenderScript;
-import android.renderscript.Script.LaunchOptions;
-import android.renderscript.Type;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.pipeline.FilterEnvironment;
-
-public class ImageFilterChanSat extends ImageFilterRS {
-    private static final String LOGTAG = "ImageFilterChanSat";
-    private ScriptC_saturation mScript;
-    private Bitmap mSourceBitmap;
-
-    private static final int STRIP_SIZE = 64;
-
-    FilterChanSatRepresentation mParameters = new FilterChanSatRepresentation();
-    private Bitmap mOverlayBitmap;
-
-    public ImageFilterChanSat() {
-        mName = "ChannelSat";
-    }
-
-    @Override
-    public FilterRepresentation getDefaultRepresentation() {
-        return new FilterChanSatRepresentation();
-    }
-
-    @Override
-    public void useRepresentation(FilterRepresentation representation) {
-        mParameters = (FilterChanSatRepresentation) representation;
-    }
-
-    @Override
-    protected void resetAllocations() {
-
-    }
-
-    @Override
-    public void resetScripts() {
-        if (mScript != null) {
-            mScript.destroy();
-            mScript = null;
-        }
-    }
-    @Override
-    protected void createFilter(android.content.res.Resources res, float scaleFactor,
-                                int quality) {
-        createFilter(res, scaleFactor, quality, getInPixelsAllocation());
-    }
-
-    @Override
-    protected void createFilter(android.content.res.Resources res, float scaleFactor,
-                                int quality, Allocation in) {
-        RenderScript rsCtx = getRenderScriptContext();
-
-        Type.Builder tb_float = new Type.Builder(rsCtx, Element.F32_4(rsCtx));
-        tb_float.setX(in.getType().getX());
-        tb_float.setY(in.getType().getY());
-        mScript = new ScriptC_saturation(rsCtx);
-    }
-
-
-    private Bitmap getSourceBitmap() {
-        assert (mSourceBitmap != null);
-        return mSourceBitmap;
-    }
-
-    @Override
-    public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) {
-        if (SIMPLE_ICONS && FilterEnvironment.QUALITY_ICON == quality) {
-            return bitmap;
-        }
-
-        mSourceBitmap = bitmap;
-        Bitmap ret = super.apply(bitmap, scaleFactor, quality);
-        mSourceBitmap = null;
-
-        return ret;
-    }
-
-    @Override
-    protected void bindScriptValues() {
-        int width = getInPixelsAllocation().getType().getX();
-        int height = getInPixelsAllocation().getType().getY();
-    }
-
-
-
-    @Override
-    protected void runFilter() {
-        int []sat = new int[7];
-        for(int i = 0;i<sat.length ;i ++){
-          sat[i] =   mParameters.getValue(i);
-        }
-
-
-        int width = getInPixelsAllocation().getType().getX();
-        int height = getInPixelsAllocation().getType().getY();
-        Matrix m = getOriginalToScreenMatrix(width, height);
-
-
-        mScript.set_saturation(sat);
-
-        mScript.invoke_setupGradParams();
-        runSelectiveAdjust(
-                getInPixelsAllocation(), getOutPixelsAllocation());
-
-    }
-
-    private void runSelectiveAdjust(Allocation in, Allocation out) {
-        int width = in.getType().getX();
-        int height = in.getType().getY();
-
-        LaunchOptions options = new LaunchOptions();
-        int ty;
-        options.setX(0, width);
-
-        for (ty = 0; ty < height; ty += STRIP_SIZE) {
-            int endy = ty + STRIP_SIZE;
-            if (endy > height) {
-                endy = height;
-            }
-            options.setY(ty, endy);
-            mScript.forEach_selectiveAdjust(in, out, options);
-            if (checkStop()) {
-                return;
-            }
-        }
-    }
-
-    private boolean checkStop() {
-        RenderScript rsCtx = getRenderScriptContext();
-        rsCtx.finish();
-        if (getEnvironment().needsStop()) {
-            return true;
-        }
-        return false;
-    }
-}
-
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterGrad.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterGrad.java
deleted file mode 100644
index 4d5a79c..0000000
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterGrad.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-
-package com.android.gallery3d.filtershow.filters;
-
-import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.graphics.Matrix;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.pipeline.FilterEnvironment;
-
-import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.graphics.Matrix;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.RenderScript;
-import android.renderscript.Script.LaunchOptions;
-import android.renderscript.Type;
-import android.util.Log;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.pipeline.FilterEnvironment;
-
-public class ImageFilterGrad extends ImageFilterRS {
-    private static final String LOGTAG = "ImageFilterGrad";
-    private ScriptC_grad mScript;
-    private Bitmap mSourceBitmap;
-    private static final int RADIUS_SCALE_FACTOR = 160;
-
-    private static final int STRIP_SIZE = 64;
-
-    FilterGradRepresentation mParameters = new FilterGradRepresentation();
-    private Bitmap mOverlayBitmap;
-
-    public ImageFilterGrad() {
-        mName = "grad";
-    }
-
-    @Override
-    public FilterRepresentation getDefaultRepresentation() {
-        return new FilterGradRepresentation();
-    }
-
-    @Override
-    public void useRepresentation(FilterRepresentation representation) {
-        mParameters = (FilterGradRepresentation) representation;
-    }
-
-    @Override
-    protected void resetAllocations() {
-
-    }
-
-    @Override
-    public void resetScripts() {
-        if (mScript != null) {
-            mScript.destroy();
-            mScript = null;
-        }
-    }
-    @Override
-    protected void createFilter(android.content.res.Resources res, float scaleFactor,
-                                int quality) {
-        createFilter(res, scaleFactor, quality, getInPixelsAllocation());
-    }
-
-    @Override
-    protected void createFilter(android.content.res.Resources res, float scaleFactor,
-                                int quality, Allocation in) {
-        RenderScript rsCtx = getRenderScriptContext();
-
-        Type.Builder tb_float = new Type.Builder(rsCtx, Element.F32_4(rsCtx));
-        tb_float.setX(in.getType().getX());
-        tb_float.setY(in.getType().getY());
-        mScript = new ScriptC_grad(rsCtx);
-    }
-
-
-    private Bitmap getSourceBitmap() {
-        assert (mSourceBitmap != null);
-        return mSourceBitmap;
-    }
-
-    @Override
-    public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) {
-        if (SIMPLE_ICONS && FilterEnvironment.QUALITY_ICON == quality) {
-            return bitmap;
-        }
-
-        mSourceBitmap = bitmap;
-        Bitmap ret = super.apply(bitmap, scaleFactor, quality);
-        mSourceBitmap = null;
-
-        return ret;
-    }
-
-    @Override
-    protected void bindScriptValues() {
-        int width = getInPixelsAllocation().getType().getX();
-        int height = getInPixelsAllocation().getType().getY();
-        mScript.set_inputWidth(width);
-        mScript.set_inputHeight(height);
-    }
-
-    @Override
-    protected void runFilter() {
-        int[] x1 = mParameters.getXPos1();
-        int[] y1 = mParameters.getYPos1();
-        int[] x2 = mParameters.getXPos2();
-        int[] y2 = mParameters.getYPos2();
-
-        int width = getInPixelsAllocation().getType().getX();
-        int height = getInPixelsAllocation().getType().getY();
-        Matrix m = getOriginalToScreenMatrix(width, height);
-        float[] coord = new float[2];
-        for (int i = 0; i < x1.length; i++) {
-            coord[0] = x1[i];
-            coord[1] = y1[i];
-            m.mapPoints(coord);
-            x1[i] = (int) coord[0];
-            y1[i] = (int) coord[1];
-            coord[0] = x2[i];
-            coord[1] = y2[i];
-            m.mapPoints(coord);
-            x2[i] = (int) coord[0];
-            y2[i] = (int) coord[1];
-        }
-
-        mScript.set_mask(mParameters.getMask());
-        mScript.set_xPos1(x1);
-        mScript.set_yPos1(y1);
-        mScript.set_xPos2(x2);
-        mScript.set_yPos2(y2);
-
-        mScript.set_brightness(mParameters.getBrightness());
-        mScript.set_contrast(mParameters.getContrast());
-        mScript.set_saturation(mParameters.getSaturation());
-
-        mScript.invoke_setupGradParams();
-        runSelectiveAdjust(
-                getInPixelsAllocation(), getOutPixelsAllocation());
-
-    }
-
-    private void runSelectiveAdjust(Allocation in, Allocation out) {
-        int width = in.getType().getX();
-        int height = in.getType().getY();
-
-        LaunchOptions options = new LaunchOptions();
-        int ty;
-        options.setX(0, width);
-
-        for (ty = 0; ty < height; ty += STRIP_SIZE) {
-            int endy = ty + STRIP_SIZE;
-            if (endy > height) {
-                endy = height;
-            }
-            options.setY(ty, endy);
-            mScript.forEach_selectiveAdjust(in, out, options);
-            if (checkStop()) {
-                return;
-            }
-        }
-    }
-
-    private boolean checkStop() {
-        RenderScript rsCtx = getRenderScriptContext();
-        rsCtx.finish();
-        if (getEnvironment().needsStop()) {
-            return true;
-        }
-        return false;
-    }
-}
-
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
deleted file mode 100644
index 3c54456..0000000
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.filtershow.filters;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.renderscript.*;
-import android.util.Log;
-import android.content.res.Resources;
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.pipeline.PipelineInterface;
-
-public abstract class ImageFilterRS extends ImageFilter {
-    private static final String LOGTAG = "ImageFilterRS";
-    private boolean DEBUG = false;
-    private int mLastInputWidth = 0;
-    private int mLastInputHeight = 0;
-    private long mLastTimeCalled;
-
-    public static boolean PERF_LOGGING = false;
-
-    private static ScriptC_grey mGreyConvert = null;
-    private static RenderScript mRScache = null;
-
-    private volatile boolean mResourcesLoaded = false;
-
-    protected abstract void createFilter(android.content.res.Resources res,
-            float scaleFactor, int quality);
-
-    protected void createFilter(android.content.res.Resources res,
-    float scaleFactor, int quality, Allocation in) {}
-    protected void bindScriptValues(Allocation in) {}
-
-    protected abstract void runFilter();
-
-    protected void update(Bitmap bitmap) {
-        getOutPixelsAllocation().copyTo(bitmap);
-    }
-
-    protected RenderScript getRenderScriptContext() {
-        PipelineInterface pipeline = getEnvironment().getPipeline();
-        return pipeline.getRSContext();
-    }
-
-    protected Allocation getInPixelsAllocation() {
-        PipelineInterface pipeline = getEnvironment().getPipeline();
-        return pipeline.getInPixelsAllocation();
-    }
-
-    protected Allocation getOutPixelsAllocation() {
-        PipelineInterface pipeline = getEnvironment().getPipeline();
-        return pipeline.getOutPixelsAllocation();
-    }
-
-    @Override
-    public void apply(Allocation in, Allocation out) {
-        long startOverAll = System.nanoTime();
-        if (PERF_LOGGING) {
-            long delay = (startOverAll - mLastTimeCalled) / 1000;
-            String msg = String.format("%s; image size %dx%d; ", getName(),
-                    in.getType().getX(), in.getType().getY());
-            msg += String.format("called after %.2f ms (%.2f FPS); ",
-                    delay / 1000.f, 1000000.f / delay);
-            Log.i(LOGTAG, msg);
-        }
-        mLastTimeCalled = startOverAll;
-        long startFilter = 0;
-        long endFilter = 0;
-        if (!mResourcesLoaded) {
-            PipelineInterface pipeline = getEnvironment().getPipeline();
-            createFilter(pipeline.getResources(), getEnvironment().getScaleFactor(),
-                    getEnvironment().getQuality(), in);
-            mResourcesLoaded = true;
-        }
-        startFilter = System.nanoTime();
-        bindScriptValues(in);
-        run(in, out);
-        if (PERF_LOGGING) {
-            getRenderScriptContext().finish();
-            endFilter = System.nanoTime();
-            long endOverAll = System.nanoTime();
-            String msg = String.format("%s; image size %dx%d; ", getName(),
-                    in.getType().getX(), in.getType().getY());
-            long timeOverAll = (endOverAll - startOverAll) / 1000;
-            long timeFilter = (endFilter - startFilter) / 1000;
-            msg += String.format("over all %.2f ms (%.2f FPS); ",
-                    timeOverAll / 1000.f, 1000000.f / timeOverAll);
-            msg += String.format("run filter %.2f ms (%.2f FPS)",
-                    timeFilter / 1000.f, 1000000.f / timeFilter);
-            Log.i(LOGTAG, msg);
-        }
-    }
-
-    protected void run(Allocation in, Allocation out) {}
-
-    @Override
-    public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) {
-        if (bitmap == null || bitmap.getWidth() == 0 || bitmap.getHeight() == 0) {
-            return bitmap;
-        }
-        try {
-            PipelineInterface pipeline = getEnvironment().getPipeline();
-            if (DEBUG) {
-                Log.v(LOGTAG, "apply filter " + getName() + " in pipeline " + pipeline.getName());
-            }
-            Resources rsc = pipeline.getResources();
-            boolean sizeChanged = false;
-            if (getInPixelsAllocation() != null
-                    && ((getInPixelsAllocation().getType().getX() != mLastInputWidth)
-                    || (getInPixelsAllocation().getType().getY() != mLastInputHeight))) {
-                sizeChanged = true;
-            }
-            if (pipeline.prepareRenderscriptAllocations(bitmap)
-                    || !isResourcesLoaded() || sizeChanged) {
-                freeResources();
-                createFilter(rsc, scaleFactor, quality);
-                setResourcesLoaded(true);
-                mLastInputWidth = getInPixelsAllocation().getType().getX();
-                mLastInputHeight = getInPixelsAllocation().getType().getY();
-            }
-            bindScriptValues();
-            runFilter();
-            update(bitmap);
-            if (DEBUG) {
-                Log.v(LOGTAG, "DONE apply filter " + getName() + " in pipeline " + pipeline.getName());
-            }
-        } catch (android.renderscript.RSIllegalArgumentException e) {
-            Log.e(LOGTAG, "Illegal argument? " + e);
-        } catch (android.renderscript.RSRuntimeException e) {
-            Log.e(LOGTAG, "RS runtime exception ? " + e);
-        } catch (java.lang.OutOfMemoryError e) {
-            // Many of the renderscript filters allocated large (>16Mb resources) in order to apply.
-            System.gc();
-            displayLowMemoryToast();
-            Log.e(LOGTAG, "not enough memory for filter " + getName(), e);
-        }
-        return bitmap;
-    }
-
-    protected static Allocation convertBitmap(RenderScript RS, Bitmap bitmap) {
-        return Allocation.createFromBitmap(RS, bitmap,
-                Allocation.MipmapControl.MIPMAP_NONE,
-                Allocation.USAGE_SCRIPT | Allocation.USAGE_GRAPHICS_TEXTURE);
-    }
-
-    private static Allocation convertRGBAtoA(RenderScript RS, Bitmap bitmap) {
-        if (RS != mRScache || mGreyConvert == null) {
-            mGreyConvert = new ScriptC_grey(RS);
-            mRScache = RS;
-        }
-
-        Type.Builder tb_a8 = new Type.Builder(RS, Element.A_8(RS));
-
-        Allocation bitmapTemp = convertBitmap(RS, bitmap);
-        if (bitmapTemp.getType().getElement().isCompatible(Element.A_8(RS))) {
-            return bitmapTemp;
-        }
-
-        tb_a8.setX(bitmapTemp.getType().getX());
-        tb_a8.setY(bitmapTemp.getType().getY());
-        Allocation bitmapAlloc = Allocation.createTyped(RS, tb_a8.create(),
-                                                        Allocation.MipmapControl.MIPMAP_NONE,
-                                                        Allocation.USAGE_SCRIPT | Allocation.USAGE_GRAPHICS_TEXTURE);
-        mGreyConvert.forEach_RGBAtoA(bitmapTemp, bitmapAlloc);
-        bitmapTemp.destroy();
-        return bitmapAlloc;
-    }
-
-    public Allocation loadScaledResourceAlpha(int resource, int inSampleSize) {
-        Resources res = getEnvironment().getPipeline().getResources();
-        final BitmapFactory.Options options = new BitmapFactory.Options();
-        options.inSampleSize      = inSampleSize;
-        Bitmap bitmap = BitmapFactory.decodeResource(
-                res,
-                resource, options);
-        Allocation ret = convertRGBAtoA(getRenderScriptContext(), bitmap);
-        bitmap.recycle();
-        return ret;
-    }
-
-    public Allocation loadScaledResourceAlpha(int resource, int w, int h, int inSampleSize) {
-        Resources res = getEnvironment().getPipeline().getResources();
-        final BitmapFactory.Options options = new BitmapFactory.Options();
-        options.inSampleSize      = inSampleSize;
-        Bitmap bitmap = BitmapFactory.decodeResource(
-                res,
-                resource, options);
-        Bitmap resizeBitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
-        Allocation ret = convertRGBAtoA(getRenderScriptContext(), resizeBitmap);
-        resizeBitmap.recycle();
-        bitmap.recycle();
-        return ret;
-    }
-
-    public Allocation loadResourceAlpha(int resource) {
-        return loadScaledResourceAlpha(resource, 1);
-    }
-
-    public Allocation loadResource(int resource) {
-        Resources res = getEnvironment().getPipeline().getResources();
-        final BitmapFactory.Options options = new BitmapFactory.Options();
-        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
-        Bitmap bitmap = BitmapFactory.decodeResource(
-                res,
-                resource, options);
-        Allocation ret = convertBitmap(getRenderScriptContext(), bitmap);
-        bitmap.recycle();
-        return ret;
-    }
-
-    private boolean isResourcesLoaded() {
-        return mResourcesLoaded;
-    }
-
-    private void setResourcesLoaded(boolean resourcesLoaded) {
-        mResourcesLoaded = resourcesLoaded;
-    }
-
-    /**
-     *  Bitmaps and RS Allocations should be cleared here
-     */
-    abstract protected void resetAllocations();
-
-    /**
-     * RS Script objects (and all other RS objects) should be cleared here
-     */
-    public abstract void resetScripts();
-
-    /**
-     * Scripts values should be bound here
-     */
-    abstract protected void bindScriptValues();
-
-    public void freeResources() {
-        if (!isResourcesLoaded()) {
-            return;
-        }
-        resetAllocations();
-        mLastInputWidth = 0;
-        mLastInputHeight = 0;
-        setResourcesLoaded(false);
-    }
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java
deleted file mode 100644
index bfec89f..0000000
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.filtershow.filters;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.editors.BasicEditor;
-
-public class ImageFilterSharpen extends ImageFilterRS {
-    private static final String SERIALIZATION_NAME = "SHARPEN";
-    private static final String LOGTAG = "ImageFilterSharpen";
-    private ScriptC_convolve3x3 mScript;
-
-    private FilterBasicRepresentation mParameters;
-
-    public ImageFilterSharpen() {
-        mName = "Sharpen";
-    }
-
-    public FilterRepresentation getDefaultRepresentation() {
-        FilterRepresentation representation = new FilterBasicRepresentation("Sharpen", 0, 0, 100);
-        representation.setSerializationName(SERIALIZATION_NAME);
-        representation.setShowParameterValue(true);
-        representation.setFilterClass(ImageFilterSharpen.class);
-        representation.setTextId(R.string.sharpness);
-        representation.setOverlayId(R.drawable.filtershow_button_colors_sharpen);
-        representation.setEditorId(BasicEditor.ID);
-        representation.setSupportsPartialRendering(true);
-        return representation;
-    }
-
-    public void useRepresentation(FilterRepresentation representation) {
-        FilterBasicRepresentation parameters = (FilterBasicRepresentation) representation;
-        mParameters = parameters;
-    }
-
-    @Override
-    protected void resetAllocations() {
-        // nothing to do
-    }
-
-    @Override
-    public void resetScripts() {
-        if (mScript != null) {
-            mScript.destroy();
-            mScript = null;
-        }
-    }
-
-    @Override
-    protected void createFilter(android.content.res.Resources res, float scaleFactor,
-            int quality) {
-        if (mScript == null) {
-            mScript = new ScriptC_convolve3x3(getRenderScriptContext());
-        }
-    }
-
-    private void computeKernel() {
-        float scaleFactor = getEnvironment().getScaleFactor();
-        float p1 = mParameters.getValue() * scaleFactor;
-        float value = p1 / 100.0f;
-        float f[] = new float[9];
-        float p = value;
-        f[0] = -p;
-        f[1] = -p;
-        f[2] = -p;
-        f[3] = -p;
-        f[4] = 8 * p + 1;
-        f[5] = -p;
-        f[6] = -p;
-        f[7] = -p;
-        f[8] = -p;
-        mScript.set_gCoeffs(f);
-    }
-
-    @Override
-    protected void bindScriptValues() {
-        int w = getInPixelsAllocation().getType().getX();
-        int h = getInPixelsAllocation().getType().getY();
-        mScript.set_gWidth(w);
-        mScript.set_gHeight(h);
-    }
-
-    @Override
-    protected void runFilter() {
-        if (mParameters == null) {
-            return;
-        }
-        computeKernel();
-        mScript.set_gIn(getInPixelsAllocation());
-        mScript.bind_gPixels(getInPixelsAllocation());
-        mScript.forEach_root(getInPixelsAllocation(), getOutPixelsAllocation());
-    }
-
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java
deleted file mode 100644
index 0d0dd3b..0000000
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterVignette.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.filtershow.filters;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Rect;
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.imageshow.MasterImage;
-import com.android.gallery3d.filtershow.pipeline.FilterEnvironment;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.RenderScript;
-import android.renderscript.Script.LaunchOptions;
-import android.renderscript.Type;
-import android.util.Log;
-
-public class ImageFilterVignette extends ImageFilterRS {
-    private static final String LOGTAG = "ImageFilterVignette";
-    private Bitmap mOverlayBitmap;
-    private ScriptC_vignette mScript;
-    FilterVignetteRepresentation mParameters;
-    public static final int MODE_VIGNETTE = FilterVignetteRepresentation.MODE_VIGNETTE;
-    public static final int MODE_EXPOSURE = FilterVignetteRepresentation.MODE_EXPOSURE;
-    public static final int MODE_SATURATION = FilterVignetteRepresentation.MODE_SATURATION;
-    public static final int MODE_CONTRAST = FilterVignetteRepresentation.MODE_CONTRAST;
-    public static final int MODE_FALLOFF = FilterVignetteRepresentation.MODE_FALLOFF;
-
-    public ImageFilterVignette() {
-        mName = "Vignette";
-    }
-
-    @Override
-    public FilterRepresentation getDefaultRepresentation() {
-        FilterVignetteRepresentation representation = new FilterVignetteRepresentation();
-        return representation;
-    }
-
-    @Override
-    public void useRepresentation(FilterRepresentation representation) {
-        mParameters = (FilterVignetteRepresentation) representation;
-    }
-
-    native protected void nativeApplyFilter(
-            Bitmap bitmap, int w, int h, int cx, int cy, float radx, float rady,
-            float strength, float finalValue);
-
-    private float calcRadius(float cx, float cy, int w, int h) {
-        float d = cx;
-        if (d < (w - cx)) {
-            d = w - cx;
-        }
-        if (d < cy) {
-            d = cy;
-        }
-        if (d < (h - cy)) {
-            d = h - cy;
-        }
-        return d * d * 2.0f;
-    }
-
-    @Override
-    protected void createFilter(Resources res, float scaleFactor, int quality) {
-        RenderScript rsCtx = getRenderScriptContext();
-
-        mScript = new ScriptC_vignette(rsCtx);
-    }
-
-    @Override
-    protected void runFilter() {
-
-        int w = getInPixelsAllocation().getType().getX();
-        int h = getInPixelsAllocation().getType().getY();
-
-        float cx = w / 2;
-        float cy = h / 2;
-        float r = calcRadius(cx, cy, w, h);
-        float rx = r;
-        float ry = r;
-
-        float[]c = new float[2];
-        if (mParameters.isCenterSet()) {
-            Matrix m = getOriginalToScreenMatrix(w, h);
-            Rect bounds = MasterImage.getImage().getOriginalBounds();
-            c[0] = bounds.right * mParameters.getCenterX();
-            c[1] = bounds.bottom * mParameters.getCenterY();
-            m.mapPoints(c);
-            cx = c[0];
-            cy = c[1];
-            c[0] = bounds.right * mParameters.getRadiusX();
-            c[1] = bounds.bottom * mParameters.getRadiusY();
-            m.mapVectors(c);
-            rx = c[0];
-            ry = c[1];
-        }
-
-        mScript.set_inputWidth(w);
-        mScript.set_inputHeight(h);
-        int v = mParameters.getValue(MODE_VIGNETTE);
-        mScript.set_finalSubtract((v < 0) ? v : 0);
-        mScript.set_finalBright((v > 0) ? -v : 0);
-        mScript.set_finalSaturation(mParameters.getValue(MODE_SATURATION));
-        mScript.set_finalContrast(mParameters.getValue(MODE_CONTRAST));
-        mScript.set_centerx(cx);
-        mScript.set_centery(cy);
-        mScript.set_radiusx(rx);
-        mScript.set_radiusy(ry);
-        mScript.set_strength(mParameters.getValue(MODE_FALLOFF)/10.f);
-        mScript.invoke_setupVignetteParams();
-        mScript.forEach_vignette(getInPixelsAllocation(), getOutPixelsAllocation());
-    }
-
-    @Override
-    public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) {
-        if (SIMPLE_ICONS && FilterEnvironment.QUALITY_ICON == quality) {
-            if (mOverlayBitmap == null) {
-                Resources res = getEnvironment().getPipeline().getResources();
-                mOverlayBitmap = IconUtilities.getFXBitmap(res,
-                        R.drawable.filtershow_icon_vignette);
-            }
-
-            Canvas c = new Canvas(bitmap);
-            int dim = Math.max(bitmap.getWidth(), bitmap.getHeight());
-            Rect r = new Rect(0, 0, dim, dim);
-            c.drawBitmap(mOverlayBitmap, null, r, null);
-            return bitmap;
-        }
-        Bitmap ret = super.apply(bitmap, scaleFactor, quality);
-        return bitmap;
-    }
-
-
-    @Override
-    protected void resetAllocations() {
-
-    }
-
-    @Override
-    public void resetScripts() {
-
-    }
-
-    @Override
-    protected void bindScriptValues() {
-        int width = getInPixelsAllocation().getType().getX();
-        int height = getInPixelsAllocation().getType().getY();
-        mScript.set_inputWidth(width);
-        mScript.set_inputHeight(height);
-    }
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/convolve3x3.rs b/src/com/android/gallery3d/filtershow/filters/convolve3x3.rs
deleted file mode 100644
index 2acffab..0000000
--- a/src/com/android/gallery3d/filtershow/filters/convolve3x3.rs
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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.
- */
-
-#pragma version(1)
-#pragma rs java_package_name(com.android.gallery3d.filtershow.filters)
-#pragma rs_fp_relaxed
-
-int32_t gWidth;
-int32_t gHeight;
-const uchar4 *gPixels;
-rs_allocation gIn;
-
-float gCoeffs[9];
-
-void root(const uchar4 *in, uchar4 *out, const void *usrData, uint32_t x, uint32_t y) {
-    uint32_t x1 = min((int32_t)x+1, gWidth-1);
-    uint32_t x2 = max((int32_t)x-1, 0);
-    uint32_t y1 = min((int32_t)y+1, gHeight-1);
-    uint32_t y2 = max((int32_t)y-1, 0);
-
-    float4 p00 = rsUnpackColor8888(gPixels[x1 + gWidth * y1]);
-    float4 p01 = rsUnpackColor8888(gPixels[x + gWidth * y1]);
-    float4 p02 = rsUnpackColor8888(gPixels[x2 + gWidth * y1]);
-    float4 p10 = rsUnpackColor8888(gPixels[x1 + gWidth * y]);
-    float4 p11 = rsUnpackColor8888(gPixels[x + gWidth * y]);
-    float4 p12 = rsUnpackColor8888(gPixels[x2 + gWidth * y]);
-    float4 p20 = rsUnpackColor8888(gPixels[x1 + gWidth * y2]);
-    float4 p21 = rsUnpackColor8888(gPixels[x + gWidth * y2]);
-    float4 p22 = rsUnpackColor8888(gPixels[x2 + gWidth * y2]);
-
-    p00 *= gCoeffs[0];
-    p01 *= gCoeffs[1];
-    p02 *= gCoeffs[2];
-    p10 *= gCoeffs[3];
-    p11 *= gCoeffs[4];
-    p12 *= gCoeffs[5];
-    p20 *= gCoeffs[6];
-    p21 *= gCoeffs[7];
-    p22 *= gCoeffs[8];
-
-    p00 += p01;
-    p02 += p10;
-    p11 += p12;
-    p20 += p21;
-
-    p22 += p00;
-    p02 += p11;
-
-    p20 += p22;
-    p20 += p02;
-
-    p20 = clamp(p20, 0.f, 1.f);
-    *out = rsPackColorTo8888(p20.r, p20.g, p20.b);
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/grad.rs b/src/com/android/gallery3d/filtershow/filters/grad.rs
deleted file mode 100644
index ddbafd3..0000000
--- a/src/com/android/gallery3d/filtershow/filters/grad.rs
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2012 Unknown
- *
- * 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.
- */
-
-#pragma version(1)
-#pragma rs java_package_name(com.android.gallery3d.filtershow.filters)
-
-#define MAX_POINTS 16
-
-uint32_t inputWidth;
-uint32_t inputHeight;
-static const float Rf = 0.2999f;
-static const float Gf = 0.587f;
-static const float Bf = 0.114f;
-//static const float size_scale = 0.01f;
-
-typedef struct {
-    rs_matrix3x3 colorMatrix;
-    float rgbOff;
-    float dx;
-    float dy;
-    float off;
-} UPointData;
-int mNumberOfLines;
-// input data
-bool mask[MAX_POINTS];
-int xPos1[MAX_POINTS];
-int yPos1[MAX_POINTS];
-int xPos2[MAX_POINTS];
-int yPos2[MAX_POINTS];
-int size[MAX_POINTS];
-int brightness[MAX_POINTS];
-int contrast[MAX_POINTS];
-int saturation[MAX_POINTS];
-
-// generated data
-static UPointData grads[MAX_POINTS];
-
-void setupGradParams() {
-    int k = 0;
-    for (int i = 0; i < MAX_POINTS; i++) {
-      if (!mask[i]) {
-         continue;
-      }
-      float x1 = xPos1[i];
-      float y1 = yPos1[i];
-      float x2 = xPos2[i];
-      float y2 = yPos2[i];
-
-      float denom = (y2 * y2 - 2 * y1 * y2 + x2 * x2 - 2 * x1 * x2 + y1 * y1 + x1 * x1);
-      if (denom == 0) {
-         continue;
-      }
-      grads[k].dy = (y1 - y2) / denom;
-      grads[k].dx = (x1 - x2) / denom;
-      grads[k].off = (y2 * y2 + x2 * x2 - x1 * x2 - y1 * y2) / denom;
-
-      float S = 1+saturation[i]/100.f;
-      float MS = 1-S;
-      float Rt = Rf * MS;
-      float Gt = Gf * MS;
-      float Bt = Bf * MS;
-
-      float b = 1+brightness[i]/100.f;
-      float c = 1+contrast[i]/100.f;
-      b *= c;
-      grads[k].rgbOff = .5f - c/2.f;
-      rsMatrixSet(&grads[i].colorMatrix, 0, 0, b * (Rt + S));
-      rsMatrixSet(&grads[i].colorMatrix, 1, 0, b * Gt);
-      rsMatrixSet(&grads[i].colorMatrix, 2, 0, b * Bt);
-      rsMatrixSet(&grads[i].colorMatrix, 0, 1, b * Rt);
-      rsMatrixSet(&grads[i].colorMatrix, 1, 1, b * (Gt + S));
-      rsMatrixSet(&grads[i].colorMatrix, 2, 1, b * Bt);
-      rsMatrixSet(&grads[i].colorMatrix, 0, 2, b * Rt);
-      rsMatrixSet(&grads[i].colorMatrix, 1, 2, b * Gt);
-      rsMatrixSet(&grads[i].colorMatrix, 2, 2, b * (Bt + S));
-
-      k++;
-    }
-    mNumberOfLines = k;
-}
-
-void init() {
-
-}
-
-uchar4 __attribute__((kernel)) selectiveAdjust(const uchar4 in, uint32_t x,
-    uint32_t y) {
-    float4 pixel = rsUnpackColor8888(in);
-
-    float4 wsum = pixel;
-    wsum.a = 0.f;
-    for (int i = 0; i < mNumberOfLines; i++) {
-        UPointData* grad = &grads[i];
-        float t = clamp(x*grad->dx+y*grad->dy+grad->off,0.f,1.0f);
-        wsum.xyz = wsum.xyz*(1-t)+
-            t*(rsMatrixMultiply(&grad->colorMatrix ,wsum.xyz)+grad->rgbOff);
-
-    }
-
-    pixel.rgb = wsum.rgb;
-    pixel.a = 1.0f;
-
-    uchar4 out = rsPackColorTo8888(clamp(pixel, 0.f, 1.0f));
-    return out;
-}
-
-
-
diff --git a/src/com/android/gallery3d/filtershow/filters/grey.rs b/src/com/android/gallery3d/filtershow/filters/grey.rs
deleted file mode 100644
index e018803..0000000
--- a/src/com/android/gallery3d/filtershow/filters/grey.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-  /*
- * Copyright (C) 2013 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.
- */
-
-#pragma version(1)
-#pragma rs java_package_name(com.android.gallery3d.filtershow.filters)
-
-uchar __attribute__((kernel)) RGBAtoA(uchar4 in) {
-    return in.r;
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/saturation.rs b/src/com/android/gallery3d/filtershow/filters/saturation.rs
deleted file mode 100644
index 5b21640..0000000
--- a/src/com/android/gallery3d/filtershow/filters/saturation.rs
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2012 Unknown
- *
- * 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.
- */
-
-#pragma version(1)
-#pragma rs java_package_name(com.android.gallery3d.filtershow.filters)
-
-#define MAX_CHANELS 7
-#define MAX_HUE 4096
-static const int ABITS = 4;
-static const int HSCALE = 256;
-static const int k1=255 << ABITS;
-static const int k2=HSCALE << ABITS;
-
-static const float Rf = 0.2999f;
-static const float Gf = 0.587f;
-static const float Bf = 0.114f;
-
-rs_matrix3x3 colorMatrix_min;
-rs_matrix3x3 colorMatrix_max;
-
-int mNumberOfLines;
-// input data
-int saturation[MAX_CHANELS];
-float sat[MAX_CHANELS];
-
-float satLut[MAX_HUE];
-// generated data
-
-
-void setupGradParams() {
-
-    int master = saturation[0];
-    int max = master+saturation[1];
-    int min = max;
-
-    // calculate the minimum and maximum saturation
-    for (int i = 1; i < MAX_CHANELS; i++) {
-       int v = master+saturation[i];
-       if (max < v) {
-         max = v;
-       }
-       else if (min > v) {
-         min = v;
-       }
-    }
-    // generate a lookup table for all hue 0 to 4K  which goes from 0 to 1 0=min sat 1 = max sat
-    min = min - 1;
-    for(int i = 0; i < MAX_HUE ; i++) {
-       float p =  i * 6 / (float)MAX_HUE;
-       int ip = ((int)(p + .5f)) % 6;
-       int v = master + saturation[ip + 1];
-       satLut[i] = (v - min)/(float)(max - min);
-    }
-
-    float S = 1 + max / 100.f;
-    float MS = 1 - S;
-    float Rt = Rf * MS;
-    float Gt = Gf * MS;
-    float Bt = Bf * MS;
-    float b = 1.f;
-
-    // Generate 2 color matrix one at min sat and one at max
-    rsMatrixSet(&colorMatrix_max, 0, 0, b * (Rt + S));
-    rsMatrixSet(&colorMatrix_max, 1, 0, b * Gt);
-    rsMatrixSet(&colorMatrix_max, 2, 0, b * Bt);
-    rsMatrixSet(&colorMatrix_max, 0, 1, b * Rt);
-    rsMatrixSet(&colorMatrix_max, 1, 1, b * (Gt + S));
-    rsMatrixSet(&colorMatrix_max, 2, 1, b * Bt);
-    rsMatrixSet(&colorMatrix_max, 0, 2, b * Rt);
-    rsMatrixSet(&colorMatrix_max, 1, 2, b * Gt);
-    rsMatrixSet(&colorMatrix_max, 2, 2, b * (Bt + S));
-
-    S = 1 + min / 100.f;
-    MS = 1-S;
-    Rt = Rf * MS;
-    Gt = Gf * MS;
-    Bt = Bf * MS;
-    b = 1;
-
-    rsMatrixSet(&colorMatrix_min, 0, 0, b * (Rt + S));
-    rsMatrixSet(&colorMatrix_min, 1, 0, b * Gt);
-    rsMatrixSet(&colorMatrix_min, 2, 0, b * Bt);
-    rsMatrixSet(&colorMatrix_min, 0, 1, b * Rt);
-    rsMatrixSet(&colorMatrix_min, 1, 1, b * (Gt + S));
-    rsMatrixSet(&colorMatrix_min, 2, 1, b * Bt);
-    rsMatrixSet(&colorMatrix_min, 0, 2, b * Rt);
-    rsMatrixSet(&colorMatrix_min, 1, 2, b * Gt);
-    rsMatrixSet(&colorMatrix_min, 2, 2, b * (Bt + S));
-}
-
-static ushort rgb2hue( uchar4 rgb)
-{
-    int iMin,iMax,chroma;
-
-    int ri = rgb.r;
-    int gi = rgb.g;
-    int bi = rgb.b;
-    short rv,rs,rh;
-
-    if (ri > gi) {
-        iMax = max (ri, bi);
-        iMin = min (gi, bi);
-    } else {
-        iMax = max (gi, bi);
-        iMin = min (ri, bi);
-    }
-
-    rv = (short) (iMax << ABITS);
-
-    if (rv == 0) {
-        return 0;
-    }
-
-    chroma = iMax - iMin;
-    rs = (short) ((k1 * chroma) / iMax);
-    if (rs == 0) {
-        return 0;
-    }
-
-    if ( ri == iMax ) {
-        rh  = (short) ((k2 * (6 * chroma + gi - bi))/(6 * chroma));
-        if (rh >= k2) {
-           rh -= k2;
-        }
-        return rh;
-    }
-
-    if (gi  == iMax) {
-        return(short) ((k2 * (2 * chroma + bi - ri)) / (6 * chroma));
-    }
-
-    return (short) ((k2 * (4 * chroma + ri - gi)) / (6 * chroma));
-}
-
-uchar4 __attribute__((kernel)) selectiveAdjust(const uchar4 in, uint32_t x,
-    uint32_t y) {
-    float4 pixel = rsUnpackColor8888(in);
-
-    int hue = rgb2hue(in);
-
-    float t = satLut[hue];
-        pixel.xyz = rsMatrixMultiply(&colorMatrix_min ,pixel.xyz) * (1 - t) +
-            t * (rsMatrixMultiply(&colorMatrix_max ,pixel.xyz));
-
-    pixel.a = 1.0f;
-    return rsPackColorTo8888(clamp(pixel, 0.f, 1.0f));
-}
diff --git a/src/com/android/gallery3d/filtershow/filters/vignette.rs b/src/com/android/gallery3d/filtershow/filters/vignette.rs
deleted file mode 100644
index 7ab4663..0000000
--- a/src/com/android/gallery3d/filtershow/filters/vignette.rs
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2013 Unknown
- *
- * 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.
- */
-
-#pragma version(1)
-#pragma rs java_package_name(com.android.gallery3d.filtershow.filters)
-
-uint32_t inputWidth;
-uint32_t inputHeight;
-float centerx;
-float centery;
-float radiusx;
-float radiusy;
-float strength;
-float finalBright;
-float finalSaturation;
-float finalContrast;
-float finalSubtract;
-rs_matrix3x3 colorMatrix;
-float scalex;
-float scaley;
-float offset;
-static const float Rf = 0.2999f;
-static const float Gf = 0.587f;
-static const float Bf = 0.114f;
-
-
-void setupVignetteParams() {
-    scalex = 1.f / radiusx;
-    scaley = 1.f / radiusy;
-
-    float S = 1 + finalSaturation / 100.f;
-    float MS = 1 - S;
-    float Rt = Rf * MS;
-    float Gt = Gf * MS;
-    float Bt = Bf * MS;
-
-    float b = 1 + finalBright / 100.f;
-    float c = 1 + finalContrast / 100.f;
-    b *= c;
-    offset = .5f - c / 2.f - finalSubtract / 100.f;
-    rsMatrixSet(&colorMatrix, 0, 0, b * (Rt + S));
-    rsMatrixSet(&colorMatrix, 1, 0, b * Gt);
-    rsMatrixSet(&colorMatrix, 2, 0, b * Bt);
-    rsMatrixSet(&colorMatrix, 0, 1, b * Rt);
-    rsMatrixSet(&colorMatrix, 1, 1, b * (Gt + S));
-    rsMatrixSet(&colorMatrix, 2, 1, b * Bt);
-    rsMatrixSet(&colorMatrix, 0, 2, b * Rt);
-    rsMatrixSet(&colorMatrix, 1, 2, b * Gt);
-    rsMatrixSet(&colorMatrix, 2, 2, b * (Bt + S));
-}
-
-uchar4 __attribute__((kernel)) vignette(const uchar4 in, uint32_t x,  uint32_t y) {
-    float4 pixel = rsUnpackColor8888(in);
-    float radx = (x - centerx) * scalex;
-    float rady = (y - centery) * scaley;
-    float dist = strength * (sqrt(radx * radx + rady * rady) - 1.f);
-    float t  =  (1.f + dist / sqrt(1.f + dist* dist)) * .5f;
-    float4 wsum = pixel;
-    wsum.xyz = wsum.xyz * (1 - t) + t * (rsMatrixMultiply(&colorMatrix, wsum.xyz) + offset);
-    wsum.a = 1.0f;
-    uchar4 out = rsPackColorTo8888(clamp(wsum, 0.f, 1.0f));
-    return out;
-}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageGrad.java b/src/com/android/gallery3d/filtershow/imageshow/ImageGrad.java
deleted file mode 100644
index b55cc2b..0000000
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageGrad.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package com.android.gallery3d.filtershow.imageshow;
-/*
- * Copyright (C) 2013 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.
- */
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.filtershow.editors.EditorGrad;
-import com.android.gallery3d.filtershow.filters.FilterGradRepresentation;
-
-public class ImageGrad extends ImageShow {
-    private static final String LOGTAG = "ImageGrad";
-    private FilterGradRepresentation mGradRep;
-    private EditorGrad mEditorGrad;
-    private float mMinTouchDist;
-    private int mActiveHandle = -1;
-    private GradControl mEllipse;
-
-    Matrix mToScr = new Matrix();
-    float[] mPointsX = new float[FilterGradRepresentation.MAX_POINTS];
-    float[] mPointsY = new float[FilterGradRepresentation.MAX_POINTS];
-
-    public ImageGrad(Context context) {
-        super(context);
-        Resources res = context.getResources();
-        mMinTouchDist = res.getDimensionPixelSize(R.dimen.gradcontrol_min_touch_dist);
-        mEllipse = new GradControl(context);
-        mEllipse.setShowReshapeHandles(false);
-    }
-
-    public ImageGrad(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        Resources res = context.getResources();
-        mMinTouchDist = res.getDimensionPixelSize(R.dimen.gradcontrol_min_touch_dist);
-        mEllipse = new GradControl(context);
-        mEllipse.setShowReshapeHandles(false);
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        int mask = event.getActionMasked();
-
-        if (mActiveHandle == -1) {
-            if (MotionEvent.ACTION_DOWN != mask) {
-                return super.onTouchEvent(event);
-            }
-            if (event.getPointerCount() == 1) {
-                mActiveHandle = mEllipse.getCloseHandle(event.getX(), event.getY());
-                if (mActiveHandle == -1) {
-                    float x = event.getX();
-                    float y = event.getY();
-                    float min_d = Float.MAX_VALUE;
-                    int pos = -1;
-                    for (int i = 0; i < mPointsX.length; i++) {
-                        if (mPointsX[i] == -1) {
-                            continue;
-                        }
-                        float d = (float) Math.hypot(x - mPointsX[i], y - mPointsY[i]);
-                        if ( min_d > d) {
-                            min_d = d;
-                            pos = i;
-                        }
-                    }
-                    if (min_d > mMinTouchDist){
-                        pos = -1;
-                    }
-
-                    if (pos != -1) {
-                        mGradRep.setSelectedPoint(pos);
-                        resetImageCaches(this);
-                        mEditorGrad.updateSeekBar(mGradRep);
-                        mEditorGrad.commitLocalRepresentation();
-                        invalidate();
-                    }
-                }
-            }
-            if (mActiveHandle == -1) {
-                return super.onTouchEvent(event);
-            }
-        } else {
-            switch (mask) {
-                case MotionEvent.ACTION_UP: {
-
-                    mActiveHandle = -1;
-                    break;
-                }
-                case MotionEvent.ACTION_DOWN: {
-                    break;
-                }
-            }
-        }
-        float x = event.getX();
-        float y = event.getY();
-
-        mEllipse.setScrImageInfo(getScreenToImageMatrix(true),
-                MasterImage.getImage().getOriginalBounds());
-
-        switch (mask) {
-            case (MotionEvent.ACTION_DOWN): {
-                mEllipse.actionDown(x, y, mGradRep);
-                break;
-            }
-            case (MotionEvent.ACTION_UP):
-            case (MotionEvent.ACTION_MOVE): {
-                mEllipse.actionMove(mActiveHandle, x, y, mGradRep);
-                setRepresentation(mGradRep);
-                break;
-            }
-        }
-        invalidate();
-        mEditorGrad.commitLocalRepresentation();
-        return true;
-    }
-
-    public void setRepresentation(FilterGradRepresentation pointRep) {
-        mGradRep = pointRep;
-        Matrix toImg = getScreenToImageMatrix(false);
-
-        toImg.invert(mToScr);
-
-        float[] c1 = new float[] { mGradRep.getPoint1X(), mGradRep.getPoint1Y() };
-        float[] c2 = new float[] { mGradRep.getPoint2X(), mGradRep.getPoint2Y() };
-
-        if (c1[0] == -1) {
-            float cx = MasterImage.getImage().getOriginalBounds().width() / 2;
-            float cy = MasterImage.getImage().getOriginalBounds().height() / 2;
-            float rx = Math.min(cx, cy) * .4f;
-
-            mGradRep.setPoint1(cx, cy-rx);
-            mGradRep.setPoint2(cx, cy+rx);
-            c1[0] = cx;
-            c1[1] = cy-rx;
-            mToScr.mapPoints(c1);
-            if (getWidth() != 0) {
-                mEllipse.setPoint1(c1[0], c1[1]);
-                c2[0] = cx;
-                c2[1] = cy+rx;
-                mToScr.mapPoints(c2);
-                mEllipse.setPoint2(c2[0], c2[1]);
-            }
-            mEditorGrad.commitLocalRepresentation();
-        } else {
-            mToScr.mapPoints(c1);
-            mToScr.mapPoints(c2);
-            mEllipse.setPoint1(c1[0], c1[1]);
-            mEllipse.setPoint2(c2[0], c2[1]);
-        }
-    }
-
-    public void drawOtherPoints(Canvas canvas) {
-        computCenterLocations();
-        for (int i = 0; i < mPointsX.length; i++) {
-            if (mPointsX[i] != -1) {
-                mEllipse.paintGrayPoint(canvas, mPointsX[i], mPointsY[i]);
-            }
-        }
-    }
-
-    public void computCenterLocations() {
-        int x1[] = mGradRep.getXPos1();
-        int y1[] = mGradRep.getYPos1();
-        int x2[] = mGradRep.getXPos2();
-        int y2[] = mGradRep.getYPos2();
-        int selected = mGradRep.getSelectedPoint();
-        boolean m[] = mGradRep.getMask();
-        float[] c = new float[2];
-        for (int i = 0; i < m.length; i++) {
-            if (selected == i || !m[i]) {
-                mPointsX[i] = -1;
-                continue;
-            }
-
-            c[0] = (x1[i]+x2[i])/2;
-            c[1] = (y1[i]+y2[i])/2;
-            mToScr.mapPoints(c);
-
-            mPointsX[i] = c[0];
-            mPointsY[i] = c[1];
-        }
-    }
-
-    public void setEditor(EditorGrad editorGrad) {
-        mEditorGrad = editorGrad;
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-        if (mGradRep == null) {
-            return;
-        }
-        setRepresentation(mGradRep);
-        mEllipse.draw(canvas);
-        drawOtherPoints(canvas);
-    }
-
-}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageVignette.java b/src/com/android/gallery3d/filtershow/imageshow/ImageVignette.java
deleted file mode 100644
index 9571287..0000000
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageVignette.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-
-package com.android.gallery3d.filtershow.imageshow;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-
-import com.android.gallery3d.filtershow.editors.EditorVignette;
-import com.android.gallery3d.filtershow.filters.FilterVignetteRepresentation;
-
-public class ImageVignette extends ImageShow {
-    private static final String LOGTAG = "ImageVignette";
-
-    private FilterVignetteRepresentation mVignetteRep;
-    private EditorVignette mEditorVignette;
-    private OvalSpaceAdapter mScreenOval = new OvalSpaceAdapter();
-    private int mActiveHandle = -1;
-
-    EclipseControl mElipse;
-
-    public ImageVignette(Context context) {
-        super(context);
-        mElipse = new EclipseControl(context);
-    }
-
-    public ImageVignette(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mElipse = new EclipseControl(context);
-    }
-
-    static class OvalSpaceAdapter implements Oval {
-        private Oval mOval;
-        Matrix mToScr;
-        Matrix mToImage;
-        int mImgWidth;
-        int mImgHeight;
-        float[] mTmp = new float[2];
-        float mTmpRadiusX;
-        float mTmpRadiusY;
-
-        public void setImageOval(Oval oval) {
-            mOval = oval;
-        }
-
-        public void setTransform(Matrix toScr, Matrix toImage, int imgWidth, int imgHeight) {
-            mToScr = toScr;
-            mToImage = toImage;
-            mImgWidth = imgWidth;
-            mImgHeight = imgHeight;
-            mTmpRadiusX = getRadiusX();
-            mTmpRadiusY = getRadiusY();
-        }
-
-        @Override
-        public void setCenter(float x, float y) {
-            mTmp[0] = x;
-            mTmp[1] = y;
-            mToImage.mapPoints(mTmp);
-            mOval.setCenter(mTmp[0] / mImgWidth, mTmp[1] / mImgHeight);
-        }
-
-        @Override
-        public void setRadius(float w, float h) {
-            mTmp[0] = mTmpRadiusX = w;
-            mTmp[1] = mTmpRadiusY = h;
-            mToImage.mapVectors(mTmp);
-            mOval.setRadius(mTmp[0] / mImgWidth, mTmp[1] / mImgHeight);
-        }
-
-        @Override
-        public float getCenterX() {
-            mTmp[0] = mOval.getCenterX() * mImgWidth;
-            mTmp[1] = mOval.getCenterY() * mImgHeight;
-            mToScr.mapPoints(mTmp);
-
-            return mTmp[0];
-        }
-
-        @Override
-        public float getCenterY() {
-            mTmp[0] = mOval.getCenterX() * mImgWidth;
-            mTmp[1] = mOval.getCenterY() * mImgHeight;
-            mToScr.mapPoints(mTmp);
-            return mTmp[1];
-        }
-
-        @Override
-        public float getRadiusX() {
-            mTmp[0] = mOval.getRadiusX() * mImgWidth;
-            mTmp[1] = mOval.getRadiusY() * mImgHeight;
-            mToScr.mapVectors(mTmp);
-            return Math.abs(mTmp[0]);
-        }
-
-        @Override
-        public float getRadiusY() {
-            mTmp[0] = mOval.getRadiusX() * mImgWidth;
-            mTmp[1] = mOval.getRadiusY() * mImgHeight;
-            mToScr.mapVectors(mTmp);
-            return Math.abs(mTmp[1]);
-        }
-
-        @Override
-        public void setRadiusY(float y) {
-            mTmp[0] = mTmpRadiusX;
-            mTmp[1] = mTmpRadiusY = y;
-            mToImage.mapVectors(mTmp);
-            mOval.setRadiusX(mTmp[0] / mImgWidth);
-            mOval.setRadiusY(mTmp[1] / mImgHeight);
-        }
-
-        @Override
-        public void setRadiusX(float x) {
-            mTmp[0] = mTmpRadiusX = x;
-            mTmp[1] = mTmpRadiusY;
-            mToImage.mapVectors(mTmp);
-            mOval.setRadiusX(mTmp[0] / mImgWidth);
-            mOval.setRadiusY(mTmp[1] / mImgHeight);
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        int w = MasterImage.getImage().getOriginalBounds().width();
-        int h = MasterImage.getImage().getOriginalBounds().height();
-        int mask = event.getActionMasked();
-        if (mActiveHandle == -1) {
-            if (MotionEvent.ACTION_DOWN != mask) {
-                return super.onTouchEvent(event);
-            }
-            if (event.getPointerCount() == 1) {
-                mActiveHandle = mElipse.getCloseHandle(event.getX(), event.getY());
-            }
-            if (mActiveHandle == -1) {
-                return super.onTouchEvent(event);
-            }
-        } else {
-            switch (mask) {
-                case MotionEvent.ACTION_UP:
-                    mActiveHandle = -1;
-                    break;
-                case MotionEvent.ACTION_DOWN:
-                    break;
-            }
-        }
-        float x = event.getX();
-        float y = event.getY();
-
-        mElipse.setScrImageInfo(new Matrix(),
-                MasterImage.getImage().getOriginalBounds());
-
-        boolean didComputeEllipses = false;
-        switch (mask) {
-            case (MotionEvent.ACTION_DOWN):
-                mElipse.actionDown(x, y, mScreenOval);
-                break;
-            case (MotionEvent.ACTION_UP):
-            case (MotionEvent.ACTION_MOVE):
-
-                mElipse.actionMove(mActiveHandle, x, y, mScreenOval);
-                setRepresentation(mVignetteRep);
-                didComputeEllipses = true;
-                break;
-        }
-        if (!didComputeEllipses) {
-            computeEllipses();
-        }
-        invalidate();
-        return true;
-    }
-
-    public void setRepresentation(FilterVignetteRepresentation vignetteRep) {
-        mVignetteRep = vignetteRep;
-        mScreenOval.setImageOval(mVignetteRep);
-        computeEllipses();
-    }
-
-    public void computeEllipses() {
-        if (mVignetteRep == null) {
-            return;
-        }
-        float w = MasterImage.getImage().getOriginalBounds().width();
-        float h = MasterImage.getImage().getOriginalBounds().height();
-        Matrix toImg = getScreenToImageMatrix(false);
-        Matrix toScr = new Matrix();
-        toImg.invert(toScr);
-        mScreenOval.setTransform(toScr, toImg, (int) w, (int) h);
-
-        mElipse.setCenter(mScreenOval.getCenterX(), mScreenOval.getCenterY());
-        mElipse.setRadius(mScreenOval.getRadiusX(), mScreenOval.getRadiusY());
-
-        mEditorVignette.commitLocalRepresentation();
-    }
-
-    public void setEditor(EditorVignette editorVignette) {
-        mEditorVignette = editorVignette;
-    }
-
-    @Override
-    public void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-        computeEllipses();
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-        if (mVignetteRep == null) {
-            return;
-        }
-        float w = MasterImage.getImage().getOriginalBounds().width();
-        float h = MasterImage.getImage().getOriginalBounds().height();
-        Matrix toImg = getScreenToImageMatrix(false);
-        Matrix toScr = new Matrix();
-        toImg.invert(toScr);
-        mScreenOval.setTransform(toScr, toImg, (int) w, (int) h);
-        mElipse.setCenter(mScreenOval.getCenterX(), mScreenOval.getCenterY());
-        mElipse.setRadius(mScreenOval.getRadiusX(), mScreenOval.getRadiusY());
-
-        mElipse.draw(canvas);
-    }
-
-}
diff --git a/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java b/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java
index e5736d4..6c6c2d9 100644
--- a/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java
+++ b/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java
@@ -314,9 +314,6 @@
 
     private void tearDownPipeline() {
         ImageFilter.resetStatics();
-        FiltersManager.getPreviewManager().freeRSFilterScripts();
-        FiltersManager.getManager().freeRSFilterScripts();
-        FiltersManager.getHighresManager().freeRSFilterScripts();
         FiltersManager.reset();
         CachingPipeline.destroyRenderScriptContext();
     }
diff --git a/src_pd/com/android/gallery3d/filtershow/editors/EditorManager.java b/src_pd/com/android/gallery3d/filtershow/editors/EditorManager.java
index e82d561..5f91782 100644
--- a/src_pd/com/android/gallery3d/filtershow/editors/EditorManager.java
+++ b/src_pd/com/android/gallery3d/filtershow/editors/EditorManager.java
@@ -24,13 +24,10 @@
 public class EditorManager {
 
     public static void addEditors(EditorPlaceHolder editorPlaceHolder) {
-        editorPlaceHolder.addEditor(new EditorGrad());
-        editorPlaceHolder.addEditor(new EditorChanSat());
         editorPlaceHolder.addEditor(new EditorZoom());
         editorPlaceHolder.addEditor(new EditorCurves());
         editorPlaceHolder.addEditor(new EditorTinyPlanet());
         editorPlaceHolder.addEditor(new EditorDraw());
-        editorPlaceHolder.addEditor(new EditorVignette());
         editorPlaceHolder.addEditor(new EditorColorBorder());
         editorPlaceHolder.addEditor(new EditorMirror());
         editorPlaceHolder.addEditor(new EditorRotate());