diff options
author | John Hoford <hoford@google.com> | 2013-01-14 14:48:39 -0800 |
---|---|---|
committer | John Hoford <hoford@google.com> | 2013-01-15 14:54:05 -0800 |
commit | de5d6c6a14c1250dc43c40f5b22cf6ff69362f17 (patch) | |
tree | e7be8c996146dc7f56240b3ac71b7e034032b4a7 | |
parent | 3d49241cf309365373a1c3e98838c764f718cd3e (diff) | |
download | android_packages_apps_Snap-de5d6c6a14c1250dc43c40f5b22cf6ff69362f17.tar.gz android_packages_apps_Snap-de5d6c6a14c1250dc43c40f5b22cf6ff69362f17.tar.bz2 android_packages_apps_Snap-de5d6c6a14c1250dc43c40f5b22cf6ff69362f17.zip |
refactoring imageshow
Change-Id: I6d0872250b31a427ea6a3e46bd1c9ca5f3ba92ee
16 files changed, 305 insertions, 363 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index b89ab81cd..e8e629a5a 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -54,7 +54,6 @@ import android.widget.SeekBar; import android.widget.ShareActionProvider; import android.widget.ShareActionProvider.OnShareTargetSelectedListener; import android.widget.Toast; -import android.text.TextUtils; import com.android.gallery3d.R; import com.android.gallery3d.data.LocalAlbum; @@ -75,11 +74,11 @@ import com.android.gallery3d.filtershow.imageshow.ImageShow; import com.android.gallery3d.filtershow.imageshow.ImageStraighten; import com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet; import com.android.gallery3d.filtershow.imageshow.ImageZoom; +import com.android.gallery3d.filtershow.imageshow.MasterImage; import com.android.gallery3d.filtershow.presets.ImagePreset; import com.android.gallery3d.filtershow.provider.SharedImageProvider; import com.android.gallery3d.filtershow.tools.SaveCopyTask; import com.android.gallery3d.filtershow.ui.FilterIconButton; -import com.android.gallery3d.filtershow.ui.IconButton; import com.android.gallery3d.filtershow.ui.FramedTextButton; import com.android.gallery3d.filtershow.ui.ImageCurves; import com.android.gallery3d.filtershow.ui.Spline; @@ -97,6 +96,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, // fields for supporting crop action public static final String CROP_ACTION = "com.android.camera.action.CROP"; private CropExtras mCropExtras = null; + MasterImage mMasterImage = MasterImage.getImage(); public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; @@ -130,8 +130,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, private LinearLayout listFilters = null; private LinearLayout listBorders = null; - private ImageFilter mCurrentFilter = null; - private static final int SELECT_PICTURE = 1; private static final String LOGTAG = "FilterShowActivity"; protected static final boolean ANIMATE_PANELS = true; @@ -161,6 +159,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setupMasterImage(); ImageFilterRS.setRenderScriptContext(this); ImageShow.setDefaultBackgroundColor(getResources().getColor(R.color.background_screen)); @@ -250,24 +249,14 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mImageShow.setImageLoader(mImageLoader); mImageCurves.setImageLoader(mImageLoader); - mImageCurves.setMaster(mImageShow); mImageStraighten.setImageLoader(mImageLoader); - mImageStraighten.setMaster(mImageShow); mImageZoom.setImageLoader(mImageLoader); - mImageZoom.setMaster(mImageShow); mImageCrop.setImageLoader(mImageLoader); - mImageCrop.setMaster(mImageShow); mImageRotate.setImageLoader(mImageLoader); - mImageRotate.setMaster(mImageShow); mImageFlip.setImageLoader(mImageLoader); - mImageFlip.setMaster(mImageShow); mImageTinyPlanet.setImageLoader(mImageLoader); - mImageTinyPlanet.setMaster(mImageShow); mImageRedEyes.setImageLoader(mImageLoader); - mImageRedEyes.setMaster(mImageShow); - mImageDraw.setImageLoader(mImageLoader); - mImageDraw.setMaster(mImageShow); mPanelController.setActivity(this); @@ -309,11 +298,11 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, createOnClickResetOperationsButton()); ListView operationsList = (ListView) findViewById(R.id.operationsList); - operationsList.setAdapter(mImageShow.getHistory()); + operationsList.setAdapter(mMasterImage.getHistory()); operationsList.setOnItemClickListener(this); ListView imageStateList = (ListView) findViewById(R.id.imageStateList); - imageStateList.setAdapter(mImageShow.getImageStateAdapter()); - mImageLoader.setAdapter(mImageShow.getHistory()); + imageStateList.setAdapter(mMasterImage.getState()); + mImageLoader.setAdapter(mMasterImage.getHistory()); fillListImages(listFilters); fillListBorders(listBorders); @@ -328,7 +317,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), findViewById(R.id.panelAccessoryViewList), findViewById(R.id.applyEffect)); - mPanelController.setMasterImage(mImageShow); + mPanelController.setCurrentPanel(mFxButton); Intent intent = getIntent(); if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { @@ -433,7 +422,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, cannotLoadImage(); } - mImageShow.requestFilteredImages(); Bitmap bmap = mImageShow.getFilteredImage(); if (bmap != null && bmap.getWidth() > 0 && bmap.getHeight() > 0) { float w = bmap.getWidth(); @@ -599,7 +587,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, MenuItem undoItem = menu.findItem(R.id.undoButton); MenuItem redoItem = menu.findItem(R.id.redoButton); MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); - mImageShow.getHistory().setMenuItems(undoItem, redoItem, resetItem); + mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); return true; } @@ -623,17 +611,17 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.undoButton: { - HistoryAdapter adapter = mImageShow.getHistory(); + HistoryAdapter adapter = mMasterImage.getHistory(); int position = adapter.undo(); - mImageShow.onItemClick(position); + mMasterImage.onHistoryItemClick(position); mImageShow.showToast("Undo"); invalidateViews(); return true; } case R.id.redoButton: { - HistoryAdapter adapter = mImageShow.getHistory(); + HistoryAdapter adapter = mMasterImage.getHistory(); int position = adapter.redo(); - mImageShow.onItemClick(position); + mMasterImage.onHistoryItemClick(position); mImageShow.showToast("Redo"); invalidateViews(); return true; @@ -731,7 +719,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, } // Default preset (original) - mImageShow.setImagePreset(preset); + mMasterImage.setPreset(preset, true); } private void fillListBorders(LinearLayout listBorders) { @@ -877,6 +865,18 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, } } + public void setupMasterImage() { + HistoryAdapter mHistoryAdapter = new HistoryAdapter( + this, R.layout.filtershow_history_operation_row, + R.id.rowTextView); + ImageStateAdapter mImageStateAdapter = new ImageStateAdapter(this, + R.layout.filtershow_imagestate_row); + + mMasterImage.setHistoryAdapter(mHistoryAdapter); + mMasterImage.setStateAdapter(mImageStateAdapter); + mMasterImage.setActivity(this); + } + // ////////////////////////////////////////////////////////////////////////////// // history panel... @@ -918,10 +918,10 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, void resetHistory() { dispatchNullFilterClick(); - HistoryAdapter adapter = mImageShow.getHistory(); + HistoryAdapter adapter = mMasterImage.getHistory(); adapter.reset(); ImagePreset original = new ImagePreset(adapter.getItem(0)); - mImageShow.setImagePreset(original); + mMasterImage.setPreset(original, true); mPanelController.resetParameters(); invalidateViews(); } @@ -931,7 +931,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, return new View.OnClickListener() { @Override public void onClick(View v) { - resetHistory(); } }; @@ -960,24 +959,24 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, } public void useFilter(ImageFilter filter) { - if (mCurrentFilter == filter) { + if (mMasterImage.getCurrentFilter() == filter) { return; } - mCurrentFilter = filter; + mMasterImage.setCurrentFilter(filter); ImagePreset oldPreset = mImageShow.getImagePreset(); ImagePreset copy = new ImagePreset(oldPreset); // TODO: use a numerical constant instead. copy.add(filter); - mImageShow.setImagePreset(copy); + mMasterImage.setPreset(copy, true); invalidateViews(); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - mImageShow.onItemClick(position); + mMasterImage.onHistoryItemClick(position); invalidateViews(); } @@ -991,7 +990,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - Log.v(LOGTAG, "onActivityResult"); if (resultCode == RESULT_OK) { if (requestCode == SELECT_PICTURE) { Uri selectedImageUri = data.getData(); diff --git a/src/com/android/gallery3d/filtershow/HistoryAdapter.java b/src/com/android/gallery3d/filtershow/HistoryAdapter.java index 471999292..057ab382e 100644 --- a/src/com/android/gallery3d/filtershow/HistoryAdapter.java +++ b/src/com/android/gallery3d/filtershow/HistoryAdapter.java @@ -17,6 +17,7 @@ package com.android.gallery3d.filtershow; import android.content.Context; +import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -115,6 +116,10 @@ public class HistoryAdapter extends ArrayAdapter<ImagePreset> { return getItem(0); } + public ImagePreset getCurrent() { + return getItem(mCurrentPresetPosition); + } + public void addHistoryItem(ImagePreset preset) { if (canAddHistoryItem(preset)) { insert(preset, 0); @@ -123,7 +128,7 @@ public class HistoryAdapter extends ArrayAdapter<ImagePreset> { } public boolean canAddHistoryItem(ImagePreset preset) { - if (getCount() > 0 && getLast().same(preset)) { + if (getCount() > 0 && getCurrent().same(preset)) { // we may still want to insert if the previous // history element isn't the same if (getLast().historyName().equalsIgnoreCase(preset.historyName())) { diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java index 12fe5faea..9f49e89f5 100644 --- a/src/com/android/gallery3d/filtershow/PanelController.java +++ b/src/com/android/gallery3d/filtershow/PanelController.java @@ -18,6 +18,7 @@ package com.android.gallery3d.filtershow; 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; @@ -29,6 +30,7 @@ import com.android.gallery3d.filtershow.filters.ImageFilter; import com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet; import com.android.gallery3d.filtershow.imageshow.ImageCrop; 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; @@ -230,7 +232,7 @@ public class PanelController implements OnClickListener { private View mCurrentPanel = null; private View mRowPanel = null; private UtilityPanel mUtilityPanel = null; - private ImageShow mMasterImage = null; + private MasterImage mMasterImage = MasterImage.getImage(); private ImageShow mCurrentImage = null; private FilterShowActivity mActivity = null; @@ -287,7 +289,7 @@ public class PanelController implements OnClickListener { } HistoryAdapter adapter = mMasterImage.getHistory(); int position = adapter.undo(); - mMasterImage.onItemClick(position); + mMasterImage.onHistoryItemClick(position); showPanel(mCurrentPanel); mCurrentImage.select(); if (mDisableFilterButtons) { @@ -320,10 +322,6 @@ public class PanelController implements OnClickListener { accessoryViewList, textView); } - public void setMasterImage(ImageShow imageShow) { - mMasterImage = imageShow; - } - @Override public void onClick(View view) { ViewType type = mViews.get(view); @@ -392,7 +390,7 @@ public class PanelController implements OnClickListener { } public ImagePreset getImagePreset() { - return mMasterImage.getImagePreset(); + return mMasterImage.getPreset(); } public ImageFilter setImagePreset(ImageFilter filter, String name) { @@ -400,7 +398,7 @@ public class PanelController implements OnClickListener { copy.add(filter); copy.setHistoryName(name); copy.setIsFx(false); - mMasterImage.setImagePreset(copy); + mMasterImage.setPreset(copy, true); return filter; } @@ -413,7 +411,7 @@ public class PanelController implements OnClickListener { // to push it onto the history stack. ImagePreset copy = new ImagePreset(getImagePreset()); copy.setHistoryName(name); - mMasterImage.setImagePreset(copy); + mMasterImage.setPreset(copy, true); filter = copy.getFilter(name); } @@ -469,9 +467,7 @@ public class PanelController implements OnClickListener { mCurrentImage.openUtilityPanel(mUtilityPanel.mAccessoryViewList); } mUtilityPanel.setShowParameter(filter.showParameterValue()); - if (filter != null) { - mMasterImage.setCurrentFilter(filter); - } + mMasterImage.setCurrentFilter(filter); mCurrentImage.select(); } return; diff --git a/src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java b/src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java index adbb5daf7..d58e953c2 100644 --- a/src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java +++ b/src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java @@ -19,6 +19,7 @@ package com.android.gallery3d.filtershow.cache; import android.graphics.Bitmap; import com.android.gallery3d.filtershow.imageshow.ImageShow; +import com.android.gallery3d.filtershow.imageshow.MasterImage; import com.android.gallery3d.filtershow.presets.ImagePreset; import java.util.Vector; @@ -69,8 +70,13 @@ public class DirectPresetCache implements Cache { public void run() { for (int i = 0; i < mObservers.size(); i++) { ImageShow imageShow = mObservers.elementAt(i); - imageShow.invalidate(); - imageShow.updateImage(); + // FIXME: need to replace the observer from ImageShow to + // MasterImage + if (imageShow != null) { + imageShow.invalidate(); + imageShow.updateImage(); + } + MasterImage.getImage().updatedCache(); } } }; @@ -94,13 +100,10 @@ public class DirectPresetCache implements Cache { @Override public Bitmap get(ImagePreset preset) { - // Log.v(LOGTAG, "get preset " + preset.name() + " : " + preset); CachedPreset cache = getCachedPreset(preset); if (cache != null && !cache.mBusy) { return cache.mBitmap; } - // Log.v(LOGTAG, "didn't find preset " + preset.name() + " : " + preset - // + " we have " + mCache.size() + " elts / " + mCacheSize); return null; } @@ -159,7 +162,6 @@ public class DirectPresetCache implements Cache { @Override public void prepare(ImagePreset preset) { - // Log.v(LOGTAG, "prepare preset " + preset.name() + " : " + preset); CachedPreset cache = getCachedPreset(preset); if (cache == null || (cache.mBitmap == null && !cache.mBusy)) { if (cache == null) { diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java index cb2bae722..6f7c36e28 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterRS.java @@ -31,6 +31,12 @@ public class ImageFilterRS extends ImageFilter { private static android.content.res.Resources mResources = null; public void prepare(Bitmap bitmap) { + if (mInPixelsAllocation != null) { + mInPixelsAllocation.destroy(); + } + if (mOutPixelsAllocation != null) { + mOutPixelsAllocation.destroy(); + } mInPixelsAllocation = Allocation.createFromBitmap(mRS, bitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); 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; + } + } + } +} diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java index 2522c8966..8f3938406 100644 --- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java +++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java @@ -296,10 +296,6 @@ public class ImagePreset { bitmap = mImageBorder.apply(bitmap, mScaleFactor, mIsHighQuality); } - if (mEndPoint != null) { - mEndPoint.updateFilteredImage(bitmap); - } - return bitmap; } diff --git a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java index c2be85809..089b24118 100644 --- a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java +++ b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java @@ -16,25 +16,16 @@ package com.android.gallery3d.filtershow.ui; -import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Rect; -import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.util.Log; import android.view.View; import android.widget.LinearLayout; -import com.android.gallery3d.R; import com.android.gallery3d.filtershow.FilterShowActivity; import com.android.gallery3d.filtershow.filters.ImageFilter; -import com.android.gallery3d.filtershow.filters.ImageFilterBorder; -import com.android.gallery3d.filtershow.filters.ImageFilterDownsample; -import com.android.gallery3d.filtershow.filters.ImageFilterParametricBorder; public class FilterIconButton extends IconButton implements View.OnClickListener { private Bitmap mOverlayBitmap = null; @@ -89,11 +80,9 @@ public class FilterIconButton extends IconButton implements View.OnClickListener @Override public void onClick(View v) { if (mController != null && mImageFilter != null) { - if (!isSelected()) { - mController.useFilter(mImageFilter); - mParentContainer.dispatchSetSelected(false); - setSelected(true); - } + mController.useFilter(mImageFilter); + mParentContainer.dispatchSetSelected(false); + setSelected(true); } if (mListener != null && mListener != this) { mListener.onClick(v); diff --git a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java index 5fbfc900f..80c893562 100644 --- a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java +++ b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java @@ -36,10 +36,10 @@ import android.widget.PopupMenu; import com.android.gallery3d.R; import com.android.gallery3d.filtershow.filters.ImageFilterCurves; -import com.android.gallery3d.filtershow.imageshow.ImageSlave; +import com.android.gallery3d.filtershow.imageshow.ImageShow; import com.android.gallery3d.filtershow.presets.ImagePreset; -public class ImageCurves extends ImageSlave { +public class ImageCurves extends ImageShow { private static final String LOGTAG = "ImageCurves"; Paint gPaint = new Paint(); @@ -124,9 +124,10 @@ public class ImageCurves extends ImageSlave { } private ImageFilterCurves curves() { - if (getMaster() != null) { - String filterName = getFilterName(); - return (ImageFilterCurves) getImagePreset().getFilter(filterName); + String filterName = getFilterName(); + ImagePreset p = getImagePreset(); + if (p != null) { + return (ImageFilterCurves) p.getFilter(filterName); } return null; } @@ -144,7 +145,7 @@ public class ImageCurves extends ImageSlave { } public void resetCurve() { - if (getMaster() != null && curves() != null) { + if (curves() != null) { curves().reset(); updateCachedImage(); } |