BaseFiltersManager.java revision 33de212ec780eaf2bc8d86908f07da33ea8dd7f2
1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.gallery3d.filtershow.filters;
17
18import android.content.Context;
19import android.content.res.Resources;
20
21import com.android.gallery3d.R;
22import com.android.gallery3d.filtershow.presets.ImagePreset;
23
24import java.util.HashMap;
25import java.util.Vector;
26
27public abstract class BaseFiltersManager {
28    protected HashMap<Class, ImageFilter> mFilters = null;
29
30    protected void init() {
31        mFilters = new HashMap<Class, ImageFilter>();
32        Vector<Class> filters = new Vector<Class>();
33        addFilterClasses(filters);
34        for (Class filterClass : filters) {
35            try {
36                Object filterInstance = filterClass.newInstance();
37                if (filterInstance instanceof ImageFilter) {
38                    mFilters.put(filterClass, (ImageFilter) filterInstance);
39                }
40            } catch (InstantiationException e) {
41                e.printStackTrace();
42            } catch (IllegalAccessException e) {
43                e.printStackTrace();
44            }
45        }
46    }
47
48    public ImageFilter getFilter(Class c) {
49        return mFilters.get(c);
50    }
51
52    public ImageFilter getFilterForRepresentation(FilterRepresentation representation) {
53        return mFilters.get(representation.getFilterClass());
54    }
55
56    public void addFilter(Class filterClass, ImageFilter filter) {
57        mFilters.put(filterClass, filter);
58    }
59
60    public FilterRepresentation getRepresentation(Class c) {
61        ImageFilter filter = mFilters.get(c);
62        if (filter != null) {
63            return filter.getDefaultRepresentation();
64        }
65        return null;
66    }
67
68    public void freeFilterResources(ImagePreset preset) {
69        if (preset == null) {
70            return;
71        }
72        Vector<ImageFilter> usedFilters = preset.getUsedFilters(this);
73        for (Class c : mFilters.keySet()) {
74            ImageFilter filter = mFilters.get(c);
75            if (!usedFilters.contains(filter)) {
76                filter.freeResources();
77            }
78        }
79    }
80
81    public void freeRSFilterScripts() {
82        for (Class c : mFilters.keySet()) {
83            ImageFilter filter = mFilters.get(c);
84            if (filter != null && filter instanceof ImageFilterRS) {
85                ((ImageFilterRS) filter).resetScripts();
86            }
87        }
88    }
89
90    protected void addFilterClasses(Vector<Class> filters) {
91        filters.add(ImageFilterTinyPlanet.class);
92        //filters.add(ImageFilterRedEye.class);
93        filters.add(ImageFilterWBalance.class);
94        filters.add(ImageFilterExposure.class);
95        filters.add(ImageFilterVignette.class);
96        filters.add(ImageFilterContrast.class);
97        filters.add(ImageFilterShadows.class);
98        filters.add(ImageFilterHighlights.class);
99        filters.add(ImageFilterVibrance.class);
100        filters.add(ImageFilterSharpen.class);
101        filters.add(ImageFilterCurves.class);
102        // filters.add(ImageFilterDraw.class);
103        filters.add(ImageFilterHue.class);
104        filters.add(ImageFilterSaturated.class);
105        filters.add(ImageFilterBwFilter.class);
106        filters.add(ImageFilterNegative.class);
107        filters.add(ImageFilterEdge.class);
108        filters.add(ImageFilterKMeans.class);
109        filters.add(ImageFilterFx.class);
110        filters.add(ImageFilterBorder.class);
111        filters.add(ImageFilterParametricBorder.class);
112        filters.add(ImageFilterGeometry.class);
113    }
114
115    public void addBorders(Context context, Vector<FilterRepresentation> representations) {
116
117    }
118
119    public void addLooks(Context context, Vector<FilterRepresentation> representations) {
120        int[] drawid = {
121                R.drawable.filtershow_fx_0005_punch,
122                R.drawable.filtershow_fx_0000_vintage,
123                R.drawable.filtershow_fx_0004_bw_contrast,
124                R.drawable.filtershow_fx_0002_bleach,
125                R.drawable.filtershow_fx_0001_instant,
126                R.drawable.filtershow_fx_0007_washout,
127                R.drawable.filtershow_fx_0003_blue_crush,
128                R.drawable.filtershow_fx_0008_washout_color,
129                R.drawable.filtershow_fx_0006_x_process
130        };
131
132        int[] fxNameid = {
133                R.string.ffx_punch,
134                R.string.ffx_vintage,
135                R.string.ffx_bw_contrast,
136                R.string.ffx_bleach,
137                R.string.ffx_instant,
138                R.string.ffx_washout,
139                R.string.ffx_blue_crush,
140                R.string.ffx_washout_color,
141                R.string.ffx_x_process
142        };
143
144        for (int i = 0; i < drawid.length; i++) {
145            FilterFxRepresentation fx = new FilterFxRepresentation(
146                    context.getString(fxNameid[i]), drawid[i], fxNameid[i]);
147            representations.add(fx);
148        }
149    }
150
151    public void addEffects(Vector<FilterRepresentation> representations) {
152        representations.add(getRepresentation(ImageFilterTinyPlanet.class));
153        representations.add(getRepresentation(ImageFilterWBalance.class));
154        representations.add(getRepresentation(ImageFilterExposure.class));
155        representations.add(getRepresentation(ImageFilterVignette.class));
156        representations.add(getRepresentation(ImageFilterContrast.class));
157        representations.add(getRepresentation(ImageFilterShadows.class));
158        representations.add(getRepresentation(ImageFilterHighlights.class));
159        representations.add(getRepresentation(ImageFilterVibrance.class));
160        representations.add(getRepresentation(ImageFilterSharpen.class));
161        representations.add(getRepresentation(ImageFilterCurves.class));
162        representations.add(getRepresentation(ImageFilterHue.class));
163        representations.add(getRepresentation(ImageFilterSaturated.class));
164        representations.add(getRepresentation(ImageFilterBwFilter.class));
165        representations.add(getRepresentation(ImageFilterNegative.class));
166        representations.add(getRepresentation(ImageFilterEdge.class));
167        representations.add(getRepresentation(ImageFilterKMeans.class));
168    }
169
170    public void addTools(Vector<FilterRepresentation> representations) {
171        //representations.add(getRepresentation(ImageFilterRedEye.class));
172        // representations.add(getRepresentation(ImageFilterDraw.class));
173    }
174
175    public void setFilterResources(Resources resources) {
176        ImageFilterBorder filterBorder = (ImageFilterBorder) getFilter(ImageFilterBorder.class);
177        filterBorder.setResources(resources);
178        ImageFilterFx filterFx = (ImageFilterFx) getFilter(ImageFilterFx.class);
179        filterFx.setResources(resources);
180    }
181}
182