diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/FilterShowActivity.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/FilterShowActivity.java | 1121 |
1 files changed, 0 insertions, 1121 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java deleted file mode 100644 index 4700fccfe..000000000 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ /dev/null @@ -1,1121 +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; - -import android.app.ActionBar; -import android.app.AlertDialog; -import android.app.ProgressDialog; -import android.content.ComponentName; -import android.content.ContentValues; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.ServiceConnection; -import android.content.pm.ActivityInfo; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.AsyncTask; -import android.os.Bundle; -import android.os.Handler; -import android.os.IBinder; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentTransaction; -import android.util.DisplayMetrics; -import android.util.Log; -import android.util.TypedValue; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewPropertyAnimator; -import android.view.WindowManager; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.FrameLayout; -import android.widget.ShareActionProvider; -import android.widget.ShareActionProvider.OnShareTargetSelectedListener; -import android.widget.Toast; - -import com.android.gallery3d.R; -import com.android.gallery3d.app.PhotoPage; -import com.android.gallery3d.data.LocalAlbum; -import com.android.gallery3d.filtershow.cache.ImageLoader; -import com.android.gallery3d.filtershow.category.Action; -import com.android.gallery3d.filtershow.category.CategoryAdapter; -import com.android.gallery3d.filtershow.category.MainPanel; -import com.android.gallery3d.filtershow.data.UserPresetsManager; -import com.android.gallery3d.filtershow.editors.BasicEditor; -import com.android.gallery3d.filtershow.editors.Editor; -import com.android.gallery3d.filtershow.editors.EditorChanSat; -import com.android.gallery3d.filtershow.editors.EditorCrop; -import com.android.gallery3d.filtershow.editors.EditorDraw; -import com.android.gallery3d.filtershow.editors.EditorGrad; -import com.android.gallery3d.filtershow.editors.EditorManager; -import com.android.gallery3d.filtershow.editors.EditorMirror; -import com.android.gallery3d.filtershow.editors.EditorPanel; -import com.android.gallery3d.filtershow.editors.EditorRedEye; -import com.android.gallery3d.filtershow.editors.EditorRotate; -import com.android.gallery3d.filtershow.editors.EditorStraighten; -import com.android.gallery3d.filtershow.editors.EditorTinyPlanet; -import com.android.gallery3d.filtershow.editors.ImageOnlyEditor; -import com.android.gallery3d.filtershow.filters.FilterRepresentation; -import com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation; -import com.android.gallery3d.filtershow.filters.FiltersManager; -import com.android.gallery3d.filtershow.filters.ImageFilter; -import com.android.gallery3d.filtershow.history.HistoryItem; -import com.android.gallery3d.filtershow.history.HistoryManager; -import com.android.gallery3d.filtershow.imageshow.ImageShow; -import com.android.gallery3d.filtershow.imageshow.MasterImage; -import com.android.gallery3d.filtershow.imageshow.Spline; -import com.android.gallery3d.filtershow.pipeline.CachingPipeline; -import com.android.gallery3d.filtershow.pipeline.ImagePreset; -import com.android.gallery3d.filtershow.pipeline.ProcessingService; -import com.android.gallery3d.filtershow.presets.PresetManagementDialog; -import com.android.gallery3d.filtershow.presets.UserPresetsAdapter; -import com.android.gallery3d.filtershow.provider.SharedImageProvider; -import com.android.gallery3d.filtershow.state.StateAdapter; -import com.android.gallery3d.filtershow.tools.SaveImage; -import com.android.gallery3d.filtershow.tools.XmpPresets; -import com.android.gallery3d.filtershow.tools.XmpPresets.XMresults; -import com.android.gallery3d.filtershow.ui.ExportDialog; -import com.android.gallery3d.filtershow.ui.FramedTextButton; -import com.android.gallery3d.util.GalleryUtils; -import com.android.gallery3d.util.UsageStatistics; -import com.android.photos.data.GalleryBitmapPool; - -import java.io.File; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Vector; - -public class FilterShowActivity extends FragmentActivity implements OnItemClickListener, - OnShareTargetSelectedListener { - - private String mAction = ""; - MasterImage mMasterImage = null; - - private static final long LIMIT_SUPPORTS_HIGHRES = 134217728; // 128Mb - - public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; - public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; - private ImageShow mImageShow = null; - - private View mSaveButton = null; - - private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); - - private static final int SELECT_PICTURE = 1; - private static final String LOGTAG = "FilterShowActivity"; - - private boolean mShowingTinyPlanet = false; - private boolean mShowingImageStatePanel = false; - - private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); - - private ShareActionProvider mShareActionProvider; - private File mSharedOutputFile = null; - - private boolean mSharingImage = false; - - private WeakReference<ProgressDialog> mSavingProgressDialog; - - private LoadBitmapTask mLoadBitmapTask; - - private Uri mOriginalImageUri = null; - private ImagePreset mOriginalPreset = null; - - private Uri mSelectedImageUri = null; - - private UserPresetsManager mUserPresetsManager = null; - private UserPresetsAdapter mUserPresetsAdapter = null; - private CategoryAdapter mCategoryLooksAdapter = null; - private CategoryAdapter mCategoryBordersAdapter = null; - private CategoryAdapter mCategoryGeometryAdapter = null; - private CategoryAdapter mCategoryFiltersAdapter = null; - private int mCurrentPanel = MainPanel.LOOKS; - - private ProcessingService mBoundService; - private boolean mIsBound = false; - - public ProcessingService getProcessingService() { - return mBoundService; - } - - public boolean isSimpleEditAction() { - return !PhotoPage.ACTION_NEXTGEN_EDIT.equalsIgnoreCase(mAction); - } - - private ServiceConnection mConnection = new ServiceConnection() { - public void onServiceConnected(ComponentName className, IBinder service) { - /* - * This is called when the connection with the service has been - * established, giving us the service object we can use to - * interact with the service. Because we have bound to a explicit - * service that we know is running in our own process, we can - * cast its IBinder to a concrete class and directly access it. - */ - mBoundService = ((ProcessingService.LocalBinder)service).getService(); - mBoundService.setFiltershowActivity(FilterShowActivity.this); - mBoundService.onStart(); - } - - public void onServiceDisconnected(ComponentName className) { - /* - * This is called when the connection with the service has been - * unexpectedly disconnected -- that is, its process crashed. - * Because it is running in our same process, we should never - * see this happen. - */ - mBoundService = null; - } - }; - - void doBindService() { - /* - * Establish a connection with the service. We use an explicit - * class name because we want a specific service implementation that - * we know will be running in our own process (and thus won't be - * supporting component replacement by other applications). - */ - bindService(new Intent(FilterShowActivity.this, ProcessingService.class), - mConnection, Context.BIND_AUTO_CREATE); - mIsBound = true; - } - - void doUnbindService() { - if (mIsBound) { - // Detach our existing connection. - unbindService(mConnection); - mIsBound = false; - } - } - - private void setupPipeline() { - doBindService(); - ImageFilter.setActivityForMemoryToasts(this); - mUserPresetsManager = new UserPresetsManager(this); - mUserPresetsAdapter = new UserPresetsAdapter(this); - mCategoryLooksAdapter = new CategoryAdapter(this); - } - - public void updateUIAfterServiceStarted() { - fillCategories(); - loadMainPanel(); - setDefaultPreset(); - extractXMPData(); - processIntent(); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - boolean onlyUsePortrait = getResources().getBoolean(R.bool.only_use_portrait); - if (onlyUsePortrait) { - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - } - MasterImage.setMaster(mMasterImage); - - clearGalleryBitmapPool(); - setupPipeline(); - - setupMasterImage(); - setDefaultValues(); - fillEditors(); - - loadXML(); - UsageStatistics.onContentViewChanged(UsageStatistics.COMPONENT_EDITOR, "Main"); - UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, - UsageStatistics.CATEGORY_LIFECYCLE, UsageStatistics.LIFECYCLE_START); - } - - public boolean isShowingImageStatePanel() { - return mShowingImageStatePanel; - } - - public void loadMainPanel() { - if (findViewById(R.id.main_panel_container) == null) { - return; - } - MainPanel panel = new MainPanel(); - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); - transaction.commit(); - } - - public void loadEditorPanel(FilterRepresentation representation, - final Editor currentEditor) { - if (representation.getEditorId() == ImageOnlyEditor.ID) { - currentEditor.reflectCurrentFilter(); - return; - } - final int currentId = currentEditor.getID(); - Runnable showEditor = new Runnable() { - @Override - public void run() { - EditorPanel panel = new EditorPanel(); - panel.setEditor(currentId); - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.remove(getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG)); - transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); - transaction.commit(); - } - }; - Fragment main = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); - boolean doAnimation = false; - if (mShowingImageStatePanel - && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { - doAnimation = true; - } - if (doAnimation && main != null && main instanceof MainPanel) { - MainPanel mainPanel = (MainPanel) main; - View container = mainPanel.getView().findViewById(R.id.category_panel_container); - View bottom = mainPanel.getView().findViewById(R.id.bottom_panel); - int panelHeight = container.getHeight() + bottom.getHeight(); - ViewPropertyAnimator anim = mainPanel.getView().animate(); - anim.translationY(panelHeight).start(); - final Handler handler = new Handler(); - handler.postDelayed(showEditor, anim.getDuration()); - } else { - showEditor.run(); - } - } - - private void loadXML() { - setContentView(R.layout.filtershow_activity); - - ActionBar actionBar = getActionBar(); - actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); - actionBar.setCustomView(R.layout.filtershow_actionbar); - - mSaveButton = actionBar.getCustomView(); - mSaveButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - saveImage(); - } - }); - - mImageShow = (ImageShow) findViewById(R.id.imageShow); - mImageViews.add(mImageShow); - - setupEditors(); - - mEditorPlaceHolder.hide(); - mImageShow.bindAsImageLoadListener(); - - setupStatePanel(); - } - - public void fillCategories() { - fillLooks(); - loadUserPresets(); - fillBorders(); - fillTools(); - fillEffects(); - } - - public void setupStatePanel() { - MasterImage.getImage().setHistoryManager(mMasterImage.getHistory()); - } - - private void fillEffects() { - FiltersManager filtersManager = FiltersManager.getManager(); - ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getEffects(); - mCategoryFiltersAdapter = new CategoryAdapter(this); - for (FilterRepresentation representation : filtersRepresentations) { - if (representation.getTextId() != 0) { - representation.setName(getString(representation.getTextId())); - } - mCategoryFiltersAdapter.add(new Action(this, representation)); - } - } - - private void fillTools() { - FiltersManager filtersManager = FiltersManager.getManager(); - ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getTools(); - mCategoryGeometryAdapter = new CategoryAdapter(this); - for (FilterRepresentation representation : filtersRepresentations) { - mCategoryGeometryAdapter.add(new Action(this, representation)); - } - } - - private void processIntent() { - Intent intent = getIntent(); - if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { - getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - - mAction = intent.getAction(); - mSelectedImageUri = intent.getData(); - Uri loadUri = mSelectedImageUri; - if (mOriginalImageUri != null) { - loadUri = mOriginalImageUri; - } - if (loadUri != null) { - startLoadBitmap(loadUri); - } else { - pickImage(); - } - } - - private void setupEditors() { - mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); - EditorManager.addEditors(mEditorPlaceHolder); - mEditorPlaceHolder.setOldViews(mImageViews); - } - - private void fillEditors() { - mEditorPlaceHolder.addEditor(new EditorChanSat()); - mEditorPlaceHolder.addEditor(new EditorGrad()); - mEditorPlaceHolder.addEditor(new EditorDraw()); - mEditorPlaceHolder.addEditor(new BasicEditor()); - mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); - mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); - mEditorPlaceHolder.addEditor(new EditorRedEye()); - mEditorPlaceHolder.addEditor(new EditorCrop()); - mEditorPlaceHolder.addEditor(new EditorMirror()); - mEditorPlaceHolder.addEditor(new EditorRotate()); - mEditorPlaceHolder.addEditor(new EditorStraighten()); - } - - private void setDefaultValues() { - Resources res = getResources(); - - // TODO: get those values from XML. - FramedTextButton.setTextSize((int) getPixelsFromDip(14)); - FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); - FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); - - Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); - int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); - Spline.setCurveHandle(curveHandle, curveHandleSize); - Spline.setCurveWidth((int) getPixelsFromDip(3)); - } - - private void startLoadBitmap(Uri uri) { - final View loading = findViewById(R.id.loading); - final View imageShow = findViewById(R.id.imageShow); - imageShow.setVisibility(View.INVISIBLE); - loading.setVisibility(View.VISIBLE); - mShowingTinyPlanet = false; - mLoadBitmapTask = new LoadBitmapTask(); - mLoadBitmapTask.execute(uri); - } - - private void fillBorders() { - FiltersManager filtersManager = FiltersManager.getManager(); - ArrayList<FilterRepresentation> borders = filtersManager.getBorders(); - - for (int i = 0; i < borders.size(); i++) { - FilterRepresentation filter = borders.get(i); - filter.setName(getString(R.string.borders)); - if (i == 0) { - filter.setName(getString(R.string.none)); - } - } - - mCategoryBordersAdapter = new CategoryAdapter(this); - for (FilterRepresentation representation : borders) { - if (representation.getTextId() != 0) { - representation.setName(getString(representation.getTextId())); - } - mCategoryBordersAdapter.add(new Action(this, representation, Action.FULL_VIEW)); - } - } - - public UserPresetsAdapter getUserPresetsAdapter() { - return mUserPresetsAdapter; - } - - public CategoryAdapter getCategoryLooksAdapter() { - return mCategoryLooksAdapter; - } - - public CategoryAdapter getCategoryBordersAdapter() { - return mCategoryBordersAdapter; - } - - public CategoryAdapter getCategoryGeometryAdapter() { - return mCategoryGeometryAdapter; - } - - public CategoryAdapter getCategoryFiltersAdapter() { - return mCategoryFiltersAdapter; - } - - public void removeFilterRepresentation(FilterRepresentation filterRepresentation) { - if (filterRepresentation == null) { - return; - } - ImagePreset oldPreset = MasterImage.getImage().getPreset(); - ImagePreset copy = new ImagePreset(oldPreset); - copy.removeFilter(filterRepresentation); - MasterImage.getImage().setPreset(copy, copy.getLastRepresentation(), true); - if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { - FilterRepresentation lastRepresentation = copy.getLastRepresentation(); - MasterImage.getImage().setCurrentFilterRepresentation(lastRepresentation); - } - } - - public void useFilterRepresentation(FilterRepresentation filterRepresentation) { - if (filterRepresentation == null) { - return; - } - if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { - return; - } - ImagePreset oldPreset = MasterImage.getImage().getPreset(); - ImagePreset copy = new ImagePreset(oldPreset); - FilterRepresentation representation = copy.getRepresentation(filterRepresentation); - if (representation == null) { - copy.addFilter(filterRepresentation); - } else if (filterRepresentation.getFilterType() == FilterRepresentation.TYPE_GEOMETRY) { - filterRepresentation = representation; - } else { - if (filterRepresentation.allowsSingleInstanceOnly()) { - // Don't just update the filter representation. Centralize the - // logic in the addFilter(), such that we can keep "None" as - // null. - copy.removeFilter(representation); - copy.addFilter(filterRepresentation); - } - } - MasterImage.getImage().setPreset(copy, filterRepresentation, true); - MasterImage.getImage().setCurrentFilterRepresentation(filterRepresentation); - } - - public void showRepresentation(FilterRepresentation representation) { - if (representation == null) { - return; - } - - useFilterRepresentation(representation); - - // show representation - Editor mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId()); - loadEditorPanel(representation, mCurrentEditor); - } - - public Editor getEditor(int editorID) { - return mEditorPlaceHolder.getEditor(editorID); - } - - public void setCurrentPanel(int currentPanel) { - mCurrentPanel = currentPanel; - } - - public int getCurrentPanel() { - return mCurrentPanel; - } - - public void updateCategories() { - ImagePreset preset = mMasterImage.getPreset(); - mCategoryLooksAdapter.reflectImagePreset(preset); - mCategoryBordersAdapter.reflectImagePreset(preset); - } - - private class LoadHighresBitmapTask extends AsyncTask<Void, Void, Boolean> { - @Override - protected Boolean doInBackground(Void... params) { - MasterImage master = MasterImage.getImage(); - Rect originalBounds = master.getOriginalBounds(); - if (master.supportsHighRes()) { - int highresPreviewSize = master.getOriginalBitmapLarge().getWidth() * 2; - if (highresPreviewSize > originalBounds.width()) { - highresPreviewSize = originalBounds.width(); - } - Rect bounds = new Rect(); - Bitmap originalHires = ImageLoader.loadOrientedConstrainedBitmap(master.getUri(), - master.getActivity(), highresPreviewSize, - master.getOrientation(), bounds); - master.setOriginalBounds(bounds); - master.setOriginalBitmapHighres(originalHires); - mBoundService.setOriginalBitmapHighres(originalHires); - master.warnListeners(); - } - return true; - } - - @Override - protected void onPostExecute(Boolean result) { - Bitmap highresBitmap = MasterImage.getImage().getOriginalBitmapHighres(); - if (highresBitmap != null) { - float highResPreviewScale = (float) highresBitmap.getWidth() - / (float) MasterImage.getImage().getOriginalBounds().width(); - mBoundService.setHighresPreviewScaleFactor(highResPreviewScale); - } - } - } - - private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { - int mBitmapSize; - - public LoadBitmapTask() { - mBitmapSize = getScreenImageSize(); - } - - @Override - protected Boolean doInBackground(Uri... params) { - if (!MasterImage.getImage().loadBitmap(params[0], mBitmapSize)) { - return false; - } - publishProgress(ImageLoader.queryLightCycle360(MasterImage.getImage().getActivity())); - return true; - } - - @Override - protected void onProgressUpdate(Boolean... values) { - super.onProgressUpdate(values); - if (isCancelled()) { - return; - } - if (values[0]) { - mShowingTinyPlanet = true; - } - } - - @Override - protected void onPostExecute(Boolean result) { - MasterImage.setMaster(mMasterImage); - if (isCancelled()) { - return; - } - - if (!result) { - cannotLoadImage(); - } - - if (null == CachingPipeline.getRenderScriptContext()){ - Log.v(LOGTAG,"RenderScript context destroyed during load"); - return; - } - final View loading = findViewById(R.id.loading); - loading.setVisibility(View.GONE); - final View imageShow = findViewById(R.id.imageShow); - imageShow.setVisibility(View.VISIBLE); - - Bitmap largeBitmap = MasterImage.getImage().getOriginalBitmapLarge(); - mBoundService.setOriginalBitmap(largeBitmap); - - float previewScale = (float) largeBitmap.getWidth() - / (float) MasterImage.getImage().getOriginalBounds().width(); - mBoundService.setPreviewScaleFactor(previewScale); - if (!mShowingTinyPlanet) { - mCategoryFiltersAdapter.removeTinyPlanet(); - } - mCategoryLooksAdapter.imageLoaded(); - mCategoryBordersAdapter.imageLoaded(); - mCategoryGeometryAdapter.imageLoaded(); - mCategoryFiltersAdapter.imageLoaded(); - mLoadBitmapTask = null; - - if (mOriginalPreset != null) { - MasterImage.getImage().setLoadedPreset(mOriginalPreset); - MasterImage.getImage().setPreset(mOriginalPreset, - mOriginalPreset.getLastRepresentation(), true); - mOriginalPreset = null; - } - - if (mAction == TINY_PLANET_ACTION) { - showRepresentation(mCategoryFiltersAdapter.getTinyPlanet()); - } - LoadHighresBitmapTask highresLoad = new LoadHighresBitmapTask(); - highresLoad.execute(); - super.onPostExecute(result); - } - - } - - private void clearGalleryBitmapPool() { - (new AsyncTask<Void, Void, Void>() { - @Override - protected Void doInBackground(Void... params) { - // Free memory held in Gallery's Bitmap pool. May be O(n) for n bitmaps. - GalleryBitmapPool.getInstance().clear(); - return null; - } - }).execute(); - } - - @Override - protected void onDestroy() { - if (mLoadBitmapTask != null) { - mLoadBitmapTask.cancel(false); - } - mUserPresetsManager.close(); - doUnbindService(); - super.onDestroy(); - } - - // TODO: find a more robust way of handling image size selection - // for high screen densities. - private int getScreenImageSize() { - DisplayMetrics outMetrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - return (int) Math.max(outMetrics.heightPixels, outMetrics.widthPixels); - } - - private void showSavingProgress(String albumName) { - ProgressDialog progress; - if (mSavingProgressDialog != null) { - progress = mSavingProgressDialog.get(); - if (progress != null) { - progress.show(); - return; - } - } - // TODO: Allow cancellation of the saving process - String progressText; - if (albumName == null) { - progressText = getString(R.string.saving_image); - } else { - progressText = getString(R.string.filtershow_saving_image, albumName); - } - progress = ProgressDialog.show(this, "", progressText, true, false); - mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); - } - - private void hideSavingProgress() { - if (mSavingProgressDialog != null) { - ProgressDialog progress = mSavingProgressDialog.get(); - if (progress != null) - progress.dismiss(); - } - } - - public void completeSaveImage(Uri saveUri) { - if (mSharingImage && mSharedOutputFile != null) { - // Image saved, we unblock the content provider - Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, - Uri.encode(mSharedOutputFile.getAbsolutePath())); - ContentValues values = new ContentValues(); - values.put(SharedImageProvider.PREPARE, false); - getContentResolver().insert(uri, values); - } - setResult(RESULT_OK, new Intent().setData(saveUri)); - hideSavingProgress(); - finish(); - } - - @Override - public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { - // 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(); - values.put(SharedImageProvider.PREPARE, true); - getContentResolver().insert(uri, values); - mSharingImage = true; - - // Process and save the image in the background. - showSavingProgress(null); - mImageShow.saveImage(this, mSharedOutputFile); - return true; - } - - private Intent getDefaultShareIntent() { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.setType(SharedImageProvider.MIME_TYPE); - mSharedOutputFile = SaveImage.getNewFile(this, MasterImage.getImage().getUri()); - Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, - Uri.encode(mSharedOutputFile.getAbsolutePath())); - intent.putExtra(Intent.EXTRA_STREAM, uri); - return intent; - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); - MenuItem showState = menu.findItem(R.id.showImageStateButton); - if (mShowingImageStatePanel) { - showState.setTitle(R.string.hide_imagestate_panel); - } else { - showState.setTitle(R.string.show_imagestate_panel); - } - mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) - .getActionProvider(); - mShareActionProvider.setShareIntent(getDefaultShareIntent()); - mShareActionProvider.setOnShareTargetSelectedListener(this); - - MenuItem undoItem = menu.findItem(R.id.undoButton); - MenuItem redoItem = menu.findItem(R.id.redoButton); - MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); - mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); - return true; - } - - @Override - public void onPause() { - super.onPause(); - if (mShareActionProvider != null) { - mShareActionProvider.setOnShareTargetSelectedListener(null); - } - } - - @Override - public void onResume() { - super.onResume(); - if (mShareActionProvider != null) { - mShareActionProvider.setOnShareTargetSelectedListener(this); - } - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.undoButton: { - HistoryManager adapter = mMasterImage.getHistory(); - int position = adapter.undo(); - mMasterImage.onHistoryItemClick(position); - backToMain(); - invalidateViews(); - UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, - UsageStatistics.CATEGORY_BUTTON_PRESS, "Undo"); - return true; - } - case R.id.redoButton: { - HistoryManager adapter = mMasterImage.getHistory(); - int position = adapter.redo(); - mMasterImage.onHistoryItemClick(position); - invalidateViews(); - UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, - UsageStatistics.CATEGORY_BUTTON_PRESS, "Redo"); - return true; - } - case R.id.resetHistoryButton: { - resetHistory(); - UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, - UsageStatistics.CATEGORY_BUTTON_PRESS, "ResetHistory"); - return true; - } - case R.id.showImageStateButton: { - toggleImageStatePanel(); - UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, - UsageStatistics.CATEGORY_BUTTON_PRESS, - mShowingImageStatePanel ? "ShowPanel" : "HidePanel"); - return true; - } - case R.id.exportFlattenButton: { - showExportOptionsDialog(); - return true; - } - case android.R.id.home: { - saveImage(); - return true; - } - case R.id.manageUserPresets: { - manageUserPresets(); - return true; - } - } - return false; - } - - private void manageUserPresets() { - DialogFragment dialog = new PresetManagementDialog(); - dialog.show(getSupportFragmentManager(), "NoticeDialogFragment"); - } - - private void showExportOptionsDialog() { - DialogFragment dialog = new ExportDialog(); - dialog.show(getSupportFragmentManager(), "ExportDialogFragment"); - } - - public void updateUserPresetsFromAdapter(UserPresetsAdapter adapter) { - ArrayList<FilterUserPresetRepresentation> representations = - adapter.getDeletedRepresentations(); - for (FilterUserPresetRepresentation representation : representations) { - deletePreset(representation.getId()); - } - ArrayList<FilterUserPresetRepresentation> changedRepresentations = - adapter.getChangedRepresentations(); - for (FilterUserPresetRepresentation representation : changedRepresentations) { - updatePreset(representation); - } - adapter.clearDeletedRepresentations(); - adapter.clearChangedRepresentations(); - loadUserPresets(); - } - - public void loadUserPresets() { - mUserPresetsManager.load(); - } - - public void updateUserPresetsFromManager() { - ArrayList<FilterUserPresetRepresentation> presets = mUserPresetsManager.getRepresentations(); - if (presets == null) { - return; - } - if (mCategoryLooksAdapter != null) { - fillLooks(); - } - mUserPresetsAdapter.clear(); - for (int i = 0; i < presets.size(); i++) { - FilterUserPresetRepresentation representation = presets.get(i); - mCategoryLooksAdapter.add( - new Action(this, representation, Action.FULL_VIEW)); - mUserPresetsAdapter.add(new Action(this, representation, Action.FULL_VIEW)); - } - mCategoryLooksAdapter.notifyDataSetInvalidated(); - - } - - public void saveCurrentImagePreset() { - mUserPresetsManager.save(MasterImage.getImage().getPreset()); - } - - private void deletePreset(int id) { - mUserPresetsManager.delete(id); - } - - private void updatePreset(FilterUserPresetRepresentation representation) { - mUserPresetsManager.update(representation); - } - - public void enableSave(boolean enable) { - if (mSaveButton != null) { - mSaveButton.setEnabled(enable); - } - } - - private void fillLooks() { - FiltersManager filtersManager = FiltersManager.getManager(); - ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getLooks(); - - mCategoryLooksAdapter.clear(); - int verticalItemHeight = (int) getResources().getDimension(R.dimen.action_item_height); - mCategoryLooksAdapter.setItemHeight(verticalItemHeight); - for (FilterRepresentation representation : filtersRepresentations) { - mCategoryLooksAdapter.add(new Action(this, representation, Action.FULL_VIEW)); - } - } - - public void setDefaultPreset() { - // Default preset (original) - ImagePreset preset = new ImagePreset(); // empty - mMasterImage.setPreset(preset, preset.getLastRepresentation(), true); - } - - // ////////////////////////////////////////////////////////////////////////////// - // Some utility functions - // TODO: finish the cleanup. - - public void invalidateViews() { - for (ImageShow views : mImageViews) { - views.updateImage(); - } - } - - public void hideImageViews() { - for (View view : mImageViews) { - view.setVisibility(View.GONE); - } - mEditorPlaceHolder.hide(); - } - - // ////////////////////////////////////////////////////////////////////////////// - // imageState panel... - - public void toggleImageStatePanel() { - invalidateOptionsMenu(); - mShowingImageStatePanel = !mShowingImageStatePanel; - Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); - if (panel != null) { - if (panel instanceof EditorPanel) { - EditorPanel editorPanel = (EditorPanel) panel; - editorPanel.showImageStatePanel(mShowingImageStatePanel); - } else if (panel instanceof MainPanel) { - MainPanel mainPanel = (MainPanel) panel; - mainPanel.showImageStatePanel(mShowingImageStatePanel); - } - } - } - - @Override - public void onConfigurationChanged(Configuration newConfig) - { - super.onConfigurationChanged(newConfig); - setDefaultValues(); - loadXML(); - fillCategories(); - loadMainPanel(); - - // mLoadBitmapTask==null implies you have looked at the intent - if (!mShowingTinyPlanet && (mLoadBitmapTask == null)) { - mCategoryFiltersAdapter.removeTinyPlanet(); - } - final View loading = findViewById(R.id.loading); - loading.setVisibility(View.GONE); - } - - public void setupMasterImage() { - - HistoryManager historyManager = new HistoryManager(); - StateAdapter imageStateAdapter = new StateAdapter(this, 0); - MasterImage.reset(); - mMasterImage = MasterImage.getImage(); - mMasterImage.setHistoryManager(historyManager); - mMasterImage.setStateAdapter(imageStateAdapter); - mMasterImage.setActivity(this); - - if (Runtime.getRuntime().maxMemory() > LIMIT_SUPPORTS_HIGHRES) { - mMasterImage.setSupportsHighRes(true); - } else { - mMasterImage.setSupportsHighRes(false); - } - } - - void resetHistory() { - HistoryManager adapter = mMasterImage.getHistory(); - adapter.reset(); - HistoryItem historyItem = adapter.getItem(0); - ImagePreset original = new ImagePreset(historyItem.getImagePreset()); - mMasterImage.setPreset(original, historyItem.getFilterRepresentation(), true); - invalidateViews(); - backToMain(); - } - - public void showDefaultImageView() { - mEditorPlaceHolder.hide(); - mImageShow.setVisibility(View.VISIBLE); - MasterImage.getImage().setCurrentFilter(null); - MasterImage.getImage().setCurrentFilterRepresentation(null); - } - - public void backToMain() { - Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); - if (currentPanel instanceof MainPanel) { - return; - } - loadMainPanel(); - showDefaultImageView(); - } - - @Override - public void onBackPressed() { - Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); - if (currentPanel instanceof MainPanel) { - if (!mImageShow.hasModifications()) { - done(); - } else { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(R.string.unsaved).setTitle(R.string.save_before_exit); - builder.setPositiveButton(R.string.save_and_exit, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - saveImage(); - } - }); - builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - done(); - } - }); - builder.show(); - } - } else { - backToMain(); - } - } - - public void cannotLoadImage() { - Toast.makeText(this, R.string.cannot_load_image, Toast.LENGTH_SHORT).show(); - finish(); - } - - // ////////////////////////////////////////////////////////////////////////////// - - public float getPixelsFromDip(float value) { - Resources r = getResources(); - return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, - r.getDisplayMetrics()); - } - - @Override - public void onItemClick(AdapterView<?> parent, View view, int position, - long id) { - mMasterImage.onHistoryItemClick(position); - invalidateViews(); - } - - public void pickImage() { - Intent intent = new Intent(); - intent.setType("image/*"); - intent.setAction(Intent.ACTION_GET_CONTENT); - startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), - SELECT_PICTURE); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (resultCode == RESULT_OK) { - if (requestCode == SELECT_PICTURE) { - Uri selectedImageUri = data.getData(); - startLoadBitmap(selectedImageUri); - } - } - } - - - public void saveImage() { - if (mImageShow.hasModifications()) { - // Get the name of the album, to which the image will be saved - File saveDir = SaveImage.getFinalSaveDirectory(this, mSelectedImageUri); - int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); - String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); - showSavingProgress(albumName); - mImageShow.saveImage(this, null); - } else { - done(); - } - } - - - public void done() { - hideSavingProgress(); - if (mLoadBitmapTask != null) { - mLoadBitmapTask.cancel(false); - } - finish(); - } - - private void extractXMPData() { - XMresults res = XmpPresets.extractXMPData( - getBaseContext(), mMasterImage, getIntent().getData()); - if (res == null) - return; - - mOriginalImageUri = res.originalimage; - mOriginalPreset = res.preset; - } - - public Uri getSelectedImageUri() { - return mSelectedImageUri; - } - -} |