Home | History | Annotate | Download | only in editors
      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 
     17 package com.android.gallery3d.filtershow.editors;
     18 
     19 import android.content.Context;
     20 import android.content.res.Configuration;
     21 import android.graphics.Point;
     22 import android.util.Log;
     23 import android.view.View;
     24 import android.view.ViewGroup;
     25 import android.view.ViewGroup.LayoutParams;
     26 import android.view.WindowManager;
     27 import android.widget.FrameLayout;
     28 import android.widget.LinearLayout;
     29 import android.widget.SeekBar;
     30 
     31 import com.android.gallery3d.R;
     32 import com.android.gallery3d.filtershow.controller.ActionSlider;
     33 import com.android.gallery3d.filtershow.controller.BasicSlider;
     34 import com.android.gallery3d.filtershow.controller.ColorChooser;
     35 import com.android.gallery3d.filtershow.controller.Control;
     36 import com.android.gallery3d.filtershow.controller.Parameter;
     37 import com.android.gallery3d.filtershow.controller.ParameterActionAndInt;
     38 import com.android.gallery3d.filtershow.controller.ParameterBrightness;
     39 import com.android.gallery3d.filtershow.controller.ParameterColor;
     40 import com.android.gallery3d.filtershow.controller.ParameterHue;
     41 import com.android.gallery3d.filtershow.controller.ParameterInteger;
     42 import com.android.gallery3d.filtershow.controller.ParameterOpacity;
     43 import com.android.gallery3d.filtershow.controller.ParameterSaturation;
     44 import com.android.gallery3d.filtershow.controller.ParameterStyles;
     45 import com.android.gallery3d.filtershow.controller.SliderBrightness;
     46 import com.android.gallery3d.filtershow.controller.SliderHue;
     47 import com.android.gallery3d.filtershow.controller.SliderOpacity;
     48 import com.android.gallery3d.filtershow.controller.SliderSaturation;
     49 import com.android.gallery3d.filtershow.controller.StyleChooser;
     50 import com.android.gallery3d.filtershow.controller.TitledSlider;
     51 import com.android.gallery3d.filtershow.filters.FilterBasicRepresentation;
     52 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
     53 
     54 import java.lang.reflect.Constructor;
     55 import java.util.HashMap;
     56 
     57 public class ParametricEditor extends Editor {
     58     private int mLayoutID;
     59     private int mViewID;
     60     public static int ID = R.id.editorParametric;
     61     private final String LOGTAG = "ParametricEditor";
     62     protected Control mControl;
     63     public static final int MINIMUM_WIDTH = 600;
     64     public static final int MINIMUM_HEIGHT = 800;
     65     View mActionButton;
     66     View mEditControl;
     67     static HashMap<String, Class> portraitMap = new HashMap<String, Class>();
     68     static HashMap<String, Class> landscapeMap = new HashMap<String, Class>();
     69     static {
     70         portraitMap.put(ParameterSaturation.sParameterType, SliderSaturation.class);
     71         landscapeMap.put(ParameterSaturation.sParameterType, SliderSaturation.class);
     72         portraitMap.put(ParameterHue.sParameterType, SliderHue.class);
     73         landscapeMap.put(ParameterHue.sParameterType, SliderHue.class);
     74         portraitMap.put(ParameterOpacity.sParameterType, SliderOpacity.class);
     75         landscapeMap.put(ParameterOpacity.sParameterType, SliderOpacity.class);
     76         portraitMap.put(ParameterBrightness.sParameterType, SliderBrightness.class);
     77         landscapeMap.put(ParameterBrightness.sParameterType, SliderBrightness.class);
     78         portraitMap.put(ParameterColor.sParameterType, ColorChooser.class);
     79         landscapeMap.put(ParameterColor.sParameterType, ColorChooser.class);
     80 
     81         portraitMap.put(ParameterInteger.sParameterType, BasicSlider.class);
     82         landscapeMap.put(ParameterInteger.sParameterType, TitledSlider.class);
     83         portraitMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class);
     84         landscapeMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class);
     85         portraitMap.put(ParameterStyles.sParameterType, StyleChooser.class);
     86         landscapeMap.put(ParameterStyles.sParameterType, StyleChooser.class);
     87     }
     88 
     89     static Constructor getConstructor(Class cl) {
     90         try {
     91             return cl.getConstructor(Context.class, ViewGroup.class);
     92         } catch (Exception e) {
     93             return null;
     94         }
     95     }
     96 
     97     public ParametricEditor() {
     98         super(ID);
     99     }
    100 
    101     protected ParametricEditor(int id) {
    102         super(id);
    103     }
    104 
    105     protected ParametricEditor(int id, int layoutID, int viewID) {
    106         super(id);
    107         mLayoutID = layoutID;
    108         mViewID = viewID;
    109     }
    110 
    111     @Override
    112     public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
    113         String apply = "";
    114 
    115         if (mShowParameter == SHOW_VALUE_INT & useCompact(context)) {
    116            if (getLocalRepresentation() instanceof FilterBasicRepresentation) {
    117             FilterBasicRepresentation interval = (FilterBasicRepresentation) getLocalRepresentation();
    118                 apply += " " + effectName.toUpperCase() + " " + interval.getStateRepresentation();
    119            } else {
    120                 apply += " " + effectName.toUpperCase() + " " + parameterValue;
    121            }
    122         } else {
    123             apply += " " + effectName.toUpperCase();
    124         }
    125         return apply;
    126     }
    127 
    128     @Override
    129     public void createEditor(Context context, FrameLayout frameLayout) {
    130         super.createEditor(context, frameLayout);
    131         unpack(mViewID, mLayoutID);
    132     }
    133 
    134     @Override
    135     public void reflectCurrentFilter() {
    136         super.reflectCurrentFilter();
    137         if (getLocalRepresentation() != null
    138                 && getLocalRepresentation() instanceof FilterBasicRepresentation) {
    139             FilterBasicRepresentation interval = (FilterBasicRepresentation) getLocalRepresentation();
    140             mControl.setPrameter(interval);
    141         }
    142     }
    143 
    144     @Override
    145     public Control[] getControls() {
    146         BasicSlider slider = new BasicSlider();
    147         return new Control[] {
    148                 slider
    149         };
    150     }
    151 
    152     protected static boolean useCompact(Context context) {
    153         return context.getResources().getConfiguration().orientation
    154                 == Configuration.ORIENTATION_PORTRAIT;
    155     }
    156 
    157     protected Parameter getParameterToEdit(FilterRepresentation rep) {
    158         if (this instanceof Parameter) {
    159             return (Parameter) this;
    160         } else if (rep instanceof Parameter) {
    161             return ((Parameter) rep);
    162         }
    163         return null;
    164     }
    165 
    166     @Override
    167     public void setUtilityPanelUI(View actionButton, View editControl) {
    168         mActionButton = actionButton;
    169         mEditControl = editControl;
    170         FilterRepresentation rep = getLocalRepresentation();
    171         Parameter param = getParameterToEdit(rep);
    172         if (param != null) {
    173             control(param, editControl);
    174         } else {
    175             mSeekBar = new SeekBar(editControl.getContext());
    176             LayoutParams lp = new LinearLayout.LayoutParams(
    177                     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    178             mSeekBar.setLayoutParams(lp);
    179             ((LinearLayout) editControl).addView(mSeekBar);
    180             mSeekBar.setOnSeekBarChangeListener(this);
    181         }
    182     }
    183 
    184     protected void control(Parameter p, View editControl) {
    185         String pType = p.getParameterType();
    186         Context context = editControl.getContext();
    187         Class c = ((useCompact(context)) ? portraitMap : landscapeMap).get(pType);
    188 
    189         if (c != null) {
    190             try {
    191                 mControl = (Control) c.newInstance();
    192                 p.setController(mControl);
    193                 mControl.setUp((ViewGroup) editControl, p, this);
    194             } catch (Exception e) {
    195                 Log.e(LOGTAG, "Error in loading Control ", e);
    196             }
    197         } else {
    198             Log.e(LOGTAG, "Unable to find class for " + pType);
    199             for (String string : portraitMap.keySet()) {
    200                 Log.e(LOGTAG, "for " + string + " use " + portraitMap.get(string));
    201             }
    202         }
    203     }
    204 
    205     @Override
    206     public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) {
    207     }
    208 
    209     @Override
    210     public void onStartTrackingTouch(SeekBar arg0) {
    211     }
    212 
    213     @Override
    214     public void onStopTrackingTouch(SeekBar arg0) {
    215     }
    216 }
    217