diff options
author | John Hoford <hoford@google.com> | 2013-03-12 16:30:10 -0700 |
---|---|---|
committer | John Hoford <hoford@google.com> | 2013-03-29 12:11:16 -0700 |
commit | 06016438139fba0511dcd1e12646b53287b3bb3f (patch) | |
tree | 136abeb52c107c5e07318368cc35e5faa3708164 /src/com/android/gallery3d/filtershow/editors | |
parent | 2e45fd060ca623a3f28858eabd17be891b4fba89 (diff) | |
download | android_packages_apps_Snap-06016438139fba0511dcd1e12646b53287b3bb3f.tar.gz android_packages_apps_Snap-06016438139fba0511dcd1e12646b53287b3bb3f.tar.bz2 android_packages_apps_Snap-06016438139fba0511dcd1e12646b53287b3bb3f.zip |
add flexable ui for parameters
Change-Id: Ifa9862ceb7f9a12b1b9b985fdc737dc1bb679921
Diffstat (limited to 'src/com/android/gallery3d/filtershow/editors')
3 files changed, 236 insertions, 7 deletions
diff --git a/src/com/android/gallery3d/filtershow/editors/Editor.java b/src/com/android/gallery3d/filtershow/editors/Editor.java index 69266fffd..013590c6d 100644 --- a/src/com/android/gallery3d/filtershow/editors/Editor.java +++ b/src/com/android/gallery3d/filtershow/editors/Editor.java @@ -17,18 +17,22 @@ package com.android.gallery3d.filtershow.editors; import android.content.Context; -import android.graphics.drawable.Drawable; -import android.text.Html; +import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; -import android.widget.*; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.PopupMenu; +import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import com.android.gallery3d.R; import com.android.gallery3d.filtershow.PanelController; import com.android.gallery3d.filtershow.cache.ImageLoader; +import com.android.gallery3d.filtershow.controller.Control; import com.android.gallery3d.filtershow.filters.FilterRepresentation; import com.android.gallery3d.filtershow.imageshow.ImageShow; import com.android.gallery3d.filtershow.imageshow.MasterImage; @@ -43,6 +47,7 @@ public class Editor implements OnSeekBarChangeListener { protected ImageShow mImageShow; protected FrameLayout mFrameLayout; protected SeekBar mSeekBar; + Button mEditTitle; protected PanelController mPanelController; protected int mID; private final String LOGTAG = "Editor"; @@ -57,7 +62,7 @@ public class Editor implements OnSeekBarChangeListener { } public String calculateUserMessage(Context context, String effectName, Object parameterValue) { - String apply = context.getString(R.string.apply_effect); + String apply = ""; if (mShowParameter == SHOW_VALUE_INT) { apply += " " + effectName + " " + parameterValue; } else { @@ -83,6 +88,12 @@ public class Editor implements OnSeekBarChangeListener { return true; } + public void setUpEditorUI(View actionButton, View editControl, Button editTitle) { + this.mEditTitle = editTitle; + setMenuIcon(true); + setUtilityPanelUI(actionButton, editControl); + } + public boolean showsPopupIndicator() { return true; } @@ -92,17 +103,28 @@ public class Editor implements OnSeekBarChangeListener { * @param editControl this is the black area for sliders etc */ public void setUtilityPanelUI(View actionButton, View editControl) { - mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar); + + AttributeSet aset; + Context context = editControl.getContext(); + LayoutInflater inflater = + (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + LinearLayout lp = (LinearLayout) inflater.inflate( + R.layout.filtershow_seekbar, (ViewGroup) editControl, true); + mSeekBar = (SeekBar) lp.findViewById(R.id.primarySeekBar); + mSeekBar.setOnSeekBarChangeListener(this); + if (showsSeekBar()) { mSeekBar.setOnSeekBarChangeListener(this); mSeekBar.setVisibility(View.VISIBLE); } else { mSeekBar.setVisibility(View.INVISIBLE); } + Button button = (Button) actionButton.findViewById(R.id.applyEffect); if (button != null) { if (showsPopupIndicator()) { - button.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.filtershow_menu_marker, 0); + button.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, + R.drawable.filtershow_menu_marker, 0); } else { button.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0); } @@ -205,19 +227,29 @@ public class Editor implements OnSeekBarChangeListener { } public void openUtilityPanel(LinearLayout mAccessoryViewList) { + setMenuIcon(false); if (mImageShow != null) { mImageShow.openUtilityPanel(mAccessoryViewList); } } + protected void setMenuIcon(boolean on) { + mEditTitle.setCompoundDrawablesRelativeWithIntrinsicBounds( + 0, 0, on ? R.drawable.filtershow_menu_marker : 0, 0); + } protected void createMenu(int[] strId, View button) { PopupMenu pmenu = new PopupMenu(mContext, button); Menu menu = pmenu.getMenu(); for (int i = 0; i < strId.length; i++) { menu.add(Menu.NONE, Menu.FIRST + i, 0, mContext.getString(strId[i])); } + setMenuIcon(true); + } + public Control[] getControls() { + return null; + } @Override public void onStartTrackingTouch(SeekBar arg0) { diff --git a/src/com/android/gallery3d/filtershow/editors/EditorVignette.java b/src/com/android/gallery3d/filtershow/editors/EditorVignette.java index a7d99e49b..7127b2188 100644 --- a/src/com/android/gallery3d/filtershow/editors/EditorVignette.java +++ b/src/com/android/gallery3d/filtershow/editors/EditorVignette.java @@ -24,7 +24,7 @@ import com.android.gallery3d.filtershow.filters.FilterRepresentation; import com.android.gallery3d.filtershow.filters.FilterVignetteRepresentation; import com.android.gallery3d.filtershow.imageshow.ImageVignette; -public class EditorVignette extends BasicEditor { +public class EditorVignette extends ParametricEditor { public static final int ID = R.id.vignetteEditor; private static final String LOGTAG = "EditorVignettePlanet"; ImageVignette mImageVignette; diff --git a/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java b/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java new file mode 100644 index 000000000..cf00f4a8f --- /dev/null +++ b/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java @@ -0,0 +1,197 @@ +/* + * 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.editors; + +import android.content.Context; +import android.graphics.Point; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.SeekBar; + +import com.android.gallery3d.R; +import com.android.gallery3d.filtershow.controller.ActionSlider; +import com.android.gallery3d.filtershow.controller.BasicSlider; +import com.android.gallery3d.filtershow.controller.Control; +import com.android.gallery3d.filtershow.controller.Parameter; +import com.android.gallery3d.filtershow.controller.ParameterActionAndInt; +import com.android.gallery3d.filtershow.controller.ParameterInteger; +import com.android.gallery3d.filtershow.controller.TitledSlider; +import com.android.gallery3d.filtershow.filters.FilterBasicRepresentation; +import com.android.gallery3d.filtershow.filters.FilterRepresentation; + +import java.lang.reflect.Constructor; +import java.util.HashMap; + +public class ParametricEditor extends Editor { + private int mLayoutID; + private int mViewID; + public static int ID = R.id.editorParametric; + private final String LOGTAG = "ParametricEditor"; + protected Control mControl; + public static final int MINIMUM_WIDTH = 600; + public static final int MINIMUM_HEIGHT = 800; + + static HashMap<String, Class> portraitMap = new HashMap<String, Class>(); + static HashMap<String, Class> landscapeMap = new HashMap<String, Class>(); + static { + portraitMap.put(ParameterInteger.sParameterType, BasicSlider.class); + landscapeMap.put(ParameterInteger.sParameterType, TitledSlider.class); + portraitMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class); + landscapeMap.put(ParameterActionAndInt.sParameterType, ActionSlider.class); + } + + static Constructor getConstructor(Class cl) { + try { + return cl.getConstructor(Context.class, ViewGroup.class); + } catch (Exception e) { + return null; + } + } + + public ParametricEditor() { + super(ID); + } + + protected ParametricEditor(int id) { + super(id); + } + + protected ParametricEditor(int id, int layoutID, int viewID) { + super(id); + mLayoutID = layoutID; + mViewID = viewID; + } + + @Override + public String calculateUserMessage(Context context, String effectName, Object parameterValue) { + String apply = ""; + + if (mShowParameter == SHOW_VALUE_INT & useCompact(context)) { + if (getLocalRepresentation() instanceof FilterBasicRepresentation) { + FilterBasicRepresentation interval = (FilterBasicRepresentation) getLocalRepresentation(); + apply += " " + effectName + " " + interval.getStateRepresentation(); + } else { + apply += " " + effectName + " " + parameterValue; + } + } else { + apply += " " + effectName; + } + return apply; + } + + @Override + public void createEditor(Context context, FrameLayout frameLayout) { + super.createEditor(context, frameLayout); + unpack(mViewID, mLayoutID); + } + + @Override + public void reflectCurrentFilter() { + super.reflectCurrentFilter(); + if (getLocalRepresentation() != null + && getLocalRepresentation() instanceof FilterBasicRepresentation) { + FilterBasicRepresentation interval = (FilterBasicRepresentation) getLocalRepresentation(); + mControl.setPrameter(interval); + } + } + + @Override + public Control[] getControls() { + BasicSlider slider = new BasicSlider(); + return new Control[] { + slider + }; + } + + // TODO: need a better way to decide when which representation + static boolean useCompact(Context context) { + WindowManager w = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)); + Point size = new Point(); + w.getDefaultDisplay().getSize(size); + if (size.x < size.y) { // if tall than wider + return true; + } + if (size.x < MINIMUM_WIDTH) { + return true; + } + if (size.y < MINIMUM_HEIGHT) { + return true; + } + return false; + } + + @Override + public void setUtilityPanelUI(View actionButton, View editControl) { + FilterRepresentation rep = getLocalRepresentation(); + if (this instanceof Parameter) { + control((Parameter) this, editControl); + } else if (rep instanceof Parameter) { + control((Parameter) rep, editControl); + } else { + mSeekBar = new SeekBar(editControl.getContext()); + LayoutParams lp = new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + mSeekBar.setLayoutParams(lp); + ((LinearLayout) editControl).addView(mSeekBar); + mSeekBar.setOnSeekBarChangeListener(this); + } + } + + protected void control(Parameter p, View editControl) { + String pType = p.getParameterType(); + Context context = editControl.getContext(); + Class c = ((useCompact(context)) ? portraitMap : landscapeMap).get(pType); + + if (c != null) { + try { + mControl = (Control) c.newInstance(); + mControl.setUp((ViewGroup) editControl, p, this); + + } catch (Exception e) { + Log.e(LOGTAG, "Error in loading Control ", e); + } + } else { + Log.e(LOGTAG, "Unable to find class for " + pType); + for (String string : portraitMap.keySet()) { + Log.e(LOGTAG, "for " + string + " use " + portraitMap.get(string)); + } + } + } + + @Override + public void commitLocalRepresentation() { + super.commitLocalRepresentation(); + FilterRepresentation rep = getLocalRepresentation(); + } + + @Override + public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) { + } + + @Override + public void onStartTrackingTouch(SeekBar arg0) { + } + + @Override + public void onStopTrackingTouch(SeekBar arg0) { + } +} |