diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/PanelController.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/PanelController.java | 228 |
1 files changed, 127 insertions, 101 deletions
diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java index a0b13fb84..18a9585a6 100644 --- a/src/com/android/gallery3d/filtershow/PanelController.java +++ b/src/com/android/gallery3d/filtershow/PanelController.java @@ -16,9 +16,9 @@ package com.android.gallery3d.filtershow; +import android.annotation.TargetApi; import android.content.Context; import android.text.Html; -import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewPropertyAnimator; @@ -27,6 +27,7 @@ import android.widget.TextView; import com.android.gallery3d.R; import com.android.gallery3d.filtershow.editors.Editor; +import com.android.gallery3d.filtershow.filters.FilterRepresentation; import com.android.gallery3d.filtershow.filters.ImageFilter; import com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet; import com.android.gallery3d.filtershow.imageshow.ImageCrop; @@ -34,7 +35,6 @@ import com.android.gallery3d.filtershow.imageshow.ImageShow; import com.android.gallery3d.filtershow.imageshow.MasterImage; import com.android.gallery3d.filtershow.presets.ImagePreset; import com.android.gallery3d.filtershow.ui.FilterIconButton; -import com.android.gallery3d.filtershow.ui.FramedTextButton; import java.util.HashMap; import java.util.Vector; @@ -49,6 +49,14 @@ public class PanelController implements OnClickListener { private boolean mDisableFilterButtons = false; private boolean mFixedAspect = false; + public static boolean useAnimations() { + int currentapiVersion = android.os.Build.VERSION.SDK_INT; + if (currentapiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN) { + return true; + } + return false; + } + public void setFixedAspect(boolean t) { mFixedAspect = t; } @@ -87,16 +95,28 @@ public class PanelController implements OnClickListener { } else { delta = w; } - anim.x(delta); + if (PanelController.useAnimations()) { + anim.x(delta); + } else { + mContainer.setX(delta); + } } else if (move == VERTICAL_MOVE) { - anim.y(h); - } - anim.setDuration(ANIM_DURATION).withLayer().withEndAction(new Runnable() { - @Override - public void run() { - mContainer.setVisibility(View.GONE); + if (PanelController.useAnimations()) { + anim.y(h); + } else { + mContainer.setY(h); } - }); + } + if (PanelController.useAnimations()) { + anim.setDuration(ANIM_DURATION).withLayer().withEndAction(new Runnable() { + @Override + public void run() { + mContainer.setVisibility(View.GONE); + } + }); + } else { + mContainer.setVisibility(View.GONE); + } return anim; } @@ -108,18 +128,20 @@ public class PanelController implements OnClickListener { ViewPropertyAnimator anim = mContainer.animate(); int w = mRowPanel.getWidth(); int h = mRowPanel.getHeight(); - if (move == HORIZONTAL_MOVE) { - if (oldPos < mPosition) { - mContainer.setX(w); - } else { - mContainer.setX(-w); + if (useAnimations()) { + if (move == HORIZONTAL_MOVE) { + if (oldPos < mPosition) { + mContainer.setX(w); + } else { + mContainer.setX(-w); + } + anim.x(0); + } else if (move == VERTICAL_MOVE) { + mContainer.setY(h); + anim.y(0); } - anim.x(0); - } else if (move == VERTICAL_MOVE) { - mContainer.setY(h); - anim.y(0); + anim.setDuration(ANIM_DURATION).withLayer(); } - anim.setDuration(ANIM_DURATION).withLayer(); return anim; } } @@ -187,12 +209,16 @@ public class PanelController implements OnClickListener { mView.setY(0); int h = mRowPanel.getHeight(); anim.y(-h); - anim.setDuration(ANIM_DURATION).withLayer().withEndAction(new Runnable() { - @Override - public void run() { - mView.setVisibility(View.GONE); - } - }); + if (PanelController.useAnimations()) { + anim.setDuration(ANIM_DURATION).withLayer().withEndAction(new Runnable() { + @Override + public void run() { + mView.setVisibility(View.GONE); + } + }); + } else { + mView.setVisibility(View.GONE); + } mSelected = false; return anim; } @@ -203,10 +229,13 @@ public class PanelController implements OnClickListener { mView.setX(0); mView.setY(-h); updateText(); + mSelected = true; ViewPropertyAnimator anim = mView.animate(); anim.y(0); - anim.setDuration(ANIM_DURATION).withLayer(); - mSelected = true; + anim.setDuration(ANIM_DURATION); + if (PanelController.useAnimations()) { + anim.withLayer(); + } return anim; } @@ -233,7 +262,6 @@ public class PanelController implements OnClickListener { private View mCurrentPanel = null; private View mRowPanel = null; private UtilityPanel mUtilityPanel = null; - private MasterImage mMasterImage = MasterImage.getImage(); private ImageShow mCurrentImage = null; private Editor mCurrentEditor = null; private FilterShowActivity mActivity = null; @@ -294,9 +322,9 @@ public class PanelController implements OnClickListener { if (mUtilityPanel == null || !mUtilityPanel.selected()) { return true; } - HistoryAdapter adapter = mMasterImage.getHistory(); + HistoryAdapter adapter = MasterImage.getImage().getHistory(); int position = adapter.undo(); - mMasterImage.onHistoryItemClick(position); + MasterImage.getImage().onHistoryItemClick(position); showPanel(mCurrentPanel); mCurrentImage.select(); if (mCurrentEditor != null) { @@ -345,6 +373,7 @@ public class PanelController implements OnClickListener { public ImageShow showImageView(int id) { ImageShow image = null; + mActivity.hideImageViews(); for (View view : mImageViews) { if (view.getId() == id) { view.setVisibility(View.VISIBLE); @@ -358,7 +387,8 @@ public class PanelController implements OnClickListener { public void showDefaultImageView() { showImageView(R.id.imageShow).setShowControls(false); - mMasterImage.setCurrentFilter(null); + MasterImage.getImage().setCurrentFilter(null); + MasterImage.getImage().setCurrentFilterRepresentation(null); } public void showPanel(View view) { @@ -368,10 +398,14 @@ public class PanelController implements OnClickListener { if (mUtilityPanel != null && mUtilityPanel.selected()) { ViewPropertyAnimator anim1 = mUtilityPanel.unselect(); removedUtilityPanel = true; - anim1.start(); + if (anim1 != null) { + anim1.start(); + } if (mCurrentPanel == view) { ViewPropertyAnimator anim2 = current.select(-1, VERTICAL_MOVE); - anim2.start(); + if (anim2 != null) { + anim2.start(); + } showDefaultImageView(); } } @@ -387,77 +421,75 @@ public class PanelController implements OnClickListener { currentPos = current.getPosition(); } ViewPropertyAnimator anim1 = panel.select(currentPos, HORIZONTAL_MOVE); - anim1.start(); + if (anim1 != null) { + anim1.start(); + } if (current != null) { ViewPropertyAnimator anim2 = current.unselect(panel.getPosition(), HORIZONTAL_MOVE); - anim2.start(); + if (anim2 != null) { + anim2.start(); + } } } else { ViewPropertyAnimator anim = panel.select(-1, VERTICAL_MOVE); - anim.start(); + if (anim != null) { + anim.start(); + } } + showDefaultImageView(); mCurrentPanel = view; } public ImagePreset getImagePreset() { - return mMasterImage.getPreset(); - } - - public ImageFilter setImagePreset(ImageFilter filter, String name) { - ImagePreset copy = new ImagePreset(getImagePreset()); - copy.add(filter); - copy.setHistoryName(name); - copy.setIsFx(false); - mMasterImage.setPreset(copy, true); - return filter; + return MasterImage.getImage().getPreset(); } - // TODO: remove this. - public void ensureFilter(String name) { - ImagePreset preset = getImagePreset(); - ImageFilter filter = preset.getFilter(name); - if (filter != null) { - // If we already have a filter, we might still want - // to push it onto the history stack. - ImagePreset copy = new ImagePreset(getImagePreset()); - copy.setHistoryName(name); - mMasterImage.setPreset(copy, true); - filter = copy.getFilter(name); - } - - if (filter == null) { - ImageFilter filterInstance = mFilters.get(name); - if (filterInstance != null) { - try { - ImageFilter newFilter = filterInstance.clone(); - newFilter.reset(); - filter = setImagePreset(newFilter, name); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - } - } + public void useFilterRepresentation(FilterRepresentation filterRepresentation) { + if (filterRepresentation == null) { + return; } - if (filter != null) { - mMasterImage.setCurrentFilter(filter); + if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { + return; } + ImagePreset oldPreset = MasterImage.getImage().getPreset(); + ImagePreset copy = new ImagePreset(oldPreset); + FilterRepresentation representation = copy.getRepresentation(filterRepresentation); + if (representation == null) { + copy.addFilter(filterRepresentation); + } else { + if (filterRepresentation.allowsMultipleInstances()) { + representation.updateTempParametersFrom(filterRepresentation); + copy.setHistoryName(filterRepresentation.getName()); + } + filterRepresentation = representation; + } + MasterImage.getImage().setPreset(copy, true); + MasterImage.getImage().setCurrentFilterRepresentation(filterRepresentation); } public void showComponent(View view) { boolean doPanelTransition = true; if (view instanceof FilterIconButton) { - ImageFilter f = ((FilterIconButton) view).getImageFilter(); - doPanelTransition = f.showUtilityPanel(); + FilterRepresentation f = ((FilterIconButton) view).getFilterRepresentation(); + if (f != null) { + // FIXME: this check shouldn't be necessary (f shouldn't be null) + doPanelTransition = f.showUtilityPanel(); + } } - if (mUtilityPanel != null && !mUtilityPanel.selected() && doPanelTransition ) { + if (mUtilityPanel != null && !mUtilityPanel.selected() && doPanelTransition) { Panel current = mPanels.get(mCurrentPanel); ViewPropertyAnimator anim1 = current.unselect(-1, VERTICAL_MOVE); - anim1.start(); + if (anim1 != null) { + anim1.start(); + } if (mUtilityPanel != null) { ViewPropertyAnimator anim2 = mUtilityPanel.select(); - anim2.start(); + if (anim2 != null) { + anim2.start(); + } } } @@ -469,22 +501,23 @@ public class PanelController implements OnClickListener { if (view instanceof FilterIconButton) { mCurrentEditor = null; FilterIconButton component = (FilterIconButton) view; - ImageFilter filter = component.getImageFilter(); - if (filter.getEditingViewId() != 0) { - if (mEditorPlaceHolder.contains(filter.getEditingViewId())) { - mCurrentEditor = mEditorPlaceHolder.showEditor(filter.getEditingViewId()); - mCurrentImage = mCurrentEditor.getImageShow(); - mCurrentEditor.setPanelController(this); - } else { - mCurrentImage = showImageView(filter.getEditingViewId()); + FilterRepresentation representation = component.getFilterRepresentation(); + if (representation != null) { + mUtilityPanel.setEffectName(representation.getName()); + mUtilityPanel.setShowParameter(representation.showParameterValue()); + + if (representation.getEditorId() != 0) { + if (mEditorPlaceHolder.contains(representation.getEditorId())) { + mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId()); + mCurrentImage = mCurrentEditor.getImageShow(); + mCurrentEditor.setPanelController(this); + } else { + mCurrentImage = showImageView(representation.getEditorId()); + } } - mCurrentImage.setShowControls(filter.showEditingControls()); - String ename = mCurrentImage.getContext().getString(filter.getTextId()); - mUtilityPanel.setEffectName(ename); + mCurrentImage.setShowControls(representation.showEditingControls()); + mUtilityPanel.setShowParameter(representation.showParameterValue()); - mUtilityPanel.setShowParameter(filter.showParameterValue()); - ImageFilter currentFilter = mMasterImage.getPreset().getFilter(filter.getName()); - mMasterImage.setCurrentFilter(currentFilter); mCurrentImage.select(); if (mCurrentEditor != null) { mCurrentEditor.reflectCurrentFilter(); @@ -503,7 +536,6 @@ public class PanelController implements OnClickListener { mCurrentImage = showImageView(R.id.imageTinyPlanet).setShowControls(true); String ename = mCurrentImage.getContext().getString(R.string.tinyplanet); mUtilityPanel.setEffectName(ename); - ensureFilter(ename); if (!mDisableFilterButtons) { mActivity.disableFilterButtons(); mDisableFilterButtons = true; @@ -541,15 +573,8 @@ public class PanelController implements OnClickListener { mUtilityPanel.setShowParameter(false); break; } - case R.id.redEyeButton: { - mCurrentImage = showImageView(R.id.imageRedEyes).setShowControls(true); - String ename = mCurrentImage.getContext().getString(R.string.redeye); - mUtilityPanel.setEffectName(ename); - ensureFilter(ename); - break; - } case R.id.applyEffect: { - if (mMasterImage.getCurrentFilter() instanceof ImageFilterTinyPlanet) { + if (MasterImage.getImage().getCurrentFilter() instanceof ImageFilterTinyPlanet) { mActivity.saveImage(); } else { if (mCurrentImage instanceof ImageCrop) { @@ -557,6 +582,7 @@ public class PanelController implements OnClickListener { } showPanel(mCurrentPanel); } + MasterImage.getImage().invalidateFiltersOnly(); break; } } |