diff options
author | nicolasroard <nicolasroard@google.com> | 2013-01-07 19:43:14 -0800 |
---|---|---|
committer | nicolasroard <nicolasroard@google.com> | 2013-01-08 11:14:48 -0800 |
commit | 9820e7e753b7e1977ef3d2163605431769ce9165 (patch) | |
tree | c33ca6e4d64a2c7f4a61e5a37714919ff21eca6c /src/com/android/gallery3d | |
parent | d3aac52ffb88ced53413d5eef29c641dd6982267 (diff) | |
download | android_packages_apps_Gallery2-9820e7e753b7e1977ef3d2163605431769ce9165.tar.gz android_packages_apps_Gallery2-9820e7e753b7e1977ef3d2163605431769ce9165.tar.bz2 android_packages_apps_Gallery2-9820e7e753b7e1977ef3d2163605431769ce9165.zip |
Refactoring UI editors
bug:7688780
Change-Id: I30f8691788332a01d591435474a84cc352b71138
Diffstat (limited to 'src/com/android/gallery3d')
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(); |