FilterShowActivity.java revision 52fa110135563740ebc27326afab4326bbb9b9f5
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; 23a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunkimport android.content.DialogInterface; 240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 25f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.content.pm.ActivityInfo; 26a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 28457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 29fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.graphics.Point; 300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 323d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 3392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 34af59322ac944e6e17aaf718045949a3352016945nicolasroardimport android.os.Handler; 35f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.support.v4.app.Fragment; 36fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentActivity; 37fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentTransaction; 38fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 4052fa110135563740ebc27326afab4326bbb9b9f5John Hofordimport android.util.Log; 41f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.Display; 42f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.Menu; 43f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.MenuItem; 44f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.View; 450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 46af59322ac944e6e17aaf718045949a3352016945nicolasroardimport android.view.ViewPropertyAnimator; 47f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.WindowManager; 48be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.AdapterView; 490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 50be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.FrameLayout; 51be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ShareActionProvider; 520ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 53f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.widget.Toast; 54d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk 5592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 560addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 57560f959b659bb510a6ac9a92831534c5dfcf16benicolasroardimport com.android.gallery3d.filtershow.cache.CachingPipeline; 58cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroardimport com.android.gallery3d.filtershow.cache.FilteringPipeline; 5992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 60d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.Action; 61d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.CategoryAdapter; 62d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.CategoryView; 63d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.MainPanel; 64d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.BasicEditor; 65d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.Editor; 66d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorCrop; 67d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorDraw; 68d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorFlip; 69d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorInfo; 70d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorManager; 71d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorPanel; 72d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorRedEye; 73d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorRotate; 74d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorStraighten; 75d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorTinyPlanet; 76d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 77d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterFxRepresentation; 78d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterImageBorderRepresentation; 79d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterRepresentation; 80d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FiltersManager; 81d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.ImageFilter; 82d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.imageshow.GeometryMetadata; 83de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 8492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 8563a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 8692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 8792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 88fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport com.android.gallery3d.filtershow.state.StateAdapter; 8992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 90afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hofordimport com.android.gallery3d.filtershow.tools.XmpPresets; 91afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hofordimport com.android.gallery3d.filtershow.tools.XmpPresets.XMresults; 927592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 933992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 940addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 95f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunkimport com.android.photos.data.GalleryBitmapPool; 9692e2341248e99c691f38820503984bc5e2f18811nicolasroard 9792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 98ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 9992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 10092e2341248e99c691f38820503984bc5e2f18811nicolasroard 101fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardpublic class FilterShowActivity extends FragmentActivity implements OnItemClickListener, 1020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 1030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 104ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private String mAction = ""; 105588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage mMasterImage = null; 1066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1074dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard private static final long LIMIT_SUPPORTS_HIGHRES = 134217728; // 128Mb 1084dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 109a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 110a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 1110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 1120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 114bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1165aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 1175aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 1180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 12092e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 1210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1225300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford private boolean mShowingTinyPlanet = false; 123bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 124bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 12592e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1270ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1280ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1290ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1300ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 132ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 13355550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 134d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 13569f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk private boolean mLoading = true; 1363d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 137afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private Uri mOriginalImageUri = null; 138afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private ImagePreset mOriginalPreset = null; 139c7b38f384ce7d4dd8cc472c802d691e490c8e162nicolasroard 140f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryLooksAdapter = null; 141f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryBordersAdapter = null; 142f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryGeometryAdapter = null; 143f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryFiltersAdapter = null; 144f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mCurrentPanel = MainPanel.LOOKS; 1453a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 1460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 150f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard boolean onlyUsePortrait = getResources().getBoolean(R.bool.only_use_portrait); 151f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (onlyUsePortrait) { 152f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 153f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 15469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 155f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 156f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk clearGalleryBitmapPool(); 157f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 158560f959b659bb510a6ac9a92831534c5dfcf16benicolasroard CachingPipeline.createRenderscriptContext(this); 15963a7dac01d394523799939596b960cb03321798dJohn Hoford setupMasterImage(); 1603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 1613a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillEditors(); 1625448bf8095483574649afcc2add7f153670c7450nicolasroard 1633a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 164f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 165cdea10749cbdb6bab8f49f1b5b562b6e89781981nicolasroard 1663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultPreset(); 1672e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 168afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford extractXMPData(); 1693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard processIntent(); 1703a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 1715ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 172f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public boolean isShowingImageStatePanel() { 173f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mShowingImageStatePanel; 174f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 175f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 176f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void loadMainPanel() { 177f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (findViewById(R.id.main_panel_container) == null) { 178f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 179f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 180f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MainPanel panel = new MainPanel(); 181f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 182f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 183f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard transaction.commit(); 184f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 185f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 186f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void loadEditorPanel(FilterRepresentation representation, 18700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard final Editor currentEditor) { 188f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getEditorId() == ImageOnlyEditor.ID) { 189f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard currentEditor.reflectCurrentFilter(); 190f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 191f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 19200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard final int currentId = currentEditor.getID(); 19300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard Runnable showEditor = new Runnable() { 19400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard @Override 19500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard public void run() { 19600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard EditorPanel panel = new EditorPanel(); 19700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard panel.setEditor(currentId); 19800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 19900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.remove(getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG)); 20000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 20100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.commit(); 20200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 20300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard }; 20400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard Fragment main = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 20500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard boolean doAnimation = false; 20600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard if (mShowingImageStatePanel 20700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 20800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard doAnimation = true; 20900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 21000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard if (doAnimation && main != null && main instanceof MainPanel) { 21100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard MainPanel mainPanel = (MainPanel) main; 21200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard View container = mainPanel.getView().findViewById(R.id.category_panel_container); 21300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard View bottom = mainPanel.getView().findViewById(R.id.bottom_panel); 21400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard int panelHeight = container.getHeight() + bottom.getHeight(); 215af59322ac944e6e17aaf718045949a3352016945nicolasroard ViewPropertyAnimator anim = mainPanel.getView().animate(); 216af59322ac944e6e17aaf718045949a3352016945nicolasroard anim.translationY(panelHeight).start(); 217af59322ac944e6e17aaf718045949a3352016945nicolasroard final Handler handler = new Handler(); 218af59322ac944e6e17aaf718045949a3352016945nicolasroard handler.postDelayed(showEditor, anim.getDuration()); 21900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } else { 22000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard showEditor.run(); 22100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 222f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 223f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 2243a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void loadXML() { 2250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 2263a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2279594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 228786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 229786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 230786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 231bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 232bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 233786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 234786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 235786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 236786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 237786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 2380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 2400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 2410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2423a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupEditors(); 2435aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 244733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard mEditorPlaceHolder.hide(); 245733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 24692e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 24792e2341248e99c691f38820503984bc5e2f18811nicolasroard 248f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard fillFx(); 249f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard fillBorders(); 25038fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard fillGeometry(); 25138fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard fillFilters(); 2526900cad45d240c9a54b92991538b6a33652e766cnicolasroard 2536019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard setupStatePanel(); 2546019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard } 2556019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard 2566019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard public void setupStatePanel() { 25763a7dac01d394523799939596b960cb03321798dJohn Hoford mImageLoader.setAdapter(mMasterImage.getHistory()); 25838fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard } 25938fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 2603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillFilters() { 2613a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 2623a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 2633a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard filtersManager.addEffects(filtersRepresentations); 264f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 265f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter = new CategoryAdapter(this); 266f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : filtersRepresentations) { 267f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getTextId() != 0) { 268f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.setName(getString(representation.getTextId())); 269f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 270f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.add(new Action(this, representation)); 271f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 2723a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2733a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2743a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillGeometry() { 27538fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 27638fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 27738fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 2783a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard GeometryMetadata geo = new GeometryMetadata(); 2793a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int[] editorsId = geo.getEditorIds(); 2803a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard for (int i = 0; i < editorsId.length; i++) { 2813a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int editorId = editorsId[i]; 2823a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard GeometryMetadata geometry = new GeometryMetadata(geo); 2833a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setEditorId(editorId); 2843a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorInfo editorInfo = (EditorInfo) mEditorPlaceHolder.getEditor(editorId); 2853a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setTextId(editorInfo.getTextId()); 2863a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setOverlayId(editorInfo.getOverlayId()); 2873a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setOverlayOnly(editorInfo.getOverlayOnly()); 288f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (geometry.getTextId() != 0) { 289f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard geometry.setName(getString(geometry.getTextId())); 290f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 29138fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard filtersRepresentations.add(geometry); 2923a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 29338fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 29438fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard filtersManager.addTools(filtersRepresentations); 295f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 296f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter = new CategoryAdapter(this); 297f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : filtersRepresentations) { 298f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter.add(new Action(this, representation)); 299f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 3003a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3013a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3023a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void processIntent() { 3030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 304a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 305a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 306a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 307a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 308ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mAction = intent.getAction(); 309afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford Uri srcUri = intent.getData(); 310afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (mOriginalImageUri != null) { 311afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford srcUri = mOriginalImageUri; 312afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 313afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (srcUri != null) { 314afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford startLoadBitmap(srcUri); 3150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 3160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 3170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3203a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setupEditors() { 3213a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 3223a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorManager.addEditors(mEditorPlaceHolder); 3233a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setOldViews(mImageViews); 3243a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setImageLoader(mImageLoader); 3253a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3263a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3273a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillEditors() { 3283a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorDraw()); 3293a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new BasicEditor()); 3303a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 3313a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); 3323a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRedEye()); 3333a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorCrop()); 3343a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorFlip()); 3353a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRotate()); 3363a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorStraighten()); 3373a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3383a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3393a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setDefaultValues() { 3403a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageFilter.setActivityForMemoryToasts(this); 3413a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3423a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Resources res = getResources(); 3433bc806a8575072c9459fe3698675d3713300d1d3nicolasroard FiltersManager.setResources(res); 3443a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 345f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard CategoryView.setMargin((int) getPixelsFromDip(8)); 346f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard CategoryView.setTextSize((int) getPixelsFromDip(16)); 347f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 3483a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard // TODO: get those values from XML. 3493a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 3503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 3513a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 3523a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3533a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 3543a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 3553a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 3563a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 3573a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3583a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 3593a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 3603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 3613a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3623a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 363d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 36469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk mLoading = true; 36500914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 366733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 367733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.INVISIBLE); 368733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.VISIBLE); 369f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mShowingTinyPlanet = false; 370f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mLoadBitmapTask = new LoadBitmapTask(); 371d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 372d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 373d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 374f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private void fillBorders() { 375f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk Vector<FilterRepresentation> borders = new Vector<FilterRepresentation>(); 376d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk 377d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk // The "no border" implementation 378f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk borders.add(new FilterImageBorderRepresentation(0)); 379d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk 380d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk // Google-build borders 3814c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford FiltersManager.getManager().addBorders(this, borders); 3824c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford 383f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk for (int i = 0; i < borders.size(); i++) { 384f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FilterRepresentation filter = borders.elementAt(i); 3853cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk filter.setName(getString(R.string.borders)); 386f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk if (i == 0) { 3873cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk filter.setName(getString(R.string.none)); 3889090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 389f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 390f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 391f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryBordersAdapter = new CategoryAdapter(this); 392f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : borders) { 393f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getTextId() != 0) { 394f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.setName(getString(representation.getTextId())); 3959090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 39600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard mCategoryBordersAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 3979090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3989090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3999090141f56b4e2000704d0c4a778d3a819821726nicolasroard 400f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryLooksAdapter() { 401f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryLooksAdapter; 402f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 403f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 404f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryBordersAdapter() { 405f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryBordersAdapter; 406f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 407f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 408f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryGeometryAdapter() { 409f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryGeometryAdapter; 410f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 411f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 412f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryFiltersAdapter() { 413f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryFiltersAdapter; 414f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 415f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 416f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void removeFilterRepresentation(FilterRepresentation filterRepresentation) { 417f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation == null) { 418f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 419f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 420f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset oldPreset = MasterImage.getImage().getPreset(); 421f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 422f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.removeFilter(filterRepresentation); 423f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setPreset(copy, true); 424f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 425f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FilterRepresentation lastRepresentation = copy.getLastRepresentation(); 426f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(lastRepresentation); 427f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 428f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 429f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 430f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void useFilterRepresentation(FilterRepresentation filterRepresentation) { 431f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation == null) { 432f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 433f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 434f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 435f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 436f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 437f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset oldPreset = MasterImage.getImage().getPreset(); 438f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 439f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FilterRepresentation representation = copy.getRepresentation(filterRepresentation); 440f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation == null) { 441f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.addFilter(filterRepresentation); 442f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else { 443f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation.allowsMultipleInstances()) { 444f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.updateTempParametersFrom(filterRepresentation); 445f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.setHistoryName(filterRepresentation.getName()); 446f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.synchronizeRepresentation(); 4479090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 448f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard filterRepresentation = representation; 4499090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 450f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setPreset(copy, true); 451f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(filterRepresentation); 452f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 453f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 454f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void showRepresentation(FilterRepresentation representation) { 455f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford if (representation == null) { 456f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford return; 457f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford } 458f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard useFilterRepresentation(representation); 459f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 460f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard // show representation 461f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Editor mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId()); 462f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadEditorPanel(representation, mCurrentEditor); 463f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 464f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 465f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public Editor getEditor(int editorID) { 466f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mEditorPlaceHolder.getEditor(editorID); 467f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 468f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 469f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void setCurrentPanel(int currentPanel) { 470f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCurrentPanel = currentPanel; 471f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 472f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 473f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public int getCurrentPanel() { 474f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCurrentPanel; 4759090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4769090141f56b4e2000704d0c4a778d3a819821726nicolasroard 4778965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 478d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 4793d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 480f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public LoadBitmapTask() { 481d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 4823d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4833d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4843d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 485d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 4868965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!mImageLoader.loadBitmap(params[0], mBitmapSize)) { 4878965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 4888965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 4898965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk publishProgress(mImageLoader.queryLightCycle360()); 4908965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 4913d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4923d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4933d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4948965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 49500914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 4966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 4978965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 4986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 4998965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 5005300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford mShowingTinyPlanet = true; 5018965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 50200914f56c3390caa224b1c9fc07624665de40113John Reck } 50300914f56c3390caa224b1c9fc07624665de40113John Reck 50400914f56c3390caa224b1c9fc07624665de40113John Reck @Override 5053d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 50669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 5073d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 5083d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 5093d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 510588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 5118965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 5128965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk cannotLoadImage(); 5133d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5148965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 51552fa110135563740ebc27326afab4326bbb9b9f5John Hoford if (null == CachingPipeline.getRenderScriptContext()){ 51652fa110135563740ebc27326afab4326bbb9b9f5John Hoford Log.v(LOGTAG,"RenderScript context destroyed during load"); 51752fa110135563740ebc27326afab4326bbb9b9f5John Hoford return; 51852fa110135563740ebc27326afab4326bbb9b9f5John Hoford } 519733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View loading = findViewById(R.id.loading); 520733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.GONE); 521733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 522733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.VISIBLE); 523733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 524cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); 525cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 526cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setOriginal(largeBitmap); 527cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard float previewScale = (float) largeBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 528cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setPreviewScaleFactor(previewScale); 5294dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard Bitmap highresBitmap = mImageLoader.getOriginalBitmapHighres(); 5304dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard if (highresBitmap != null) { 5314dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard float highResPreviewScale = (float) highresBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 5324dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard pipeline.setHighResPreviewScaleFactor(highResPreviewScale); 5334dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } 534f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (!mShowingTinyPlanet) { 535f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.removeTinyPlanet(); 536f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 53733fca9ef7f89b60e3b1a361fdf5fc597b3994e74nicolasroard pipeline.turnOnPipeline(true); 538be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford MasterImage.getImage().setOriginalGeometry(largeBitmap); 539f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.imageLoaded(); 540f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryBordersAdapter.imageLoaded(); 541f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter.imageLoaded(); 542f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.imageLoaded(); 543d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 544ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 545afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (mOriginalPreset != null) { 546afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford MasterImage.getImage().setPreset(mOriginalPreset, true); 547afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalPreset = null; 548afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 549c7b38f384ce7d4dd8cc472c802d691e490c8e162nicolasroard 550f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (mAction == TINY_PLANET_ACTION) { 551f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard showRepresentation(mCategoryFiltersAdapter.getTinyPlanet()); 552ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } 55369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk mLoading = false; 5543d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 5553d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5563d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5573d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5583d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 559f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk private void clearGalleryBitmapPool() { 560f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk (new AsyncTask<Void, Void, Void>() { 561f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk @Override 562f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk protected Void doInBackground(Void... params) { 563f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk // Free memory held in Gallery's Bitmap pool. May be O(n) for n bitmaps. 564f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk GalleryBitmapPool.getInstance().clear(); 565f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk return null; 566f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 567f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk }).execute(); 568f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 569f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 5703d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 5713d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 572d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 573d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 5743d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 575f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard // TODO: refactor, don't use so many singletons. 5768898eaabfa0cdf70e00078d2dea810f9aab4dfd1Ruben Brunk FilteringPipeline.getPipeline().turnOnPipeline(false); 577b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk MasterImage.reset(); 578b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk FilteringPipeline.reset(); 579b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk ImageFilter.resetStatics(); 580f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FiltersManager.getPreviewManager().freeRSFilterScripts(); 581f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FiltersManager.getManager().freeRSFilterScripts(); 582e29b57330be471dd74672a7bdc74a93dcae3a98bnicolasroard FiltersManager.getHighresManager().freeRSFilterScripts(); 58321a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk FiltersManager.reset(); 584560f959b659bb510a6ac9a92831534c5dfcf16benicolasroard CachingPipeline.destroyRenderScriptContext(); 5853d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 5863d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5873d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5880f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 5890f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk DisplayMetrics metrics = new DisplayMetrics(); 590fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford Display display = getWindowManager().getDefaultDisplay(); 5910f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk Point size = new Point(); 592fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getSize(size); 593fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getMetrics(metrics); 594fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford int msize = Math.min(size.x, size.y); 5950f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk return (133 * msize) / metrics.densityDpi; 596fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 597fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 5980addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 599ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 600ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 601ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 602ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 603ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 604ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 605ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 606ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 607ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 6080addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 6090addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 6100addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 6110addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 6120addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 6130addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 6140addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 615ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 616ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 617ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 618ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 619ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 620ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 62108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 62208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 623ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 624ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 625ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 6260ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 6270ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 6280ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 6290ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6300ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 6320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 6330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 6340ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 636ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 6370ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 6380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6390ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6400ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 6410ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 64292e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 64392e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 6440ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6450ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6460ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 6470ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 6480ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 6490ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 6500ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6510ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 6520addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 6530ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 6540ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 6550ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6560ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6570ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 6580ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 6590ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 6600ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 6610ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 6620ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 6630ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6640ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6650ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 6660ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 6670ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6680ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6699594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 6709594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 6719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 672bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 673bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 674bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 6759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 676bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 6779594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6780ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 6790ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 6800ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 6810ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 68223e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 68323e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 68423e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 68523e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 68663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 6879594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6889594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6899594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 69092e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 6916e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 6926e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 69369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk rsPause(); 6946e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6956e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 6966e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6976e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6986e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6996e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 7006e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 7016e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 70269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk rsResume(); 7036e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 7046e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 7056e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 7066e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 7076e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 70869f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk private void rsResume() { 70969f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk ImageFilter.setActivityForMemoryToasts(this); 71069f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 71169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk if (CachingPipeline.getRenderScriptContext() == null) { 71269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk CachingPipeline.createRenderscriptContext(this); 71369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 71469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.setResources(getResources()); 71569f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk if (!mLoading) { 71669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); 71769f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 71869f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk pipeline.setOriginal(largeBitmap); 71969f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk float previewScale = (float) largeBitmap.getWidth() / 72069f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk (float) mImageLoader.getOriginalBounds().width(); 72169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk pipeline.setPreviewScaleFactor(previewScale); 72269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk Bitmap highresBitmap = mImageLoader.getOriginalBitmapHighres(); 72369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk if (highresBitmap != null) { 72469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk float highResPreviewScale = (float) highresBitmap.getWidth() / 72569f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk (float) mImageLoader.getOriginalBounds().width(); 72669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk pipeline.setHighResPreviewScaleFactor(highResPreviewScale); 72769f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 72869f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk pipeline.turnOnPipeline(true); 72969f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.getImage().setOriginalGeometry(largeBitmap); 73069f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 73169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 73269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk 73369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk private void rsPause() { 73469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FilteringPipeline.getPipeline().turnOnPipeline(false); 73569f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FilteringPipeline.reset(); 73669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk ImageFilter.resetStatics(); 73769f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.getPreviewManager().freeRSFilterScripts(); 73869f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.getManager().freeRSFilterScripts(); 73969f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.getHighresManager().freeRSFilterScripts(); 74069f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk FiltersManager.reset(); 74169f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk CachingPipeline.destroyRenderScriptContext(); 74269f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk } 74369f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk 7446e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 7459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 7469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 7479594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 74863a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 7499594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 75063a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 751a7a6a3a5efaf62cdd5d562a9141678671952d27dJohn Hoford backToMain(); 7529594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 7539594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 7549594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7559594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 75663a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 7579594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 75863a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 7599594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 7609594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 7619594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 762f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 763f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 764f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 765f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 766bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 767bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 768bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 769bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 7709594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 7719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 7729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 7739594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7749594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 7769594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7779594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 778bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 779bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu if (mSaveButton != null) 780bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 781bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 782bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 783f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private void fillFx() { 78433de212ec780eaf2bc8d86908f07da33ea8dd7f2John Hoford FilterFxRepresentation nullFx = 78533de212ec780eaf2bc8d86908f07da33ea8dd7f2John Hoford new FilterFxRepresentation(getString(R.string.none), 0, R.string.none); 786f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 7874c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford FiltersManager.getManager().addLooks(this, filtersRepresentations); 788f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 789f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter = new CategoryAdapter(this); 790f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard int verticalItemHeight = (int) getResources().getDimension(R.dimen.action_item_height); 791f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.setItemHeight(verticalItemHeight); 79200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard mCategoryLooksAdapter.add(new Action(this, nullFx, Action.FULL_VIEW)); 793f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 794f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 795f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard } 7963a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 7970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7983a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard public void setDefaultPreset() { 7990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 8003a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty 8013a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard preset.setImageLoader(mImageLoader); 8023a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 80363a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(preset, true); 8040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 8070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 80892e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 8090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 8110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 8120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 8138537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 8140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 8180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 8190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 8200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8215b85b092af404effd32aa513f9c45a0232d7ae81nicolasroard mEditorPlaceHolder.hide(); 8220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 825bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 826bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 827f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void toggleImageStatePanel() { 828fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidateOptionsMenu(); 829f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mShowingImageStatePanel = !mShowingImageStatePanel; 830f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 831f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (panel != null) { 832f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (panel instanceof EditorPanel) { 833f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard EditorPanel editorPanel = (EditorPanel) panel; 834f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard editorPanel.showImageStatePanel(mShowingImageStatePanel); 835f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else if (panel instanceof MainPanel) { 836f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MainPanel mainPanel = (MainPanel) panel; 837f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mainPanel.showImageStatePanel(mShowingImageStatePanel); 838f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 839bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 840bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 841bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 842a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 843a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 844a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 845a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 8463a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 8473a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 848f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 849f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 850f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford // mLoadBitmapTask==null implies you have looked at the intent 851f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford if (!mShowingTinyPlanet && (mLoadBitmapTask == null)) { 852f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.removeTinyPlanet(); 8535300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford } 8543a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard final View loading = findViewById(R.id.loading); 8553a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loading.setVisibility(View.GONE); 856a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 857a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 85863a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 8593a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 8603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 86163a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter mHistoryAdapter = new HistoryAdapter( 86263a7dac01d394523799939596b960cb03321798dJohn Hoford this, R.layout.filtershow_history_operation_row, 86363a7dac01d394523799939596b960cb03321798dJohn Hoford R.id.rowTextView); 86463a7dac01d394523799939596b960cb03321798dJohn Hoford 865fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard StateAdapter mImageStateAdapter = new StateAdapter(this, 0); 866588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage.reset(); 867588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mMasterImage = MasterImage.getImage(); 86863a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setHistoryAdapter(mHistoryAdapter); 86963a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setStateAdapter(mImageStateAdapter); 87063a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 8718d2c7ee02c8fde53effc787c172b10b14ae34d42nicolasroard mMasterImage.setImageLoader(mImageLoader); 8724dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 8734dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard if (Runtime.getRuntime().maxMemory() > LIMIT_SUPPORTS_HIGHRES) { 8744dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(true); 8754dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } else { 8764dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(false); 8774dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } 87863a7dac01d394523799939596b960cb03321798dJohn Hoford } 87963a7dac01d394523799939596b960cb03321798dJohn Hoford 8802e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 88163a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 8829594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 8839594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 88463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(original, true); 8859594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 886be9c8105b431de765f5811bfd170c899d1c8d3b3John Reck backToMain(); 8870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 889f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void showDefaultImageView() { 890f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mEditorPlaceHolder.hide(); 891f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mImageShow.setVisibility(View.VISIBLE); 892f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilter(null); 893f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(null); 894f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 895f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 896f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void backToMain() { 897f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 898f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (currentPanel instanceof MainPanel) { 899f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 900f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 901f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 902f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard showDefaultImageView(); 903f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 904f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 90575608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 90675608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 907f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 908f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (currentPanel instanceof MainPanel) { 909f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (!mImageShow.hasModifications()) { 910a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 911a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } else { 912a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk AlertDialog.Builder builder = new AlertDialog.Builder(this); 913a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setMessage(R.string.unsaved).setTitle(R.string.save_before_exit); 914a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setPositiveButton(R.string.save_and_exit, new DialogInterface.OnClickListener() { 915a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 916a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk saveImage(); 917a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 918a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 919e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() { 920a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 921a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 922a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 923a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 924e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.show(); 925a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 926f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else { 927f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard backToMain(); 92875608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 92975608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 930e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 931e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 932a2c4bda1ed7b44085516b2e8f140637e4691bab1Ruben Brunk Toast.makeText(this, R.string.cannot_load_image, Toast.LENGTH_SHORT).show(); 933e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 934e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 935e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 9360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 9370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 9390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 9400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 9410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 9420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 9460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 94763a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 9480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 9490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 9520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 9530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 9540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 9550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 9560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 9570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 95992e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 9610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 9620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 9630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 964d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 9650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9696416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 9700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 971d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk if (mImageShow.hasModifications()) { 972d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk // Get the name of the album, to which the image will be saved 973d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 974d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 975d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 976d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk showSavingProgress(albumName); 977d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk mImageShow.saveImage(this, null); 978d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk } else { 9796416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 9806416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9816416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9826416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 983a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 9846416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 985d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk hideSavingProgress(); 98652fa110135563740ebc27326afab4326bbb9b9f5John Hoford if (mLoadBitmapTask != null) { 98752fa110135563740ebc27326afab4326bbb9b9f5John Hoford mLoadBitmapTask.cancel(false); 98852fa110135563740ebc27326afab4326bbb9b9f5John Hoford } 9896416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 9900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 993e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 9940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 996afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private void extractXMPData() { 997afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford XMresults res = XmpPresets.extractXMPData( 998afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford getBaseContext(), mMasterImage, getIntent().getData()); 999afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (res == null) 1000afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford return; 1001afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford 1002afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalImageUri = res.originalimage; 1003afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalPreset = res.preset; 1004afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 10050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1006