summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2012-10-05 03:48:34 -0700
committernicolasroard <nicolasroard@google.com>2012-10-05 12:23:05 -0700
commit3eb4f642da18e1d4510b251fb136344595456372 (patch)
tree51fac52f623abe4a5d8e5125f273df6f01f74dce
parent7f905f7a79968a713c4da7c80646d92a9b87dcc6 (diff)
downloadandroid_packages_apps_Snap-3eb4f642da18e1d4510b251fb136344595456372.tar.gz
android_packages_apps_Snap-3eb4f642da18e1d4510b251fb136344595456372.tar.bz2
android_packages_apps_Snap-3eb4f642da18e1d4510b251fb136344595456372.zip
New UI...
bug:7289525 bug:7289361 Change-Id: Ifde15d57f0d307417a1c7a7ae9b1122be873558f
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java539
-rw-r--r--src/com/android/gallery3d/filtershow/PanelController.java474
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java119
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java20
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java29
-rw-r--r--src/com/android/gallery3d/filtershow/presets/ImagePreset.java4
-rw-r--r--src/com/android/gallery3d/filtershow/ui/ImageCurves.java24
-rw-r--r--src/com/android/gallery3d/filtershow/ui/SliderController.java11
8 files changed, 730 insertions, 490 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index 964c950dc..641259a48 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -1,26 +1,6 @@
package com.android.gallery3d.filtershow;
-import java.io.File;
-import java.io.IOException;
-import java.util.Vector;
-
-import com.android.gallery3d.filtershow.cache.ImageLoader;
-import com.android.gallery3d.filtershow.filters.*;
-import com.android.gallery3d.filtershow.imageshow.ImageBorder;
-import com.android.gallery3d.filtershow.imageshow.ImageShow;
-import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter;
-import com.android.gallery3d.filtershow.imageshow.ImageStraighten;
-import com.android.gallery3d.filtershow.imageshow.ImageZoom;
-import com.android.gallery3d.filtershow.presets.*;
-import com.android.gallery3d.filtershow.provider.SharedImageProvider;
-import com.android.gallery3d.filtershow.tools.SaveCopyTask;
-import com.android.gallery3d.filtershow.ui.ImageCurves;
-import com.android.gallery3d.R;
-
-import android.net.Uri;
-import android.os.Bundle;
-import android.renderscript.RenderScript;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
@@ -28,7 +8,8 @@ import android.content.ContentValues;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
-import android.graphics.drawable.NinePatchDrawable;
+import android.net.Uri;
+import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
@@ -40,20 +21,44 @@ import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
-import android.widget.Button;
-import android.widget.FrameLayout;
-import android.widget.FrameLayout.LayoutParams;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
+import android.widget.SeekBar;
import android.widget.ShareActionProvider;
import android.widget.ShareActionProvider.OnShareTargetSelectedListener;
import android.widget.Toast;
+import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.cache.ImageLoader;
+import com.android.gallery3d.filtershow.filters.ImageFilter;
+import com.android.gallery3d.filtershow.filters.ImageFilterBorder;
+import com.android.gallery3d.filtershow.filters.ImageFilterRS;
+import com.android.gallery3d.filtershow.imageshow.ImageBorder;
+import com.android.gallery3d.filtershow.imageshow.ImageShow;
+import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter;
+import com.android.gallery3d.filtershow.imageshow.ImageStraighten;
+import com.android.gallery3d.filtershow.imageshow.ImageZoom;
+import com.android.gallery3d.filtershow.presets.ImagePreset;
+import com.android.gallery3d.filtershow.presets.ImagePresetBW;
+import com.android.gallery3d.filtershow.presets.ImagePresetBWBlue;
+import com.android.gallery3d.filtershow.presets.ImagePresetBWGreen;
+import com.android.gallery3d.filtershow.presets.ImagePresetBWRed;
+import com.android.gallery3d.filtershow.presets.ImagePresetOld;
+import com.android.gallery3d.filtershow.presets.ImagePresetSaturated;
+import com.android.gallery3d.filtershow.presets.ImagePresetXProcessing;
+import com.android.gallery3d.filtershow.provider.SharedImageProvider;
+import com.android.gallery3d.filtershow.tools.SaveCopyTask;
+import com.android.gallery3d.filtershow.ui.ImageCurves;
+
+import java.io.File;
+import java.util.Vector;
+
@TargetApi(16)
public class FilterShowActivity extends Activity implements OnItemClickListener,
OnShareTargetSelectedListener {
+ private final PanelController mPanelController = new PanelController();
private ImageLoader mImageLoader = null;
private ImageShow mImageShow = null;
private ImageCurves mImageCurves = null;
@@ -65,34 +70,23 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
private View mListBorders = null;
private View mListGeometry = null;
private View mListColors = null;
+ private View mListFilterButtons = null;
private ImageButton mFxButton = null;
private ImageButton mBorderButton = null;
private ImageButton mGeometryButton = null;
private ImageButton mColorsButton = null;
- private ImageButton mVignetteButton = null;
- private ImageButton mCurvesButtonRGB = null;
- private ImageButton mSharpenButton = null;
-
- private ImageButton mContrastButton = null;
- private ImageButton mSaturationButton = null;
- private ImageButton mTintButton = null;
- private ImageButton mVibranceButton = null;
- private ImageButton mExposureButton = null;
- private ImageButton mShadowRecoveryButton = null;
-
private static final int SELECT_PICTURE = 1;
private static final String LOGTAG = "FilterShowActivity";
- protected static final boolean ANIMATE_PANELS = false;
+ protected static final boolean ANIMATE_PANELS = true;
private boolean mShowingHistoryPanel = false;
private boolean mShowingImageStatePanel = false;
- private Vector<ImageShow> mImageViews = new Vector<ImageShow>();
- private Vector<View> mListViews = new Vector<View>();
- private Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>();
- private Vector<ImageButton> mColorsPanelButtons = new Vector<ImageButton>();
+ private final Vector<ImageShow> mImageViews = new Vector<ImageShow>();
+ private final Vector<View> mListViews = new Vector<View>();
+ private final Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>();
private ShareActionProvider mShareActionProvider;
private File mSharedOutputFile = null;
@@ -136,67 +130,60 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mListFx = findViewById(R.id.fxList);
mListBorders = findViewById(R.id.bordersList);
- mListGeometry = findViewById(R.id.gemoetryList);
+ mListGeometry = findViewById(R.id.geometryList);
+ mListFilterButtons = findViewById(R.id.filterButtonsList);
mListColors = findViewById(R.id.colorsFxList);
mListViews.add(mListFx);
mListViews.add(mListBorders);
mListViews.add(mListGeometry);
+ mListViews.add(mListFilterButtons);
mListViews.add(mListColors);
mFxButton = (ImageButton) findViewById(R.id.fxButton);
mBorderButton = (ImageButton) findViewById(R.id.borderButton);
mGeometryButton = (ImageButton) findViewById(R.id.geometryButton);
mColorsButton = (ImageButton) findViewById(R.id.colorsButton);
- mBottomPanelButtons.add(mFxButton);
- mBottomPanelButtons.add(mBorderButton);
- mBottomPanelButtons.add(mGeometryButton);
- mBottomPanelButtons.add(mColorsButton);
- mFxButton.setSelected(true);
-
- mVignetteButton = (ImageButton) findViewById(R.id.vignetteButton);
- mCurvesButtonRGB = (ImageButton) findViewById(R.id.curvesButtonRGB);
- mSharpenButton = (ImageButton) findViewById(R.id.sharpenButton);
- mVibranceButton = (ImageButton) findViewById(R.id.vibranceButton);
- mContrastButton = (ImageButton) findViewById(R.id.contrastButton);
- mSaturationButton = (ImageButton) findViewById(R.id.saturationButton);
- mTintButton = (ImageButton) findViewById(R.id.tintButton);
- mExposureButton = (ImageButton) findViewById(R.id.exposureButton);
- mShadowRecoveryButton = (ImageButton) findViewById(R.id.shadowRecoveryButton);
-
- mColorsPanelButtons.add(mVignetteButton);
- mColorsPanelButtons.add(mCurvesButtonRGB);
- mColorsPanelButtons.add(mSharpenButton);
- mColorsPanelButtons.add(mContrastButton);
- mColorsPanelButtons.add(mSaturationButton);
- mColorsPanelButtons.add(mTintButton);
- mColorsPanelButtons.add(mVibranceButton);
- mColorsPanelButtons.add(mExposureButton);
- mColorsPanelButtons.add(mShadowRecoveryButton);
-
- // TODO: instead of click listeners, make the activity the single
- // listener and do a dispatch in the listener callback method.
- findViewById(R.id.showOriginalButton).setOnTouchListener(createOnTouchShowOriginalButton());
- findViewById(R.id.straightenButton).setOnClickListener(createOnClickStraightenButton());
- findViewById(R.id.cropButton).setOnClickListener(createOnClickCropButton());
- findViewById(R.id.rotateButton).setOnClickListener(createOnClickRotateButton());
- findViewById(R.id.flipButton).setOnClickListener(createOnClickFlipButton());
-
- mVignetteButton.setOnClickListener(createOnClickVignetteButton());
- mCurvesButtonRGB.setOnClickListener(createOnClickCurvesRGBButton());
-
- mSharpenButton.setOnClickListener(createOnClickSharpenButton());
- mContrastButton.setOnClickListener(createOnClickContrastButton());
- mSaturationButton.setOnClickListener(createOnClickSaturationButton());
-
- mTintButton.setOnClickListener(createOnClickTintButton());
- mVibranceButton.setOnClickListener(createOnClickVibranceButton());
- mExposureButton.setOnClickListener(createOnClickExposureButton());
- mShadowRecoveryButton.setOnClickListener(createOnClickShadowRecoveryButton());
-
- mFxButton.setOnClickListener(createOnClickFxButton());
- mBorderButton.setOnClickListener(createOnClickBorderButton());
- mGeometryButton.setOnClickListener(createOnClickGeometryButton());
- mColorsButton.setOnClickListener(createOnClickColorsButton());
+
+ mImageShow.setImageLoader(mImageLoader);
+ mImageCurves.setImageLoader(mImageLoader);
+ mImageCurves.setMaster(mImageShow);
+ mImageBorders.setImageLoader(mImageLoader);
+ mImageBorders.setMaster(mImageShow);
+ mImageStraighten.setImageLoader(mImageLoader);
+ mImageStraighten.setMaster(mImageShow);
+ mImageZoom.setImageLoader(mImageLoader);
+ mImageZoom.setMaster(mImageShow);
+
+ mPanelController.addImageView(findViewById(R.id.imageShow));
+ mPanelController.addImageView(findViewById(R.id.imageCurves));
+ mPanelController.addImageView(findViewById(R.id.imageBorder));
+ mPanelController.addImageView(findViewById(R.id.imageStraighten));
+ mPanelController.addImageView(findViewById(R.id.imageZoom));
+
+ mPanelController.addPanel(mFxButton, mListFx, 0);
+ mPanelController.addPanel(mBorderButton, mListBorders, 1);
+
+ mPanelController.addPanel(mGeometryButton, mListGeometry, 2);
+ mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton));
+ mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton));
+ mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton));
+ mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton));
+
+ mPanelController.addPanel(mColorsButton, mListColors, 3);
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.vignetteButton));
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.curvesButtonRGB));
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.sharpenButton));
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.vibranceButton));
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.contrastButton));
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.saturationButton));
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.tintButton));
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.exposureButton));
+ mPanelController.addComponent(mColorsButton, findViewById(R.id.shadowRecoveryButton));
+
+ mPanelController.addView(findViewById(R.id.resetEffect));
+ mPanelController.addView(findViewById(R.id.applyEffect));
+
+ findViewById(R.id.compareWithOriginalImage).setOnTouchListener(createOnTouchShowOriginalButton());
findViewById(R.id.resetOperationsButton).setOnClickListener(
createOnClickResetOperationsButton());
@@ -211,15 +198,15 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
fillListImages(listFilters);
fillListBorders(listBorders);
- mImageShow.setImageLoader(mImageLoader);
- mImageCurves.setImageLoader(mImageLoader);
- mImageCurves.setMaster(mImageShow);
- mImageBorders.setImageLoader(mImageLoader);
- mImageBorders.setMaster(mImageShow);
- mImageStraighten.setImageLoader(mImageLoader);
- mImageStraighten.setMaster(mImageShow);
- mImageZoom.setImageLoader(mImageLoader);
- mImageZoom.setMaster(mImageShow);
+ SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar);
+ seekBar.setMax(200);
+ mImageShow.setSeekBar(seekBar);
+ mPanelController.setRowPanel(findViewById(R.id.secondRowPanel));
+ mPanelController.setUtilityPanel(findViewById(R.id.filterButtonsList),
+ findViewById(R.id.compareWithOriginalImage),
+ findViewById(R.id.applyEffect));
+ mPanelController.setMasterImage(mImageShow);
+ mPanelController.setCurrentPanel(mFxButton);
Intent intent = getIntent();
String data = intent.getDataString();
@@ -246,7 +233,8 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
@Override
public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) {
- // First, let's tell the SharedImageProvider that it will need to wait for the image
+ // First, let's tell the SharedImageProvider that it will need to wait
+ // for the image
Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI,
Uri.encode(mSharedOutputFile.getAbsolutePath()));
ContentValues values = new ContentValues();
@@ -293,6 +281,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
return true;
}
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.undoButton: {
@@ -395,6 +384,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
// //////////////////////////////////////////////////////////////////////////////
// Some utility functions
+ // TODO: finish the cleanup.
public void showOriginalViews(boolean value) {
for (ImageShow views : mImageViews) {
@@ -467,6 +457,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mShowingImageStatePanel = true;
view.animate().setDuration(200).x(-viewList.getWidth())
.withLayer().withEndAction(new Runnable() {
+ @Override
public void run() {
viewList.setAlpha(0);
viewList.setVisibility(View.VISIBLE);
@@ -499,6 +490,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
mShowingHistoryPanel = true;
view.animate().setDuration(200).x(-viewList.getWidth())
.withLayer().withEndAction(new Runnable() {
+ @Override
public void run() {
viewList.setAlpha(0);
viewList.setVisibility(View.VISIBLE);
@@ -535,350 +527,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
}
// //////////////////////////////////////////////////////////////////////////////
- // Now, let's deal with the bottom panel.
-
- private OnClickListener createOnClickFxButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- hideListViews();
- unselectBottomPanelButtons();
- mImageShow.setVisibility(View.VISIBLE);
- mListFx.setVisibility(View.VISIBLE);
- mFxButton.setSelected(true);
- }
- };
- }
-
- private OnClickListener createOnClickBorderButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- hideListViews();
- unselectBottomPanelButtons();
- mImageBorders.setVisibility(View.VISIBLE);
- mListBorders.setVisibility(View.VISIBLE);
- mBorderButton.setSelected(true);
- }
- };
- }
-
- private OnClickListener createOnClickGeometryButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- hideListViews();
- unselectBottomPanelButtons();
- mImageStraighten.setVisibility(View.VISIBLE);
- mListGeometry.setVisibility(View.VISIBLE);
- mGeometryButton.setSelected(true);
-
- if (ANIMATE_PANELS) {
- mListGeometry.setX(mListGeometry.getWidth());
- mListGeometry.animate().setDuration(200).x(0).withLayer().start();
- }
- }
- };
- }
-
- private OnClickListener createOnClickColorsButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- hideListViews();
- unselectBottomPanelButtons();
- mListColors.setVisibility(View.VISIBLE);
- mImageShow.setVisibility(View.VISIBLE);
- mColorsButton.setSelected(true);
-
- if (ANIMATE_PANELS) {
- View view = findViewById(R.id.listColorsFx);
- view.setX(mListColors.getWidth());
- view.animate().setDuration(200).x(0).withLayer().start();
- }
- }
- };
- }
-
- // //////////////////////////////////////////////////////////////////////////////
- // Geometry sub-panel
-
- private OnClickListener createOnClickStraightenButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageStraighten.setVisibility(View.VISIBLE);
- mImageStraighten.showToast("Straighten", true);
- }
- };
- }
-
- private OnClickListener createOnClickCropButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.showToast("Crop", true);
- }
- };
- }
-
- private OnClickListener createOnClickRotateButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.showToast("Rotate", true);
- }
- };
- }
-
- private OnClickListener createOnClickFlipButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.showToast("Flip", true);
- }
- };
- }
-
- // //////////////////////////////////////////////////////////////////////////////
- // Filters sub-panel
-
- private OnClickListener createOnClickVignetteButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.setShowControls(true);
- ImagePreset preset = mImageShow.getImagePreset();
- ImageFilter filter = preset.getFilter("Vignette");
- if (filter == null) {
- ImageFilterVignette vignette = new ImageFilterVignette();
- ImagePreset copy = new ImagePreset(preset);
- copy.add(vignette);
- copy.setHistoryName(vignette.getName());
- copy.setIsFx(false);
- filter = copy.getFilter("Vignette");
- mImageShow.setImagePreset(copy);
- }
- mImageShow.setCurrentFilter(filter);
- unselectPanelButtons(mColorsPanelButtons);
- mVignetteButton.setSelected(true);
- invalidateViews();
- }
- };
- }
-
- private OnClickListener createOnClickCurvesRGBButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageCurves.setVisibility(View.VISIBLE);
- unselectPanelButtons(mColorsPanelButtons);
- mCurvesButtonRGB.setSelected(true);
- mImageCurves.setUseRed(true);
- mImageCurves.setUseGreen(true);
- mImageCurves.setUseBlue(true);
- mImageCurves.reloadCurve();
- }
- };
- }
-
- private OnClickListener createOnClickSharpenButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageZoom.setVisibility(View.VISIBLE);
- mImageZoom.setShowControls(true);
- ImagePreset preset = mImageZoom.getImagePreset();
- ImageFilter filter = preset.getFilter("Sharpen");
- if (filter == null) {
- ImageFilterSharpen sharpen = new ImageFilterSharpen();
- ImagePreset copy = new ImagePreset(preset);
- copy.add(sharpen);
- copy.setHistoryName(sharpen.getName());
- copy.setIsFx(false);
- filter = copy.getFilter("Sharpen");
- mImageZoom.setImagePreset(copy);
- }
- mImageZoom.setCurrentFilter(filter);
- unselectPanelButtons(mColorsPanelButtons);
- mSharpenButton.setSelected(true);
- invalidateViews();
- }
- };
- }
-
- private OnClickListener createOnClickContrastButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.setShowControls(true);
- ImagePreset preset = mImageShow.getImagePreset();
- ImageFilter filter = preset.getFilter("Contrast");
- if (filter == null) {
- ImageFilterContrast contrast = new ImageFilterContrast();
- ImagePreset copy = new ImagePreset(preset);
- copy.add(contrast);
- copy.setHistoryName(contrast.getName());
- copy.setIsFx(false);
- filter = copy.getFilter("Contrast");
- mImageShow.setImagePreset(copy);
- }
- mImageShow.setCurrentFilter(filter);
- unselectPanelButtons(mColorsPanelButtons);
- mContrastButton.setSelected(true);
- invalidateViews();
- }
- };
- }
-
- private OnClickListener createOnClickSaturationButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.setShowControls(true);
- ImagePreset preset = mImageShow.getImagePreset();
- ImageFilter filter = preset.getFilter("Saturated");
- if (filter == null) {
- ImageFilterSaturated sat = new ImageFilterSaturated();
- ImagePreset copy = new ImagePreset(preset);
- copy.add(sat);
- copy.setHistoryName(sat.getName());
- copy.setIsFx(false);
- filter = copy.getFilter("Saturated");
- mImageShow.setImagePreset(copy);
- }
- mImageShow.setCurrentFilter(filter);
- unselectPanelButtons(mColorsPanelButtons);
- mSaturationButton.setSelected(true);
- invalidateViews();
- }
- };
- }
-
- private OnClickListener createOnClickTintButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.setShowControls(true);
- ImagePreset preset = mImageShow.getImagePreset();
- ImageFilter filter = preset.getFilter("Hue");
- if (filter == null) {
- ImageFilterHue contrast = new ImageFilterHue();
- ImagePreset copy = new ImagePreset(preset);
- copy.add(contrast);
- copy.setHistoryName(contrast.getName());
- copy.setIsFx(false);
- filter = copy.getFilter("Hue");
- mImageShow.setImagePreset(copy);
- }
- mImageShow.setCurrentFilter(filter);
- unselectPanelButtons(mColorsPanelButtons);
- mTintButton.setSelected(true);
- invalidateViews();
- }
- };
- }
-
- private OnClickListener createOnClickVibranceButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.setShowControls(true);
- ImagePreset preset = mImageShow.getImagePreset();
- ImageFilter filter = preset.getFilter("Vibrance");
- if (filter == null) {
- ImageFilterVibrance contrast = new ImageFilterVibrance();
- ImagePreset copy = new ImagePreset(preset);
- copy.add(contrast);
- copy.setHistoryName(contrast.getName());
- copy.setIsFx(false);
- filter = copy.getFilter("Vibrance");
- mImageShow.setImagePreset(copy);
- }
- mImageShow.setCurrentFilter(filter);
- unselectPanelButtons(mColorsPanelButtons);
- mVibranceButton.setSelected(true);
- invalidateViews();
- }
- };
- }
-
- private OnClickListener createOnClickExposureButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.setShowControls(true);
- ImagePreset preset = mImageShow.getImagePreset();
- ImageFilter filter = preset.getFilter("Exposure");
- if (filter == null) {
- ImageFilterExposure bright = new ImageFilterExposure();
- ImagePreset copy = new ImagePreset(preset);
- copy.add(bright);
- copy.setHistoryName(bright.getName());
- copy.setIsFx(false);
- filter = copy.getFilter("Exposure");
- mImageShow.setImagePreset(copy);
- }
- mImageShow.setCurrentFilter(filter);
- unselectPanelButtons(mColorsPanelButtons);
- mExposureButton.setSelected(true);
- invalidateViews();
- }
- };
- }
-
- private OnClickListener createOnClickShadowRecoveryButton() {
- return new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideImageViews();
- mImageShow.setVisibility(View.VISIBLE);
- mImageShow.setShowControls(true);
- ImagePreset preset = mImageShow.getImagePreset();
- ImageFilter filter = preset.getFilter("Shadows");
- if (filter == null) {
- ImageFilterShadows contrast = new ImageFilterShadows();
- ImagePreset copy = new ImagePreset(preset);
- copy.add(contrast);
- copy.setHistoryName(contrast.getName());
- copy.setIsFx(false);
- filter = copy.getFilter("Shadows");
- mImageShow.setImagePreset(copy);
- }
- mImageShow.setCurrentFilter(filter);
- unselectPanelButtons(mColorsPanelButtons);
- mShadowRecoveryButton.setSelected(true);
- invalidateViews();
- }
- };
- }
-
- // //////////////////////////////////////////////////////////////////////////////
public float getPixelsFromDip(float value) {
Resources r = getResources();
@@ -930,6 +578,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
SELECT_PICTURE);
}
+ @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.v(LOGTAG, "onActivityResult");
if (resultCode == RESULT_OK) {
diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java
new file mode 100644
index 000000000..f9a1f1d16
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/PanelController.java
@@ -0,0 +1,474 @@
+
+package com.android.gallery3d.filtershow;
+
+import android.text.Html;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewPropertyAnimator;
+import android.widget.TextView;
+
+import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.filters.ImageFilter;
+import com.android.gallery3d.filtershow.filters.ImageFilterContrast;
+import com.android.gallery3d.filtershow.filters.ImageFilterExposure;
+import com.android.gallery3d.filtershow.filters.ImageFilterHue;
+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.ImageFilterVibrance;
+import com.android.gallery3d.filtershow.filters.ImageFilterVignette;
+import com.android.gallery3d.filtershow.imageshow.ImageShow;
+import com.android.gallery3d.filtershow.presets.ImagePreset;
+import com.android.gallery3d.filtershow.ui.ImageCurves;
+
+import java.util.HashMap;
+import java.util.Vector;
+
+public class PanelController implements OnClickListener {
+ private static int PANEL = 0;
+ private static int COMPONENT = 1;
+ private static int VERTICAL_MOVE = 0;
+ private static int HORIZONTAL_MOVE = 1;
+ private static final int ANIM_DURATION = 200;
+
+ class Panel {
+ private final View mView;
+ private final View mContainer;
+ private int mPosition = 0;
+ private final Vector<View> mSubviews = new Vector<View>();
+
+ public Panel(View view, View container, int position) {
+ mView = view;
+ mContainer = container;
+ mPosition = position;
+ }
+
+ public void addView(View view) {
+ mSubviews.add(view);
+ }
+
+ public int getPosition() {
+ return mPosition;
+ }
+
+ public ViewPropertyAnimator unselect(int newPos, int move) {
+ ViewPropertyAnimator anim = mContainer.animate();
+ mView.setSelected(false);
+ mContainer.setX(0);
+ mContainer.setY(0);
+ int delta = 0;
+ int w = mRowPanel.getWidth();
+ int h = mRowPanel.getHeight();
+ if (move == HORIZONTAL_MOVE) {
+ if (newPos > mPosition) {
+ delta = -w;
+ } else {
+ delta = w;
+ }
+ anim.x(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);
+ }
+ });
+ return anim;
+ }
+
+ public ViewPropertyAnimator select(int oldPos, int move) {
+ mView.setSelected(true);
+ mContainer.setVisibility(View.VISIBLE);
+ mContainer.setX(0);
+ mContainer.setY(0);
+ 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);
+ }
+ anim.x(0);
+ } else if (move == VERTICAL_MOVE) {
+ mContainer.setY(h);
+ anim.y(0);
+ }
+ anim.setDuration(ANIM_DURATION).withLayer();
+ return anim;
+ }
+ }
+
+ class UtilityPanel {
+ private final View mView;
+ private final View mCompareView;
+ private final TextView mTextView;
+ private boolean mSelected = false;
+ private String mEffectName = null;
+ private int mParameterValue = 0;
+
+ public UtilityPanel(View view, View compareView, View textView) {
+ mView = view;
+ mCompareView = compareView;
+ mTextView = (TextView) textView;
+ }
+
+ public boolean selected() {
+ return mSelected;
+ }
+
+ public void onNewValue(int value) {
+ mParameterValue = value;
+ updateText();
+ }
+
+ public void setGeometryEffect(boolean isGeometryEffect) {
+ if (isGeometryEffect) {
+ mCompareView.setVisibility(View.INVISIBLE);
+ } else {
+ mCompareView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ public void setEffectName(String effectName) {
+ mEffectName = effectName;
+ updateText();
+ }
+
+ public void updateText() {
+ mTextView.setText(Html.fromHtml("Apply" + "<br/><small>" + mEffectName + "<br/>"
+ + mParameterValue + "</small>"));
+ }
+
+ public ViewPropertyAnimator unselect() {
+ ViewPropertyAnimator anim = mView.animate();
+ mView.setX(0);
+ 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);
+ }
+ });
+ mSelected = false;
+ return anim;
+ }
+
+ public ViewPropertyAnimator select() {
+ mView.setVisibility(View.VISIBLE);
+ int h = mRowPanel.getHeight();
+ mView.setX(0);
+ mView.setY(-h);
+ updateText();
+ ViewPropertyAnimator anim = mView.animate();
+ anim.y(0);
+ anim.setDuration(ANIM_DURATION).withLayer();
+ mSelected = true;
+ return anim;
+ }
+ }
+
+ class ViewType {
+ private final int mType;
+ private final View mView;
+
+ public ViewType(View view, int type) {
+ mView = view;
+ mType = type;
+ }
+
+ public int type() {
+ return mType;
+ }
+ }
+
+ private final HashMap<View, Panel> mPanels = new HashMap<View, Panel>();
+ private final HashMap<View, ViewType> mViews = new HashMap<View, ViewType>();
+ private final Vector<View> mImageViews = new Vector<View>();
+ private View mCurrentPanel = null;
+ private View mRowPanel = null;
+ private UtilityPanel mUtilityPanel = null;
+ private ImageShow mMasterImage = null;
+ private ImageShow mCurrentImage = null;
+
+ public void addView(View view) {
+ view.setOnClickListener(this);
+ mViews.put(view, new ViewType(view, COMPONENT));
+ }
+
+ public void addPanel(View view, View container, int position) {
+ mPanels.put(view, new Panel(view, container, position));
+ view.setOnClickListener(this);
+ mViews.put(view, new ViewType(view, PANEL));
+ }
+
+ public void addComponent(View aPanel, View component) {
+ Panel panel = mPanels.get(aPanel);
+ if (panel == null) {
+ return;
+ }
+ panel.addView(component);
+ component.setOnClickListener(this);
+ mViews.put(component, new ViewType(component, COMPONENT));
+ }
+
+ public void addImageView(View view) {
+ mImageViews.add(view);
+ ImageShow imageShow = (ImageShow) view;
+ imageShow.setPanelController(this);
+ }
+
+ public void onNewValue(int value) {
+ mUtilityPanel.onNewValue(value);
+ }
+
+ public void setCurrentPanel(View panel) {
+ showPanel(panel);
+ }
+
+ public void setRowPanel(View rowPanel) {
+ mRowPanel = rowPanel;
+ }
+
+ public void setUtilityPanel(View utilityPanel, View compareView, View textView) {
+ mUtilityPanel = new UtilityPanel(utilityPanel, compareView, textView);
+ }
+
+ public void setMasterImage(ImageShow imageShow) {
+ mMasterImage = imageShow;
+ }
+
+ @Override
+ public void onClick(View view) {
+ ViewType type = mViews.get(view);
+ if (type.type() == PANEL) {
+ showPanel(view);
+ } else if (type.type() == COMPONENT) {
+ showComponent(view);
+ }
+ }
+
+ public ImageShow showImageView(int id) {
+ ImageShow image = null;
+ for (View view : mImageViews) {
+ if (view.getId() == id) {
+ view.setVisibility(View.VISIBLE);
+ image = (ImageShow) view;
+ } else {
+ view.setVisibility(View.GONE);
+ }
+ }
+ return image;
+ }
+
+ public void showDefaultImageView() {
+ showImageView(R.id.imageShow).setShowControls(false);
+ mMasterImage.setCurrentFilter(null);
+ }
+
+ public void showPanel(View view) {
+ view.setVisibility(View.VISIBLE);
+ boolean removedUtilityPanel = false;
+ Panel current = mPanels.get(mCurrentPanel);
+ if (mUtilityPanel != null && mUtilityPanel.selected()) {
+ ViewPropertyAnimator anim1 = mUtilityPanel.unselect();
+ removedUtilityPanel = true;
+ anim1.start();
+ if (mCurrentPanel == view) {
+ ViewPropertyAnimator anim2 = current.select(-1, VERTICAL_MOVE);
+ anim2.start();
+ showDefaultImageView();
+ }
+ }
+
+ if (mCurrentPanel == view) {
+ return;
+ }
+
+ Panel panel = mPanels.get(view);
+ if (!removedUtilityPanel) {
+ int currentPos = -1;
+ if (current != null) {
+ currentPos = current.getPosition();
+ }
+ ViewPropertyAnimator anim1 = panel.select(currentPos, HORIZONTAL_MOVE);
+ anim1.start();
+ if (current != null) {
+ ViewPropertyAnimator anim2 = current.unselect(panel.getPosition(), HORIZONTAL_MOVE);
+ anim2.start();
+ }
+ } else {
+ ViewPropertyAnimator anim = panel.select(-1, VERTICAL_MOVE);
+ anim.start();
+ }
+ showDefaultImageView();
+ mCurrentPanel = view;
+ }
+
+ public ImagePreset getImagePreset() {
+ return mMasterImage.getImagePreset();
+ }
+
+ public ImageFilter setImagePreset(ImageFilter filter, String name) {
+ ImagePreset copy = new ImagePreset(getImagePreset());
+ copy.add(filter);
+ copy.setHistoryName(filter.getName());
+ copy.setIsFx(false);
+ mMasterImage.setImagePreset(copy);
+ return filter;
+ }
+
+ public void ensureFilter(String name) {
+ ImagePreset preset = getImagePreset();
+ ImageFilter filter = preset.getFilter(name);
+ if (filter == null && name.equalsIgnoreCase("Vignette")) {
+ filter = setImagePreset(new ImageFilterVignette(), name);
+ }
+ if (filter == null && name.equalsIgnoreCase("Sharpen")) {
+ filter = setImagePreset(new ImageFilterSharpen(), name);
+ }
+ if (filter == null && name.equalsIgnoreCase("Contrast")) {
+ filter = setImagePreset(new ImageFilterContrast(), name);
+ }
+ if (filter == null && name.equalsIgnoreCase("Saturated")) {
+ filter = setImagePreset(new ImageFilterSaturated(), name);
+ }
+ if (filter == null && name.equalsIgnoreCase("Hue")) {
+ filter = setImagePreset(new ImageFilterHue(), name);
+ }
+ if (filter == null && name.equalsIgnoreCase("Exposure")) {
+ filter = setImagePreset(new ImageFilterExposure(), name);
+ }
+ if (filter == null && name.equalsIgnoreCase("Vibrance")) {
+ filter = setImagePreset(new ImageFilterVibrance(), name);
+ }
+ if (filter == null && name.equalsIgnoreCase("Shadows")) {
+ filter = setImagePreset(new ImageFilterShadows(), name);
+ }
+ mMasterImage.setCurrentFilter(filter);
+ }
+
+ public void showComponent(View view) {
+ if (mUtilityPanel != null && !mUtilityPanel.selected()) {
+ Panel current = mPanels.get(mCurrentPanel);
+ ViewPropertyAnimator anim1 = current.unselect(-1, VERTICAL_MOVE);
+ anim1.start();
+ if (mUtilityPanel != null) {
+ ViewPropertyAnimator anim2 = mUtilityPanel.select();
+ anim2.start();
+ }
+ }
+
+ if (mCurrentImage != null) {
+ mCurrentImage.unselect();
+ }
+
+ switch (view.getId()) {
+ case R.id.straightenButton: {
+ mCurrentImage = showImageView(R.id.imageStraighten);
+ mUtilityPanel.setEffectName("Straighten");
+ mUtilityPanel.setGeometryEffect(true);
+ break;
+ }
+ case R.id.cropButton: {
+ mCurrentImage = showImageView(R.id.imageShow);
+ mUtilityPanel.setEffectName("Crop");
+ mUtilityPanel.setGeometryEffect(true);
+ break;
+ }
+ case R.id.rotateButton: {
+ mCurrentImage = showImageView(R.id.imageShow);
+ mUtilityPanel.setEffectName("Rotate");
+ mUtilityPanel.setGeometryEffect(true);
+ break;
+ }
+ case R.id.flipButton: {
+ mCurrentImage = showImageView(R.id.imageShow);
+ mUtilityPanel.setEffectName("Flip");
+ mUtilityPanel.setGeometryEffect(true);
+ break;
+ }
+ case R.id.vignetteButton: {
+ mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+ mUtilityPanel.setEffectName("Vignette");
+ mUtilityPanel.setGeometryEffect(false);
+ ensureFilter("Vignette");
+ break;
+ }
+ case R.id.curvesButtonRGB: {
+ ImageCurves curves = (ImageCurves) showImageView(R.id.imageCurves);
+ mUtilityPanel.setEffectName("Curves");
+ mUtilityPanel.setGeometryEffect(true);
+ curves.setUseRed(true);
+ curves.setUseGreen(true);
+ curves.setUseBlue(true);
+ curves.reloadCurve();
+ mCurrentImage = curves;
+ break;
+ }
+ case R.id.sharpenButton: {
+ mCurrentImage = showImageView(R.id.imageZoom).setShowControls(true);
+ mUtilityPanel.setEffectName("Sharpen");
+ mUtilityPanel.setGeometryEffect(false);
+ ensureFilter("Sharpen");
+ break;
+ }
+ case R.id.contrastButton: {
+ mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+ mUtilityPanel.setEffectName("Contrast");
+ mUtilityPanel.setGeometryEffect(false);
+ ensureFilter("Contrast");
+ break;
+ }
+ case R.id.saturationButton: {
+ mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+ mUtilityPanel.setEffectName("Saturated");
+ mUtilityPanel.setGeometryEffect(false);
+ ensureFilter("Saturated");
+ break;
+ }
+ case R.id.tintButton: {
+ mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+ mUtilityPanel.setEffectName("Hue");
+ mUtilityPanel.setGeometryEffect(false);
+ ensureFilter("Hue");
+ break;
+ }
+ case R.id.exposureButton: {
+ mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+ mUtilityPanel.setEffectName("Exposure");
+ mUtilityPanel.setGeometryEffect(false);
+ ensureFilter("Exposure");
+ break;
+ }
+ case R.id.vibranceButton: {
+ mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+ mUtilityPanel.setEffectName("Vibrance");
+ mUtilityPanel.setGeometryEffect(false);
+ ensureFilter("Vibrance");
+ break;
+ }
+ case R.id.shadowRecoveryButton: {
+ mCurrentImage = showImageView(R.id.imageShow).setShowControls(true);
+ mUtilityPanel.setEffectName("Shadows");
+ mUtilityPanel.setGeometryEffect(false);
+ ensureFilter("Shadows");
+ break;
+ }
+ case R.id.resetEffect: {
+ mCurrentImage.resetParameter();
+ break;
+ }
+ case R.id.applyEffect: {
+ showPanel(mCurrentPanel);
+ break;
+ }
+ }
+ mCurrentImage.select();
+ }
+}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 2a660d40f..da38d3b7e 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -1,36 +1,33 @@
package com.android.gallery3d.filtershow.imageshow;
-import com.android.gallery3d.filtershow.FilterShowActivity;
-import com.android.gallery3d.filtershow.HistoryAdapter;
-import com.android.gallery3d.filtershow.ImageStateAdapter;
-import com.android.gallery3d.filtershow.cache.ImageLoader;
-import com.android.gallery3d.filtershow.filters.ImageFilter;
-import com.android.gallery3d.filtershow.presets.ImagePreset;
-import com.android.gallery3d.filtershow.ui.SliderListener;
-import com.android.gallery3d.filtershow.ui.SliderController;
-import com.android.gallery3d.R;
-import com.android.gallery3d.R.id;
-import com.android.gallery3d.R.layout;
-
-import java.io.File;
-
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
-import android.net.Uri;
import android.os.Handler;
-import android.os.Message;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
-import android.view.View.MeasureSpec;
import android.widget.ArrayAdapter;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
-public class ImageShow extends View implements SliderListener {
+import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.FilterShowActivity;
+import com.android.gallery3d.filtershow.HistoryAdapter;
+import com.android.gallery3d.filtershow.ImageStateAdapter;
+import com.android.gallery3d.filtershow.PanelController;
+import com.android.gallery3d.filtershow.cache.ImageLoader;
+import com.android.gallery3d.filtershow.filters.ImageFilter;
+import com.android.gallery3d.filtershow.presets.ImagePreset;
+import com.android.gallery3d.filtershow.ui.SliderController;
+import com.android.gallery3d.filtershow.ui.SliderListener;
+
+import java.io.File;
+
+public class ImageShow extends View implements SliderListener, OnSeekBarChangeListener {
private static final String LOGTAG = "ImageShow";
@@ -64,8 +61,47 @@ public class ImageShow extends View implements SliderListener {
protected float mTouchX = 0;
protected float mTouchY = 0;
- private Handler mHandler = new Handler();
+ private SeekBar mSeekBar = null;
+ private PanelController mController = null;
+
+ private final Handler mHandler = new Handler();
+
+ public void select() {
+ if (getCurrentFilter() != null) {
+ int parameter = getCurrentFilter().getParameter();
+ updateSeekBar(parameter);
+ }
+ }
+ public void updateSeekBar(int parameter) {
+ if (mSeekBar == null) {
+ return;
+ }
+ int progress = parameter + 100;
+ mSeekBar.setProgress(progress);
+ if (getPanelController() != null) {
+ getPanelController().onNewValue(parameter);
+ }
+ }
+
+ public void unselect() {
+
+ }
+
+ public void resetParameter() {
+ onNewValue(0);
+ mSliderController.reset();
+ }
+
+ public void setPanelController(PanelController controller) {
+ mController = controller;
+ }
+
+ public PanelController getPanelController() {
+ return mController;
+ }
+
+ @Override
public void onNewValue(int value) {
if (getCurrentFilter() != null) {
getCurrentFilter().setParameter(value);
@@ -74,15 +110,21 @@ public class ImageShow extends View implements SliderListener {
mImageLoader.resetImageForPreset(getImagePreset(), this);
getImagePreset().fillImageStateAdapter(mImageStateAdapter);
}
+ if (getPanelController() != null) {
+ getPanelController().onNewValue(value);
+ }
+ updateSeekBar(value);
invalidate();
}
+ @Override
public void onTouchDown(float x, float y) {
mTouchX = x;
mTouchY = y;
invalidate();
}
+ @Override
public void onTouchUp() {
}
@@ -102,6 +144,7 @@ public class ImageShow extends View implements SliderListener {
R.id.rowTextView);
}
+ @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
@@ -110,6 +153,11 @@ public class ImageShow extends View implements SliderListener {
mSliderController.setHeight(parentHeight);
}
+ public void setSeekBar(SeekBar seekBar) {
+ mSeekBar = seekBar;
+ mSeekBar.setOnSeekBarChangeListener(this);
+ }
+
public void setCurrentFilter(ImageFilter filter) {
mCurrentFilter = filter;
}
@@ -180,6 +228,7 @@ public class ImageShow extends View implements SliderListener {
}
}
+ @Override
public void onDraw(Canvas canvas) {
drawBackground(canvas);
getFilteredImage();
@@ -262,8 +311,18 @@ public class ImageShow extends View implements SliderListener {
}
}
- public void setShowControls(boolean value) {
+ public ImageShow setShowControls(boolean value) {
mShowControls = value;
+ if (mShowControls) {
+ if (mSeekBar != null) {
+ mSeekBar.setVisibility(View.VISIBLE);
+ }
+ } else {
+ if (mSeekBar != null) {
+ mSeekBar.setVisibility(View.INVISIBLE);
+ }
+ }
+ return this;
}
public boolean showControls() {
@@ -324,6 +383,7 @@ public class ImageShow extends View implements SliderListener {
mImageLoader.saveImage(getImagePreset(), filterShowActivity, file);
}
+ @Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
mSliderController.onTouchEvent(event);
@@ -368,4 +428,21 @@ public class ImageShow extends View implements SliderListener {
mImageRotation = imageRotation;
mImageRotationZoomFactor = imageRotationZoomFactor;
}
+
+ @Override
+ public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
+ onNewValue(progress - 100);
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar arg0) {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
index debaec708..4fdf8303a 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
+import com.android.gallery3d.filtershow.PanelController;
import com.android.gallery3d.filtershow.filters.ImageFilter;
import com.android.gallery3d.filtershow.presets.ImagePreset;
@@ -26,18 +27,22 @@ public class ImageSlave extends ImageShow {
mMasterImageShow = master;
}
+ @Override
public ImagePreset getImagePreset() {
return mMasterImageShow.getImagePreset();
}
+ @Override
public void setImagePreset(ImagePreset preset, boolean addToHistory) {
mMasterImageShow.setImagePreset(preset, addToHistory);
}
+ @Override
public void setCurrentFilter(ImageFilter filter) {
mMasterImageShow.setCurrentFilter(filter);
}
+ @Override
public ImageFilter getCurrentFilter() {
return mMasterImageShow.getCurrentFilter();
}
@@ -46,20 +51,35 @@ public class ImageSlave extends ImageShow {
mMasterImageShow.setImageRotation(mImageRotation, mImageRotationZoomFactor);
}
+ @Override
public boolean showTitle() {
return false;
}
+ @Override
public float getImageRotation() {
return mMasterImageShow.getImageRotation();
}
+ @Override
public float getImageRotationZoomFactor() {
return mMasterImageShow.getImageRotationZoomFactor();
}
+ @Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
+ @Override
+ public void setPanelController(PanelController controller) {
+ mMasterImageShow.setPanelController(controller);
+ }
+
+ @Override
+ public PanelController getPanelController() {
+ return mMasterImageShow.getPanelController();
+ }
+
+
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
index eb034bf10..99aa389ac 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
@@ -1,26 +1,24 @@
package com.android.gallery3d.filtershow.imageshow;
-import com.android.gallery3d.filtershow.presets.ImagePreset;
-
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
-import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.MotionEvent;
+import com.android.gallery3d.filtershow.presets.ImagePreset;
+
public class ImageStraighten extends ImageSlave {
private float mImageRotation = 0;
private float mImageRotationZoomFactor = 0;
- private float mMinAngle = -45;
- private float mMaxAngle = 45;
+ private final float mMinAngle = -45;
+ private final float mMaxAngle = 45;
private float mBaseAngle = 0;
private float mAngle = 0;
private float mCenterX;
@@ -69,6 +67,7 @@ public class ImageStraighten extends ImageSlave {
public void setActionUp() {
mMode = MODES.UP;
updatePreset();
+ invalidate();
}
public void setNoAction() {
@@ -81,6 +80,16 @@ public class ImageStraighten extends ImageSlave {
setImagePreset(copy);
}
+ @Override
+ public void resetParameter() {
+ super.resetParameter();
+ mImageRotation = 0;
+ mAngle = 0;
+ updatePreset();
+ invalidate();
+ }
+
+ @Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getActionMasked()) {
case (MotionEvent.ACTION_DOWN):
@@ -97,6 +106,9 @@ public class ImageStraighten extends ImageSlave {
}
mImageRotation = mAngle;
updateAngle();
+ if (getPanelController() != null) {
+ getPanelController().onNewValue((int) mImageRotation);
+ }
invalidate();
return true;
}
@@ -124,11 +136,16 @@ public class ImageStraighten extends ImageSlave {
// ///////////////////////////////////////////////////////////////////////////
+ @Override
public void onNewValue(int value) {
mImageRotation = value;
+ if (getPanelController() != null) {
+ getPanelController().onNewValue(value);
+ }
invalidate();
}
+ @Override
public void onDraw(Canvas canvas) {
mCenterX = getWidth() / 2;
mCenterY = getHeight() / 2;
diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
index 69b3f0939..8dd81d4d0 100644
--- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
+++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
@@ -1,8 +1,6 @@
package com.android.gallery3d.filtershow.presets;
-import java.util.Vector;
-
import android.graphics.Bitmap;
import android.graphics.RectF;
import android.util.Log;
@@ -12,6 +10,8 @@ import com.android.gallery3d.filtershow.filters.ImageFilter;
import com.android.gallery3d.filtershow.filters.ImageFilterStraighten;
import com.android.gallery3d.filtershow.imageshow.ImageShow;
+import java.util.Vector;
+
public class ImagePreset {
private static final String LOGTAG = "ImagePreset";
diff --git a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
index 3da058bc7..fb18bcf8f 100644
--- a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
+++ b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
@@ -1,28 +1,22 @@
package com.android.gallery3d.filtershow.ui;
-import com.android.gallery3d.filtershow.filters.ImageFilter;
-import com.android.gallery3d.filtershow.filters.ImageFilterCurves;
-import com.android.gallery3d.filtershow.imageshow.ImageShow;
-import com.android.gallery3d.filtershow.imageshow.ImageSlave;
-import com.android.gallery3d.filtershow.presets.ImagePreset;
-import com.android.gallery3d.filtershow.ui.ControlPoint;
-import com.android.gallery3d.filtershow.ui.Spline;
-import com.android.gallery3d.R;
-
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
-import android.os.Message;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.Toast;
+import com.android.gallery3d.R;
+import com.android.gallery3d.filtershow.filters.ImageFilterCurves;
+import com.android.gallery3d.filtershow.imageshow.ImageSlave;
+import com.android.gallery3d.filtershow.presets.ImagePreset;
+
public class ImageCurves extends ImageSlave {
private static final String LOGTAG = "ImageCurves";
@@ -47,6 +41,7 @@ public class ImageCurves extends ImageSlave {
resetCurve();
}
+ @Override
public boolean showTitle() {
return false;
}
@@ -77,6 +72,12 @@ public class ImageCurves extends ImageSlave {
}
}
+ @Override
+ public void resetParameter() {
+ super.resetParameter();
+ resetCurve();
+ }
+
public void resetCurve() {
mSpline = new Spline();
@@ -87,6 +88,7 @@ public class ImageCurves extends ImageSlave {
}
}
+ @Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
diff --git a/src/com/android/gallery3d/filtershow/ui/SliderController.java b/src/com/android/gallery3d/filtershow/ui/SliderController.java
index f2f0df30b..99f66b185 100644
--- a/src/com/android/gallery3d/filtershow/ui/SliderController.java
+++ b/src/com/android/gallery3d/filtershow/ui/SliderController.java
@@ -5,8 +5,6 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
-import android.util.Log;
-
public class SliderController {
private static final String LOGTAG = "SliderController";
@@ -22,7 +20,7 @@ public class SliderController {
private String mToast = null;
- private Paint mPaint = new Paint();
+ private final Paint mPaint = new Paint();
private SliderListener mListener = null;
@@ -37,7 +35,6 @@ public class SliderController {
if (mMode == MODES.NONE || mMode == MODES.UP) {
return;
}
- drawToast(canvas);
}
public void drawToast(Canvas canvas) {
@@ -62,7 +59,7 @@ public class SliderController {
}
protected int computeValue() {
- int delta = (int) (100 * (getCurrentX() - getCenterX()) / (float) getWidth());
+ int delta = (int) (100 * (getCurrentX() - getCenterX()) / getWidth());
int value = mOriginalValue + delta;
if (value < -100) {
value = -100;
@@ -170,4 +167,8 @@ public class SliderController {
return true;
}
+ public void reset() {
+ mOriginalValue = 0;
+ }
+
}