FilterShowActivity.java revision 9f452e09889199a28a86d9bd8f8fdaa8508ca0c1
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; 2224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport android.content.ComponentName; 230ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.content.ContentValues; 240c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunkimport android.content.Context; 25a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunkimport android.content.DialogInterface; 260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 2724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport android.content.ServiceConnection; 28f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.content.pm.ActivityInfo; 29a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 31457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 329c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport android.graphics.Matrix; 330c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunkimport android.graphics.Rect; 349c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport android.graphics.RectF; 359f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroardimport android.graphics.drawable.ColorDrawable; 360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 383d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 3992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 409c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport android.os.CancellationSignal; 41af59322ac944e6e17aaf718045949a3352016945nicolasroardimport android.os.Handler; 4224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport android.os.IBinder; 43fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.support.v4.app.DialogFragment; 44f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.support.v4.app.Fragment; 45fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentActivity; 46fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentTransaction; 47fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 4852fa110135563740ebc27326afab4326bbb9b9f5John Hofordimport android.util.Log; 49d2e9ea0ce1949e192e80ce806e702606694440acztenghuiimport android.util.TypedValue; 50f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.Menu; 51f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.MenuItem; 52860af325f2030a03c526e8551a85230d17df7b15nicolasroardimport android.view.MotionEvent; 53f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.View; 540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 55af59322ac944e6e17aaf718045949a3352016945nicolasroardimport android.view.ViewPropertyAnimator; 56f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.WindowManager; 57be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.AdapterView; 580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 59be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.FrameLayout; 60be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ShareActionProvider; 610ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 62f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.widget.Toast; 63d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk 6492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 6524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport com.android.gallery3d.app.PhotoPage; 660addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 6792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 68d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.Action; 69d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.CategoryAdapter; 709f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroardimport com.android.gallery3d.filtershow.category.CategorySelected; 719737f3a18a8c302160e213afa30a4db710e41fb6nicolasroardimport com.android.gallery3d.filtershow.category.CategoryView; 72d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.MainPanel; 73860af325f2030a03c526e8551a85230d17df7b15nicolasroardimport com.android.gallery3d.filtershow.category.SwipableView; 74077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.data.UserPresetsManager; 75d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.BasicEditor; 76d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.Editor; 77077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorChanSat; 7849798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordimport com.android.gallery3d.filtershow.editors.EditorColorBorder; 79d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorCrop; 80d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorDraw; 81077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorGrad; 82d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorManager; 83077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorMirror; 84d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorPanel; 85d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorRedEye; 86d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorRotate; 87d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorStraighten; 88d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorTinyPlanet; 89d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 9057bd092bd5757576f07341135272ed1c3df729ffnicolasroardimport com.android.gallery3d.filtershow.filters.FilterMirrorRepresentation; 91d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterRepresentation; 9257bd092bd5757576f07341135272ed1c3df729ffnicolasroardimport com.android.gallery3d.filtershow.filters.FilterRotateRepresentation; 93077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation; 94d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FiltersManager; 95d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.ImageFilter; 965180e681e1b68eae403b2740c609792ca44f77cenicolasroardimport com.android.gallery3d.filtershow.history.HistoryItem; 97077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.history.HistoryManager; 9892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 9963a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 100368ae73ad0627dac41709b925fc02a12548ab80dnicolasroardimport com.android.gallery3d.filtershow.imageshow.Spline; 101860af325f2030a03c526e8551a85230d17df7b15nicolasroardimport com.android.gallery3d.filtershow.info.InfoPanel; 102077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.pipeline.CachingPipeline; 103ce9ceff5776a9b0479c30cbeb2a9388b44df1865nicolasroardimport com.android.gallery3d.filtershow.pipeline.ImagePreset; 10424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport com.android.gallery3d.filtershow.pipeline.ProcessingService; 105fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.presets.PresetManagementDialog; 106fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.presets.UserPresetsAdapter; 10792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 108fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport com.android.gallery3d.filtershow.state.StateAdapter; 10924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport com.android.gallery3d.filtershow.tools.SaveImage; 110afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hofordimport com.android.gallery3d.filtershow.tools.XmpPresets; 111afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hofordimport com.android.gallery3d.filtershow.tools.XmpPresets.XMresults; 112077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.ui.ExportDialog; 1137592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 1140addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 1159c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport com.android.gallery3d.util.PrintJob; 116842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescuimport com.android.gallery3d.util.UsageStatistics; 117f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunkimport com.android.photos.data.GalleryBitmapPool; 11892e2341248e99c691f38820503984bc5e2f18811nicolasroard 11992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 1209c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport java.io.FileDescriptor; 1219c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport java.io.FileOutputStream; 122ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 12324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport java.util.ArrayList; 12492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 12592e2341248e99c691f38820503984bc5e2f18811nicolasroard 126fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardpublic class FilterShowActivity extends FragmentActivity implements OnItemClickListener, 1270ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 1280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 129ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private String mAction = ""; 130588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage mMasterImage = null; 1316416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1324dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard private static final long LIMIT_SUPPORTS_HIGHRES = 134217728; // 128Mb 1334dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 134a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 135a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 1360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 138bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1405aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 1419f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard private Editor mCurrentEditor = null; 1425aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 1430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 1450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1465300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford private boolean mShowingTinyPlanet = false; 147bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 148860af325f2030a03c526e8551a85230d17df7b15nicolasroard private boolean mShowingVersionsPanel = false; 149860af325f2030a03c526e8551a85230d17df7b15nicolasroard private boolean mShowingInformationPanel = false; 150bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 15192e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 1520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1530ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1540ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1550ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1560ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1570ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 158ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 15955550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 160d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 1613d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 162afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private Uri mOriginalImageUri = null; 163afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private ImagePreset mOriginalPreset = null; 164c7b38f384ce7d4dd8cc472c802d691e490c8e162nicolasroard 165b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui private Uri mSelectedImageUri = null; 166b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 167fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private UserPresetsManager mUserPresetsManager = null; 168fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private UserPresetsAdapter mUserPresetsAdapter = null; 169f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryLooksAdapter = null; 170f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryBordersAdapter = null; 171f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryGeometryAdapter = null; 172f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryFiltersAdapter = null; 173860af325f2030a03c526e8551a85230d17df7b15nicolasroard private CategoryAdapter mCategoryVersionsAdapter = null; 174f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mCurrentPanel = MainPanel.LOOKS; 175860af325f2030a03c526e8551a85230d17df7b15nicolasroard private Vector<FilterUserPresetRepresentation> mVersions = 176860af325f2030a03c526e8551a85230d17df7b15nicolasroard new Vector<FilterUserPresetRepresentation>(); 177860af325f2030a03c526e8551a85230d17df7b15nicolasroard private int mVersionsCounter = 0; 178860af325f2030a03c526e8551a85230d17df7b15nicolasroard 179860af325f2030a03c526e8551a85230d17df7b15nicolasroard private boolean mHandlingSwipeButton = false; 180860af325f2030a03c526e8551a85230d17df7b15nicolasroard private View mHandledSwipeView = null; 181860af325f2030a03c526e8551a85230d17df7b15nicolasroard private float mHandledSwipeViewLastDelta = 0; 1829737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard private float mSwipeStartX = 0; 183860af325f2030a03c526e8551a85230d17df7b15nicolasroard private float mSwipeStartY = 0; 1843a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 18524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private ProcessingService mBoundService; 18624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private boolean mIsBound = false; 18724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 18824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public ProcessingService getProcessingService() { 18924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard return mBoundService; 19024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 19124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 19224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public boolean isSimpleEditAction() { 19324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard return !PhotoPage.ACTION_NEXTGEN_EDIT.equalsIgnoreCase(mAction); 19424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 19524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 19624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private ServiceConnection mConnection = new ServiceConnection() { 197a08fab5958ecd50ada4b7c013af362029c61f117ztenghui @Override 19824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void onServiceConnected(ComponentName className, IBinder service) { 19924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard /* 20024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * This is called when the connection with the service has been 20124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * established, giving us the service object we can use to 20224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * interact with the service. Because we have bound to a explicit 20324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * service that we know is running in our own process, we can 20424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * cast its IBinder to a concrete class and directly access it. 20524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard */ 20624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mBoundService = ((ProcessingService.LocalBinder)service).getService(); 20724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mBoundService.setFiltershowActivity(FilterShowActivity.this); 20824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mBoundService.onStart(); 20924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 21024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 211a08fab5958ecd50ada4b7c013af362029c61f117ztenghui @Override 21224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void onServiceDisconnected(ComponentName className) { 21324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard /* 21424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * This is called when the connection with the service has been 21524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * unexpectedly disconnected -- that is, its process crashed. 21624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * Because it is running in our same process, we should never 21724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * see this happen. 21824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard */ 21924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mBoundService = null; 22024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 22124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard }; 22224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 22324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard void doBindService() { 22424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard /* 22524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * Establish a connection with the service. We use an explicit 22624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * class name because we want a specific service implementation that 22724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * we know will be running in our own process (and thus won't be 22824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * supporting component replacement by other applications). 22924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard */ 23024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard bindService(new Intent(FilterShowActivity.this, ProcessingService.class), 23124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mConnection, Context.BIND_AUTO_CREATE); 23224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mIsBound = true; 23324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 23424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 23524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard void doUnbindService() { 23624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard if (mIsBound) { 23724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard // Detach our existing connection. 23824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard unbindService(mConnection); 23924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mIsBound = false; 24024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 24124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 24224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 24324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private void setupPipeline() { 24424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard doBindService(); 24524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ImageFilter.setActivityForMemoryToasts(this); 246fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager = new UserPresetsManager(this); 247fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsAdapter = new UserPresetsAdapter(this); 24824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 24924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 25024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void updateUIAfterServiceStarted() { 25124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillCategories(); 25224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard loadMainPanel(); 25324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard setDefaultPreset(); 25424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard extractXMPData(); 25524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard processIntent(); 25624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 25724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 2580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 2590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 2600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 2610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 262f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard boolean onlyUsePortrait = getResources().getBoolean(R.bool.only_use_portrait); 263f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (onlyUsePortrait) { 264f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 265f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 26669f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 267f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 268f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk clearGalleryBitmapPool(); 26924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard setupPipeline(); 270f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 27163a7dac01d394523799939596b960cb03321798dJohn Hoford setupMasterImage(); 2723a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 2733a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillEditors(); 2745448bf8095483574649afcc2add7f153670c7450nicolasroard 2753a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 276842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onContentViewChanged(UsageStatistics.COMPONENT_EDITOR, "Main"); 277842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 278842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_LIFECYCLE, UsageStatistics.LIFECYCLE_START); 2793a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2805ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 281f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public boolean isShowingImageStatePanel() { 282f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mShowingImageStatePanel; 283f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 284f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 285f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void loadMainPanel() { 286f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (findViewById(R.id.main_panel_container) == null) { 287f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 288f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 289f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MainPanel panel = new MainPanel(); 290f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 291f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 292f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard transaction.commit(); 293f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 294f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 295f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void loadEditorPanel(FilterRepresentation representation, 29600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard final Editor currentEditor) { 297f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getEditorId() == ImageOnlyEditor.ID) { 298f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard currentEditor.reflectCurrentFilter(); 299f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 300f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 30100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard final int currentId = currentEditor.getID(); 30200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard Runnable showEditor = new Runnable() { 30300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard @Override 30400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard public void run() { 30500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard EditorPanel panel = new EditorPanel(); 30600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard panel.setEditor(currentId); 30700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 30800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.remove(getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG)); 30900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 31000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.commit(); 31100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 31200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard }; 31300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard Fragment main = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 31400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard boolean doAnimation = false; 31500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard if (mShowingImageStatePanel 31600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 31700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard doAnimation = true; 31800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 31900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard if (doAnimation && main != null && main instanceof MainPanel) { 32000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard MainPanel mainPanel = (MainPanel) main; 32100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard View container = mainPanel.getView().findViewById(R.id.category_panel_container); 32200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard View bottom = mainPanel.getView().findViewById(R.id.bottom_panel); 32300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard int panelHeight = container.getHeight() + bottom.getHeight(); 324af59322ac944e6e17aaf718045949a3352016945nicolasroard ViewPropertyAnimator anim = mainPanel.getView().animate(); 325af59322ac944e6e17aaf718045949a3352016945nicolasroard anim.translationY(panelHeight).start(); 326af59322ac944e6e17aaf718045949a3352016945nicolasroard final Handler handler = new Handler(); 327af59322ac944e6e17aaf718045949a3352016945nicolasroard handler.postDelayed(showEditor, anim.getDuration()); 32800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } else { 32900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard showEditor.run(); 33000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 331f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 332f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 3335d1cf1f9c8c6359905988e096b50f07ce326df21John Hoford public void hideInformationPanel() { 334860af325f2030a03c526e8551a85230d17df7b15nicolasroard FrameLayout infoLayout = (FrameLayout) findViewById(R.id.central_panel_container); 335860af325f2030a03c526e8551a85230d17df7b15nicolasroard infoLayout.setVisibility(View.GONE); 336860af325f2030a03c526e8551a85230d17df7b15nicolasroard Fragment fragment = getSupportFragmentManager().findFragmentByTag(InfoPanel.FRAGMENT_TAG); 337860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (fragment != null) { 338860af325f2030a03c526e8551a85230d17df7b15nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 339860af325f2030a03c526e8551a85230d17df7b15nicolasroard transaction.remove(fragment); 340860af325f2030a03c526e8551a85230d17df7b15nicolasroard transaction.commit(); 341860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 342860af325f2030a03c526e8551a85230d17df7b15nicolasroard mShowingInformationPanel = false; 343860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 344860af325f2030a03c526e8551a85230d17df7b15nicolasroard 3455d1cf1f9c8c6359905988e096b50f07ce326df21John Hoford public void toggleInformationPanel() { 346860af325f2030a03c526e8551a85230d17df7b15nicolasroard mShowingInformationPanel = !mShowingInformationPanel; 347860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (!mShowingInformationPanel) { 348860af325f2030a03c526e8551a85230d17df7b15nicolasroard hideInformationPanel(); 349860af325f2030a03c526e8551a85230d17df7b15nicolasroard showDefaultImageView(); 350860af325f2030a03c526e8551a85230d17df7b15nicolasroard return; 351860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 352860af325f2030a03c526e8551a85230d17df7b15nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 353860af325f2030a03c526e8551a85230d17df7b15nicolasroard transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left); 354860af325f2030a03c526e8551a85230d17df7b15nicolasroard FrameLayout infoLayout = (FrameLayout) findViewById(R.id.central_panel_container); 355860af325f2030a03c526e8551a85230d17df7b15nicolasroard infoLayout.setVisibility(View.VISIBLE); 356860af325f2030a03c526e8551a85230d17df7b15nicolasroard mEditorPlaceHolder.hide(); 357860af325f2030a03c526e8551a85230d17df7b15nicolasroard mImageShow.setVisibility(View.GONE); 358860af325f2030a03c526e8551a85230d17df7b15nicolasroard 359860af325f2030a03c526e8551a85230d17df7b15nicolasroard InfoPanel panel = new InfoPanel(); 360860af325f2030a03c526e8551a85230d17df7b15nicolasroard transaction.replace(R.id.central_panel_container, panel, InfoPanel.FRAGMENT_TAG); 361860af325f2030a03c526e8551a85230d17df7b15nicolasroard transaction.commit(); 362860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 363860af325f2030a03c526e8551a85230d17df7b15nicolasroard 3643a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void loadXML() { 3650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 3663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 368786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 369786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 3709f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard actionBar.setBackgroundDrawable(new ColorDrawable( 3719f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard getResources().getColor(R.color.background_screen))); 372786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 373bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 374bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 375786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 376786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 377786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 378786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 379786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 3800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 3820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 3830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3843a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupEditors(); 3855aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 386733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard mEditorPlaceHolder.hide(); 3870c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk mImageShow.bindAsImageLoadListener(); 38892e2341248e99c691f38820503984bc5e2f18811nicolasroard 3896019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard setupStatePanel(); 3906019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard } 3916019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard 39224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void fillCategories() { 39324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillLooks(); 394fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard loadUserPresets(); 39524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillBorders(); 39624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillTools(); 39724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillEffects(); 398860af325f2030a03c526e8551a85230d17df7b15nicolasroard fillVersions(); 39924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 40024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 4016019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard public void setupStatePanel() { 4020c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk MasterImage.getImage().setHistoryManager(mMasterImage.getHistory()); 40338fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard } 40438fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 405860af325f2030a03c526e8551a85230d17df7b15nicolasroard private void fillVersions() { 406860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter = new CategoryAdapter(this); 407860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.setShowAddButton(true); 408860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 409860af325f2030a03c526e8551a85230d17df7b15nicolasroard 410860af325f2030a03c526e8551a85230d17df7b15nicolasroard public void updateVersions() { 411860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.clear(); 412860af325f2030a03c526e8551a85230d17df7b15nicolasroard FilterUserPresetRepresentation originalRep = new FilterUserPresetRepresentation( 413860af325f2030a03c526e8551a85230d17df7b15nicolasroard getString(R.string.filtershow_version_original), new ImagePreset(), -1); 414860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.add( 415860af325f2030a03c526e8551a85230d17df7b15nicolasroard new Action(this, originalRep, Action.FULL_VIEW)); 416860af325f2030a03c526e8551a85230d17df7b15nicolasroard ImagePreset current = new ImagePreset(MasterImage.getImage().getPreset()); 417860af325f2030a03c526e8551a85230d17df7b15nicolasroard FilterUserPresetRepresentation currentRep = new FilterUserPresetRepresentation( 418860af325f2030a03c526e8551a85230d17df7b15nicolasroard getString(R.string.filtershow_version_current), current, -1); 419860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.add( 420860af325f2030a03c526e8551a85230d17df7b15nicolasroard new Action(this, currentRep, Action.FULL_VIEW)); 42155a0279ee420c649606edd7815403d3ca1820c07nicolasroard if (mVersions.size() > 0) { 42255a0279ee420c649606edd7815403d3ca1820c07nicolasroard mCategoryVersionsAdapter.add(new Action(this, Action.SPACER)); 42355a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 424860af325f2030a03c526e8551a85230d17df7b15nicolasroard for (FilterUserPresetRepresentation rep : mVersions) { 425860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.add( 42655a0279ee420c649606edd7815403d3ca1820c07nicolasroard new Action(this, rep, Action.FULL_VIEW, true)); 427860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 428860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.notifyDataSetInvalidated(); 429860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 430860af325f2030a03c526e8551a85230d17df7b15nicolasroard 431860af325f2030a03c526e8551a85230d17df7b15nicolasroard public void addCurrentVersion() { 432860af325f2030a03c526e8551a85230d17df7b15nicolasroard ImagePreset current = new ImagePreset(MasterImage.getImage().getPreset()); 433860af325f2030a03c526e8551a85230d17df7b15nicolasroard mVersionsCounter++; 434860af325f2030a03c526e8551a85230d17df7b15nicolasroard FilterUserPresetRepresentation rep = new FilterUserPresetRepresentation( 435860af325f2030a03c526e8551a85230d17df7b15nicolasroard "" + mVersionsCounter, current, -1); 436860af325f2030a03c526e8551a85230d17df7b15nicolasroard mVersions.add(rep); 437860af325f2030a03c526e8551a85230d17df7b15nicolasroard updateVersions(); 438860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 439860af325f2030a03c526e8551a85230d17df7b15nicolasroard 440860af325f2030a03c526e8551a85230d17df7b15nicolasroard public void removeVersion(Action action) { 441860af325f2030a03c526e8551a85230d17df7b15nicolasroard mVersions.remove(action.getRepresentation()); 442860af325f2030a03c526e8551a85230d17df7b15nicolasroard updateVersions(); 443860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 444860af325f2030a03c526e8551a85230d17df7b15nicolasroard 4450a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard public void removeLook(Action action) { 4465af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard FilterUserPresetRepresentation rep = 4475af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard (FilterUserPresetRepresentation) action.getRepresentation(); 4480a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard if (rep == null) { 4490a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard return; 4500a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard } 4510a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard mUserPresetsManager.delete(rep.getId()); 4525af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard updateUserPresetsFromManager(); 4530a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard } 4540a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard 45524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private void fillEffects() { 4563a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 45724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getEffects(); 458f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter = new CategoryAdapter(this); 459f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : filtersRepresentations) { 460f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getTextId() != 0) { 461f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.setName(getString(representation.getTextId())); 462f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 463f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.add(new Action(this, representation)); 464f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 4653a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 4663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 46724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private void fillTools() { 46838fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 46924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getTools(); 470f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter = new CategoryAdapter(this); 471f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : filtersRepresentations) { 472f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter.add(new Action(this, representation)); 473f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 4743a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 4753a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 4763a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void processIntent() { 4770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 478a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 479a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 480a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 481a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 482ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mAction = intent.getAction(); 483b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui mSelectedImageUri = intent.getData(); 484b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui Uri loadUri = mSelectedImageUri; 485afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (mOriginalImageUri != null) { 486b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui loadUri = mOriginalImageUri; 487afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 488b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui if (loadUri != null) { 489b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui startLoadBitmap(loadUri); 4900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 4910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 4920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4953a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setupEditors() { 4963a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 4973a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorManager.addEditors(mEditorPlaceHolder); 4983a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setOldViews(mImageViews); 4993a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5003a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5013a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillEditors() { 502bc8e077e77cf6f0dda8efd8318b8a8e7eda16f61John Hoford mEditorPlaceHolder.addEditor(new EditorChanSat()); 503e162b032fe387eabbd69d367dae6fe7003e850a1John Hoford mEditorPlaceHolder.addEditor(new EditorGrad()); 5043a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorDraw()); 50549798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford mEditorPlaceHolder.addEditor(new EditorColorBorder()); 5063a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new BasicEditor()); 5073a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 5083a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); 5093a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRedEye()); 5103a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorCrop()); 511b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk mEditorPlaceHolder.addEditor(new EditorMirror()); 5123a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRotate()); 5133a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorStraighten()); 5143a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5153a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5163a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setDefaultValues() { 5173a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Resources res = getResources(); 5183a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5193a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard // TODO: get those values from XML. 5203a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 5213a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 5223a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 5233a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5243a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 5253a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 5263a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 5273a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 5283a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5293a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 530d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 53100914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 532733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 533733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.INVISIBLE); 534733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.VISIBLE); 535f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mShowingTinyPlanet = false; 536f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mLoadBitmapTask = new LoadBitmapTask(); 537d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 538d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 539d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 540f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private void fillBorders() { 54124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 54224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ArrayList<FilterRepresentation> borders = filtersManager.getBorders(); 5434c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford 544f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk for (int i = 0; i < borders.size(); i++) { 54524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard FilterRepresentation filter = borders.get(i); 5463cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk filter.setName(getString(R.string.borders)); 547f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk if (i == 0) { 5483cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk filter.setName(getString(R.string.none)); 5499090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 550f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 551f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 552f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryBordersAdapter = new CategoryAdapter(this); 553f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : borders) { 554f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getTextId() != 0) { 555f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.setName(getString(representation.getTextId())); 5569090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 55700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard mCategoryBordersAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 5589090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 5599090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 5609090141f56b4e2000704d0c4a778d3a819821726nicolasroard 561fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard public UserPresetsAdapter getUserPresetsAdapter() { 562fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard return mUserPresetsAdapter; 563fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 564fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 565f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryLooksAdapter() { 566f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryLooksAdapter; 567f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 568f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 569f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryBordersAdapter() { 570f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryBordersAdapter; 571f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 572f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 573f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryGeometryAdapter() { 574f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryGeometryAdapter; 575f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 576f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 577f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryFiltersAdapter() { 578f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryFiltersAdapter; 579f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 580f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 581860af325f2030a03c526e8551a85230d17df7b15nicolasroard public CategoryAdapter getCategoryVersionsAdapter() { 582860af325f2030a03c526e8551a85230d17df7b15nicolasroard return mCategoryVersionsAdapter; 583860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 584860af325f2030a03c526e8551a85230d17df7b15nicolasroard 585f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void removeFilterRepresentation(FilterRepresentation filterRepresentation) { 586f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation == null) { 587f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 588f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 589f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset oldPreset = MasterImage.getImage().getPreset(); 590f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 591f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.removeFilter(filterRepresentation); 592ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(copy, copy.getLastRepresentation(), true); 593f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 594f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FilterRepresentation lastRepresentation = copy.getLastRepresentation(); 595f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(lastRepresentation); 596f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 597f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 598f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 599f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void useFilterRepresentation(FilterRepresentation filterRepresentation) { 600f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation == null) { 601f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 602f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 60357bd092bd5757576f07341135272ed1c3df729ffnicolasroard if (!(filterRepresentation instanceof FilterRotateRepresentation) 60457bd092bd5757576f07341135272ed1c3df729ffnicolasroard && !(filterRepresentation instanceof FilterMirrorRepresentation) 60557bd092bd5757576f07341135272ed1c3df729ffnicolasroard && MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 606f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 607f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 6089f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard if (filterRepresentation instanceof FilterUserPresetRepresentation 6099f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard || filterRepresentation instanceof FilterRotateRepresentation 6109f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard || filterRepresentation instanceof FilterMirrorRepresentation) { 6119f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard MasterImage.getImage().onNewLook(filterRepresentation); 6129f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard } 613f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset oldPreset = MasterImage.getImage().getPreset(); 614f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 615f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FilterRepresentation representation = copy.getRepresentation(filterRepresentation); 616f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation == null) { 6173cd6fc8e632e406628b5977ee47c191523552500nicolasroard filterRepresentation = filterRepresentation.copy(); 618f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.addFilter(filterRepresentation); 619f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else { 620c9ca6d1eb85a71b7667f4c25d879e78cce16ac4cztenghui if (filterRepresentation.allowsSingleInstanceOnly()) { 621d2e9ea0ce1949e192e80ce806e702606694440acztenghui // Don't just update the filter representation. Centralize the 622d2e9ea0ce1949e192e80ce806e702606694440acztenghui // logic in the addFilter(), such that we can keep "None" as 623d2e9ea0ce1949e192e80ce806e702606694440acztenghui // null. 62420667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard if (!representation.equals(filterRepresentation)) { 62520667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard // Only do this if the filter isn't the same 62620667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard // (state panel clicks can lead us here) 62720667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard copy.removeFilter(representation); 62820667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard copy.addFilter(filterRepresentation); 62920667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard } 6309090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 6319090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 632ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(copy, filterRepresentation, true); 633f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(filterRepresentation); 634f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 635f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 636f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void showRepresentation(FilterRepresentation representation) { 637f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford if (representation == null) { 638f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford return; 639f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford } 640e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard 64157bd092bd5757576f07341135272ed1c3df729ffnicolasroard if (representation instanceof FilterRotateRepresentation) { 64257bd092bd5757576f07341135272ed1c3df729ffnicolasroard FilterRotateRepresentation r = (FilterRotateRepresentation) representation; 64357bd092bd5757576f07341135272ed1c3df729ffnicolasroard r.rotateCW(); 64457bd092bd5757576f07341135272ed1c3df729ffnicolasroard } 64557bd092bd5757576f07341135272ed1c3df729ffnicolasroard if (representation instanceof FilterMirrorRepresentation) { 64657bd092bd5757576f07341135272ed1c3df729ffnicolasroard FilterMirrorRepresentation r = (FilterMirrorRepresentation) representation; 64757bd092bd5757576f07341135272ed1c3df729ffnicolasroard r.cycle(); 64857bd092bd5757576f07341135272ed1c3df729ffnicolasroard } 649b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk useFilterRepresentation(representation); 650f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 651f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard // show representation 6529f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard if (mCurrentEditor != null) { 6539f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard mCurrentEditor.detach(); 6549f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard } 6559f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId()); 656f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadEditorPanel(representation, mCurrentEditor); 657860af325f2030a03c526e8551a85230d17df7b15nicolasroard hideInformationPanel(); 658f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 659f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 660f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public Editor getEditor(int editorID) { 661f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mEditorPlaceHolder.getEditor(editorID); 662f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 663f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 664f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void setCurrentPanel(int currentPanel) { 665f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCurrentPanel = currentPanel; 666f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 667f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 668f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public int getCurrentPanel() { 669f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCurrentPanel; 6709090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 6719090141f56b4e2000704d0c4a778d3a819821726nicolasroard 672acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard public void updateCategories() { 673acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard ImagePreset preset = mMasterImage.getPreset(); 674acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard mCategoryLooksAdapter.reflectImagePreset(preset); 675acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard mCategoryBordersAdapter.reflectImagePreset(preset); 676acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard } 677acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard 678e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard public View getMainStatePanelContainer(int id) { 679e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard return findViewById(id); 680e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard } 681e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard 682be84355fddceb9690eef752707c42457ea251e77nicolasroard private class LoadHighresBitmapTask extends AsyncTask<Void, Void, Boolean> { 683be84355fddceb9690eef752707c42457ea251e77nicolasroard @Override 684be84355fddceb9690eef752707c42457ea251e77nicolasroard protected Boolean doInBackground(Void... params) { 6850c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk MasterImage master = MasterImage.getImage(); 6860c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Rect originalBounds = master.getOriginalBounds(); 6870c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (master.supportsHighRes()) { 6880c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk int highresPreviewSize = master.getOriginalBitmapLarge().getWidth() * 2; 6890c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (highresPreviewSize > originalBounds.width()) { 6900c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk highresPreviewSize = originalBounds.width(); 6910c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk } 69247886ac74f2874633d4c1284b91c33117f056581Ruben Brunk Rect bounds = new Rect(); 69347886ac74f2874633d4c1284b91c33117f056581Ruben Brunk Bitmap originalHires = ImageLoader.loadOrientedConstrainedBitmap(master.getUri(), 69447886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.getActivity(), highresPreviewSize, 69547886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.getOrientation(), bounds); 69647886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.setOriginalBounds(bounds); 6970c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk master.setOriginalBitmapHighres(originalHires); 698db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mBoundService.setOriginalBitmapHighres(originalHires); 6990c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk master.warnListeners(); 7000c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk } 701be84355fddceb9690eef752707c42457ea251e77nicolasroard return true; 702be84355fddceb9690eef752707c42457ea251e77nicolasroard } 703be84355fddceb9690eef752707c42457ea251e77nicolasroard 704be84355fddceb9690eef752707c42457ea251e77nicolasroard @Override 705be84355fddceb9690eef752707c42457ea251e77nicolasroard protected void onPostExecute(Boolean result) { 7060c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Bitmap highresBitmap = MasterImage.getImage().getOriginalBitmapHighres(); 707be84355fddceb9690eef752707c42457ea251e77nicolasroard if (highresBitmap != null) { 7080c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk float highResPreviewScale = (float) highresBitmap.getWidth() 7090c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk / (float) MasterImage.getImage().getOriginalBounds().width(); 710db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mBoundService.setHighresPreviewScaleFactor(highResPreviewScale); 711be84355fddceb9690eef752707c42457ea251e77nicolasroard } 712be84355fddceb9690eef752707c42457ea251e77nicolasroard } 713be84355fddceb9690eef752707c42457ea251e77nicolasroard } 714be84355fddceb9690eef752707c42457ea251e77nicolasroard 7158965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 716d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 7173d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 718f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public LoadBitmapTask() { 719d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 7203d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 7213d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 7223d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 723d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 7240c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (!MasterImage.getImage().loadBitmap(params[0], mBitmapSize)) { 7258965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 7268965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 7270c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk publishProgress(ImageLoader.queryLightCycle360(MasterImage.getImage().getActivity())); 7288965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 7293d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 7303d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 7313d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 7328965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 73300914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 7346416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 7358965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 7366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 7378965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 7385300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford mShowingTinyPlanet = true; 7398965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 74000914f56c3390caa224b1c9fc07624665de40113John Reck } 74100914f56c3390caa224b1c9fc07624665de40113John Reck 74200914f56c3390caa224b1c9fc07624665de40113John Reck @Override 7433d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 74469f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 7453d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 7463d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 7473d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 748588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 7498965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 750441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford if (!mOriginalImageUri.equals(mSelectedImageUri)) { 751441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford mOriginalImageUri = mSelectedImageUri; 752441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford mOriginalPreset = null; 753441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford Toast.makeText(FilterShowActivity.this, 754441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford R.string.cannot_edit_original, Toast.LENGTH_SHORT).show(); 755441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford startLoadBitmap(mOriginalImageUri); 756441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford } else { 757441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford cannotLoadImage(); 758441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford } 759a08fab5958ecd50ada4b7c013af362029c61f117ztenghui return; 7603d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 7618965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 76252fa110135563740ebc27326afab4326bbb9b9f5John Hoford if (null == CachingPipeline.getRenderScriptContext()){ 76352fa110135563740ebc27326afab4326bbb9b9f5John Hoford Log.v(LOGTAG,"RenderScript context destroyed during load"); 76452fa110135563740ebc27326afab4326bbb9b9f5John Hoford return; 76552fa110135563740ebc27326afab4326bbb9b9f5John Hoford } 766733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View loading = findViewById(R.id.loading); 767733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.GONE); 768733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 769733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.VISIBLE); 770733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 7710c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Bitmap largeBitmap = MasterImage.getImage().getOriginalBitmapLarge(); 772db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mBoundService.setOriginalBitmap(largeBitmap); 773d33fe6fd37d8c506ab0e47139ef0f77746a275b8nicolasroard MasterImage.getImage().resetGeometryImages(true); 774db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 7750c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk float previewScale = (float) largeBitmap.getWidth() 7760c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk / (float) MasterImage.getImage().getOriginalBounds().width(); 777db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mBoundService.setPreviewScaleFactor(previewScale); 778f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (!mShowingTinyPlanet) { 779f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.removeTinyPlanet(); 780f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 781f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.imageLoaded(); 782f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryBordersAdapter.imageLoaded(); 783f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter.imageLoaded(); 784f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.imageLoaded(); 785d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 786ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 787afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (mOriginalPreset != null) { 788d2e9ea0ce1949e192e80ce806e702606694440acztenghui MasterImage.getImage().setLoadedPreset(mOriginalPreset); 789ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(mOriginalPreset, 790ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard mOriginalPreset.getLastRepresentation(), true); 791afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalPreset = null; 792afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 793c7b38f384ce7d4dd8cc472c802d691e490c8e162nicolasroard 794f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (mAction == TINY_PLANET_ACTION) { 795f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard showRepresentation(mCategoryFiltersAdapter.getTinyPlanet()); 796ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } 797be84355fddceb9690eef752707c42457ea251e77nicolasroard LoadHighresBitmapTask highresLoad = new LoadHighresBitmapTask(); 798be84355fddceb9690eef752707c42457ea251e77nicolasroard highresLoad.execute(); 7993d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 8003d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 8013d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 8023d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 8033d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 804f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk private void clearGalleryBitmapPool() { 805f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk (new AsyncTask<Void, Void, Void>() { 806f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk @Override 807f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk protected Void doInBackground(Void... params) { 808f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk // Free memory held in Gallery's Bitmap pool. May be O(n) for n bitmaps. 809f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk GalleryBitmapPool.getInstance().clear(); 810f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk return null; 811f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 812f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk }).execute(); 813f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 814f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 8153d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 8163d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 817d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 818d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 8193d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 820fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager.close(); 82124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard doUnbindService(); 8223d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 8233d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 8243d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 82547886ac74f2874633d4c1284b91c33117f056581Ruben Brunk // TODO: find a more robust way of handling image size selection 82647886ac74f2874633d4c1284b91c33117f056581Ruben Brunk // for high screen densities. 8270f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 82847886ac74f2874633d4c1284b91c33117f056581Ruben Brunk DisplayMetrics outMetrics = new DisplayMetrics(); 82947886ac74f2874633d4c1284b91c33117f056581Ruben Brunk getWindowManager().getDefaultDisplay().getMetrics(outMetrics); 830a08fab5958ecd50ada4b7c013af362029c61f117ztenghui return Math.max(outMetrics.heightPixels, outMetrics.widthPixels); 831fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 832fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 8330addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 834ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 835ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 836ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 837ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 838ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 839ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 840ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 841ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 842ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 8430addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 8440addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 8450addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 8460addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 8470addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 8480addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 8490addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 850ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 851ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 852ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 853ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 854ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 855ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 85608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 85708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 858ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 859ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 860ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 8610ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 8620ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 8630ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 8640ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 8650ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 8660ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 8670ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 8680ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 8690ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 8700ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 871ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 8720ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 8730ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 8740ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 8750ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 8760ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 87792e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 87892e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 8790ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 8800ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 8810ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 8820ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 8830ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 8840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 8850ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 8860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 8870addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 8880ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 8890ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 8900ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 8910ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 8920ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 8930ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 8940ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 8950ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 8960ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 89724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mSharedOutputFile = SaveImage.getNewFile(this, MasterImage.getImage().getUri()); 8980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 8990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 9000ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 9010ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 9020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 9030ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 9049594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 9059594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 9069594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 907bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 908bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 909bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 9109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 911bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 9129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9130ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 9140ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 9150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 9160ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 91723e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 91823e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 91923e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 92023e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 92163a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 9229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 9239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 92592e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9266e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 9276e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 9286e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 9296e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 9306e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 9316e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 9326e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 9336e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 9346e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 9356e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 9366e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 9376e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 9386e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 9396e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 9406e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 9416e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 9429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 9439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 9449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 9456a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 9469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 94763a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 948a7a6a3a5efaf62cdd5d562a9141678671952d27dJohn Hoford backToMain(); 9499594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 950842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 951842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_BUTTON_PRESS, "Undo"); 9529594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 9539594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9549594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 9556a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 9569594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 95763a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 9589594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 959842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 960842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_BUTTON_PRESS, "Redo"); 9619594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 9629594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 963f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 964f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 965842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 966842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_BUTTON_PRESS, "ResetHistory"); 967f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 968f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 969bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 970bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 971842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR, 972842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu UsageStatistics.CATEGORY_BUTTON_PRESS, 973842985c1561b6e0447c71ebb18298cf5cb62fce2Bobby Georgescu mShowingImageStatePanel ? "ShowPanel" : "HidePanel"); 974bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 975bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 976568b8d8bade4aac4bc598dff9b76ced159c533bfRuben Brunk case R.id.exportFlattenButton: { 977077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk showExportOptionsDialog(); 978568b8d8bade4aac4bc598dff9b76ced159c533bfRuben Brunk return true; 979568b8d8bade4aac4bc598dff9b76ced159c533bfRuben Brunk } 9809594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 9819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 9829594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 9839594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 984fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard case R.id.manageUserPresets: { 985fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard manageUserPresets(); 986fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard return true; 987fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 988860af325f2030a03c526e8551a85230d17df7b15nicolasroard case R.id.showInfoPanel: { 9895d1cf1f9c8c6359905988e096b50f07ce326df21John Hoford toggleInformationPanel(); 990860af325f2030a03c526e8551a85230d17df7b15nicolasroard return true; 991860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 9929c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard case R.id.printButton: { 9939c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard print(); 9949c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard return true; 9959c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard } 9969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 9989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 10009c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard public void print() { 10019c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard Bitmap bitmap = MasterImage.getImage().getHighresImage(); 10029c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard PrintJob.printBitmap(this, "ImagePrint", bitmap); 10039c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard } 10049c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard 100555a0279ee420c649606edd7815403d3ca1820c07nicolasroard public void addNewPreset() { 100655a0279ee420c649606edd7815403d3ca1820c07nicolasroard DialogFragment dialog = new PresetManagementDialog(); 100755a0279ee420c649606edd7815403d3ca1820c07nicolasroard dialog.show(getSupportFragmentManager(), "NoticeDialogFragment"); 100855a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 100955a0279ee420c649606edd7815403d3ca1820c07nicolasroard 1010fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private void manageUserPresets() { 1011fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard DialogFragment dialog = new PresetManagementDialog(); 1012fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard dialog.show(getSupportFragmentManager(), "NoticeDialogFragment"); 1013fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1014fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1015077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk private void showExportOptionsDialog() { 1016077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk DialogFragment dialog = new ExportDialog(); 1017077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk dialog.show(getSupportFragmentManager(), "ExportDialogFragment"); 1018077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk } 1019077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk 1020fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard public void updateUserPresetsFromAdapter(UserPresetsAdapter adapter) { 1021fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard ArrayList<FilterUserPresetRepresentation> representations = 1022fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard adapter.getDeletedRepresentations(); 1023fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard for (FilterUserPresetRepresentation representation : representations) { 1024fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard deletePreset(representation.getId()); 1025fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1026fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard ArrayList<FilterUserPresetRepresentation> changedRepresentations = 1027fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard adapter.getChangedRepresentations(); 1028fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard for (FilterUserPresetRepresentation representation : changedRepresentations) { 1029fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard updatePreset(representation); 1030fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1031fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard adapter.clearDeletedRepresentations(); 1032fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard adapter.clearChangedRepresentations(); 1033fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard loadUserPresets(); 1034fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1035fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1036fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard public void loadUserPresets() { 1037fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager.load(); 10385af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard updateUserPresetsFromManager(); 1039fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1040fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1041fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard public void updateUserPresetsFromManager() { 1042fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard ArrayList<FilterUserPresetRepresentation> presets = mUserPresetsManager.getRepresentations(); 1043fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard if (presets == null) { 1044fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard return; 1045fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1046fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard if (mCategoryLooksAdapter != null) { 1047fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard fillLooks(); 1048fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 104955a0279ee420c649606edd7815403d3ca1820c07nicolasroard if (presets.size() > 0) { 105055a0279ee420c649606edd7815403d3ca1820c07nicolasroard mCategoryLooksAdapter.add(new Action(this, Action.SPACER)); 105155a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 1052fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsAdapter.clear(); 1053fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard for (int i = 0; i < presets.size(); i++) { 1054fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard FilterUserPresetRepresentation representation = presets.get(i); 1055fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mCategoryLooksAdapter.add( 10560a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard new Action(this, representation, Action.FULL_VIEW, true)); 1057fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 1058fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 105955a0279ee420c649606edd7815403d3ca1820c07nicolasroard if (presets.size() > 0) { 106055a0279ee420c649606edd7815403d3ca1820c07nicolasroard mCategoryLooksAdapter.add(new Action(this, Action.ADD_ACTION)); 106155a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 10625af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard mCategoryLooksAdapter.notifyDataSetChanged(); 1063fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mCategoryLooksAdapter.notifyDataSetInvalidated(); 1064fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1065fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 10660a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard public void saveCurrentImagePreset(String name) { 10670a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard mUserPresetsManager.save(MasterImage.getImage().getPreset(), name); 1068fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1069fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1070fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private void deletePreset(int id) { 1071fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager.delete(id); 1072fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1073fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1074fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private void updatePreset(FilterUserPresetRepresentation representation) { 1075fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager.update(representation); 1076fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1077fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1078bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 1079545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui if (mSaveButton != null) { 1080bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 1081545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui } 1082bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 1083bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 108424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private void fillLooks() { 108524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 108624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getLooks(); 1087f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 10881a1cb07982f574a59cd84b0501770da97accad89nicolasroard mCategoryLooksAdapter = new CategoryAdapter(this); 1089f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard int verticalItemHeight = (int) getResources().getDimension(R.dimen.action_item_height); 1090f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.setItemHeight(verticalItemHeight); 1091f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 1092f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 1093f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard } 109455a0279ee420c649606edd7815403d3ca1820c07nicolasroard if (mUserPresetsManager.getRepresentations() == null 109555a0279ee420c649606edd7815403d3ca1820c07nicolasroard || mUserPresetsManager.getRepresentations().size() == 0) { 109655a0279ee420c649606edd7815403d3ca1820c07nicolasroard mCategoryLooksAdapter.add(new Action(this, Action.ADD_ACTION)); 109755a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 10985af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard 10995af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 11005af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard if (panel != null) { 11015af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard if (panel instanceof MainPanel) { 11025af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard MainPanel mainPanel = (MainPanel) panel; 11035af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard mainPanel.loadCategoryLookPanel(true); 11045af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard } 11055af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard } 11063a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 11070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11083a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard public void setDefaultPreset() { 11090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 1110ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard ImagePreset preset = new ImagePreset(); // empty 1111ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard mMasterImage.setPreset(preset, preset.getLastRepresentation(), true); 11120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 11150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 111692e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 11170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 11190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 11208537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 11210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 11250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 11260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 11270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11285b85b092af404effd32aa513f9c45a0232d7ae81nicolasroard mEditorPlaceHolder.hide(); 11290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 1132bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 1133bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 1134f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void toggleImageStatePanel() { 1135fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidateOptionsMenu(); 1136f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mShowingImageStatePanel = !mShowingImageStatePanel; 1137f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 1138f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (panel != null) { 1139f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (panel instanceof EditorPanel) { 1140f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard EditorPanel editorPanel = (EditorPanel) panel; 1141f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard editorPanel.showImageStatePanel(mShowingImageStatePanel); 1142f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else if (panel instanceof MainPanel) { 1143f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MainPanel mainPanel = (MainPanel) panel; 1144f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mainPanel.showImageStatePanel(mShowingImageStatePanel); 1145f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 1146bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 1147bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 1148bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 1149860af325f2030a03c526e8551a85230d17df7b15nicolasroard public void toggleVersionsPanel() { 1150860af325f2030a03c526e8551a85230d17df7b15nicolasroard mShowingVersionsPanel = !mShowingVersionsPanel; 1151860af325f2030a03c526e8551a85230d17df7b15nicolasroard Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 1152860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (panel != null && panel instanceof MainPanel) { 1153860af325f2030a03c526e8551a85230d17df7b15nicolasroard MainPanel mainPanel = (MainPanel) panel; 1154860af325f2030a03c526e8551a85230d17df7b15nicolasroard mainPanel.loadCategoryVersionsPanel(); 1155860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1156860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1157860af325f2030a03c526e8551a85230d17df7b15nicolasroard 1158a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 1159a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 1160a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 1161a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 11623a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 11633a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 1164b9b95fb792c2b0f0b1ecbbcb30713b345475b332nicolasroard fillCategories(); 1165f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 1166f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 1167f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford // mLoadBitmapTask==null implies you have looked at the intent 1168f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford if (!mShowingTinyPlanet && (mLoadBitmapTask == null)) { 1169f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.removeTinyPlanet(); 11705300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford } 11713a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard final View loading = findViewById(R.id.loading); 11723a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loading.setVisibility(View.GONE); 1173a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 1174a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 117563a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 11763a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 1177ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard HistoryManager historyManager = new HistoryManager(); 1178ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard StateAdapter imageStateAdapter = new StateAdapter(this, 0); 1179588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage.reset(); 1180588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mMasterImage = MasterImage.getImage(); 1181ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard mMasterImage.setHistoryManager(historyManager); 1182ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard mMasterImage.setStateAdapter(imageStateAdapter); 118363a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 11844dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 11854dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard if (Runtime.getRuntime().maxMemory() > LIMIT_SUPPORTS_HIGHRES) { 11864dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(true); 11874dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } else { 11884dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(false); 11894dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } 119063a7dac01d394523799939596b960cb03321798dJohn Hoford } 119163a7dac01d394523799939596b960cb03321798dJohn Hoford 11922e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 11936a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 11949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 1195ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard HistoryItem historyItem = adapter.getItem(0); 1196ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard ImagePreset original = new ImagePreset(historyItem.getImagePreset()); 1197ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard mMasterImage.setPreset(original, historyItem.getFilterRepresentation(), true); 11989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 1199be9c8105b431de765f5811bfd170c899d1c8d3b3John Reck backToMain(); 12000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1202f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void showDefaultImageView() { 1203860af325f2030a03c526e8551a85230d17df7b15nicolasroard hideInformationPanel(); 1204f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mEditorPlaceHolder.hide(); 1205f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mImageShow.setVisibility(View.VISIBLE); 1206f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilter(null); 1207f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(null); 1208f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 1209f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 1210f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void backToMain() { 1211f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 1212f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (currentPanel instanceof MainPanel) { 1213f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 1214f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 1215f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 1216f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard showDefaultImageView(); 1217f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 1218f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 121975608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 122075608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 1221f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 1222f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (currentPanel instanceof MainPanel) { 1223f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (!mImageShow.hasModifications()) { 1224a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 1225a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } else { 1226a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk AlertDialog.Builder builder = new AlertDialog.Builder(this); 1227a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setMessage(R.string.unsaved).setTitle(R.string.save_before_exit); 1228a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setPositiveButton(R.string.save_and_exit, new DialogInterface.OnClickListener() { 1229b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui @Override 1230a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 1231a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk saveImage(); 1232a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 1233a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 1234e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() { 1235b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui @Override 1236a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 1237a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 1238a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 1239a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 1240e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.show(); 1241a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 1242f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else { 1243f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard backToMain(); 124475608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 124575608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 1246e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 1247e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 1248a2c4bda1ed7b44085516b2e8f140637e4691bab1Ruben Brunk Toast.makeText(this, R.string.cannot_load_image, Toast.LENGTH_SHORT).show(); 1249e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 1250e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 1251e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 12520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 12530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 12550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 12560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 12570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 12580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 12610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 12620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 126363a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 12640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 12650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 12680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 12690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 12700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 12710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 12720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 12730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 127592e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 12760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 12770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 12780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 12790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 1280d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 12810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12856416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 12860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 1287d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk if (mImageShow.hasModifications()) { 1288d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk // Get the name of the album, to which the image will be saved 128924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard File saveDir = SaveImage.getFinalSaveDirectory(this, mSelectedImageUri); 1290d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 1291d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 1292d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk showSavingProgress(albumName); 1293d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk mImageShow.saveImage(this, null); 1294d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk } else { 12956416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 12966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 12976416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 12986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1299a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 13006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 1301d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk hideSavingProgress(); 130252fa110135563740ebc27326afab4326bbb9b9f5John Hoford if (mLoadBitmapTask != null) { 130352fa110135563740ebc27326afab4326bbb9b9f5John Hoford mLoadBitmapTask.cancel(false); 130452fa110135563740ebc27326afab4326bbb9b9f5John Hoford } 13056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 13060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 13070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1308afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private void extractXMPData() { 1309afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford XMresults res = XmpPresets.extractXMPData( 1310afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford getBaseContext(), mMasterImage, getIntent().getData()); 1311afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (res == null) 1312afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford return; 1313afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford 1314afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalImageUri = res.originalimage; 1315afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalPreset = res.preset; 1316afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 1317b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 1318b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui public Uri getSelectedImageUri() { 1319b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui return mSelectedImageUri; 1320b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui } 1321b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 13229737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard public void setHandlesSwipeForView(View view, float startX, float startY) { 1323860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (view != null) { 1324860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandlingSwipeButton = true; 1325860af325f2030a03c526e8551a85230d17df7b15nicolasroard } else { 1326860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandlingSwipeButton = false; 1327860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1328860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeView = view; 1329860af325f2030a03c526e8551a85230d17df7b15nicolasroard int[] location = new int[2]; 1330860af325f2030a03c526e8551a85230d17df7b15nicolasroard view.getLocationInWindow(location); 13319737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard mSwipeStartX = location[0] + startX; 1332860af325f2030a03c526e8551a85230d17df7b15nicolasroard mSwipeStartY = location[1] + startY; 1333860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1334860af325f2030a03c526e8551a85230d17df7b15nicolasroard 1335860af325f2030a03c526e8551a85230d17df7b15nicolasroard public boolean dispatchTouchEvent (MotionEvent ev) { 1336860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (mHandlingSwipeButton) { 13379737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard int direction = CategoryView.HORIZONTAL; 13389737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard if (mHandledSwipeView instanceof CategoryView) { 13399737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard direction = ((CategoryView) mHandledSwipeView).getOrientation(); 13409737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard } 1341860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (ev.getActionMasked() == MotionEvent.ACTION_MOVE) { 1342860af325f2030a03c526e8551a85230d17df7b15nicolasroard float delta = ev.getY() - mSwipeStartY; 13439737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard float distance = mHandledSwipeView.getHeight(); 13449737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard if (direction == CategoryView.VERTICAL) { 13459737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard delta = ev.getX() - mSwipeStartX; 13469737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard mHandledSwipeView.setTranslationX(delta); 13479737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard distance = mHandledSwipeView.getWidth(); 13489737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard } else { 13499737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard mHandledSwipeView.setTranslationY(delta); 13509737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard } 1351860af325f2030a03c526e8551a85230d17df7b15nicolasroard delta = Math.abs(delta); 13529737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard float transparency = Math.min(1, delta / distance); 1353860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeView.setAlpha(1.f - transparency); 1354860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeViewLastDelta = delta; 1355860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1356860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (ev.getActionMasked() == MotionEvent.ACTION_CANCEL 1357860af325f2030a03c526e8551a85230d17df7b15nicolasroard || ev.getActionMasked() == MotionEvent.ACTION_UP) { 13589737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard mHandledSwipeView.setTranslationX(0); 1359860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeView.setTranslationY(0); 1360860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeView.setAlpha(1.f); 1361860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandlingSwipeButton = false; 13629737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard float distance = mHandledSwipeView.getHeight(); 13639737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard if (direction == CategoryView.VERTICAL) { 13649737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard distance = mHandledSwipeView.getWidth(); 13659737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard } 13669737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard if (mHandledSwipeViewLastDelta > distance) { 1367860af325f2030a03c526e8551a85230d17df7b15nicolasroard ((SwipableView) mHandledSwipeView).delete(); 1368860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1369860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1370860af325f2030a03c526e8551a85230d17df7b15nicolasroard return true; 1371860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1372860af325f2030a03c526e8551a85230d17df7b15nicolasroard return super.dispatchTouchEvent(ev); 1373860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 13749f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard 13759f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard public void startTouchAnimation(View target, float x, float y) { 13769f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard final CategorySelected hint = 13779f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard (CategorySelected) findViewById(R.id.categorySelectedIndicator); 13789f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard int location[] = new int[2]; 13799f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard target.getLocationOnScreen(location); 13809f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard int locationHint[] = new int[2]; 13819f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard ((View)hint.getParent()).getLocationOnScreen(locationHint); 13829f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard int dx = (int) (x - (hint.getWidth())/2); 13839f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard int dy = (int) (y - (hint.getHeight())/2); 13849f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setTranslationX(location[0] - locationHint[0] + dx); 13859f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setTranslationY(location[1] - locationHint[1] + dy); 13869f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setVisibility(View.VISIBLE); 13879f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.animate().scaleX(2).scaleY(2).alpha(0).withEndAction(new Runnable() { 13889f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard @Override 13899f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard public void run() { 13909f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setVisibility(View.INVISIBLE); 13919f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setScaleX(1); 13929f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setScaleY(1); 13939f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setAlpha(1); 13949f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard } 13959f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard }); 13969f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard } 13970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1398