Home | History | Annotate | Download | only in filters
      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  */
     16 package com.android.gallery3d.filtershow.filters;
     17 
     18 import android.content.Context;
     19 import android.content.res.Resources;
     20 
     21 import com.android.gallery3d.R;
     22 import com.android.gallery3d.filtershow.presets.ImagePreset;
     23 
     24 import java.util.HashMap;
     25 import java.util.Vector;
     26 
     27 public 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