blob: 9927a0a5e908a9aabff2cce4f4a04e73a2a3f12a [file] [log] [blame]
/*
* 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.content.Context;
import android.content.res.Resources;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.presets.ImagePreset;
import java.util.HashMap;
import java.util.Vector;
public abstract class BaseFiltersManager {
protected HashMap<Class, ImageFilter> mFilters = null;
protected void init() {
mFilters = new HashMap<Class, ImageFilter>();
Vector<Class> filters = new Vector<Class>();
addFilterClasses(filters);
for (Class filterClass : filters) {
try {
Object filterInstance = filterClass.newInstance();
if (filterInstance instanceof ImageFilter) {
mFilters.put(filterClass, (ImageFilter) filterInstance);
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public ImageFilter getFilter(Class c) {
return mFilters.get(c);
}
public ImageFilter getFilterForRepresentation(FilterRepresentation representation) {
return mFilters.get(representation.getFilterClass());
}
public void addFilter(Class filterClass, ImageFilter filter) {
mFilters.put(filterClass, filter);
}
public FilterRepresentation getRepresentation(Class c) {
ImageFilter filter = mFilters.get(c);
if (filter != null) {
return filter.getDefaultRepresentation();
}
return null;
}
public void freeFilterResources(ImagePreset preset) {
if (preset == null) {
return;
}
Vector<ImageFilter> usedFilters = preset.getUsedFilters(this);
for (Class c : mFilters.keySet()) {
ImageFilter filter = mFilters.get(c);
if (!usedFilters.contains(filter)) {
filter.freeResources();
}
}
}
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(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(ImageFilterSaturated.class);
filters.add(ImageFilterBwFilter.class);
filters.add(ImageFilterNegative.class);
filters.add(ImageFilterEdge.class);
filters.add(ImageFilterKMeans.class);
filters.add(ImageFilterFx.class);
filters.add(ImageFilterBorder.class);
filters.add(ImageFilterParametricBorder.class);
filters.add(ImageFilterGeometry.class);
}
public void addBorders(Context context, Vector<FilterRepresentation> representations) {
}
public void addLooks(Context context, Vector<FilterRepresentation> representations) {
int[] drawid = {
R.drawable.filtershow_fx_0005_punch,
R.drawable.filtershow_fx_0000_vintage,
R.drawable.filtershow_fx_0004_bw_contrast,
R.drawable.filtershow_fx_0002_bleach,
R.drawable.filtershow_fx_0001_instant,
R.drawable.filtershow_fx_0007_washout,
R.drawable.filtershow_fx_0003_blue_crush,
R.drawable.filtershow_fx_0008_washout_color,
R.drawable.filtershow_fx_0006_x_process
};
int[] fxNameid = {
R.string.ffx_punch,
R.string.ffx_vintage,
R.string.ffx_bw_contrast,
R.string.ffx_bleach,
R.string.ffx_instant,
R.string.ffx_washout,
R.string.ffx_blue_crush,
R.string.ffx_washout_color,
R.string.ffx_x_process
};
for (int i = 0; i < drawid.length; i++) {
FilterFxRepresentation fx = new FilterFxRepresentation(
context.getString(fxNameid[i]), drawid[i], fxNameid[i]);
representations.add(fx);
}
}
public void addEffects(Vector<FilterRepresentation> representations) {
representations.add(getRepresentation(ImageFilterTinyPlanet.class));
representations.add(getRepresentation(ImageFilterWBalance.class));
representations.add(getRepresentation(ImageFilterExposure.class));
representations.add(getRepresentation(ImageFilterVignette.class));
representations.add(getRepresentation(ImageFilterContrast.class));
representations.add(getRepresentation(ImageFilterShadows.class));
representations.add(getRepresentation(ImageFilterHighlights.class));
representations.add(getRepresentation(ImageFilterVibrance.class));
representations.add(getRepresentation(ImageFilterSharpen.class));
representations.add(getRepresentation(ImageFilterCurves.class));
representations.add(getRepresentation(ImageFilterHue.class));
representations.add(getRepresentation(ImageFilterSaturated.class));
representations.add(getRepresentation(ImageFilterBwFilter.class));
representations.add(getRepresentation(ImageFilterNegative.class));
representations.add(getRepresentation(ImageFilterEdge.class));
representations.add(getRepresentation(ImageFilterKMeans.class));
}
public void addTools(Vector<FilterRepresentation> representations) {
//representations.add(getRepresentation(ImageFilterRedEye.class));
// representations.add(getRepresentation(ImageFilterDraw.class));
}
public void setFilterResources(Resources resources) {
ImageFilterBorder filterBorder = (ImageFilterBorder) getFilter(ImageFilterBorder.class);
filterBorder.setResources(resources);
ImageFilterFx filterFx = (ImageFilterFx) getFilter(ImageFilterFx.class);
filterFx.setResources(resources);
}
}