summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/imageshow
diff options
context:
space:
mode:
authorJohn Hoford <hoford@google.com>2013-01-14 14:48:39 -0800
committerJohn Hoford <hoford@google.com>2013-01-15 14:54:05 -0800
commitde5d6c6a14c1250dc43c40f5b22cf6ff69362f17 (patch)
treee7be8c996146dc7f56240b3ac71b7e034032b4a7 /src/com/android/gallery3d/filtershow/imageshow
parent3d49241cf309365373a1c3e98838c764f718cd3e (diff)
downloadandroid_packages_apps_Snap-de5d6c6a14c1250dc43c40f5b22cf6ff69362f17.tar.gz
android_packages_apps_Snap-de5d6c6a14c1250dc43c40f5b22cf6ff69362f17.tar.bz2
android_packages_apps_Snap-de5d6c6a14c1250dc43c40f5b22cf6ff69362f17.zip
refactoring imageshow
Change-Id: I6d0872250b31a427ea6a3e46bd1c9ca5f3ba92ee
Diffstat (limited to 'src/com/android/gallery3d/filtershow/imageshow')
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java10
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageRedEyes.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java164
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java134
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageTinyPlanet.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/MasterImage.java207
8 files changed, 236 insertions, 287 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java b/src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java
index b43cc1d4f..cca06e4d7 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageDraw.java
@@ -15,7 +15,7 @@ import android.view.MotionEvent;
import com.android.gallery3d.filtershow.filters.ImageFilterDraw;
import com.android.gallery3d.filtershow.filters.RedEyeCandidate;
-public class ImageDraw extends ImageSlave {
+public class ImageDraw extends ImageShow {
private static final String LOGTAG = "ImageDraw";
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java b/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
index c8ae444da..588fa9aa9 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
@@ -32,7 +32,7 @@ import android.view.View;
import com.android.gallery3d.filtershow.imageshow.GeometryMetadata.FLIP;
import com.android.gallery3d.filtershow.presets.ImagePreset;
-public abstract class ImageGeometry extends ImageSlave {
+public abstract class ImageGeometry extends ImageShow {
protected boolean mVisibilityGained = false;
private boolean mHasDrawn = false;
@@ -138,7 +138,7 @@ public abstract class ImageGeometry extends ImageSlave {
// Overwrites local with master
protected void syncLocalToMasterGeometry() {
- mLocalGeometry = getMaster().getGeometry();
+ mLocalGeometry = getGeometry();
calculateLocalScalingFactorAndOffset();
}
@@ -326,7 +326,7 @@ public abstract class ImageGeometry extends ImageSlave {
}
public void saveAndSetPreset() {
- ImagePreset lastHistoryItem = getHistory().getLast();
+ ImagePreset lastHistoryItem = mMasterImage.getHistory().getLast();
if (lastHistoryItem != null && lastHistoryItem.historyName().equalsIgnoreCase(getName())) {
getImagePreset().setGeometry(mLocalGeometry);
resetImageCaches(this);
@@ -336,7 +336,7 @@ public abstract class ImageGeometry extends ImageSlave {
copy.setGeometry(mLocalGeometry);
copy.setHistoryName(getName());
copy.setIsFx(false);
- setImagePreset(copy, true);
+ mMasterImage.setPreset(copy, true);
}
}
invalidate();
@@ -416,7 +416,7 @@ public abstract class ImageGeometry extends ImageSlave {
clearDirtyGeometryFlag();
}
requestFilteredImages();
- Bitmap image = getMaster().getFiltersOnlyImage();
+ Bitmap image = getFiltersOnlyImage();
if (image == null) {
invalidate();
return;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageRedEyes.java b/src/com/android/gallery3d/filtershow/imageshow/ImageRedEyes.java
index 5119dff3c..c012ff1cc 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageRedEyes.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageRedEyes.java
@@ -14,7 +14,7 @@ import android.view.MotionEvent;
import com.android.gallery3d.filtershow.filters.ImageFilterRedEye;
import com.android.gallery3d.filtershow.filters.RedEyeCandidate;
-public class ImageRedEyes extends ImageSlave {
+public class ImageRedEyes extends ImageShow {
private static final String LOGTAG = "ImageRedEyes";
private RectF mCurrentRect = null;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 69214bd11..55bdb6e8e 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -31,20 +31,15 @@ import android.view.GestureDetector.OnDoubleTapListener;
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;
-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;
@@ -54,33 +49,22 @@ public class ImageShow extends View implements OnGestureListener,
SliderListener,
OnSeekBarChangeListener {
+ protected MasterImage mMasterImage = MasterImage.getImage();
private static final String LOGTAG = "ImageShow";
protected Paint mPaint = new Paint();
protected static int mTextSize = 24;
protected static int mTextPadding = 20;
- protected ImagePreset mImagePreset = null;
- protected ImagePreset mImageGeometryOnlyPreset = null;
- protected ImagePreset mImageFiltersOnlyPreset = null;
-
protected ImageLoader mImageLoader = null;
- private ImageFilter mCurrentFilter = null;
private boolean mDirtyGeometry = false;
private Bitmap mBackgroundImage = null;
private final boolean USE_BACKGROUND_IMAGE = false;
private static int mBackgroundColor = Color.RED;
- private Bitmap mGeometryOnlyImage = null;
- private Bitmap mFiltersOnlyImage = null;
- private Bitmap mFilteredImage = null;
-
private GestureDetector mGestureDetector = null;
- private HistoryAdapter mHistoryAdapter = null;
- private ImageStateAdapter mImageStateAdapter = null;
-
protected Rect mImageBounds = new Rect();
private boolean mTouchShowOriginal = false;
@@ -109,7 +93,6 @@ public class ImageShow extends View implements OnGestureListener,
}
private boolean mShowControls = false;
- private boolean mShowOriginal = false;
private String mToast = null;
private boolean mShowToast = false;
private boolean mImportantToast = false;
@@ -220,7 +203,7 @@ public class ImageShow extends View implements OnGestureListener,
}
if (getImagePreset() != null) {
mImageLoader.resetImageForPreset(getImagePreset(), this);
- getImagePreset().fillImageStateAdapter(mImageStateAdapter);
+ getImagePreset().fillImageStateAdapter(mMasterImage.getState());
}
if (getPanelController() != null) {
getPanelController().onNewValue(parameter);
@@ -242,20 +225,18 @@ public class ImageShow extends View implements OnGestureListener,
public ImageShow(Context context, AttributeSet attrs) {
super(context, attrs);
- mHistoryAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row,
- R.id.rowTextView);
- mImageStateAdapter = new ImageStateAdapter(context,
- R.layout.filtershow_imagestate_row);
+
setupGestureDetector(context);
mActivity = (FilterShowActivity) context;
+ mMasterImage.addObserver(this);
}
public ImageShow(Context context) {
super(context);
- mHistoryAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row,
- R.id.rowTextView);
+
setupGestureDetector(context);
mActivity = (FilterShowActivity) context;
+ mMasterImage.addObserver(this);
}
public void setupGestureDetector(Context context) {
@@ -274,15 +255,11 @@ public class ImageShow extends View implements OnGestureListener,
}
public void setCurrentFilter(ImageFilter filter) {
- mCurrentFilter = filter;
+ mMasterImage.setCurrentFilter(filter);
}
public ImageFilter getCurrentFilter() {
- return mCurrentFilter;
- }
-
- public void setAdapter(HistoryAdapter adapter) {
- mHistoryAdapter = adapter;
+ return mMasterImage.getCurrentFilter();
}
public void showToast(String text) {
@@ -319,7 +296,7 @@ public class ImageShow extends View implements OnGestureListener,
}
public ImagePreset getImagePreset() {
- return mImagePreset;
+ return mMasterImage.getPreset();
}
public void drawToast(Canvas canvas) {
@@ -354,7 +331,6 @@ public class ImageShow extends View implements OnGestureListener,
@Override
public void onDraw(Canvas canvas) {
drawBackground(canvas);
- requestFilteredImages();
defaultDrawImage(canvas);
if (showTitle() && getImagePreset() != null) {
@@ -375,83 +351,27 @@ public class ImageShow extends View implements OnGestureListener,
if (mImageLoader == null) {
return;
}
- updateImagePresets(true);
+ mMasterImage.updatePresets(true);
}
public void updateImagePresets(boolean force) {
- ImagePreset preset = getImagePreset();
- if (preset == null) {
- mActivity.enableSave(false);
- return;
- }
- if (force) {
- mImageLoader.resetImageForPreset(getImagePreset(), this);
- }
- if (force || mImageGeometryOnlyPreset == null) {
- ImagePreset newPreset = new ImagePreset(preset);
- newPreset.setDoApplyFilters(false);
- if (mImageGeometryOnlyPreset == null
- || !newPreset.same(mImageGeometryOnlyPreset)) {
- mImageGeometryOnlyPreset = newPreset;
- mGeometryOnlyImage = null;
- }
- }
- if (force || mImageFiltersOnlyPreset == null) {
- ImagePreset newPreset = new ImagePreset(preset);
- newPreset.setDoApplyGeometry(false);
- if (mImageFiltersOnlyPreset == null
- || !newPreset.same(mImageFiltersOnlyPreset)) {
- mImageFiltersOnlyPreset = newPreset;
- mFiltersOnlyImage = null;
- }
- }
- mActivity.enableSave(hasModifications());
+ mMasterImage.updatePresets(force);
}
public void requestFilteredImages() {
- if (mImageLoader != null) {
- Bitmap bitmap = mImageLoader.getImageForPreset(this,
- getImagePreset(), showHires());
-
- if (bitmap != null) {
- if (mFilteredImage == null) {
- invalidate();
- }
- mFilteredImage = bitmap;
- }
-
- updateImagePresets(false);
- if (mImageGeometryOnlyPreset != null) {
- bitmap = mImageLoader.getImageForPreset(this, mImageGeometryOnlyPreset,
- showHires());
- if (bitmap != null) {
- mGeometryOnlyImage = bitmap;
- }
- }
- if (mImageFiltersOnlyPreset != null) {
- bitmap = mImageLoader.getImageForPreset(this, mImageFiltersOnlyPreset,
- showHires());
- if (bitmap != null) {
- mFiltersOnlyImage = bitmap;
- }
- }
- }
-
- if (mShowOriginal) {
- mFilteredImage = mGeometryOnlyImage;
- }
+ mMasterImage.requestImages();
}
public Bitmap getFiltersOnlyImage() {
- return mFiltersOnlyImage;
+ return mMasterImage.getFiltersOnlyImage();
}
public Bitmap getGeometryOnlyImage() {
- return mGeometryOnlyImage;
+ return mMasterImage.getGeometryOnlyImage();
}
public Bitmap getFilteredImage() {
- return mFilteredImage;
+ return mMasterImage.getFilteredImage();
}
public void drawImage(Canvas canvas, Bitmap image) {
@@ -567,33 +487,13 @@ public class ImageShow extends View implements OnGestureListener,
return false;
}
- public void setImagePreset(ImagePreset preset) {
- setImagePreset(preset, true);
- }
- public void setImagePreset(ImagePreset preset, boolean addToHistory) {
- if (preset == null) {
- return;
- }
- mImagePreset = preset;
- getImagePreset().setImageLoader(mImageLoader);
- updateImagePresets(true);
- if (addToHistory) {
- mHistoryAdapter.addHistoryItem(getImagePreset());
- }
- getImagePreset().setEndpoint(this);
- updateImage();
- mImagePreset.fillImageStateAdapter(mImageStateAdapter);
- invalidate();
- }
public void setImageLoader(ImageLoader loader) {
mImageLoader = loader;
if (mImageLoader != null) {
mImageLoader.addListener(this);
- if (mImagePreset != null) {
- mImagePreset.setImageLoader(mImageLoader);
- }
+ mMasterImage.setImageLoader(mImageLoader);
}
}
@@ -622,7 +522,7 @@ public class ImageShow extends View implements OnGestureListener,
RectF r = new RectF(0, 0, w, h);
getImagePreset().mGeoData.setPhotoBounds(r);
getImagePreset().mGeoData.setCropBounds(r);
- setDirtyGeometryFlag();
+
}
public boolean updateGeometryFlags() {
@@ -645,10 +545,6 @@ public class ImageShow extends View implements OnGestureListener,
invalidate();
}
- public void updateFilteredImage(Bitmap bitmap) {
- mFilteredImage = bitmap;
- }
-
public void saveImage(FilterShowActivity filterShowActivity, File file) {
mImageLoader.saveImage(getImagePreset(), filterShowActivity, file);
}
@@ -680,7 +576,7 @@ public class ImageShow extends View implements OnGestureListener,
mTouchY = ey;
if (!mActivity.isShowingHistoryPanel()
&& (System.currentTimeMillis() - mTouchShowOriginalDate
- > mTouchShowOriginalDelayMin)) {
+ > mTouchShowOriginalDelayMin)) {
mTouchShowOriginal = true;
}
}
@@ -696,23 +592,7 @@ public class ImageShow extends View implements OnGestureListener,
}
// listview stuff
-
- public HistoryAdapter getHistory() {
- return mHistoryAdapter;
- }
-
- public ArrayAdapter getImageStateAdapter() {
- return mImageStateAdapter;
- }
-
- public void onItemClick(int position) {
- setImagePreset(new ImagePreset(mHistoryAdapter.getItem(position)), false);
- // we need a copy from the history
- mHistoryAdapter.setCurrentPreset(position);
- }
-
public void showOriginal(boolean show) {
- mShowOriginal = show;
invalidate();
}
@@ -757,13 +637,11 @@ public class ImageShow extends View implements OnGestureListener,
@Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
-
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
-
}
@Override
@@ -796,8 +674,8 @@ public class ImageShow extends View implements OnGestureListener,
|| (mActivity.isShowingHistoryPanel() && endEvent.getX() > startEvent.getX())) {
if (!mTouchShowOriginal
|| (mTouchShowOriginal &&
- (System.currentTimeMillis() - mTouchShowOriginalDate
- < mTouchShowOriginalDelayMax))) {
+ (System.currentTimeMillis() - mTouchShowOriginalDate
+ < mTouchShowOriginalDelayMax))) {
mActivity.toggleHistoryPanel();
}
}
@@ -807,7 +685,6 @@ public class ImageShow extends View implements OnGestureListener,
@Override
public void onLongPress(MotionEvent arg0) {
// TODO Auto-generated method stub
-
}
@Override
@@ -819,7 +696,6 @@ public class ImageShow extends View implements OnGestureListener,
@Override
public void onShowPress(MotionEvent arg0) {
// TODO Auto-generated method stub
-
}
@Override
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
deleted file mode 100644
index 3d79ae0d7..000000000
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.gallery3d.filtershow.imageshow;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-
-import com.android.gallery3d.filtershow.HistoryAdapter;
-import com.android.gallery3d.filtershow.PanelController;
-import com.android.gallery3d.filtershow.filters.ImageFilter;
-import com.android.gallery3d.filtershow.presets.ImagePreset;
-
-public class ImageSlave extends ImageShow {
- private ImageShow mMasterImageShow = null;
-
- public ImageSlave(Context context) {
- super(context);
- }
-
- public ImageSlave(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public ImageShow getMaster() {
- return mMasterImageShow;
- }
-
- public void setMaster(ImageShow master) {
- mMasterImageShow = master;
- }
-
- @Override
- public HistoryAdapter getHistory() {
- return mMasterImageShow.getHistory();
- }
-
- @Override
- public void resetImageCaches(ImageShow caller) {
- mMasterImageShow.resetImageCaches(caller);
- }
-
- @Override
- public ImagePreset getImagePreset() {
- return mMasterImageShow.getImagePreset();
- }
-
- @Override
- public Rect getDisplayedImageBounds() {
- return mMasterImageShow.getDisplayedImageBounds();
- }
-
- @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();
- }
-
- @Override
- public Bitmap getFilteredImage() {
- return mMasterImageShow.getFilteredImage();
- }
-
- @Override
- public void updateImage() {
- mMasterImageShow.updateImage();
- }
-
- @Override
- public void updateImagePresets(boolean force) {
- mMasterImageShow.updateImagePresets(force);
- }
-
- @Override
- public void requestFilteredImages() {
- mMasterImageShow.requestFilteredImages();
- }
-
- @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/ImageTinyPlanet.java b/src/com/android/gallery3d/filtershow/imageshow/ImageTinyPlanet.java
index 31bfe432c..82d87214f 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageTinyPlanet.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageTinyPlanet.java
@@ -22,7 +22,7 @@ import android.view.MotionEvent;
import com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet;
-public class ImageTinyPlanet extends ImageSlave {
+public class ImageTinyPlanet extends ImageShow {
private float mTouchCenterX = 0;
private float mTouchCenterY = 0;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java b/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
index b66da0128..e45b7b4dc 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
@@ -27,7 +27,7 @@ import android.view.MotionEvent;
import com.android.gallery3d.filtershow.cache.ImageLoader;
-public class ImageZoom extends ImageSlave {
+public class ImageZoom extends ImageShow {
private static final String LOGTAG = "ImageZoom";
private boolean mTouchDown = false;
private boolean mZoomedIn = false;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
new file mode 100644
index 000000000..5dc7b172d
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -0,0 +1,207 @@
+package com.android.gallery3d.filtershow.imageshow;
+
+import android.graphics.Bitmap;
+import android.graphics.RectF;
+import android.util.Log;
+import android.widget.ArrayAdapter;
+
+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 java.util.Vector;
+
+public class MasterImage {
+
+ private static final String LOGTAG = "MasterImage";
+
+ private static MasterImage sMasterImage = new MasterImage();
+
+ private ImageFilter mCurrentFilter = null;
+ private ImagePreset mPreset = null;
+ private ImagePreset mGeometryOnlyPreset = null;
+ private ImagePreset mFiltersOnlyPreset = null;
+
+ private Bitmap mGeometryOnlyImage = null;
+ private Bitmap mFiltersOnlyImage = null;
+ private Bitmap mFilteredImage = null;
+
+ private ImageLoader mLoader = null;
+ private HistoryAdapter mHistory = null;
+ private ImageStateAdapter mState = null;
+
+ private FilterShowActivity mActivity = null;
+
+ private Vector<ImageShow> mObservers = new Vector<ImageShow>();
+
+ private MasterImage() {
+ }
+
+ public static MasterImage getImage() {
+ return sMasterImage;
+ }
+
+ public void addObserver(ImageShow observer) {
+ mObservers.add(observer);
+ }
+
+ public void setActivity(FilterShowActivity activity) {
+ mActivity = activity;
+ }
+
+ public ImagePreset getPreset() {
+ return mPreset;
+ }
+
+ public void setPreset(ImagePreset preset, boolean addToHistory) {
+ mPreset = preset;
+ mPreset.setImageLoader(mLoader);
+ setGeometry();
+ mPreset.fillImageStateAdapter(mState);
+ if (addToHistory) {
+ mHistory.addHistoryItem(mPreset);
+ }
+ updatePresets(true);
+ requestImages();
+ }
+
+ private void setGeometry() {
+ Bitmap image = mLoader.getOriginalBitmapLarge();
+ if (image == null) {
+ return;
+ }
+ float w = image.getWidth();
+ float h = image.getHeight();
+ GeometryMetadata geo = mPreset.mGeoData;
+ RectF pb = geo.getPhotoBounds();
+ if (w == pb.width() && h == pb.height()) {
+ return;
+ }
+ RectF r = new RectF(0, 0, w, h);
+ geo.setPhotoBounds(r);
+ geo.setCropBounds(r);
+ }
+
+ public void onHistoryItemClick(int position) {
+ setPreset(new ImagePreset(mHistory.getItem(position)), false);
+ // We need a copy from the history
+ mHistory.setCurrentPreset(position);
+ }
+ public HistoryAdapter getHistory() {
+ return mHistory;
+ }
+
+ public ImageStateAdapter getState() {
+ return mState;
+ }
+
+ public void setHistoryAdapter(HistoryAdapter adapter) {
+ mHistory = adapter;
+ }
+
+ public void setStateAdapter(ImageStateAdapter adapter) {
+ mState = adapter;
+ }
+
+ public void setImageLoader(ImageLoader loader) {
+ mLoader = loader;
+ }
+
+ public void setCurrentFilter(ImageFilter filter) {
+ mCurrentFilter = filter;
+ }
+
+ public ImageFilter getCurrentFilter() {
+ return mCurrentFilter;
+ }
+
+ public boolean hasModifications() {
+ if (mPreset == null) {
+ return false;
+ }
+ return mPreset.hasModifications();
+ }
+
+ public Bitmap getFilteredImage() {
+ requestImages();
+ return mFilteredImage;
+ }
+
+ public Bitmap getFiltersOnlyImage() {
+ requestImages();
+ return mFiltersOnlyImage;
+ }
+
+ public Bitmap getGeometryOnlyImage() {
+ requestImages();
+ return mGeometryOnlyImage;
+ }
+
+ private void notifyObservers() {
+ for (ImageShow observer : mObservers) {
+ observer.invalidate();
+ }
+ }
+
+ public void updatedCache() {
+ requestImages();
+ notifyObservers();
+ }
+
+ public void updatePresets(boolean force) {
+ if (force) {
+ mLoader.resetImageForPreset(mPreset, null);
+ }
+ if (force || mGeometryOnlyPreset == null) {
+ ImagePreset newPreset = new ImagePreset(mPreset);
+ newPreset.setDoApplyFilters(false);
+ if (mGeometryOnlyPreset == null
+ || !newPreset.same(mGeometryOnlyPreset)) {
+ mGeometryOnlyPreset = newPreset;
+ mGeometryOnlyImage = null;
+ }
+ }
+ if (force || mFiltersOnlyPreset == null) {
+ ImagePreset newPreset = new ImagePreset(mPreset);
+ newPreset.setDoApplyGeometry(false);
+ if (mFiltersOnlyPreset == null
+ || !newPreset.same(mFiltersOnlyPreset)) {
+ mFiltersOnlyPreset = newPreset;
+ mFiltersOnlyImage = null;
+ }
+ }
+ mActivity.enableSave(hasModifications());
+ }
+
+ public void requestImages() {
+ if (mLoader == null) {
+ return;
+ }
+
+ // FIXME getImageForPreset caller
+ Bitmap bitmap = mLoader.getImageForPreset(null, mPreset, true);
+
+ if (bitmap != null) {
+ mFilteredImage = bitmap;
+ notifyObservers();
+ }
+ updatePresets(false);
+ if (mGeometryOnlyPreset != null) {
+ bitmap = mLoader.getImageForPreset(null, mGeometryOnlyPreset,
+ true);
+ if (bitmap != null) {
+ mGeometryOnlyImage = bitmap;
+ }
+ }
+ if (mFiltersOnlyPreset != null) {
+ bitmap = mLoader.getImageForPreset(null, mFiltersOnlyPreset,
+ true);
+ if (bitmap != null) {
+ mFiltersOnlyImage = bitmap;
+ }
+ }
+ }
+}