FilterShowActivity.java revision 47886ac74f2874633d4c1284b91c33117f056581
1a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard/* 2a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Copyright (C) 2012 The Android Open Source Project 3a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 4a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Licensed under the Apache License, Version 2.0 (the "License"); 5a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * you may not use this file except in compliance with the License. 6a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * You may obtain a copy of the License at 7a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 8a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * http://www.apache.org/licenses/LICENSE-2.0 9a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 10a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Unless required by applicable law or agreed to in writing, software 11a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * distributed under the License is distributed on an "AS IS" BASIS, 12a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * See the License for the specific language governing permissions and 14a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * limitations under the License. 15a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard */ 160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardpackage com.android.gallery3d.filtershow; 180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.app.ActionBar; 20a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunkimport android.app.AlertDialog; 21ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport android.app.ProgressDialog; 220ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.content.ContentValues; 230c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunkimport android.content.Context; 24a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunkimport android.content.DialogInterface; 250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 26f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.content.pm.ActivityInfo; 27a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 29457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 30fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.graphics.Point; 310c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunkimport android.graphics.Rect; 320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 343d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 3592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 36af59322ac944e6e17aaf718045949a3352016945nicolasroardimport android.os.Handler; 37f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.support.v4.app.Fragment; 38fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentActivity; 39fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentTransaction; 40fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 4152fa110135563740ebc27326afab4326bbb9b9f5John Hofordimport android.util.Log; 42d2e9ea0ce1949e192e80ce806e702606694440acztenghuiimport android.util.TypedValue; 43f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.Display; 44f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.Menu; 45f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.MenuItem; 46f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.View; 470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 48af59322ac944e6e17aaf718045949a3352016945nicolasroardimport android.view.ViewPropertyAnimator; 49f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.WindowManager; 50be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.AdapterView; 510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 52be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.FrameLayout; 53be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ShareActionProvider; 540ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 55f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.widget.Toast; 56d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk 5792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 580addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 59ce9ceff5776a9b0479c30cbeb2a9388b44df1865nicolasroardimport com.android.gallery3d.filtershow.pipeline.CachingPipeline; 60ce9ceff5776a9b0479c30cbeb2a9388b44df1865nicolasroardimport com.android.gallery3d.filtershow.pipeline.FilteringPipeline; 6192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 62d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.Action; 63d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.CategoryAdapter; 64d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.CategoryView; 65d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.MainPanel; 66d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.BasicEditor; 67d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.Editor; 68d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorCrop; 69d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorDraw; 70d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorFlip; 71d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorInfo; 72d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorManager; 73d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorPanel; 74d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorRedEye; 75d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorRotate; 76d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorStraighten; 77d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorTinyPlanet; 78d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 79d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterFxRepresentation; 80d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterImageBorderRepresentation; 81d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterRepresentation; 82d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FiltersManager; 83d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.ImageFilter; 846a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroardimport com.android.gallery3d.filtershow.history.HistoryManager; 855180e681e1b68eae403b2740c609792ca44f77cenicolasroardimport com.android.gallery3d.filtershow.history.HistoryItem; 86d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.imageshow.GeometryMetadata; 87de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 8892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 8963a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 90ce9ceff5776a9b0479c30cbeb2a9388b44df1865nicolasroardimport com.android.gallery3d.filtershow.pipeline.ImagePreset; 9192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 92fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport com.android.gallery3d.filtershow.state.StateAdapter; 9392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 94afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hofordimport com.android.gallery3d.filtershow.tools.XmpPresets; 95afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hofordimport com.android.gallery3d.filtershow.tools.XmpPresets.XMresults; 967592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 973992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 980addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 99842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescuimport com.android.gallery3d.util.UsageStatistics; 100f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunkimport com.android.photos.data.GalleryBitmapPool; 10192e2341248e99c691f38820503984bc5e2f18811nicolasroard 10292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 103ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 10492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 10592e2341248e99c691f38820503984bc5e2f18811nicolasroard 106fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardpublic class FilterShowActivity extends FragmentActivity implements OnItemClickListener, 1070ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 1080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 109ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private String mAction = ""; 110588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage mMasterImage = null; 1116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1124dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard private static final long LIMIT_SUPPORTS_HIGHRES = 134217728; // 128Mb 1134dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 114a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 115a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 1160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 118bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1205aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 1215aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 1220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 12492e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1265300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford private boolean mShowingTinyPlanet = false; 127bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 128bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 12992e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 1300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1340ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 136ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 13755550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 138d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 13969f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk private boolean mLoading = true; 1403d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 141afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private Uri mOriginalImageUri = null; 142afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private ImagePreset mOriginalPreset = null; 143c7b38f384ce7d4dd8cc472c802d691e490c8e162nicolasroard 144b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui private Uri mSelectedImageUri = null; 145b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 146f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryLooksAdapter = null; 147f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryBordersAdapter = null; 148f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryGeometryAdapter = null; 149f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryFiltersAdapter = null; 150f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mCurrentPanel = MainPanel.LOOKS; 1513a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 1520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 156f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard boolean onlyUsePortrait = getResources().getBoolean(R.bool.only_use_portrait); 157f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (onlyUsePortrait) { 158f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 159f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 16069f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 161f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 162f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk clearGalleryBitmapPool(); 163f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 164560f959b659bb510a6ac9a92831534c5dfcf16benicolasroard CachingPipeline.createRenderscriptContext(this); 16563a7dac01d394523799939596b960cb03321798dJohn Hoford setupMasterImage(); 1663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 1673a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillEditors(); 1685448bf8095483574649afcc2add7f153670c7450nicolasroard 1693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 170f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 171cdea10749cbdb6bab8f49f1b5b562b6e89781981nicolasroard 1723a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultPreset(); 1732e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 174afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford extractXMPData(); 1753a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard processIntent(); 176842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onContentViewChanged(UsageStatistics.COMPONENT_EDITOR, "Main"); 177842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 178842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_LIFECYCLE, UsageStatistics.LIFECYCLE_START); 1793a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 1805ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 181f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public boolean isShowingImageStatePanel() { 182f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mShowingImageStatePanel; 183f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 184f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 185f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void loadMainPanel() { 186f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (findViewById(R.id.main_panel_container) == null) { 187f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 188f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 189f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MainPanel panel = new MainPanel(); 190f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 191f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 192f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard transaction.commit(); 193f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 194f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 195f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void loadEditorPanel(FilterRepresentation representation, 19600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard final Editor currentEditor) { 197f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getEditorId() == ImageOnlyEditor.ID) { 198f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard currentEditor.reflectCurrentFilter(); 199f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 200f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 20100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard final int currentId = currentEditor.getID(); 20200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard Runnable showEditor = new Runnable() { 20300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard @Override 20400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard public void run() { 20500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard EditorPanel panel = new EditorPanel(); 20600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard panel.setEditor(currentId); 20700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 20800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.remove(getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG)); 20900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 21000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.commit(); 21100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 21200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard }; 21300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard Fragment main = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 21400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard boolean doAnimation = false; 21500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard if (mShowingImageStatePanel 21600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 21700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard doAnimation = true; 21800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 21900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard if (doAnimation && main != null && main instanceof MainPanel) { 22000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard MainPanel mainPanel = (MainPanel) main; 22100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard View container = mainPanel.getView().findViewById(R.id.category_panel_container); 22200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard View bottom = mainPanel.getView().findViewById(R.id.bottom_panel); 22300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard int panelHeight = container.getHeight() + bottom.getHeight(); 224af59322ac944e6e17aaf718045949a3352016945nicolasroard ViewPropertyAnimator anim = mainPanel.getView().animate(); 225af59322ac944e6e17aaf718045949a3352016945nicolasroard anim.translationY(panelHeight).start(); 226af59322ac944e6e17aaf718045949a3352016945nicolasroard final Handler handler = new Handler(); 227af59322ac944e6e17aaf718045949a3352016945nicolasroard handler.postDelayed(showEditor, anim.getDuration()); 22800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } else { 22900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard showEditor.run(); 23000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 231f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 232f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 2333a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void loadXML() { 2340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 2353a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 237786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 238786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 239786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 240bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 241bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 242786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 243786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 244786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 245786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 246786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 2470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 2490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 2500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2513a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupEditors(); 2525aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 253733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard mEditorPlaceHolder.hide(); 254733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 2550c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk mImageShow.bindAsImageLoadListener(); 25692e2341248e99c691f38820503984bc5e2f18811nicolasroard 257f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard fillFx(); 258f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard fillBorders(); 25938fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard fillGeometry(); 26038fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard fillFilters(); 2616900cad45d240c9a54b92991538b6a33652e766cnicolasroard 2626019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard setupStatePanel(); 2636019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard } 2646019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard 2656019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard public void setupStatePanel() { 2660c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk MasterImage.getImage().setHistoryManager(mMasterImage.getHistory()); 26738fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard } 26838fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 2693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillFilters() { 2703a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 2713a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 2723a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard filtersManager.addEffects(filtersRepresentations); 273f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 274f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter = new CategoryAdapter(this); 275f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : filtersRepresentations) { 276f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getTextId() != 0) { 277f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.setName(getString(representation.getTextId())); 278f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 279f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.add(new Action(this, representation)); 280f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 2813a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2823a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2833a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillGeometry() { 28438fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 28538fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 28638fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 2873a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard GeometryMetadata geo = new GeometryMetadata(); 2883a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int[] editorsId = geo.getEditorIds(); 2893a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard for (int i = 0; i < editorsId.length; i++) { 2903a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int editorId = editorsId[i]; 2913a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard GeometryMetadata geometry = new GeometryMetadata(geo); 2923a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setEditorId(editorId); 2933a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorInfo editorInfo = (EditorInfo) mEditorPlaceHolder.getEditor(editorId); 2943a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setTextId(editorInfo.getTextId()); 2953a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setOverlayId(editorInfo.getOverlayId()); 2963a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setOverlayOnly(editorInfo.getOverlayOnly()); 297f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (geometry.getTextId() != 0) { 298f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard geometry.setName(getString(geometry.getTextId())); 299f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 30038fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard filtersRepresentations.add(geometry); 3013a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 30238fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 30338fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard filtersManager.addTools(filtersRepresentations); 304f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 305f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter = new CategoryAdapter(this); 306f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : filtersRepresentations) { 307f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter.add(new Action(this, representation)); 308f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 3093a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3103a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3113a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void processIntent() { 3120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 313a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 314a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 315a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 316a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 317ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mAction = intent.getAction(); 318b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui mSelectedImageUri = intent.getData(); 319b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui Uri loadUri = mSelectedImageUri; 320afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (mOriginalImageUri != null) { 321b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui loadUri = mOriginalImageUri; 322afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 323b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui if (loadUri != null) { 324b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui startLoadBitmap(loadUri); 3250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 3260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 3270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3303a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setupEditors() { 3313a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 3323a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorManager.addEditors(mEditorPlaceHolder); 3333a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setOldViews(mImageViews); 3340c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk 3353a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3363a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3373a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillEditors() { 3383a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorDraw()); 3393a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new BasicEditor()); 3403a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 3413a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); 3423a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRedEye()); 3433a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorCrop()); 3443a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorFlip()); 3453a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRotate()); 3463a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorStraighten()); 3473a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3483a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3493a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setDefaultValues() { 3503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageFilter.setActivityForMemoryToasts(this); 3513a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3523a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Resources res = getResources(); 3533bc806a8575072c9459fe3698675d3713300d1d3nicolasroard FiltersManager.setResources(res); 3543a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3553a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard // TODO: get those values from XML. 3563a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 3573a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 3583a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 3593a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 3613a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 3623a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 3633a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 3643a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3653a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 3663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 3673a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 3683a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 370d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 37169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk mLoading = true; 37200914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 373733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 374733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.INVISIBLE); 375733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.VISIBLE); 376f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mShowingTinyPlanet = false; 377f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mLoadBitmapTask = new LoadBitmapTask(); 378d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 379d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 380d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 381f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private void fillBorders() { 382f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk Vector<FilterRepresentation> borders = new Vector<FilterRepresentation>(); 383d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk 384d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk // The "no border" implementation 385f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk borders.add(new FilterImageBorderRepresentation(0)); 386d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk 387d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk // Google-build borders 3884c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford FiltersManager.getManager().addBorders(this, borders); 3894c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford 390f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk for (int i = 0; i < borders.size(); i++) { 391f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FilterRepresentation filter = borders.elementAt(i); 3923cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk filter.setName(getString(R.string.borders)); 393f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk if (i == 0) { 3943cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk filter.setName(getString(R.string.none)); 3959090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 396f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 397f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 398f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryBordersAdapter = new CategoryAdapter(this); 399f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : borders) { 400f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getTextId() != 0) { 401f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.setName(getString(representation.getTextId())); 4029090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 40300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard mCategoryBordersAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 4049090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4059090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4069090141f56b4e2000704d0c4a778d3a819821726nicolasroard 407f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryLooksAdapter() { 408f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryLooksAdapter; 409f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 410f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 411f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryBordersAdapter() { 412f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryBordersAdapter; 413f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 414f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 415f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryGeometryAdapter() { 416f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryGeometryAdapter; 417f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 418f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 419f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryFiltersAdapter() { 420f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryFiltersAdapter; 421f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 422f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 423f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void removeFilterRepresentation(FilterRepresentation filterRepresentation) { 424f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation == null) { 425f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 426f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 427f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset oldPreset = MasterImage.getImage().getPreset(); 428f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 429f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.removeFilter(filterRepresentation); 430ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(copy, copy.getLastRepresentation(), true); 431f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 432f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FilterRepresentation lastRepresentation = copy.getLastRepresentation(); 433f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(lastRepresentation); 434f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 435f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 436f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 437f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void useFilterRepresentation(FilterRepresentation filterRepresentation) { 438f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation == null) { 439f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 440f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 441f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 442f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 443f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 444f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset oldPreset = MasterImage.getImage().getPreset(); 445f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 446f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FilterRepresentation representation = copy.getRepresentation(filterRepresentation); 447f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation == null) { 448f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.addFilter(filterRepresentation); 449f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else { 450c9ca6d1eb85a71b7667f4c25d879e78cce16ac4cztenghui if (filterRepresentation.allowsSingleInstanceOnly()) { 451d2e9ea0ce1949e192e80ce806e702606694440acztenghui // Don't just update the filter representation. Centralize the 452d2e9ea0ce1949e192e80ce806e702606694440acztenghui // logic in the addFilter(), such that we can keep "None" as 453d2e9ea0ce1949e192e80ce806e702606694440acztenghui // null. 454d2e9ea0ce1949e192e80ce806e702606694440acztenghui copy.removeFilter(representation); 455d2e9ea0ce1949e192e80ce806e702606694440acztenghui copy.addFilter(filterRepresentation); 4569090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4579090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 458ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(copy, filterRepresentation, true); 459f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(filterRepresentation); 460f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 461f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 462f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void showRepresentation(FilterRepresentation representation) { 463f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford if (representation == null) { 464f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford return; 465f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford } 466e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard 467e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard // TODO: this check is needed because the GeometryMetadata doesn't quite 468e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard // follow the same pattern as the other filters to update/sync their values. 469e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard // We thus need to not call useFilterRepresentation() for now, as it 470e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard // would override the current Geometry. Once GeometryMetadata is fixed, 471e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard // let's remove the check and call useFilterRepresentation all the time. 472e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard if (!(representation instanceof GeometryMetadata)) { 473e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard useFilterRepresentation(representation); 474e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard } 475f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 476f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard // show representation 477f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Editor mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId()); 478f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadEditorPanel(representation, mCurrentEditor); 479f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 480f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 481f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public Editor getEditor(int editorID) { 482f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mEditorPlaceHolder.getEditor(editorID); 483f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 484f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 485f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void setCurrentPanel(int currentPanel) { 486f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCurrentPanel = currentPanel; 487f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 488f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 489f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public int getCurrentPanel() { 490f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCurrentPanel; 4919090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4929090141f56b4e2000704d0c4a778d3a819821726nicolasroard 493acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard public void updateCategories() { 494acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard ImagePreset preset = mMasterImage.getPreset(); 495acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard mCategoryLooksAdapter.reflectImagePreset(preset); 496acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard mCategoryBordersAdapter.reflectImagePreset(preset); 497acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard } 498acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard 499be84355fddceb9690eef752707c42457ea251e77nicolasroard private class LoadHighresBitmapTask extends AsyncTask<Void, Void, Boolean> { 500be84355fddceb9690eef752707c42457ea251e77nicolasroard @Override 501be84355fddceb9690eef752707c42457ea251e77nicolasroard protected Boolean doInBackground(Void... params) { 5020c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk MasterImage master = MasterImage.getImage(); 5030c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Rect originalBounds = master.getOriginalBounds(); 5040c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (master.supportsHighRes()) { 5050c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk int highresPreviewSize = master.getOriginalBitmapLarge().getWidth() * 2; 5060c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (highresPreviewSize > originalBounds.width()) { 5070c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk highresPreviewSize = originalBounds.width(); 5080c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk } 50947886ac74f2874633d4c1284b91c33117f056581Ruben Brunk Rect bounds = new Rect(); 51047886ac74f2874633d4c1284b91c33117f056581Ruben Brunk Bitmap originalHires = ImageLoader.loadOrientedConstrainedBitmap(master.getUri(), 51147886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.getActivity(), highresPreviewSize, 51247886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.getOrientation(), bounds); 51347886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.setOriginalBounds(bounds); 5140c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk master.setOriginalBitmapHighres(originalHires); 5150c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk master.warnListeners(); 5160c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk } 517be84355fddceb9690eef752707c42457ea251e77nicolasroard return true; 518be84355fddceb9690eef752707c42457ea251e77nicolasroard } 519be84355fddceb9690eef752707c42457ea251e77nicolasroard 520be84355fddceb9690eef752707c42457ea251e77nicolasroard @Override 521be84355fddceb9690eef752707c42457ea251e77nicolasroard protected void onPostExecute(Boolean result) { 5220c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Bitmap highresBitmap = MasterImage.getImage().getOriginalBitmapHighres(); 523be84355fddceb9690eef752707c42457ea251e77nicolasroard if (highresBitmap != null) { 524be84355fddceb9690eef752707c42457ea251e77nicolasroard FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 5250c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk float highResPreviewScale = (float) highresBitmap.getWidth() 5260c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk / (float) MasterImage.getImage().getOriginalBounds().width(); 527be84355fddceb9690eef752707c42457ea251e77nicolasroard pipeline.setHighResPreviewScaleFactor(highResPreviewScale); 528be84355fddceb9690eef752707c42457ea251e77nicolasroard } 529be84355fddceb9690eef752707c42457ea251e77nicolasroard } 530be84355fddceb9690eef752707c42457ea251e77nicolasroard } 531be84355fddceb9690eef752707c42457ea251e77nicolasroard 5328965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 533d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 5343d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 535f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public LoadBitmapTask() { 536d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 5373d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5383d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5393d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 540d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 5410c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (!MasterImage.getImage().loadBitmap(params[0], mBitmapSize)) { 5428965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 5438965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 5440c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk publishProgress(ImageLoader.queryLightCycle360(MasterImage.getImage().getActivity())); 5458965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 5463d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5473d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5483d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 5498965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 55000914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 5516416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 5528965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 5536416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 5548965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 5555300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford mShowingTinyPlanet = true; 5568965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 55700914f56c3390caa224b1c9fc07624665de40113John Reck } 55800914f56c3390caa224b1c9fc07624665de40113John Reck 55900914f56c3390caa224b1c9fc07624665de40113John Reck @Override 5603d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 56169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 5623d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 5633d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 5643d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 565588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 5668965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 5678965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk cannotLoadImage(); 5683d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5698965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 57052fa110135563740ebc27326afab4326bbb9b9f5John Hoford if (null == CachingPipeline.getRenderScriptContext()){ 57152fa110135563740ebc27326afab4326bbb9b9f5John Hoford Log.v(LOGTAG,"RenderScript context destroyed during load"); 57252fa110135563740ebc27326afab4326bbb9b9f5John Hoford return; 57352fa110135563740ebc27326afab4326bbb9b9f5John Hoford } 574733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View loading = findViewById(R.id.loading); 575733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.GONE); 576733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 577733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.VISIBLE); 578733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 5790c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Bitmap largeBitmap = MasterImage.getImage().getOriginalBitmapLarge(); 580cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 581cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setOriginal(largeBitmap); 5820c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk float previewScale = (float) largeBitmap.getWidth() 5830c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk / (float) MasterImage.getImage().getOriginalBounds().width(); 584cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setPreviewScaleFactor(previewScale); 585f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (!mShowingTinyPlanet) { 586f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.removeTinyPlanet(); 587f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 58833fca9ef7f89b60e3b1a361fdf5fc597b3994e74nicolasroard pipeline.turnOnPipeline(true); 589be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford MasterImage.getImage().setOriginalGeometry(largeBitmap); 590f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.imageLoaded(); 591f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryBordersAdapter.imageLoaded(); 592f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter.imageLoaded(); 593f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.imageLoaded(); 594d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 595ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 596afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (mOriginalPreset != null) { 597d2e9ea0ce1949e192e80ce806e702606694440acztenghui MasterImage.getImage().setLoadedPreset(mOriginalPreset); 598ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(mOriginalPreset, 599ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard mOriginalPreset.getLastRepresentation(), true); 600afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalPreset = null; 601afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 602c7b38f384ce7d4dd8cc472c802d691e490c8e162nicolasroard 603f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (mAction == TINY_PLANET_ACTION) { 604f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard showRepresentation(mCategoryFiltersAdapter.getTinyPlanet()); 605ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } 60669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk mLoading = false; 6072d0eaf53ef11c9fd9b3abb824c12087fe1230cdfJohn Hoford MasterImage.getImage().notifyGeometryChange(); 608be84355fddceb9690eef752707c42457ea251e77nicolasroard LoadHighresBitmapTask highresLoad = new LoadHighresBitmapTask(); 609be84355fddceb9690eef752707c42457ea251e77nicolasroard highresLoad.execute(); 6103d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 6113d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 6123d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 6133d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 6143d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 615f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk private void clearGalleryBitmapPool() { 616f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk (new AsyncTask<Void, Void, Void>() { 617f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk @Override 618f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk protected Void doInBackground(Void... params) { 619f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk // Free memory held in Gallery's Bitmap pool. May be O(n) for n bitmaps. 620f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk GalleryBitmapPool.getInstance().clear(); 621f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk return null; 622f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 623f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk }).execute(); 624f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 625f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 6263d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 6273d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 628d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 629d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 6303d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 631f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard // TODO: refactor, don't use so many singletons. 6328898eaabfa0cdf70e00078d2dea810f9aab4dfd1Ruben Brunk FilteringPipeline.getPipeline().turnOnPipeline(false); 633b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk MasterImage.reset(); 634b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk FilteringPipeline.reset(); 635b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk ImageFilter.resetStatics(); 636f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FiltersManager.getPreviewManager().freeRSFilterScripts(); 637f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FiltersManager.getManager().freeRSFilterScripts(); 638e29b57330be471dd74672a7bdc74a93dcae3a98bnicolasroard FiltersManager.getHighresManager().freeRSFilterScripts(); 63921a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk FiltersManager.reset(); 640560f959b659bb510a6ac9a92831534c5dfcf16benicolasroard CachingPipeline.destroyRenderScriptContext(); 6413d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 6423d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 6433d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 64447886ac74f2874633d4c1284b91c33117f056581Ruben Brunk // TODO: find a more robust way of handling image size selection 64547886ac74f2874633d4c1284b91c33117f056581Ruben Brunk // for high screen densities. 6460f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 64747886ac74f2874633d4c1284b91c33117f056581Ruben Brunk DisplayMetrics outMetrics = new DisplayMetrics(); 64847886ac74f2874633d4c1284b91c33117f056581Ruben Brunk getWindowManager().getDefaultDisplay().getMetrics(outMetrics); 64947886ac74f2874633d4c1284b91c33117f056581Ruben Brunk return (int) Math.max(outMetrics.heightPixels, outMetrics.widthPixels); 650fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 651fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 6520addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 653ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 654ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 655ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 656ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 657ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 658ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 659ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 660ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 661ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 6620addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 6630addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 6640addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 6650addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 6660addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 6670addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 6680addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 669ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 670ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 671ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 672ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 673ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 674ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 67508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 67608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 677ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 678ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 679ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 6800ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 6810ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 6820ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 6830ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6850ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 6860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 6870ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 6880ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6890ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 690ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 6910ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 6920ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6930ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6940ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 6950ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 69692e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 69792e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 6980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 7000ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 7010ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 7020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 7030ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 7040ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 7050ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 7060addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 7070ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 7080ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 7090ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 7100ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 7110ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 7120ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 7130ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 7140ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 7150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 7160c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk mSharedOutputFile = SaveCopyTask.getNewFile(this, MasterImage.getImage().getUri()); 7170ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 7180ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 7190ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 7200ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 7210ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 7220ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 7239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 7249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 7259594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 726bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 727bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 728bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 7299594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 730bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 7319594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 7330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 7340ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 7350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 73623e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 73723e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 73823e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 73923e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 74063a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 7419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 7429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 74492e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 7456e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 7466e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 74769f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk rsPause(); 7486e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 7496e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 7506e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 7516e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 7526e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 7536e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 7546e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 7556e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 75669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk rsResume(); 7576e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 7586e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 7596e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 7606e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 7616e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 76269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk private void rsResume() { 76369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk ImageFilter.setActivityForMemoryToasts(this); 76469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 76569f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk if (CachingPipeline.getRenderScriptContext() == null) { 76669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk CachingPipeline.createRenderscriptContext(this); 76769f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 76869f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.setResources(getResources()); 76969f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk if (!mLoading) { 7700c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Bitmap largeBitmap = MasterImage.getImage().getOriginalBitmapLarge(); 77169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 77269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk pipeline.setOriginal(largeBitmap); 77369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk float previewScale = (float) largeBitmap.getWidth() / 7740c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk (float) MasterImage.getImage().getOriginalBounds().width(); 77569f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk pipeline.setPreviewScaleFactor(previewScale); 7760c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Bitmap highresBitmap = MasterImage.getImage().getOriginalBitmapHighres(); 77769f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk if (highresBitmap != null) { 77869f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk float highResPreviewScale = (float) highresBitmap.getWidth() / 7790c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk (float) MasterImage.getImage().getOriginalBounds().width(); 78069f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk pipeline.setHighResPreviewScaleFactor(highResPreviewScale); 78169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 78269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk pipeline.turnOnPipeline(true); 78369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.getImage().setOriginalGeometry(largeBitmap); 78469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 78569f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 78669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk 78769f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk private void rsPause() { 78869f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FilteringPipeline.getPipeline().turnOnPipeline(false); 78969f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FilteringPipeline.reset(); 79069f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk ImageFilter.resetStatics(); 79169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.getPreviewManager().freeRSFilterScripts(); 79269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.getManager().freeRSFilterScripts(); 79369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.getHighresManager().freeRSFilterScripts(); 79469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.reset(); 79569f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk CachingPipeline.destroyRenderScriptContext(); 79669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 79769f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk 7986e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 7999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 8009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 8019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 8026a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 8039594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 80463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 805a7a6a3a5efaf62cdd5d562a9141678671952d27dJohn Hoford backToMain(); 8069594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 807842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 808842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_BUTTON_PRESS, "Undo"); 8099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 8109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 8119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 8126a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 8139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 81463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 8159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 816842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 817842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_BUTTON_PRESS, "Redo"); 8189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 8199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 820f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 821f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 822842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 823842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_BUTTON_PRESS, "ResetHistory"); 824f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 825f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 826bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 827bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 828842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 829842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_BUTTON_PRESS, 830842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu mShowingImageStatePanel ? "ShowPanel" : "HidePanel"); 831bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 832bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 8339594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 8349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 8359594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 8369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 8379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 8389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 8399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 8409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 841bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 842545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui if (mSaveButton != null) { 843bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 844545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui } 845bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 846bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 847f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private void fillFx() { 84833de212ec780eaf2bc8d86908f07da33ea8dd7f2John Hoford FilterFxRepresentation nullFx = 84933de212ec780eaf2bc8d86908f07da33ea8dd7f2John Hoford new FilterFxRepresentation(getString(R.string.none), 0, R.string.none); 850f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 8514c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford FiltersManager.getManager().addLooks(this, filtersRepresentations); 852f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 853f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter = new CategoryAdapter(this); 854f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard int verticalItemHeight = (int) getResources().getDimension(R.dimen.action_item_height); 855f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.setItemHeight(verticalItemHeight); 85600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard mCategoryLooksAdapter.add(new Action(this, nullFx, Action.FULL_VIEW)); 857f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 858f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 859f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard } 8603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 8610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8623a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard public void setDefaultPreset() { 8630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 864ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard ImagePreset preset = new ImagePreset(); // empty 865ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard mMasterImage.setPreset(preset, preset.getLastRepresentation(), true); 8660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 8690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 87092e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 8710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 8730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 8740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 8758537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 8760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 8800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 8810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 8820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8835b85b092af404effd32aa513f9c45a0232d7ae81nicolasroard mEditorPlaceHolder.hide(); 8840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 887bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 888bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 889f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void toggleImageStatePanel() { 890fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidateOptionsMenu(); 891f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mShowingImageStatePanel = !mShowingImageStatePanel; 892f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 893f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (panel != null) { 894f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (panel instanceof EditorPanel) { 895f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard EditorPanel editorPanel = (EditorPanel) panel; 896f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard editorPanel.showImageStatePanel(mShowingImageStatePanel); 897f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else if (panel instanceof MainPanel) { 898f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MainPanel mainPanel = (MainPanel) panel; 899f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mainPanel.showImageStatePanel(mShowingImageStatePanel); 900f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 901bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 902bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 903bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 904a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 905a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 906a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 907a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 9083a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 9093a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 910f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 911f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 912f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford // mLoadBitmapTask==null implies you have looked at the intent 913f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford if (!mShowingTinyPlanet && (mLoadBitmapTask == null)) { 914f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.removeTinyPlanet(); 9155300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford } 9163a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard final View loading = findViewById(R.id.loading); 9173a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loading.setVisibility(View.GONE); 918a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 919a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 92063a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 9213a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 922ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard HistoryManager historyManager = new HistoryManager(); 923ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard StateAdapter imageStateAdapter = new StateAdapter(this, 0); 924588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage.reset(); 925588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mMasterImage = MasterImage.getImage(); 926ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard mMasterImage.setHistoryManager(historyManager); 927ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard mMasterImage.setStateAdapter(imageStateAdapter); 92863a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 9294dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 9304dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard if (Runtime.getRuntime().maxMemory() > LIMIT_SUPPORTS_HIGHRES) { 9314dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(true); 9324dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } else { 9334dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(false); 9344dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } 93563a7dac01d394523799939596b960cb03321798dJohn Hoford } 93663a7dac01d394523799939596b960cb03321798dJohn Hoford 9372e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 9386a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 9399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 940ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard HistoryItem historyItem = adapter.getItem(0); 941ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard ImagePreset original = new ImagePreset(historyItem.getImagePreset()); 942ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard mMasterImage.setPreset(original, historyItem.getFilterRepresentation(), true); 9439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 944be9c8105b431de765f5811bfd170c899d1c8d3b3John Reck backToMain(); 9450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 947f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void showDefaultImageView() { 948f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mEditorPlaceHolder.hide(); 949f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mImageShow.setVisibility(View.VISIBLE); 950f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilter(null); 951f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(null); 952f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 953f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 954f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void backToMain() { 955f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 956f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (currentPanel instanceof MainPanel) { 957f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 958f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 959f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 960f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard showDefaultImageView(); 961f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 962f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 96375608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 96475608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 965f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 966f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (currentPanel instanceof MainPanel) { 967f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (!mImageShow.hasModifications()) { 968a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 969a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } else { 970a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk AlertDialog.Builder builder = new AlertDialog.Builder(this); 971a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setMessage(R.string.unsaved).setTitle(R.string.save_before_exit); 972a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setPositiveButton(R.string.save_and_exit, new DialogInterface.OnClickListener() { 973b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui @Override 974a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 975a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk saveImage(); 976a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 977a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 978e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() { 979b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui @Override 980a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 981a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 982a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 983a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 984e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.show(); 985a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 986f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else { 987f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard backToMain(); 98875608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 98975608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 990e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 991e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 992a2c4bda1ed7b44085516b2e8f140637e4691bab1Ruben Brunk Toast.makeText(this, R.string.cannot_load_image, Toast.LENGTH_SHORT).show(); 993e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 994e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 995e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 9960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 9970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 9990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 10000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 10010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 10020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 10050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 10060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 100763a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 10080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 10090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 10120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 10130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 10140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 10150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 10160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 10170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 101992e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 10200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 10210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 10220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 10230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 1024d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 10250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10296416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 1031d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk if (mImageShow.hasModifications()) { 1032d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk // Get the name of the album, to which the image will be saved 1033b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mSelectedImageUri); 1034d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 1035d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 1036d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk showSavingProgress(albumName); 1037d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk mImageShow.saveImage(this, null); 1038d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk } else { 10396416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10406416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10416416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1043a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 10446416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 1045d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk hideSavingProgress(); 104652fa110135563740ebc27326afab4326bbb9b9f5John Hoford if (mLoadBitmapTask != null) { 104752fa110135563740ebc27326afab4326bbb9b9f5John Hoford mLoadBitmapTask.cancel(false); 104852fa110135563740ebc27326afab4326bbb9b9f5John Hoford } 10496416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 10500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1052afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private void extractXMPData() { 1053afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford XMresults res = XmpPresets.extractXMPData( 1054afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford getBaseContext(), mMasterImage, getIntent().getData()); 1055afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (res == null) 1056afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford return; 1057afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford 1058afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalImageUri = res.originalimage; 1059afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalPreset = res.preset; 1060afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 1061b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 1062b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui public Uri getSelectedImageUri() { 1063b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui return mSelectedImageUri; 1064b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui } 1065b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 1066b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui static { 1067b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui System.loadLibrary("jni_filtershow_filters"); 1068b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui } 1069b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 1070b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 10710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1072