FilterShowActivity.java revision be84355fddceb9690eef752707c42457ea251e77
13bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet/* 23bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * Copyright (C) 2012 The Android Open Source Project 33bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * 43bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 53bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * you may not use this file except in compliance with the License. 63bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * You may obtain a copy of the License at 73bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * 83bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 93bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * 103bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * Unless required by applicable law or agreed to in writing, software 113bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 123bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * See the License for the specific language governing permissions and 143bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet * limitations under the License. 153bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet */ 163bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 173bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetpackage com.android.gallery3d.filtershow; 183bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 197062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport android.app.ActionBar; 2064f5dc0e6437e95695ed4048f047c3cbef447e0fXavier Ducrohetimport android.app.AlertDialog; 21ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohetimport android.app.ProgressDialog; 22ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohetimport android.content.ContentValues; 235cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perezimport android.content.DialogInterface; 24b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Guptaimport android.content.Intent; 250d829bd739dfcb3374971c776676bf2e53bab43cXavier Ducrohetimport android.content.pm.ActivityInfo; 26ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohetimport android.content.res.Configuration; 277062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport android.content.res.Resources; 28ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohetimport android.graphics.Bitmap; 29ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohetimport android.graphics.Point; 30ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohetimport android.graphics.drawable.Drawable; 31d98e133b3911b8db3430ce9d85efd5a6adcf70bfXavier Ducrohetimport android.net.Uri; 32b32414fe256a6fe1d65e7a1443cd6ea77db8bd95Xavier Ducrohetimport android.os.AsyncTask; 33d98e133b3911b8db3430ce9d85efd5a6adcf70bfXavier Ducrohetimport android.os.Bundle; 3470114b33f8054cc38090a2bbd213ebf15abee63dDeepanshu Guptaimport android.os.Handler; 3541670df819e35f5822cc166db775ed2e9e3dfb7dDeepanshu Guptaimport android.support.v4.app.Fragment; 3641670df819e35f5822cc166db775ed2e9e3dfb7dDeepanshu Guptaimport android.support.v4.app.FragmentActivity; 3741670df819e35f5822cc166db775ed2e9e3dfb7dDeepanshu Guptaimport android.support.v4.app.FragmentTransaction; 3841670df819e35f5822cc166db775ed2e9e3dfb7dDeepanshu Guptaimport android.util.DisplayMetrics; 3941670df819e35f5822cc166db775ed2e9e3dfb7dDeepanshu Guptaimport android.util.Log; 4041670df819e35f5822cc166db775ed2e9e3dfb7dDeepanshu Guptaimport android.util.TypedValue; 41ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohetimport android.view.Display; 423bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport android.view.Menu; 43ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohetimport android.view.MenuItem; 443bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport android.view.View; 45a4a2d3d5936bcdda1409796179725d354e5f4400Andrew Shulaevimport android.view.View.OnClickListener; 46259504c6368e44adfffd4f56f7a838b2d5e73ff9Diego Perezimport android.view.ViewPropertyAnimator; 47c46c84ee673934f340b27b40366a5a61669a4a1eJens Ole Lauridsenimport android.view.WindowManager; 48b321cbfeb00723a6d18746f0d5bbcfd6b6602f6eDiego Perezimport android.widget.AdapterView; 497062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport android.widget.AdapterView.OnItemClickListener; 507062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport android.widget.FrameLayout; 511b5ef2d19e1d7cb491c1c79f867e38ec0bde2770Xavier Ducrohetimport android.widget.ShareActionProvider; 52344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Guptaimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 53947b979a91ac1cd556244d875d8b8d4fec8fd474Xavier Ducrohetimport android.widget.Toast; 5418be29a3d14f1b3e840e8ee88b5a1951a6f6e9c8Deepanshu Gupta 553bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.R; 56994236e95e9809ec8c1d06a218f606f1af2083afXavier Ducrohetimport com.android.gallery3d.data.LocalAlbum; 5733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohetimport com.android.gallery3d.filtershow.cache.CachingPipeline; 58ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohetimport com.android.gallery3d.filtershow.cache.FilteringPipeline; 5933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohetimport com.android.gallery3d.filtershow.cache.ImageLoader; 6062039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohetimport com.android.gallery3d.filtershow.category.Action; 61442aee6bc1abfb143dcfa1ba60d696e576d066c4Deepanshu Guptaimport com.android.gallery3d.filtershow.category.CategoryAdapter; 62442aee6bc1abfb143dcfa1ba60d696e576d066c4Deepanshu Guptaimport com.android.gallery3d.filtershow.category.CategoryView; 633bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.category.MainPanel; 643bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.editors.BasicEditor; 653bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.editors.Editor; 663bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.editors.EditorCrop; 67e4cf18face6980b0c7ac42761512cd93b89927c3Diego Perezimport com.android.gallery3d.filtershow.editors.EditorDraw; 688a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Guptaimport com.android.gallery3d.filtershow.editors.EditorFlip; 69994236e95e9809ec8c1d06a218f606f1af2083afXavier Ducrohetimport com.android.gallery3d.filtershow.editors.EditorInfo; 70994236e95e9809ec8c1d06a218f606f1af2083afXavier Ducrohetimport com.android.gallery3d.filtershow.editors.EditorManager; 71344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Guptaimport com.android.gallery3d.filtershow.editors.EditorPanel; 7276f4c3e91d8579a580569c3d079da99511309727Xavier Ducrohetimport com.android.gallery3d.filtershow.editors.EditorRedEye; 7364f5dc0e6437e95695ed4048f047c3cbef447e0fXavier Ducrohetimport com.android.gallery3d.filtershow.editors.EditorRotate; 7476f4c3e91d8579a580569c3d079da99511309727Xavier Ducrohetimport com.android.gallery3d.filtershow.editors.EditorStraighten; 753bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.editors.EditorTinyPlanet; 763bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 77d98e133b3911b8db3430ce9d85efd5a6adcf70bfXavier Ducrohetimport com.android.gallery3d.filtershow.filters.FilterFxRepresentation; 78ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohetimport com.android.gallery3d.filtershow.filters.FilterImageBorderRepresentation; 796208081afd488af51d4f7cbf858e2de59d47e4e5Xavier Ducrohetimport com.android.gallery3d.filtershow.filters.FilterRepresentation; 8070114b33f8054cc38090a2bbd213ebf15abee63dDeepanshu Guptaimport com.android.gallery3d.filtershow.filters.FiltersManager; 8176f4c3e91d8579a580569c3d079da99511309727Xavier Ducrohetimport com.android.gallery3d.filtershow.filters.ImageFilter; 827062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport com.android.gallery3d.filtershow.history.HistoryManager; 837062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport com.android.gallery3d.filtershow.history.HistoryItem; 8470114b33f8054cc38090a2bbd213ebf15abee63dDeepanshu Guptaimport com.android.gallery3d.filtershow.imageshow.GeometryMetadata; 857062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 867062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport com.android.gallery3d.filtershow.imageshow.ImageShow; 873bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.imageshow.MasterImage; 88f14c342b8a0024e5ca8c2c3ffce8b79abe03e941Tor Norbyeimport com.android.gallery3d.filtershow.presets.ImagePreset; 897062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohetimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 9062c9c3463a9b4a4bc899f5db353f2856876e6590Xavier Ducrohetimport com.android.gallery3d.filtershow.state.StateAdapter; 913bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 92f14c342b8a0024e5ca8c2c3ffce8b79abe03e941Tor Norbyeimport com.android.gallery3d.filtershow.tools.XmpPresets; 93d98e133b3911b8db3430ce9d85efd5a6adcf70bfXavier Ducrohetimport com.android.gallery3d.filtershow.tools.XmpPresets.XMresults; 943bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.filtershow.ui.FramedTextButton; 954c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohetimport com.android.gallery3d.filtershow.ui.Spline; 963bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.util.GalleryUtils; 973bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.gallery3d.util.UsageStatistics; 983bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport com.android.photos.data.GalleryBitmapPool; 993bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 1003bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport java.io.File; 1013bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport java.lang.ref.WeakReference; 1023bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohetimport java.util.Vector; 103b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta 104b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Guptapublic class FilterShowActivity extends FragmentActivity implements OnItemClickListener, 105b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta OnShareTargetSelectedListener { 106b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta 107b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta private String mAction = ""; 108b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta MasterImage mMasterImage = null; 109baf88de1f5c435a788f6c38720354b2dbaa19e60Deepanshu Gupta 110b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta private static final long LIMIT_SUPPORTS_HIGHRES = 134217728; // 128Mb 1113bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 112ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 113952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 114ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet private ImageLoader mImageLoader = null; 115ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet private ImageShow mImageShow = null; 1163bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 1173bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private View mSaveButton = null; 1180fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet 1193bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 120259504c6368e44adfffd4f56f7a838b2d5e73ff9Diego Perez 121259504c6368e44adfffd4f56f7a838b2d5e73ff9Diego Perez private static final int SELECT_PICTURE = 1; 1223bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private static final String LOGTAG = "FilterShowActivity"; 123ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet protected static final boolean ANIMATE_PANELS = true; 1243bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 1253bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private boolean mShowingTinyPlanet = false; 126799fe3b371c812a0e94872f896b54afa44e94868Xavier Ducrohet private boolean mShowingImageStatePanel = false; 127799fe3b371c812a0e94872f896b54afa44e94868Xavier Ducrohet 1281392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 1291392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet 1301392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet private ShareActionProvider mShareActionProvider; 131799fe3b371c812a0e94872f896b54afa44e94868Xavier Ducrohet private File mSharedOutputFile = null; 132344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta 133344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta private boolean mSharingImage = false; 134344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta 135344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta private WeakReference<ProgressDialog> mSavingProgressDialog; 136a6a38c02bfd3f6a678ac1671f5744b8e439e075aXavier Ducrohet 1373bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private LoadBitmapTask mLoadBitmapTask; 1383bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private boolean mLoading = true; 139e9a2ea4ac32589b372ec195d8be59391c686a8c6Xavier Ducrohet 14085c5ae75ab4b9041bb143f146ef5fc4547686210Deepanshu Gupta private Uri mOriginalImageUri = null; 1418b4b0ce31acc9f57c7df5b1c70183a6655c1edfbDeepanshu Gupta private ImagePreset mOriginalPreset = null; 1426e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 1433bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private Uri mSelectedImageUri = null; 1443bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 1453bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private CategoryAdapter mCategoryLooksAdapter = null; 1463bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private CategoryAdapter mCategoryBordersAdapter = null; 147bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez private CategoryAdapter mCategoryGeometryAdapter = null; 1483bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private CategoryAdapter mCategoryFiltersAdapter = null; 1493bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private int mCurrentPanel = MainPanel.LOOKS; 1503bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 1513bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet @Override 1523bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet public void onCreate(Bundle savedInstanceState) { 1533bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet super.onCreate(savedInstanceState); 1543bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 1558d43509cc2c0f95bd07d6585dadfac296bc5d24dDeepanshu Gupta boolean onlyUsePortrait = getResources().getBoolean(R.bool.only_use_portrait); 1568d43509cc2c0f95bd07d6585dadfac296bc5d24dDeepanshu Gupta if (onlyUsePortrait) { 157ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 1583bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 1598d43509cc2c0f95bd07d6585dadfac296bc5d24dDeepanshu Gupta MasterImage.setMaster(mMasterImage); 1603bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 161b32414fe256a6fe1d65e7a1443cd6ea77db8bd95Xavier Ducrohet clearGalleryBitmapPool(); 1620fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet 163ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet CachingPipeline.createRenderscriptContext(this); 164ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet setupMasterImage(); 165ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet setDefaultValues(); 166ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet fillEditors(); 167ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet 168ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet loadXML(); 169ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet loadMainPanel(); 170ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet 171ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet setDefaultPreset(); 172ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet 173ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet extractXMPData(); 174ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet processIntent(); 175ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet UsageStatistics.onContentViewChanged(UsageStatistics.COMPONENT_EDITOR, "Main"); 1760fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 177ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet UsageStatistics.CATEGORY_LIFECYCLE, UsageStatistics.LIFECYCLE_START); 1780fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet } 179952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta 180ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet public boolean isShowingImageStatePanel() { 181ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet return mShowingImageStatePanel; 1823bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 1830fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet 1840fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet public void loadMainPanel() { 1853bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet if (findViewById(R.id.main_panel_container) == null) { 186a6a38c02bfd3f6a678ac1671f5744b8e439e075aXavier Ducrohet return; 187300f4893351a9974fa3380c513b29d4a7883cd74Deepanshu Gupta } 188300f4893351a9974fa3380c513b29d4a7883cd74Deepanshu Gupta MainPanel panel = new MainPanel(); 189ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 1908b4b0ce31acc9f57c7df5b1c70183a6655c1edfbDeepanshu Gupta transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 1913bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet transaction.commit(); 19276f4c3e91d8579a580569c3d079da99511309727Xavier Ducrohet } 19376f4c3e91d8579a580569c3d079da99511309727Xavier Ducrohet 194952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta public void loadEditorPanel(FilterRepresentation representation, 19576f4c3e91d8579a580569c3d079da99511309727Xavier Ducrohet final Editor currentEditor) { 1968b4b0ce31acc9f57c7df5b1c70183a6655c1edfbDeepanshu Gupta if (representation.getEditorId() == ImageOnlyEditor.ID) { 19776f4c3e91d8579a580569c3d079da99511309727Xavier Ducrohet currentEditor.reflectCurrentFilter(); 19876f4c3e91d8579a580569c3d079da99511309727Xavier Ducrohet return; 1993bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 200b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta final int currentId = currentEditor.getID(); 2010fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet Runnable showEditor = new Runnable() { 202ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet @Override 2038b4b0ce31acc9f57c7df5b1c70183a6655c1edfbDeepanshu Gupta public void run() { 204ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet EditorPanel panel = new EditorPanel(); 2053054fe698a6be732e24128541a1db867ec606a59Xavier Ducrohet panel.setEditor(currentId); 2063bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 2073bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet transaction.remove(getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG)); 2083bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 2096e1b7e3e383e12d36356841130647b846e4c8467Diego Perez transaction.commit(); 2106e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 2117bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez }; 2126e1b7e3e383e12d36356841130647b846e4c8467Diego Perez Fragment main = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 2136e1b7e3e383e12d36356841130647b846e4c8467Diego Perez boolean doAnimation = false; 2146e1b7e3e383e12d36356841130647b846e4c8467Diego Perez if (mShowingImageStatePanel 2156e1b7e3e383e12d36356841130647b846e4c8467Diego Perez && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 2166e1b7e3e383e12d36356841130647b846e4c8467Diego Perez doAnimation = true; 2176e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 2186e1b7e3e383e12d36356841130647b846e4c8467Diego Perez if (doAnimation && main != null && main instanceof MainPanel) { 2196e1b7e3e383e12d36356841130647b846e4c8467Diego Perez MainPanel mainPanel = (MainPanel) main; 2206e1b7e3e383e12d36356841130647b846e4c8467Diego Perez View container = mainPanel.getView().findViewById(R.id.category_panel_container); 2216e1b7e3e383e12d36356841130647b846e4c8467Diego Perez View bottom = mainPanel.getView().findViewById(R.id.bottom_panel); 2226e1b7e3e383e12d36356841130647b846e4c8467Diego Perez int panelHeight = container.getHeight() + bottom.getHeight(); 2236e1b7e3e383e12d36356841130647b846e4c8467Diego Perez ViewPropertyAnimator anim = mainPanel.getView().animate(); 2246e1b7e3e383e12d36356841130647b846e4c8467Diego Perez anim.translationY(panelHeight).start(); 2256e1b7e3e383e12d36356841130647b846e4c8467Diego Perez final Handler handler = new Handler(); 2266e1b7e3e383e12d36356841130647b846e4c8467Diego Perez handler.postDelayed(showEditor, anim.getDuration()); 2276e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } else { 2286e1b7e3e383e12d36356841130647b846e4c8467Diego Perez showEditor.run(); 2296e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 2306e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 2316e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2326e1b7e3e383e12d36356841130647b846e4c8467Diego Perez private void loadXML() { 2336e1b7e3e383e12d36356841130647b846e4c8467Diego Perez setContentView(R.layout.filtershow_activity); 2346e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2356e1b7e3e383e12d36356841130647b846e4c8467Diego Perez ActionBar actionBar = getActionBar(); 2366e1b7e3e383e12d36356841130647b846e4c8467Diego Perez actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 2376e1b7e3e383e12d36356841130647b846e4c8467Diego Perez actionBar.setCustomView(R.layout.filtershow_actionbar); 2386e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2396e1b7e3e383e12d36356841130647b846e4c8467Diego Perez mSaveButton = actionBar.getCustomView(); 2406e1b7e3e383e12d36356841130647b846e4c8467Diego Perez mSaveButton.setOnClickListener(new OnClickListener() { 2416e1b7e3e383e12d36356841130647b846e4c8467Diego Perez @Override 2426e1b7e3e383e12d36356841130647b846e4c8467Diego Perez public void onClick(View view) { 2436e1b7e3e383e12d36356841130647b846e4c8467Diego Perez saveImage(); 2446e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 245bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez }); 246bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez 2476e1b7e3e383e12d36356841130647b846e4c8467Diego Perez mImageShow = (ImageShow) findViewById(R.id.imageShow); 2486e1b7e3e383e12d36356841130647b846e4c8467Diego Perez mImageViews.add(mImageShow); 2496e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2506e1b7e3e383e12d36356841130647b846e4c8467Diego Perez setupEditors(); 251bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez 2526e1b7e3e383e12d36356841130647b846e4c8467Diego Perez mEditorPlaceHolder.hide(); 2536e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2546e1b7e3e383e12d36356841130647b846e4c8467Diego Perez mImageShow.setImageLoader(mImageLoader); 2556e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2566e1b7e3e383e12d36356841130647b846e4c8467Diego Perez fillFx(); 2576e1b7e3e383e12d36356841130647b846e4c8467Diego Perez fillBorders(); 2586e1b7e3e383e12d36356841130647b846e4c8467Diego Perez fillGeometry(); 2596e1b7e3e383e12d36356841130647b846e4c8467Diego Perez fillFilters(); 2606e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2616e1b7e3e383e12d36356841130647b846e4c8467Diego Perez setupStatePanel(); 2626e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 263bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez 264bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez public void setupStatePanel() { 265bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez mImageLoader.setHistoryManager(mMasterImage.getHistory()); 266bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez } 2676e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2686e1b7e3e383e12d36356841130647b846e4c8467Diego Perez private void fillFilters() { 2696e1b7e3e383e12d36356841130647b846e4c8467Diego Perez Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 2706e1b7e3e383e12d36356841130647b846e4c8467Diego Perez FiltersManager filtersManager = FiltersManager.getManager(); 2716e1b7e3e383e12d36356841130647b846e4c8467Diego Perez filtersManager.addEffects(filtersRepresentations); 2726e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2736e1b7e3e383e12d36356841130647b846e4c8467Diego Perez mCategoryFiltersAdapter = new CategoryAdapter(this); 2746e1b7e3e383e12d36356841130647b846e4c8467Diego Perez for (FilterRepresentation representation : filtersRepresentations) { 2756e1b7e3e383e12d36356841130647b846e4c8467Diego Perez if (representation.getTextId() != 0) { 2766e1b7e3e383e12d36356841130647b846e4c8467Diego Perez representation.setName(getString(representation.getTextId())); 2776e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 2786e1b7e3e383e12d36356841130647b846e4c8467Diego Perez mCategoryFiltersAdapter.add(new Action(this, representation)); 2796e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 2806e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 2816e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2826e1b7e3e383e12d36356841130647b846e4c8467Diego Perez private void fillGeometry() { 2836e1b7e3e383e12d36356841130647b846e4c8467Diego Perez Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 2846e1b7e3e383e12d36356841130647b846e4c8467Diego Perez FiltersManager filtersManager = FiltersManager.getManager(); 2856e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 2866e1b7e3e383e12d36356841130647b846e4c8467Diego Perez GeometryMetadata geo = new GeometryMetadata(); 2876e1b7e3e383e12d36356841130647b846e4c8467Diego Perez int[] editorsId = geo.getEditorIds(); 2886e1b7e3e383e12d36356841130647b846e4c8467Diego Perez for (int i = 0; i < editorsId.length; i++) { 2896e1b7e3e383e12d36356841130647b846e4c8467Diego Perez int editorId = editorsId[i]; 2906e1b7e3e383e12d36356841130647b846e4c8467Diego Perez GeometryMetadata geometry = new GeometryMetadata(geo); 2916e1b7e3e383e12d36356841130647b846e4c8467Diego Perez geometry.setEditorId(editorId); 2926e1b7e3e383e12d36356841130647b846e4c8467Diego Perez EditorInfo editorInfo = (EditorInfo) mEditorPlaceHolder.getEditor(editorId); 2936e1b7e3e383e12d36356841130647b846e4c8467Diego Perez geometry.setTextId(editorInfo.getTextId()); 2946e1b7e3e383e12d36356841130647b846e4c8467Diego Perez geometry.setOverlayId(editorInfo.getOverlayId()); 2956e1b7e3e383e12d36356841130647b846e4c8467Diego Perez geometry.setOverlayOnly(editorInfo.getOverlayOnly()); 2966e1b7e3e383e12d36356841130647b846e4c8467Diego Perez if (geometry.getTextId() != 0) { 2973bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet geometry.setName(getString(geometry.getTextId())); 2983bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 299ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet filtersRepresentations.add(geometry); 300ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet } 301ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet 302ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet filtersManager.addTools(filtersRepresentations); 3033bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 304ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet mCategoryGeometryAdapter = new CategoryAdapter(this); 305ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet for (FilterRepresentation representation : filtersRepresentations) { 306ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet mCategoryGeometryAdapter.add(new Action(this, representation)); 3073bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 3088b4b0ce31acc9f57c7df5b1c70183a6655c1edfbDeepanshu Gupta } 3098b4b0ce31acc9f57c7df5b1c70183a6655c1edfbDeepanshu Gupta 3108b4b0ce31acc9f57c7df5b1c70183a6655c1edfbDeepanshu Gupta private void processIntent() { 3110fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet Intent intent = getIntent(); 3120fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 3133bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 3145cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez } 3155cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez 3165cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez mAction = intent.getAction(); 3175cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez mSelectedImageUri = intent.getData(); 3185cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez Uri loadUri = mSelectedImageUri; 3195cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez if (mOriginalImageUri != null) { 3205cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez loadUri = mOriginalImageUri; 3215cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez } 3225cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez if (loadUri != null) { 3235cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez startLoadBitmap(loadUri); 3245cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez } else { 3255cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez pickImage(); 3265cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez } 3275cee4833e93b8f9aa9f38815eaa342fab9cc8658Diego Perez } 3283bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 3293bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private void setupEditors() { 330b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 3313bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet EditorManager.addEditors(mEditorPlaceHolder); 332a4a2d3d5936bcdda1409796179725d354e5f4400Andrew Shulaev mEditorPlaceHolder.setOldViews(mImageViews); 3338a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta mEditorPlaceHolder.setImageLoader(mImageLoader); 3348a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta } 3358a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta 336b321cbfeb00723a6d18746f0d5bbcfd6b6602f6eDiego Perez private void fillEditors() { 337b321cbfeb00723a6d18746f0d5bbcfd6b6602f6eDiego Perez mEditorPlaceHolder.addEditor(new EditorDraw()); 338b321cbfeb00723a6d18746f0d5bbcfd6b6602f6eDiego Perez mEditorPlaceHolder.addEditor(new BasicEditor()); 3398b4b0ce31acc9f57c7df5b1c70183a6655c1edfbDeepanshu Gupta mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 340b321cbfeb00723a6d18746f0d5bbcfd6b6602f6eDiego Perez mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); 341b321cbfeb00723a6d18746f0d5bbcfd6b6602f6eDiego Perez mEditorPlaceHolder.addEditor(new EditorRedEye()); 342b321cbfeb00723a6d18746f0d5bbcfd6b6602f6eDiego Perez mEditorPlaceHolder.addEditor(new EditorCrop()); 343b321cbfeb00723a6d18746f0d5bbcfd6b6602f6eDiego Perez mEditorPlaceHolder.addEditor(new EditorFlip()); 3448a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta mEditorPlaceHolder.addEditor(new EditorRotate()); 3458a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta mEditorPlaceHolder.addEditor(new EditorStraighten()); 3468a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta } 3473bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 3487062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet private void setDefaultValues() { 3497062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet ImageFilter.setActivityForMemoryToasts(this); 3507062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet 351b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta Resources res = getResources(); 3523bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet FiltersManager.setResources(res); 3533bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 354994236e95e9809ec8c1d06a218f606f1af2083afXavier Ducrohet CategoryView.setMargin((int) getPixelsFromDip(8)); 3553bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet CategoryView.setTextSize((int) getPixelsFromDip(16)); 356a2378f55b81e7d29f451d7f65527de49417a3f0cXavier Ducrohet 357b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta // TODO: get those values from XML. 3589028fa93da0f9c7dad2176de347cd6e705084c9fDeepanshu Gupta FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 359a2378f55b81e7d29f451d7f65527de49417a3f0cXavier Ducrohet FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 360c46c84ee673934f340b27b40366a5a61669a4a1eJens Ole Lauridsen FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 361c46c84ee673934f340b27b40366a5a61669a4a1eJens Ole Lauridsen 3627bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 3636e1b7e3e383e12d36356841130647b846e4c8467Diego Perez int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 3646e1b7e3e383e12d36356841130647b846e4c8467Diego Perez Spline.setCurveHandle(curveHandle, curveHandleSize); 3656e1b7e3e383e12d36356841130647b846e4c8467Diego Perez Spline.setCurveWidth((int) getPixelsFromDip(3)); 3666e1b7e3e383e12d36356841130647b846e4c8467Diego Perez 367e48b02f441a8a90f0a1618ed2116c83441aae3bdDiego Perez ImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 368e48b02f441a8a90f0a1618ed2116c83441aae3bdDiego Perez ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 3696e1b7e3e383e12d36356841130647b846e4c8467Diego Perez ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 3706e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 371ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet 3723bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private void startLoadBitmap(Uri uri) { 373ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet mLoading = true; 3743bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet final View loading = findViewById(R.id.loading); 3753bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet final View imageShow = findViewById(R.id.imageShow); 3763bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet imageShow.setVisibility(View.INVISIBLE); 3773bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet loading.setVisibility(View.VISIBLE); 3783bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mShowingTinyPlanet = false; 3793bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mLoadBitmapTask = new LoadBitmapTask(); 3803bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mLoadBitmapTask.execute(uri); 381ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet } 3823bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 3833bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet private void fillBorders() { 3843bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet Vector<FilterRepresentation> borders = new Vector<FilterRepresentation>(); 3853bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 386344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta // The "no border" implementation 387344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta borders.add(new FilterImageBorderRepresentation(0)); 388344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta 389344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta // Google-build borders 390344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta FiltersManager.getManager().addBorders(this, borders); 391344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta 392344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta for (int i = 0; i < borders.size(); i++) { 393344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta FilterRepresentation filter = borders.elementAt(i); 394f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez filter.setName(getString(R.string.borders)); 3950685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez if (i == 0) { 396f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez filter.setName(getString(R.string.none)); 397f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez } 3980685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez } 3990685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez 4000685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez mCategoryBordersAdapter = new CategoryAdapter(this); 4010685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez for (FilterRepresentation representation : borders) { 4020685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez if (representation.getTextId() != 0) { 4030685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez representation.setName(getString(representation.getTextId())); 4040685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez } 4050685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez mCategoryBordersAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 4060685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez } 407f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez } 4080685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez 409f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez public CategoryAdapter getCategoryLooksAdapter() { 410f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez return mCategoryLooksAdapter; 411f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez } 412f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez 413f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez public CategoryAdapter getCategoryBordersAdapter() { 414f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez return mCategoryBordersAdapter; 415bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez } 4160685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez 4170685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez public CategoryAdapter getCategoryGeometryAdapter() { 4180685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez return mCategoryGeometryAdapter; 4190685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez } 4200685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez 4210685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez public CategoryAdapter getCategoryFiltersAdapter() { 4220685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez return mCategoryFiltersAdapter; 4230685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez } 4240685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez 4250685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez public void removeFilterRepresentation(FilterRepresentation filterRepresentation) { 4260685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez if (filterRepresentation == null) { 4273bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet return; 4283bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 429ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet ImagePreset oldPreset = MasterImage.getImage().getPreset(); 430ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet ImagePreset copy = new ImagePreset(oldPreset); 4314c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet copy.removeFilter(filterRepresentation); 4324c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet MasterImage.getImage().setPreset(copy, copy.getLastRepresentation(), true); 4334c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 4344c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet FilterRepresentation lastRepresentation = copy.getLastRepresentation(); 435ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet MasterImage.getImage().setCurrentFilterRepresentation(lastRepresentation); 436ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet } 4371392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet } 4388d43509cc2c0f95bd07d6585dadfac296bc5d24dDeepanshu Gupta 439799fe3b371c812a0e94872f896b54afa44e94868Xavier Ducrohet public void useFilterRepresentation(FilterRepresentation filterRepresentation) { 4403bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet if (filterRepresentation == null) { 4414c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet return; 4427bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } 4437bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 4447bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez return; 4457bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } 4467bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez ImagePreset oldPreset = MasterImage.getImage().getPreset(); 4477bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez ImagePreset copy = new ImagePreset(oldPreset); 4487bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez FilterRepresentation representation = copy.getRepresentation(filterRepresentation); 4497bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez if (representation == null) { 4507bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez copy.addFilter(filterRepresentation); 4517bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } else { 4527bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez if (filterRepresentation.allowsSingleInstanceOnly()) { 4537bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez // Don't just update the filter representation. Centralize the 4547bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez // logic in the addFilter(), such that we can keep "None" as 4557bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez // null. 4567bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez copy.removeFilter(representation); 4577bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez copy.addFilter(filterRepresentation); 4587bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } 4597bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } 4607bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez MasterImage.getImage().setPreset(copy, filterRepresentation, true); 4617bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez MasterImage.getImage().setCurrentFilterRepresentation(filterRepresentation); 4627bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } 4637bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez 4647bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez public void showRepresentation(FilterRepresentation representation) { 4657bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez if (representation == null) { 4667bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez return; 4677bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } 4687bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez 4697bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez // TODO: this check is needed because the GeometryMetadata doesn't quite 4707bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez // follow the same pattern as the other filters to update/sync their values. 4717bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez // We thus need to not call useFilterRepresentation() for now, as it 4727bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez // would override the current Geometry. Once GeometryMetadata is fixed, 4737bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez // let's remove the check and call useFilterRepresentation all the time. 4747bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez if (!(representation instanceof GeometryMetadata)) { 4757bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez useFilterRepresentation(representation); 476ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet } 477ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet 4780fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet // show representation 4790fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet Editor mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId()); 4803bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet loadEditorPanel(representation, mCurrentEditor); 4813bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 482ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet 4833bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet public Editor getEditor(int editorID) { 4843bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet return mEditorPlaceHolder.getEditor(editorID); 4857bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } 4863bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 4876e1b7e3e383e12d36356841130647b846e4c8467Diego Perez public void setCurrentPanel(int currentPanel) { 4880685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez mCurrentPanel = currentPanel; 4897bb8850ed2076ebf8442a5fdb68ec9a8f53623e0Diego Perez } 490f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet 491f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet public int getCurrentPanel() { 492f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet return mCurrentPanel; 493f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez } 494f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet 495f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet public void updateCategories() { 496f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet ImagePreset preset = mMasterImage.getPreset(); 497f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet mCategoryLooksAdapter.reflectImagePreset(preset); 498e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez mCategoryBordersAdapter.reflectImagePreset(preset); 499e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez } 500e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez 501e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez private class LoadHighresBitmapTask extends AsyncTask<Void, Void, Boolean> { 502e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez @Override 503e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez protected Boolean doInBackground(Void... params) { 504a4a2d3d5936bcdda1409796179725d354e5f4400Andrew Shulaev mImageLoader.loadHighResBitmap(); 5056e1b7e3e383e12d36356841130647b846e4c8467Diego Perez return true; 5066e1b7e3e383e12d36356841130647b846e4c8467Diego Perez } 507f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet 508f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet @Override 509f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet protected void onPostExecute(Boolean result) { 510f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet Bitmap highresBitmap = mImageLoader.getOriginalBitmapHighres(); 511f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet if (highresBitmap != null) { 512f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 513f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet float highResPreviewScale = (float) highresBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 514f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet pipeline.setHighResPreviewScaleFactor(highResPreviewScale); 515f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet } 516f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet } 517f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet } 518f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet 519f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 520f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet int mBitmapSize; 521f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet 522f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet public LoadBitmapTask() { 523f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet mBitmapSize = getScreenImageSize(); 524f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet } 525f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet 526f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet @Override 527f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet protected Boolean doInBackground(Uri... params) { 528f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet if (!mImageLoader.loadBitmap(params[0], mBitmapSize)) { 529f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet return false; 530f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet } 53164f5dc0e6437e95695ed4048f047c3cbef447e0fXavier Ducrohet publishProgress(mImageLoader.queryLightCycle360()); 532f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet return true; 533e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez } 534e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez 535e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez @Override 536e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez protected void onProgressUpdate(Boolean... values) { 537e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez super.onProgressUpdate(values); 538e12b3f96291cf0e3dc60d9db9ac3d3859325f3d4Diego Perez if (isCancelled()) { 53964f5dc0e6437e95695ed4048f047c3cbef447e0fXavier Ducrohet return; 5401392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet } 5413bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet if (values[0]) { 542952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta mShowingTinyPlanet = true; 5431392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet } 5444c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet } 5453bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 546f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet @Override 547f4978e031c3ad565f02d5a4c65f87ae4477f3613Deepanshu Gupta protected void onPostExecute(Boolean result) { 548f4978e031c3ad565f02d5a4c65f87ae4477f3613Deepanshu Gupta MasterImage.setMaster(mMasterImage); 549a6a38c02bfd3f6a678ac1671f5744b8e439e075aXavier Ducrohet if (isCancelled()) { 550f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet return; 551f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet } 552f27575799aab2e552c0491a07b34389e1422fc27Xavier Ducrohet 553a6a38c02bfd3f6a678ac1671f5744b8e439e075aXavier Ducrohet if (!result) { 554f1a0a823499fc0a464e18b8eba992b32d14b8bb1Diego Perez cannotLoadImage(); 555344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta } 556344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta 557344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta if (null == CachingPipeline.getRenderScriptContext()){ 5580685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez Log.v(LOGTAG,"RenderScript context destroyed during load"); 559bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez return; 5600685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez } 561344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta final View loading = findViewById(R.id.loading); 562344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta loading.setVisibility(View.GONE); 563344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta final View imageShow = findViewById(R.id.imageShow); 564344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta imageShow.setVisibility(View.VISIBLE); 565344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta 566344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); 567344cbc9b8ed3ae06a5b183d684df0399fef59879Deepanshu Gupta FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 568bca9e5623c820c9aa1e959e3874442de9a9a6c32Diego Perez pipeline.setOriginal(largeBitmap); 5694c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet float previewScale = (float) largeBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 5704c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet pipeline.setPreviewScaleFactor(previewScale); 571e48b02f441a8a90f0a1618ed2116c83441aae3bdDiego Perez if (!mShowingTinyPlanet) { 572e48b02f441a8a90f0a1618ed2116c83441aae3bdDiego Perez mCategoryFiltersAdapter.removeTinyPlanet(); 57341670df819e35f5822cc166db775ed2e9e3dfb7dDeepanshu Gupta } 5743bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet pipeline.turnOnPipeline(true); 5753bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet MasterImage.getImage().setOriginalGeometry(largeBitmap); 5760685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez mCategoryLooksAdapter.imageLoaded(); 5773bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mCategoryBordersAdapter.imageLoaded(); 5783bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mCategoryGeometryAdapter.imageLoaded(); 5793bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mCategoryFiltersAdapter.imageLoaded(); 5803bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mLoadBitmapTask = null; 5813bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 5823bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet if (mOriginalPreset != null) { 5833bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet MasterImage.getImage().setLoadedPreset(mOriginalPreset); 584ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet MasterImage.getImage().setPreset(mOriginalPreset, 5853bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mOriginalPreset.getLastRepresentation(), true); 5863bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet mOriginalPreset = null; 5873bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 5883bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 5898ae691c1148038995d1185716f629b82c582897fXavier Ducrohet if (mAction == TINY_PLANET_ACTION) { 5908ae691c1148038995d1185716f629b82c582897fXavier Ducrohet showRepresentation(mCategoryFiltersAdapter.getTinyPlanet()); 5918ae691c1148038995d1185716f629b82c582897fXavier Ducrohet } 5928ae691c1148038995d1185716f629b82c582897fXavier Ducrohet mLoading = false; 5938ae691c1148038995d1185716f629b82c582897fXavier Ducrohet MasterImage.getImage().notifyGeometryChange(); 5948ae691c1148038995d1185716f629b82c582897fXavier Ducrohet LoadHighresBitmapTask highresLoad = new LoadHighresBitmapTask(); 5958ae691c1148038995d1185716f629b82c582897fXavier Ducrohet highresLoad.execute(); 5968ae691c1148038995d1185716f629b82c582897fXavier Ducrohet super.onPostExecute(result); 5978ae691c1148038995d1185716f629b82c582897fXavier Ducrohet } 5988ae691c1148038995d1185716f629b82c582897fXavier Ducrohet 5998ae691c1148038995d1185716f629b82c582897fXavier Ducrohet } 6008ae691c1148038995d1185716f629b82c582897fXavier Ducrohet 6018ae691c1148038995d1185716f629b82c582897fXavier Ducrohet private void clearGalleryBitmapPool() { 6028ae691c1148038995d1185716f629b82c582897fXavier Ducrohet (new AsyncTask<Void, Void, Void>() { 603952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta @Override 6040685ab35ad78094ceb2d9fb0583e2cadd1968c90Diego Perez protected Void doInBackground(Void... params) { 6058ae691c1148038995d1185716f629b82c582897fXavier Ducrohet // Free memory held in Gallery's Bitmap pool. May be O(n) for n bitmaps. 6068ae691c1148038995d1185716f629b82c582897fXavier Ducrohet GalleryBitmapPool.getInstance().clear(); 6078ae691c1148038995d1185716f629b82c582897fXavier Ducrohet return null; 6088ae691c1148038995d1185716f629b82c582897fXavier Ducrohet } 6098ae691c1148038995d1185716f629b82c582897fXavier Ducrohet }).execute(); 6108ae691c1148038995d1185716f629b82c582897fXavier Ducrohet } 6118ae691c1148038995d1185716f629b82c582897fXavier Ducrohet 6128ae691c1148038995d1185716f629b82c582897fXavier Ducrohet @Override 6138ae691c1148038995d1185716f629b82c582897fXavier Ducrohet protected void onDestroy() { 6148ae691c1148038995d1185716f629b82c582897fXavier Ducrohet if (mLoadBitmapTask != null) { 6158ae691c1148038995d1185716f629b82c582897fXavier Ducrohet mLoadBitmapTask.cancel(false); 6168ae691c1148038995d1185716f629b82c582897fXavier Ducrohet } 6178ae691c1148038995d1185716f629b82c582897fXavier Ducrohet // TODO: refactor, don't use so many singletons. 618ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet FilteringPipeline.getPipeline().turnOnPipeline(false); 619ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet MasterImage.reset(); 620ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet FilteringPipeline.reset(); 621ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet ImageFilter.resetStatics(); 622ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet FiltersManager.getPreviewManager().freeRSFilterScripts(); 623ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet FiltersManager.getManager().freeRSFilterScripts(); 62433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet FiltersManager.getHighresManager().freeRSFilterScripts(); 625799fe3b371c812a0e94872f896b54afa44e94868Xavier Ducrohet FiltersManager.reset(); 626ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet CachingPipeline.destroyRenderScriptContext(); 627ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet super.onDestroy(); 628ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet } 629ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet 630ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet private int getScreenImageSize() { 6310fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet DisplayMetrics metrics = new DisplayMetrics(); 6320fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet Display display = getWindowManager().getDefaultDisplay(); 633ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet Point size = new Point(); 634952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta display.getSize(size); 635ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet display.getMetrics(metrics); 636ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet int msize = Math.min(size.x, size.y); 6370fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet return (133 * msize) / metrics.densityDpi; 6381b5ef2d19e1d7cb491c1c79f867e38ec0bde2770Xavier Ducrohet } 639ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet 640947b979a91ac1cd556244d875d8b8d4fec8fd474Xavier Ducrohet private void showSavingProgress(String albumName) { 641ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet ProgressDialog progress; 642ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet if (mSavingProgressDialog != null) { 6430fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet progress = mSavingProgressDialog.get(); 6441b5ef2d19e1d7cb491c1c79f867e38ec0bde2770Xavier Ducrohet if (progress != null) { 645ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet progress.show(); 646b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta return; 6471b5ef2d19e1d7cb491c1c79f867e38ec0bde2770Xavier Ducrohet } 648ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet } 649ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet // TODO: Allow cancellation of the saving process 650ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet String progressText; 651ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet if (albumName == null) { 652ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet progressText = getString(R.string.saving_image); 6530fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet } else { 654ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet progressText = getString(R.string.filtershow_saving_image, albumName); 655ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet } 656ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet progress = ProgressDialog.show(this, "", progressText, true, false); 65733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 658ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet } 659ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet 660ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet private void hideSavingProgress() { 661ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet if (mSavingProgressDialog != null) { 662b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet ProgressDialog progress = mSavingProgressDialog.get(); 663b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet if (progress != null) 664b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet progress.dismiss(); 665b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet } 666b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet } 667b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet 668ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet public void completeSaveImage(Uri saveUri) { 669ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet if (mSharingImage && mSharedOutputFile != null) { 670ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet // Image saved, we unblock the content provider 671ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 672ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet Uri.encode(mSharedOutputFile.getAbsolutePath())); 673b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet ContentValues values = new ContentValues(); 674b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet values.put(SharedImageProvider.PREPARE, false); 67533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet getContentResolver().insert(uri, values); 67633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 67733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet setResult(RESULT_OK, new Intent().setData(saveUri)); 67833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet hideSavingProgress(); 67933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet finish(); 68033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 68133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 68233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet @Override 683799fe3b371c812a0e94872f896b54afa44e94868Xavier Ducrohet public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 68433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet // First, let's tell the SharedImageProvider that it will need to wait 685ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet // for the image 68633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 687b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet Uri.encode(mSharedOutputFile.getAbsolutePath())); 688b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet ContentValues values = new ContentValues(); 6890fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet values.put(SharedImageProvider.PREPARE, true); 6900fde9af6be75b32a401eafc8904426424e00e70cXavier Ducrohet getContentResolver().insert(uri, values); 691b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet mSharingImage = true; 692a732a0101ad07b28e828bbbc8fb81be0580d53b5Xavier Ducrohet 693a732a0101ad07b28e828bbbc8fb81be0580d53b5Xavier Ducrohet // Process and save the image in the background. 694b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet showSavingProgress(null); 695b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet mImageShow.saveImage(this, mSharedOutputFile); 696b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet return true; 697b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet } 69833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 699a732a0101ad07b28e828bbbc8fb81be0580d53b5Xavier Ducrohet private Intent getDefaultShareIntent() { 700b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet Intent intent = new Intent(Intent.ACTION_SEND); 70133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 70233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 70333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet intent.setType(SharedImageProvider.MIME_TYPE); 70433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 70533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 70633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Uri.encode(mSharedOutputFile.getAbsolutePath())); 707ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet intent.putExtra(Intent.EXTRA_STREAM, uri); 70833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet return intent; 70933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 71033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 71133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet @Override 71233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public boolean onCreateOptionsMenu(Menu menu) { 71333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 71433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet MenuItem showState = menu.findItem(R.id.showImageStateButton); 71533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet if (mShowingImageStatePanel) { 71633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet showState.setTitle(R.string.hide_imagestate_panel); 71733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } else { 71833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet showState.setTitle(R.string.show_imagestate_panel); 719ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet } 7201392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 7211392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet .getActionProvider(); 72233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet mShareActionProvider.setShareIntent(getDefaultShareIntent()); 723ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet mShareActionProvider.setOnShareTargetSelectedListener(this); 724952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta 72533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet MenuItem undoItem = menu.findItem(R.id.undoButton); 72633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet MenuItem redoItem = menu.findItem(R.id.redoButton); 727b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 7284c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 7291766c77e7e79afbb4fd2611837ac487f5610d71dXavier Ducrohet return true; 73033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 7311766c77e7e79afbb4fd2611837ac487f5610d71dXavier Ducrohet 7321766c77e7e79afbb4fd2611837ac487f5610d71dXavier Ducrohet @Override 7331766c77e7e79afbb4fd2611837ac487f5610d71dXavier Ducrohet public void onPause() { 734b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet super.onPause(); 735b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet rsPause(); 73633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet if (mShareActionProvider != null) { 73733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet mShareActionProvider.setOnShareTargetSelectedListener(null); 73833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 73933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 74033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 74133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet @Override 74233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void onResume() { 743ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet super.onResume(); 744ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet rsResume(); 74533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet if (mShareActionProvider != null) { 74633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet mShareActionProvider.setOnShareTargetSelectedListener(this); 747ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet } 74833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 74933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 750ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet private void rsResume() { 75133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet ImageFilter.setActivityForMemoryToasts(this); 75233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet MasterImage.setMaster(mMasterImage); 753ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet if (CachingPipeline.getRenderScriptContext() == null) { 75433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet CachingPipeline.createRenderscriptContext(this); 75533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 75633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet FiltersManager.setResources(getResources()); 75733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet if (!mLoading) { 75833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); 75933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 76033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet pipeline.setOriginal(largeBitmap); 76133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet float previewScale = (float) largeBitmap.getWidth() / 76233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet (float) mImageLoader.getOriginalBounds().width(); 76333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet pipeline.setPreviewScaleFactor(previewScale); 76433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Bitmap highresBitmap = mImageLoader.getOriginalBitmapHighres(); 765799fe3b371c812a0e94872f896b54afa44e94868Xavier Ducrohet if (highresBitmap != null) { 76633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet float highResPreviewScale = (float) highresBitmap.getWidth() / 76762039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet (float) mImageLoader.getOriginalBounds().width(); 76824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet pipeline.setHighResPreviewScaleFactor(highResPreviewScale); 769b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet } 770b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet pipeline.turnOnPipeline(true); 77133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet MasterImage.getImage().setOriginalGeometry(largeBitmap); 77233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 773ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohet } 77433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 77533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet private void rsPause() { 77662039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet FilteringPipeline.getPipeline().turnOnPipeline(false); 77733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet FilteringPipeline.reset(); 77833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet ImageFilter.resetStatics(); 7791392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet FiltersManager.getPreviewManager().freeRSFilterScripts(); 78062039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet FiltersManager.getManager().freeRSFilterScripts(); 78162039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet FiltersManager.getHighresManager().freeRSFilterScripts(); 78262039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet FiltersManager.reset(); 78333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet CachingPipeline.destroyRenderScriptContext(); 78433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 785ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohet 78624cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet @Override 78724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet public boolean onOptionsItemSelected(MenuItem item) { 78824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet switch (item.getItemId()) { 78924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet case R.id.undoButton: { 79024cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet HistoryManager adapter = mMasterImage.getHistory(); 79124cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet int position = adapter.undo(); 79224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage.onHistoryItemClick(position); 79324cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet backToMain(); 794952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta invalidateViews(); 79524cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 79624cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet UsageStatistics.CATEGORY_BUTTON_PRESS, "Undo"); 79724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet return true; 79824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 79924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet case R.id.redoButton: { 800952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta HistoryManager adapter = mMasterImage.getHistory(); 80124cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet int position = adapter.redo(); 80224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage.onHistoryItemClick(position); 80324cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet invalidateViews(); 80424cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 80524cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet UsageStatistics.CATEGORY_BUTTON_PRESS, "Redo"); 8064c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet return true; 80724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 80824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet case R.id.resetHistoryButton: { 80924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet resetHistory(); 81024cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 81124cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet UsageStatistics.CATEGORY_BUTTON_PRESS, "ResetHistory"); 81224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet return true; 81324cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 81424cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet case R.id.showImageStateButton: { 81562039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet toggleImageStatePanel(); 81624cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 81724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet UsageStatistics.CATEGORY_BUTTON_PRESS, 81824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mShowingImageStatePanel ? "ShowPanel" : "HidePanel"); 81962039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet return true; 82024cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 82124cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet case android.R.id.home: { 82224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet saveImage(); 82324cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet return true; 82424cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 8255562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet } 82624cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet return false; 82724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 82824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet 82924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet public void enableSave(boolean enable) { 83024cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet if (mSaveButton != null) { 83124cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mSaveButton.setEnabled(enable); 83224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 833ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohet } 83424cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet 83524cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet private void fillFx() { 83624cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet FilterFxRepresentation nullFx = 83724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet new FilterFxRepresentation(getString(R.string.none), 0, R.string.none); 83824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 83924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet FiltersManager.getManager().addLooks(this, filtersRepresentations); 84024cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet 84124cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mCategoryLooksAdapter = new CategoryAdapter(this); 84224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet int verticalItemHeight = (int) getResources().getDimension(R.dimen.action_item_height); 84324cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mCategoryLooksAdapter.setItemHeight(verticalItemHeight); 84424cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mCategoryLooksAdapter.add(new Action(this, nullFx, Action.FULL_VIEW)); 84524cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet for (FilterRepresentation representation : filtersRepresentations) { 84624cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mCategoryLooksAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 84724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 84824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 84924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet 85024cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet public void setDefaultPreset() { 85124cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet // Default preset (original) 85233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet ImagePreset preset = new ImagePreset(); // empty 85333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet preset.setImageLoader(mImageLoader); 854ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet 855b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet mMasterImage.setPreset(preset, preset.getLastRepresentation(), true); 856b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet } 85762039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet 858952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta // ////////////////////////////////////////////////////////////////////////////// 85933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet // Some utility functions 86033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet // TODO: finish the cleanup. 861b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet 8624c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet public void invalidateViews() { 863ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohet for (ImageShow views : mImageViews) { 86433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet views.invalidate(); 865ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohet views.updateImage(); 866ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohet } 867ce63b05275ddd2acd9d2f39e9ab3cb3039f26677Xavier Ducrohet } 868b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet 869b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet public void hideImageViews() { 87033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet for (View view : mImageViews) { 87133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet view.setVisibility(View.GONE); 87233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 87333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet mEditorPlaceHolder.hide(); 87462039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet } 87562039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet 87624cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet // ////////////////////////////////////////////////////////////////////////////// 87733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet // imageState panel... 87833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 87933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void toggleImageStatePanel() { 880ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet invalidateOptionsMenu(); 881ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet mShowingImageStatePanel = !mShowingImageStatePanel; 88233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 88333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet if (panel != null) { 88424cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet if (panel instanceof EditorPanel) { 88524cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet EditorPanel editorPanel = (EditorPanel) panel; 8861392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet editorPanel.showImageStatePanel(mShowingImageStatePanel); 88762039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet } else if (panel instanceof MainPanel) { 88824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet MainPanel mainPanel = (MainPanel) panel; 88924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mainPanel.showImageStatePanel(mShowingImageStatePanel); 8905562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet } 8915562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet } 8925562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet } 8935562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet 8945562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet @Override 8955562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet public void onConfigurationChanged(Configuration newConfig) 8965562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet { 8975562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet super.onConfigurationChanged(newConfig); 8985562208aafcaccf366dd8cd906700f48c6c342a8Xavier Ducrohet setDefaultValues(); 89962039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet loadXML(); 90062039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet loadMainPanel(); 90124cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet 90224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet // mLoadBitmapTask==null implies you have looked at the intent 90362039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet if (!mShowingTinyPlanet && (mLoadBitmapTask == null)) { 904d98e133b3911b8db3430ce9d85efd5a6adcf70bfXavier Ducrohet mCategoryFiltersAdapter.removeTinyPlanet(); 90562039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet } 90662039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet final View loading = findViewById(R.id.loading); 90724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet loading.setVisibility(View.GONE); 90824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 90924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet 91062039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet public void setupMasterImage() { 91133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet mImageLoader = new ImageLoader(this, getApplicationContext()); 912d98e133b3911b8db3430ce9d85efd5a6adcf70bfXavier Ducrohet 91362039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet HistoryManager mHistoryManager = new HistoryManager(); 91462039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet StateAdapter mImageStateAdapter = new StateAdapter(this, 0); 91524cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet MasterImage.reset(); 91624cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage = MasterImage.getImage(); 91724cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage.setHistoryManager(mHistoryManager); 91824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage.setStateAdapter(mImageStateAdapter); 91924cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage.setActivity(this); 92024cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage.setImageLoader(mImageLoader); 92162039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet 92262039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet if (Runtime.getRuntime().maxMemory() > LIMIT_SUPPORTS_HIGHRES) { 92324cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage.setSupportsHighRes(true); 92462039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet } else { 92524cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet mMasterImage.setSupportsHighRes(false); 92662039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet } 92762039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet } 92862039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet 92962039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet void resetHistory() { 93062039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet HistoryManager adapter = mMasterImage.getHistory(); 93162039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet adapter.reset(); 93224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet HistoryItem historyItem = adapter.getItem(0); 93362039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet ImagePreset original = new ImagePreset(historyItem.getImagePreset()); 93462039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet mMasterImage.setPreset(original, historyItem.getFilterRepresentation(), true); 93562039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet invalidateViews(); 93633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet backToMain(); 93762039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet } 93824cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet 93933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void showDefaultImageView() { 94062039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet mEditorPlaceHolder.hide(); 94162039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet mImageShow.setVisibility(View.VISIBLE); 94224cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet MasterImage.getImage().setCurrentFilter(null); 94362039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet MasterImage.getImage().setCurrentFilterRepresentation(null); 94424cdf6c407351a157880a0a1bbf65c95af753418Xavier Ducrohet } 94562039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet 94662039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet public void backToMain() { 94762039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 94862039873060d26a7be141573b0f468c5ba0414dcXavier Ducrohet if (currentPanel instanceof MainPanel) { 9491392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet return; 9501392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet } 951ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet loadMainPanel(); 952b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet showDefaultImageView(); 95333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 95433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 95533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet @Override 95633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void onBackPressed() { 95733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 95833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet if (currentPanel instanceof MainPanel) { 95933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet if (!mImageShow.hasModifications()) { 96033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet done(); 96133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } else { 96233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet AlertDialog.Builder builder = new AlertDialog.Builder(this); 963799fe3b371c812a0e94872f896b54afa44e94868Xavier Ducrohet builder.setMessage(R.string.unsaved).setTitle(R.string.save_before_exit); 96433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet builder.setPositiveButton(R.string.save_and_exit, new DialogInterface.OnClickListener() { 965ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet @Override 96633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void onClick(DialogInterface dialog, int id) { 967b12b63f973ebf8fdc4f36f77dd29bd1bed436609Xavier Ducrohet saveImage(); 9681392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet } 9691392615c49943383baf51262e2df6975266b4c2fXavier Ducrohet }); 97033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() { 97133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet @Override 97233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void onClick(DialogInterface dialog, int id) { 97333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet done(); 97433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 97533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet }); 976ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet builder.show(); 97733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 97833840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } else { 97933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet backToMain(); 98033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 98133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 98233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 98333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void cannotLoadImage() { 98433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Toast.makeText(this, R.string.cannot_load_image, Toast.LENGTH_SHORT).show(); 98533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet finish(); 98633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 98733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 988ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet // ////////////////////////////////////////////////////////////////////////////// 98933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 99033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public float getPixelsFromDip(float value) { 991ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet Resources r = getResources(); 992952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 99333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet r.getDisplayMetrics()); 99433840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 99533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 9964c6c050f68c67097b92eb38e9f01dae9885907caXavier Ducrohet @Override 997ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet public void onItemClick(AdapterView<?> parent, View view, int position, 998ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet long id) { 999ddea50d03cdda807bbaea54beffd7a341c51f770Xavier Ducrohet mMasterImage.onHistoryItemClick(position); 100033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet invalidateViews(); 100133840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 100233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 100333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void pickImage() { 1004ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet Intent intent = new Intent(); 1005ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet intent.setType("image/*"); 100633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet intent.setAction(Intent.ACTION_GET_CONTENT); 100733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 1008ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet SELECT_PICTURE); 100933840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 101033840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet 1011ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet @Override 101233840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet public void onActivityResult(int requestCode, int resultCode, Intent data) { 101333840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet if (resultCode == RESULT_OK) { 1014ecb67b629266bd616da571c1e391164a4f8c8e93Xavier Ducrohet if (requestCode == SELECT_PICTURE) { 101533840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet Uri selectedImageUri = data.getData(); 101633840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet startLoadBitmap(selectedImageUri); 101733840c00b3b56db9613dcd33abd69601b711ce69Xavier Ducrohet } 10183bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } 1019952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta } 1020952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta 1021952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta 10223bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet public void saveImage() { 10233bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet if (mImageShow.hasModifications()) { 10243bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet // Get the name of the album, to which the image will be saved 1025b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mSelectedImageUri); 10268a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 10273bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 1028952c989b307d4b710ee1adba064f663808af9eb3Deepanshu Gupta showSavingProgress(albumName); 1029b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta mImageShow.saveImage(this, null); 10303bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet } else { 10318a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta done(); 10328a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta } 10338a16d5d203a48e7b13761f329333b3dcb8f8210bDeepanshu Gupta } 10343bd98986a97e4e1921616a0a86983307e68ceb6cXavier Ducrohet 1035b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta 103662c9c3463a9b4a4bc899f5db353f2856876e6590Xavier Ducrohet public void done() { 103762c9c3463a9b4a4bc899f5db353f2856876e6590Xavier Ducrohet hideSavingProgress(); 103862c9c3463a9b4a4bc899f5db353f2856876e6590Xavier Ducrohet if (mLoadBitmapTask != null) { 10397062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet mLoadBitmapTask.cancel(false); 10407062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet } 10417062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet finish(); 10427062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet } 10437062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet 10447062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet private void extractXMPData() { 10457062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet XMresults res = XmpPresets.extractXMPData( 10467062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet getBaseContext(), mMasterImage, getIntent().getData()); 10477062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet if (res == null) 10487062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet return; 10497062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet 10507062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet mOriginalImageUri = res.originalimage; 10517062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet mOriginalPreset = res.preset; 10527062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet } 10537062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet 1054b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta public Uri getSelectedImageUri() { 1055b111e84752652ec862efa7e0fcaa224430feb97fDeepanshu Gupta return mSelectedImageUri; 10567062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet } 10577062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet 10587062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet static { 10597062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet System.loadLibrary("jni_filtershow_filters"); 10607062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet } 10617062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet 10627062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet 10637062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet} 10647062c1ad9adcb216ac49100ca1044e9d89e8f8c1Xavier Ducrohet