• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {
portraitMap.put(ParameterSaturation.sParameterType, SliderSaturation.class)70         portraitMap.put(ParameterSaturation.sParameterType, SliderSaturation.class);
landscapeMap.put(ParameterSaturation.sParameterType, SliderSaturation.class)71         landscapeMap.put(ParameterSaturation.sParameterType, SliderSaturation.class);
portraitMap.put(ParameterHue.sParameterType, SliderHue.class)72         portraitMap.put(ParameterHue.sParameterType, SliderHue.class);
landscapeMap.put(ParameterHue.sParameterType, SliderHue.class)73         landscapeMap.put(ParameterHue.sParameterType, SliderHue.class);
portraitMap.put(ParameterOpacity.sParameterType, SliderOpacity.class)74         portraitMap.put(ParameterOpacity.sParameterType, SliderOpacity.class);
landscapeMap.put(ParameterOpacity.sParameterType, SliderOpacity.class)75         landscapeMap.put(ParameterOpacity.sParameterType, SliderOpacity.class);
portraitMap.put(ParameterBrightness.sParameterType, SliderBrightness.class)76         portraitMap.put(ParameterBrightness.sParameterType, SliderBrightness.class);
landscapeMap.put(ParameterBrightness.sParameterType, SliderBrightness.class)77         landscapeMap.put(ParameterBrightness.sParameterType, SliderBrightness.class);
portraitMap.put(ParameterColor.sParameterType, ColorChooser.class)78         portraitMap.put(ParameterColor.sParameterType, ColorChooser.class);
landscapeMap.put(ParameterColor.sParameterType, ColorChooser.class)79         landscapeMap.put(ParameterColor.sParameterType, ColorChooser.class);
80 
portraitMap.put(ParameterInteger.sParameterType, BasicSlider.class)81         portraitMap.put(ParameterInteger.sParameterType, BasicSlider.class);
landscapeMap.put(ParameterInteger.sParameterType, TitledSlider.class)82         landscapeMap.put(ParameterInteger.sParameterType, TitledSlider.class);
portraitMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class)83         portraitMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class);
landscapeMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class)84         landscapeMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class);
portraitMap.put(ParameterStyles.sParameterType, StyleChooser.class)85         portraitMap.put(ParameterStyles.sParameterType, StyleChooser.class);
landscapeMap.put(ParameterStyles.sParameterType, StyleChooser.class)86         landscapeMap.put(ParameterStyles.sParameterType, StyleChooser.class);
87     }
88 
getConstructor(Class cl)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 
ParametricEditor()97     public ParametricEditor() {
98         super(ID);
99     }
100 
ParametricEditor(int id)101     protected ParametricEditor(int id) {
102         super(id);
103     }
104 
ParametricEditor(int id, int layoutID, int viewID)105     protected ParametricEditor(int id, int layoutID, int viewID) {
106         super(id);
107         mLayoutID = layoutID;
108         mViewID = viewID;
109     }
110 
111     @Override
calculateUserMessage(Context context, String effectName, Object parameterValue)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
createEditor(Context context, FrameLayout frameLayout)129     public void createEditor(Context context, FrameLayout frameLayout) {
130         super.createEditor(context, frameLayout);
131         unpack(mViewID, mLayoutID);
132     }
133 
134     @Override
reflectCurrentFilter()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
getControls()145     public Control[] getControls() {
146         BasicSlider slider = new BasicSlider();
147         return new Control[] {
148                 slider
149         };
150     }
151 
useCompact(Context context)152     protected static boolean useCompact(Context context) {
153         return context.getResources().getConfiguration().orientation
154                 == Configuration.ORIENTATION_PORTRAIT;
155     }
156 
getParameterToEdit(FilterRepresentation rep)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
setUtilityPanelUI(View actionButton, View editControl)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 
control(Parameter p, View editControl)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
onProgressChanged(SeekBar sbar, int progress, boolean arg2)206     public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) {
207     }
208 
209     @Override
onStartTrackingTouch(SeekBar arg0)210     public void onStartTrackingTouch(SeekBar arg0) {
211     }
212 
213     @Override
onStopTrackingTouch(SeekBar arg0)214     public void onStopTrackingTouch(SeekBar arg0) {
215     }
216 }
217