summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-01-07 19:43:14 -0800
committernicolasroard <nicolasroard@google.com>2013-01-08 11:14:48 -0800
commit962f4d03e92a3aa38202950053b1557e12860624 (patch)
treee86b53a61d9fd82d626cda9b7e7501ca669501a4 /src/com/android/gallery3d/filtershow
parenta4205e4eab691b402e7a6dc1e913a611b7fdc45f (diff)
downloadandroid_packages_apps_Snap-962f4d03e92a3aa38202950053b1557e12860624.tar.gz
android_packages_apps_Snap-962f4d03e92a3aa38202950053b1557e12860624.tar.bz2
android_packages_apps_Snap-962f4d03e92a3aa38202950053b1557e12860624.zip
Refactoring UI editors
bug:7688780 Change-Id: I30f8691788332a01d591435474a84cc352b71138
Diffstat (limited to 'src/com/android/gallery3d/filtershow')
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java6
-rw-r--r--src/com/android/gallery3d/filtershow/PanelController.java174
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java114
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java13
-rw-r--r--src/com/android/gallery3d/filtershow/ui/FramedTextButton.java18
-rw-r--r--src/com/android/gallery3d/filtershow/ui/ImageCurves.java51
6 files changed, 214 insertions, 162 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index 475c4f153..bc90a31ba 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -344,8 +344,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mPanelController.addFilter(new ImageFilterRedEye());
mPanelController.addView(findViewById(R.id.applyEffect));
- mPanelController.addView(findViewById(R.id.pickCurvesChannel));
- mPanelController.addView(findViewById(R.id.aspect));
findViewById(R.id.resetOperationsButton).setOnClickListener(
createOnClickResetOperationsButton());
@@ -367,8 +365,8 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mImageTinyPlanet.setSeekBar(seekBar);
mPanelController.setRowPanel(findViewById(R.id.secondRowPanel));
mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList),
- findViewById(R.id.applyEffect), findViewById(R.id.aspect),
- findViewById(R.id.pickCurvesChannel));
+ findViewById(R.id.panelAccessoryViewList),
+ findViewById(R.id.applyEffect));
mPanelController.setMasterImage(mImageShow);
mPanelController.setCurrentPanel(mFxButton);
Intent intent = getIntent();
diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java
index 94259e91d..c7b294e56 100644
--- a/src/com/android/gallery3d/filtershow/PanelController.java
+++ b/src/com/android/gallery3d/filtershow/PanelController.java
@@ -18,35 +18,19 @@ package com.android.gallery3d.filtershow;
import android.content.Context;
import android.text.Html;
-import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewPropertyAnimator;
-import android.widget.PopupMenu;
+import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.filters.ImageFilter;
-import com.android.gallery3d.filtershow.filters.ImageFilterBwFilter;
-import com.android.gallery3d.filtershow.filters.ImageFilterContrast;
-import com.android.gallery3d.filtershow.filters.ImageFilterCurves;
-import com.android.gallery3d.filtershow.filters.ImageFilterExposure;
-import com.android.gallery3d.filtershow.filters.ImageFilterHue;
-import com.android.gallery3d.filtershow.filters.ImageFilterNegative;
-import com.android.gallery3d.filtershow.filters.ImageFilterRedEye;
-import com.android.gallery3d.filtershow.filters.ImageFilterSaturated;
-import com.android.gallery3d.filtershow.filters.ImageFilterShadows;
-import com.android.gallery3d.filtershow.filters.ImageFilterSharpen;
import com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet;
-import com.android.gallery3d.filtershow.filters.ImageFilterVibrance;
-import com.android.gallery3d.filtershow.filters.ImageFilterVignette;
-import com.android.gallery3d.filtershow.filters.ImageFilterWBalance;
import com.android.gallery3d.filtershow.imageshow.ImageCrop;
import com.android.gallery3d.filtershow.imageshow.ImageShow;
import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter;
import com.android.gallery3d.filtershow.presets.ImagePreset;
-import com.android.gallery3d.filtershow.ui.FramedTextButton;
-import com.android.gallery3d.filtershow.ui.ImageCurves;
import java.util.HashMap;
import java.util.Vector;
@@ -139,102 +123,33 @@ public class PanelController implements OnClickListener {
class UtilityPanel {
private final Context mContext;
private final View mView;
+ private final LinearLayout mAccessoryViewList;
+ private Vector<View> mAccessoryViews = new Vector<View>();
private final TextView mTextView;
private boolean mSelected = false;
private String mEffectName = null;
private int mParameterValue = 0;
private boolean mShowParameterValue = false;
- private View mAspectButton = null;
- private View mCurvesButton = null;
boolean firstTimeCropDisplayed = true;
- public UtilityPanel(Context context, View view, View textView,
- View aspectButton, View curvesButton) {
+ public UtilityPanel(Context context, View view, View accessoryViewList,
+ View textView) {
mContext = context;
mView = view;
+ mAccessoryViewList = (LinearLayout) accessoryViewList;
mTextView = (TextView) textView;
- mAspectButton = aspectButton;
- mCurvesButton = curvesButton;
}
public boolean selected() {
return mSelected;
}
- public void setAspectButton(FramedTextButton button, int itemId) {
- ImageCrop imageCrop = (ImageCrop) mCurrentImage;
- switch (itemId) {
- case R.id.crop_menu_1to1: {
- String t = mContext.getString(R.string.aspect1to1_effect);
- button.setText(t);
- imageCrop.apply(1, 1);
- imageCrop.setAspectString(t);
- break;
- }
- case R.id.crop_menu_4to3: {
- String t = mContext.getString(R.string.aspect4to3_effect);
- button.setText(t);
- imageCrop.apply(4, 3);
- imageCrop.setAspectString(t);
- break;
- }
- case R.id.crop_menu_3to4: {
- String t = mContext.getString(R.string.aspect3to4_effect);
- button.setText(t);
- imageCrop.apply(3, 4);
- imageCrop.setAspectString(t);
- break;
- }
- case R.id.crop_menu_5to7: {
- String t = mContext.getString(R.string.aspect5to7_effect);
- button.setText(t);
- imageCrop.apply(5, 7);
- imageCrop.setAspectString(t);
- break;
- }
- case R.id.crop_menu_7to5: {
- String t = mContext.getString(R.string.aspect7to5_effect);
- button.setText(t);
- imageCrop.apply(7, 5);
- imageCrop.setAspectString(t);
- break;
- }
- case R.id.crop_menu_none: {
- String t = mContext.getString(R.string.aspectNone_effect);
- button.setText(t);
- imageCrop.applyClear();
- imageCrop.setAspectString(t);
- break;
- }
- case R.id.crop_menu_original: {
- String t = mContext.getString(R.string.aspectOriginal_effect);
- button.setText(t);
- imageCrop.applyOriginal();
- imageCrop.setAspectString(t);
- break;
- }
+ public void hideAccessoryViews() {
+ int childCount = mAccessoryViewList.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View child = mAccessoryViewList.getChildAt(i);
+ child.setVisibility(View.GONE);
}
- imageCrop.invalidate();
- }
-
- public void showAspectButtons() {
- if (mAspectButton != null)
- mAspectButton.setVisibility(View.VISIBLE);
- }
-
- public void hideAspectButtons() {
- if (mAspectButton != null)
- mAspectButton.setVisibility(View.GONE);
- }
-
- public void showCurvesButtons() {
- if (mCurvesButton != null)
- mCurvesButton.setVisibility(View.VISIBLE);
- }
-
- public void hideCurvesButtons() {
- if (mCurvesButton != null)
- mCurvesButton.setVisibility(View.GONE);
}
public void onNewValue(int value) {
@@ -290,6 +205,7 @@ public class PanelController implements OnClickListener {
mSelected = true;
return anim;
}
+
}
class ViewType {
@@ -397,10 +313,10 @@ public class PanelController implements OnClickListener {
mRowPanel = rowPanel;
}
- public void setUtilityPanel(Context context, View utilityPanel, View textView,
- View aspectButton, View curvesButton) {
- mUtilityPanel = new UtilityPanel(context, utilityPanel, textView,
- aspectButton, curvesButton);
+ public void setUtilityPanel(Context context, View utilityPanel,
+ View accessoryViewList, View textView) {
+ mUtilityPanel = new UtilityPanel(context, utilityPanel,
+ accessoryViewList, textView);
}
public void setMasterImage(ImageShow imageShow) {
@@ -516,33 +432,6 @@ public class PanelController implements OnClickListener {
}
}
- private void showCurvesPopupMenu(final ImageCurves curves, final FramedTextButton anchor) {
- PopupMenu popupMenu = new PopupMenu(mCurrentImage.getContext(), anchor);
- popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_curves, popupMenu.getMenu());
- popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- curves.setChannel(item.getItemId());
- anchor.setTextFrom(item.getItemId());
- return true;
- }
- });
- popupMenu.show();
- }
-
- private void showCropPopupMenu(final FramedTextButton anchor) {
- PopupMenu popupMenu = new PopupMenu(mCurrentImage.getContext(), anchor);
- popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_crop, popupMenu.getMenu());
- popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- mUtilityPanel.setAspectButton(anchor, item.getItemId());
- return true;
- }
- });
- popupMenu.show();
- }
-
public void showComponent(View view) {
if (mUtilityPanel != null && !mUtilityPanel.selected()) {
Panel current = mPanels.get(mCurrentPanel);
@@ -554,22 +443,10 @@ public class PanelController implements OnClickListener {
}
}
- if (view.getId() == R.id.pickCurvesChannel) {
- ImageCurves curves = (ImageCurves) showImageView(R.id.imageCurves);
- showCurvesPopupMenu(curves, (FramedTextButton) view);
- return;
- }
-
- if (view.getId() == R.id.aspect) {
- showCropPopupMenu((FramedTextButton) view);
- return;
- }
-
if (mCurrentImage != null) {
mCurrentImage.unselect();
}
- mUtilityPanel.hideAspectButtons();
- mUtilityPanel.hideCurvesButtons();
+ mUtilityPanel.hideAccessoryViews();
if (view instanceof ImageSmallFilter) {
ImageSmallFilter component = (ImageSmallFilter) view;
@@ -579,10 +456,8 @@ public class PanelController implements OnClickListener {
mCurrentImage.setShowControls(filter.showEditingControls());
String ename = mCurrentImage.getContext().getString(filter.getTextId());
mUtilityPanel.setEffectName(ename);
- if (view.getId() == R.id.curvesButtonRGB) {
- // TODO: delegate to the filter / editing view the management of the
- // panel accessory view
- mUtilityPanel.showCurvesButtons();
+ if (mCurrentImage.useUtilityPanel()) {
+ mCurrentImage.openUtilityPanel(mUtilityPanel.mAccessoryViewList);
}
mUtilityPanel.setShowParameter(filter.showParameterValue());
ensureFilter(ename);
@@ -618,9 +493,7 @@ public class PanelController implements OnClickListener {
((ImageCrop) mCurrentImage).clear();
mUtilityPanel.firstTimeCropDisplayed = false;
}
- if (!mFixedAspect) {
- mUtilityPanel.showAspectButtons();
- }
+ ((ImageCrop) mCurrentImage).setFixedAspect(mFixedAspect);
break;
}
case R.id.rotateButton: {
@@ -643,10 +516,6 @@ public class PanelController implements OnClickListener {
ensureFilter(ename);
break;
}
- case R.id.aspect: {
- mUtilityPanel.showAspectButtons();
- break;
- }
case R.id.applyEffect: {
if (mMasterImage.getCurrentFilter() instanceof ImageFilterTinyPlanet) {
mActivity.saveImage();
@@ -659,6 +528,9 @@ public class PanelController implements OnClickListener {
break;
}
}
+ if (mCurrentImage.useUtilityPanel()) {
+ mCurrentImage.openUtilityPanel(mUtilityPanel.mAccessoryViewList);
+ }
mCurrentImage.select();
}
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java b/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
index cd1ad5178..e2f7db01c 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
@@ -27,9 +27,17 @@ import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.PopupMenu;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.CropExtras;
+import com.android.gallery3d.filtershow.ui.FramedTextButton;
public class ImageCrop extends ImageGeometry {
private static final boolean LOGV = false;
@@ -75,6 +83,8 @@ public class ImageCrop extends ImageGeometry {
private String mAspect = "";
private int mAspectTextSize = 24;
+ private boolean mFixedAspect = false;
+
public void setAspectTextSize(int textSize) {
mAspectTextSize = textSize;
}
@@ -665,4 +675,108 @@ public class ImageCrop extends ImageGeometry {
}
}
+ private void setAspectButton(Button button, int itemId) {
+ switch (itemId) {
+ case R.id.crop_menu_1to1: {
+ String t = getActivity().getString(R.string.aspect1to1_effect);
+ button.setText(t);
+ apply(1, 1);
+ setAspectString(t);
+ break;
+ }
+ case R.id.crop_menu_4to3: {
+ String t = getActivity().getString(R.string.aspect4to3_effect);
+ button.setText(t);
+ apply(4, 3);
+ setAspectString(t);
+ break;
+ }
+ case R.id.crop_menu_3to4: {
+ String t = getActivity().getString(R.string.aspect3to4_effect);
+ button.setText(t);
+ apply(3, 4);
+ setAspectString(t);
+ break;
+ }
+ case R.id.crop_menu_5to7: {
+ String t = getActivity().getString(R.string.aspect5to7_effect);
+ button.setText(t);
+ apply(5, 7);
+ setAspectString(t);
+ break;
+ }
+ case R.id.crop_menu_7to5: {
+ String t = getActivity().getString(R.string.aspect7to5_effect);
+ button.setText(t);
+ apply(7, 5);
+ setAspectString(t);
+ break;
+ }
+ case R.id.crop_menu_none: {
+ String t = getActivity().getString(R.string.aspectNone_effect);
+ button.setText(t);
+ applyClear();
+ setAspectString(t);
+ break;
+ }
+ case R.id.crop_menu_original: {
+ String t = getActivity().getString(R.string.aspectOriginal_effect);
+ button.setText(t);
+ applyOriginal();
+ setAspectString(t);
+ break;
+ }
+ }
+ invalidate();
+ }
+
+ public void setFixedAspect(boolean fixedAspect) {
+ mFixedAspect = fixedAspect;
+ }
+
+ @Override
+ public boolean useUtilityPanel() {
+ // Only shows the aspect ratio popup if we are not fixed
+ return !mFixedAspect;
+ }
+
+ private void showPopupMenu(LinearLayout accessoryViewList) {
+ final Button button = (Button) accessoryViewList.findViewById(
+ R.id.cropUtilityButton);
+ if (button == null) {
+ return;
+ }
+ PopupMenu popupMenu = new PopupMenu(getActivity(), button);
+ popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_crop, popupMenu.getMenu());
+ popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ setAspectButton(button, item.getItemId());
+ return true;
+ }
+ });
+ popupMenu.show();
+ }
+
+ @Override
+ public void openUtilityPanel(final LinearLayout accessoryViewList) {
+ View view = accessoryViewList.findViewById(R.id.cropUtilityButton);
+ if (view == null) {
+ LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService
+ (Context.LAYOUT_INFLATER_SERVICE);
+ view = inflater.inflate(R.layout.filtershow_crop_button, accessoryViewList, false);
+ accessoryViewList.addView(view, view.getLayoutParams());
+ view.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ showPopupMenu(accessoryViewList);
+ }
+ });
+ }
+
+ if (view != null) {
+ view.setVisibility(View.VISIBLE);
+ }
+ }
+
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 4c74b16ca..69214bd11 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -32,6 +32,7 @@ import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
+import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
@@ -122,6 +123,10 @@ public class ImageShow extends View implements OnGestureListener,
mBackgroundColor = value;
}
+ public FilterShowActivity getActivity() {
+ return mActivity;
+ }
+
public int getDefaultBackgroundColor() {
return mBackgroundColor;
}
@@ -823,4 +828,12 @@ public class ImageShow extends View implements OnGestureListener,
return false;
}
+ public boolean useUtilityPanel() {
+ return false;
+ }
+
+ public void openUtilityPanel(final LinearLayout accessoryViewList) {
+ // TODO Auto-generated method stub
+ }
+
}
diff --git a/src/com/android/gallery3d/filtershow/ui/FramedTextButton.java b/src/com/android/gallery3d/filtershow/ui/FramedTextButton.java
index c717b6e61..c1e4109d2 100644
--- a/src/com/android/gallery3d/filtershow/ui/FramedTextButton.java
+++ b/src/com/android/gallery3d/filtershow/ui/FramedTextButton.java
@@ -37,8 +37,6 @@ public class FramedTextButton extends ImageButton {
private static int mTrianglePadding = 2;
private static int mTriangleSize = 30;
- private Context mContext = null;
-
public static void setTextSize(int value) {
mTextSize = value;
}
@@ -63,28 +61,34 @@ public class FramedTextButton extends ImageButton {
public void setTextFrom(int itemId) {
switch (itemId) {
case R.id.curve_menu_rgb: {
- setText(mContext.getString(R.string.curves_channel_rgb));
+ setText(getContext().getString(R.string.curves_channel_rgb));
break;
}
case R.id.curve_menu_red: {
- setText(mContext.getString(R.string.curves_channel_red));
+ setText(getContext().getString(R.string.curves_channel_red));
break;
}
case R.id.curve_menu_green: {
- setText(mContext.getString(R.string.curves_channel_green));
+ setText(getContext().getString(R.string.curves_channel_green));
break;
}
case R.id.curve_menu_blue: {
- setText(mContext.getString(R.string.curves_channel_blue));
+ setText(getContext().getString(R.string.curves_channel_blue));
break;
}
}
invalidate();
}
+ public FramedTextButton(Context context) {
+ this(context, null);
+ }
+
public FramedTextButton(Context context, AttributeSet attrs) {
super(context, attrs);
- mContext = context;
+ if (attrs == null) {
+ return;
+ }
TypedArray a = getContext().obtainStyledAttributes(
attrs, R.styleable.ImageButtonTitle);
diff --git a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
index 7b04133ce..5fbfc900f 100644
--- a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
+++ b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
@@ -26,7 +26,13 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.os.AsyncTask;
import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
import android.view.MotionEvent;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.PopupMenu;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.filters.ImageFilterCurves;
@@ -62,6 +68,51 @@ public class ImageCurves extends ImageSlave {
resetCurve();
}
+ @Override
+ public boolean useUtilityPanel() {
+ return true;
+ }
+
+ private void showPopupMenu(LinearLayout accessoryViewList) {
+ final FramedTextButton button = (FramedTextButton) accessoryViewList.findViewById(
+ R.id.curvesUtilityButton);
+ if (button == null) {
+ return;
+ }
+ PopupMenu popupMenu = new PopupMenu(getActivity(), button);
+ popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_curves, popupMenu.getMenu());
+ popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ setChannel(item.getItemId());
+ button.setTextFrom(item.getItemId());
+ return true;
+ }
+ });
+ popupMenu.show();
+ }
+
+ @Override
+ public void openUtilityPanel(final LinearLayout accessoryViewList) {
+ View view = accessoryViewList.findViewById(R.id.curvesUtilityButton);
+ if (view == null) {
+ LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService
+ (Context.LAYOUT_INFLATER_SERVICE);
+ view = inflater.inflate(R.layout.filtershow_curves_button, accessoryViewList, false);
+ accessoryViewList.addView(view, view.getLayoutParams());
+ view.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ showPopupMenu(accessoryViewList);
+ }
+ });
+ }
+
+ if (view != null) {
+ view.setVisibility(View.VISIBLE);
+ }
+ }
+
public void nextChannel() {
mCurrentCurveIndex = ((mCurrentCurveIndex + 1) % 4);
invalidate();