FilterShowActivity.java revision 64fc2ed005e2f1dc9ed0b34481c46a370c244b86
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; 323759b2d6670df1e645f630d18b2387c458fdfcc1John Hofordimport android.graphics.Color; 339c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport android.graphics.Matrix; 3432cc4dd751569721aa19218b4d947145577060d0nicolasroardimport android.graphics.Point; 350c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunkimport android.graphics.Rect; 369c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport android.graphics.RectF; 379f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroardimport android.graphics.drawable.ColorDrawable; 380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 403d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 4192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 429c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport android.os.CancellationSignal; 43af59322ac944e6e17aaf718045949a3352016945nicolasroardimport android.os.Handler; 4424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport android.os.IBinder; 45fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.support.v4.app.DialogFragment; 46f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.support.v4.app.Fragment; 47fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentActivity; 48fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentTransaction; 49391e4a190d4afcfdf89b8e7892e972cc998cdf41Svetoslav Ganovimport android.support.v4.print.PrintHelper; 50fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 5152fa110135563740ebc27326afab4326bbb9b9f5John Hofordimport android.util.Log; 52d2e9ea0ce1949e192e80ce806e702606694440acztenghuiimport android.util.TypedValue; 53f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.Menu; 54f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.MenuItem; 55860af325f2030a03c526e8551a85230d17df7b15nicolasroardimport android.view.MotionEvent; 56f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.View; 570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 58af59322ac944e6e17aaf718045949a3352016945nicolasroardimport android.view.ViewPropertyAnimator; 59f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.WindowManager; 60be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.AdapterView; 610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 62be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.FrameLayout; 6364fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hofordimport android.widget.PopupMenu; 64be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ShareActionProvider; 650ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 663759b2d6670df1e645f630d18b2387c458fdfcc1John Hofordimport android.widget.Spinner; 67f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.widget.Toast; 68d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk 6992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 7024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport com.android.gallery3d.app.PhotoPage; 710addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 7292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 73d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.Action; 74d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.CategoryAdapter; 759f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroardimport com.android.gallery3d.filtershow.category.CategorySelected; 769737f3a18a8c302160e213afa30a4db710e41fb6nicolasroardimport com.android.gallery3d.filtershow.category.CategoryView; 77d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.category.MainPanel; 78860af325f2030a03c526e8551a85230d17df7b15nicolasroardimport com.android.gallery3d.filtershow.category.SwipableView; 79077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.data.UserPresetsManager; 80d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.BasicEditor; 81d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.Editor; 82077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorChanSat; 8349798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordimport com.android.gallery3d.filtershow.editors.EditorColorBorder; 84d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorCrop; 85d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorDraw; 86077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorGrad; 87d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorManager; 88077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorMirror; 89d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorPanel; 90d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorRedEye; 91d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorRotate; 92d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorStraighten; 93d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorTinyPlanet; 94d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 95edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroardimport com.android.gallery3d.filtershow.filters.FilterDrawRepresentation; 9657bd092bd5757576f07341135272ed1c3df729ffnicolasroardimport com.android.gallery3d.filtershow.filters.FilterMirrorRepresentation; 97d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterRepresentation; 9857bd092bd5757576f07341135272ed1c3df729ffnicolasroardimport com.android.gallery3d.filtershow.filters.FilterRotateRepresentation; 993bc6e6f3b5ac0bb989c5e2f1580bdb40ead5dc25nicolasroardimport com.android.gallery3d.filtershow.filters.FilterStraightenRepresentation; 100077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation; 101d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.FiltersManager; 102d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.filters.ImageFilter; 1035180e681e1b68eae403b2740c609792ca44f77cenicolasroardimport com.android.gallery3d.filtershow.history.HistoryItem; 104077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.history.HistoryManager; 10592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 10663a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 107368ae73ad0627dac41709b925fc02a12548ab80dnicolasroardimport com.android.gallery3d.filtershow.imageshow.Spline; 108860af325f2030a03c526e8551a85230d17df7b15nicolasroardimport com.android.gallery3d.filtershow.info.InfoPanel; 109077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.pipeline.CachingPipeline; 110ce9ceff5776a9b0479c30cbeb2a9388b44df1865nicolasroardimport com.android.gallery3d.filtershow.pipeline.ImagePreset; 11124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport com.android.gallery3d.filtershow.pipeline.ProcessingService; 112fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.presets.PresetManagementDialog; 113fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.presets.UserPresetsAdapter; 11492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 115fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport com.android.gallery3d.filtershow.state.StateAdapter; 11624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport com.android.gallery3d.filtershow.tools.SaveImage; 117afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hofordimport com.android.gallery3d.filtershow.tools.XmpPresets; 118afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hofordimport com.android.gallery3d.filtershow.tools.XmpPresets.XMresults; 119077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunkimport com.android.gallery3d.filtershow.ui.ExportDialog; 1207592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 1210addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 122f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunkimport com.android.photos.data.GalleryBitmapPool; 12392e2341248e99c691f38820503984bc5e2f18811nicolasroard 12492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 1259c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport java.io.FileDescriptor; 1269c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroardimport java.io.FileOutputStream; 127ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 12824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport java.util.ArrayList; 12992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 13092e2341248e99c691f38820503984bc5e2f18811nicolasroard 131fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardpublic class FilterShowActivity extends FragmentActivity implements OnItemClickListener, 1326125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford OnShareTargetSelectedListener, DialogInterface.OnShowListener, 13364fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford DialogInterface.OnDismissListener, PopupMenu.OnDismissListener{ 1340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 135ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private String mAction = ""; 136588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage mMasterImage = null; 1376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1384dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard private static final long LIMIT_SUPPORTS_HIGHRES = 134217728; // 128Mb 1394dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 140a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 141a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 14232646aabd8228e1494ba090a02ffb8adaa369127nicolasroard public static final boolean RESET_TO_LOADED = false; 1430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 145bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1475aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 1489f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard private Editor mCurrentEditor = null; 1495aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 1500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 1520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1535300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford private boolean mShowingTinyPlanet = false; 154bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 155860af325f2030a03c526e8551a85230d17df7b15nicolasroard private boolean mShowingVersionsPanel = false; 156bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 15792e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 1580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1590ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1600ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1610ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1620ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1630ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 164ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 16555550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 166d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 1673d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 168afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private Uri mOriginalImageUri = null; 169afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private ImagePreset mOriginalPreset = null; 170c7b38f384ce7d4dd8cc472c802d691e490c8e162nicolasroard 171b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui private Uri mSelectedImageUri = null; 172b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 17332cc4dd751569721aa19218b4d947145577060d0nicolasroard private ArrayList<Action> mActions = new ArrayList<Action>(); 174fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private UserPresetsManager mUserPresetsManager = null; 175fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private UserPresetsAdapter mUserPresetsAdapter = null; 176f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryLooksAdapter = null; 177f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryBordersAdapter = null; 178f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryGeometryAdapter = null; 179f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private CategoryAdapter mCategoryFiltersAdapter = null; 180860af325f2030a03c526e8551a85230d17df7b15nicolasroard private CategoryAdapter mCategoryVersionsAdapter = null; 181f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mCurrentPanel = MainPanel.LOOKS; 182860af325f2030a03c526e8551a85230d17df7b15nicolasroard private Vector<FilterUserPresetRepresentation> mVersions = 183860af325f2030a03c526e8551a85230d17df7b15nicolasroard new Vector<FilterUserPresetRepresentation>(); 184860af325f2030a03c526e8551a85230d17df7b15nicolasroard private int mVersionsCounter = 0; 185860af325f2030a03c526e8551a85230d17df7b15nicolasroard 186860af325f2030a03c526e8551a85230d17df7b15nicolasroard private boolean mHandlingSwipeButton = false; 187860af325f2030a03c526e8551a85230d17df7b15nicolasroard private View mHandledSwipeView = null; 188860af325f2030a03c526e8551a85230d17df7b15nicolasroard private float mHandledSwipeViewLastDelta = 0; 1899737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard private float mSwipeStartX = 0; 190860af325f2030a03c526e8551a85230d17df7b15nicolasroard private float mSwipeStartY = 0; 1913a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 19224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private ProcessingService mBoundService; 19324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private boolean mIsBound = false; 1943759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford private Menu mMenu; 1956125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford private DialogInterface mCurrentDialog = null; 19664fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford private PopupMenu mCurrentMenu = null; 197f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford private boolean mLoadingVisible = true; 19824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 19924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public ProcessingService getProcessingService() { 20024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard return mBoundService; 20124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 20224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 20324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public boolean isSimpleEditAction() { 20424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard return !PhotoPage.ACTION_NEXTGEN_EDIT.equalsIgnoreCase(mAction); 20524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 20624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 20724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private ServiceConnection mConnection = new ServiceConnection() { 208a08fab5958ecd50ada4b7c013af362029c61f117ztenghui @Override 20924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void onServiceConnected(ComponentName className, IBinder service) { 21024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard /* 21124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * This is called when the connection with the service has been 21224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * established, giving us the service object we can use to 21324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * interact with the service. Because we have bound to a explicit 21424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * service that we know is running in our own process, we can 21524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * cast its IBinder to a concrete class and directly access it. 21624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard */ 21724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mBoundService = ((ProcessingService.LocalBinder)service).getService(); 21824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mBoundService.setFiltershowActivity(FilterShowActivity.this); 21924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mBoundService.onStart(); 22024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 22124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 222a08fab5958ecd50ada4b7c013af362029c61f117ztenghui @Override 22324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void onServiceDisconnected(ComponentName className) { 22424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard /* 22524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * This is called when the connection with the service has been 22624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * unexpectedly disconnected -- that is, its process crashed. 22724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * Because it is running in our same process, we should never 22824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * see this happen. 22924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard */ 23024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mBoundService = null; 23124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 23224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard }; 23324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 23424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard void doBindService() { 23524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard /* 23624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * Establish a connection with the service. We use an explicit 23724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * class name because we want a specific service implementation that 23824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * we know will be running in our own process (and thus won't be 23924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * supporting component replacement by other applications). 24024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard */ 24124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard bindService(new Intent(FilterShowActivity.this, ProcessingService.class), 24224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mConnection, Context.BIND_AUTO_CREATE); 24324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mIsBound = true; 24424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 24524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 24624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard void doUnbindService() { 24724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard if (mIsBound) { 24824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard // Detach our existing connection. 24924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard unbindService(mConnection); 25024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mIsBound = false; 25124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 25224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 25324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 2543759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford public void updateUIAfterServiceStarted() { 2553759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford MasterImage.setMaster(mMasterImage); 25624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ImageFilter.setActivityForMemoryToasts(this); 257fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager = new UserPresetsManager(this); 258fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsAdapter = new UserPresetsAdapter(this); 25924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 2603759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford setupMasterImage(); 2613759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford setupMenu(); 2623759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford setDefaultValues(); 2633759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford fillEditors(); 2643759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford getWindow().setBackgroundDrawable(new ColorDrawable(0)); 2653759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford loadXML(); 2663759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford 26724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillCategories(); 26824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard loadMainPanel(); 26924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard extractXMPData(); 27024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard processIntent(); 27124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 27224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 2730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 2740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 2750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 2760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 277f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard boolean onlyUsePortrait = getResources().getBoolean(R.bool.only_use_portrait); 278f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (onlyUsePortrait) { 279f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 280f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 281f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 282f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk clearGalleryBitmapPool(); 2833759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford doBindService(); 2843759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford getWindow().setBackgroundDrawable(new ColorDrawable(Color.GRAY)); 2853759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford setContentView(R.layout.filtershow_splashscreen); 2863a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2875ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 288f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public boolean isShowingImageStatePanel() { 289f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mShowingImageStatePanel; 290f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 291f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 292f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void loadMainPanel() { 293f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (findViewById(R.id.main_panel_container) == null) { 294f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 295f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 296f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MainPanel panel = new MainPanel(); 297f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 298f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 299f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard transaction.commit(); 300f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 301f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 302f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void loadEditorPanel(FilterRepresentation representation, 30300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard final Editor currentEditor) { 304f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getEditorId() == ImageOnlyEditor.ID) { 305f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard currentEditor.reflectCurrentFilter(); 306f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 307f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 30800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard final int currentId = currentEditor.getID(); 30900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard Runnable showEditor = new Runnable() { 31000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard @Override 31100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard public void run() { 31200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard EditorPanel panel = new EditorPanel(); 31300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard panel.setEditor(currentId); 31400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 31500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.remove(getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG)); 31600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG); 31700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard transaction.commit(); 31800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 31900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard }; 32000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard Fragment main = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 32100259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard boolean doAnimation = false; 32200259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard if (mShowingImageStatePanel 32300259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 32400259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard doAnimation = true; 32500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 32600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard if (doAnimation && main != null && main instanceof MainPanel) { 32700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard MainPanel mainPanel = (MainPanel) main; 32800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard View container = mainPanel.getView().findViewById(R.id.category_panel_container); 32900259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard View bottom = mainPanel.getView().findViewById(R.id.bottom_panel); 33000259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard int panelHeight = container.getHeight() + bottom.getHeight(); 331af59322ac944e6e17aaf718045949a3352016945nicolasroard ViewPropertyAnimator anim = mainPanel.getView().animate(); 332af59322ac944e6e17aaf718045949a3352016945nicolasroard anim.translationY(panelHeight).start(); 333af59322ac944e6e17aaf718045949a3352016945nicolasroard final Handler handler = new Handler(); 334af59322ac944e6e17aaf718045949a3352016945nicolasroard handler.postDelayed(showEditor, anim.getDuration()); 33500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } else { 33600259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard showEditor.run(); 33700259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard } 338f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 339f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 3405d1cf1f9c8c6359905988e096b50f07ce326df21John Hoford public void toggleInformationPanel() { 341860af325f2030a03c526e8551a85230d17df7b15nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 342860af325f2030a03c526e8551a85230d17df7b15nicolasroard transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left); 343860af325f2030a03c526e8551a85230d17df7b15nicolasroard 344860af325f2030a03c526e8551a85230d17df7b15nicolasroard InfoPanel panel = new InfoPanel(); 345b203968cc53015d9c51b790a56cca638be77818dnicolasroard panel.show(transaction, InfoPanel.FRAGMENT_TAG); 346860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 347860af325f2030a03c526e8551a85230d17df7b15nicolasroard 3483a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void loadXML() { 3490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 3503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3519594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 352786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 353786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 3549f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard actionBar.setBackgroundDrawable(new ColorDrawable( 3559f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard getResources().getColor(R.color.background_screen))); 356786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 357bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 358bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 359786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 360786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 361786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 362786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 363786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 3640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 3660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 3670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3683a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupEditors(); 3695aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 370733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard mEditorPlaceHolder.hide(); 37132cc4dd751569721aa19218b4d947145577060d0nicolasroard mImageShow.attach(); 37292e2341248e99c691f38820503984bc5e2f18811nicolasroard 3736019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard setupStatePanel(); 3746019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard } 3756019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard 37624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void fillCategories() { 37724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillLooks(); 378fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard loadUserPresets(); 37924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillBorders(); 38024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillTools(); 38124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard fillEffects(); 382860af325f2030a03c526e8551a85230d17df7b15nicolasroard fillVersions(); 38324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 38424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 3856019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard public void setupStatePanel() { 3860c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk MasterImage.getImage().setHistoryManager(mMasterImage.getHistory()); 38738fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard } 38838fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 389860af325f2030a03c526e8551a85230d17df7b15nicolasroard private void fillVersions() { 39032cc4dd751569721aa19218b4d947145577060d0nicolasroard if (mCategoryVersionsAdapter != null) { 39132cc4dd751569721aa19218b4d947145577060d0nicolasroard mCategoryVersionsAdapter.clear(); 39232cc4dd751569721aa19218b4d947145577060d0nicolasroard } 393860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter = new CategoryAdapter(this); 394860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.setShowAddButton(true); 395860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 396860af325f2030a03c526e8551a85230d17df7b15nicolasroard 39732cc4dd751569721aa19218b4d947145577060d0nicolasroard public void registerAction(Action action) { 39832cc4dd751569721aa19218b4d947145577060d0nicolasroard if (mActions.contains(action)) { 39932cc4dd751569721aa19218b4d947145577060d0nicolasroard return; 40032cc4dd751569721aa19218b4d947145577060d0nicolasroard } 40132cc4dd751569721aa19218b4d947145577060d0nicolasroard mActions.add(action); 40232cc4dd751569721aa19218b4d947145577060d0nicolasroard } 40332cc4dd751569721aa19218b4d947145577060d0nicolasroard 40432cc4dd751569721aa19218b4d947145577060d0nicolasroard private void loadActions() { 40532cc4dd751569721aa19218b4d947145577060d0nicolasroard for (int i = 0; i < mActions.size(); i++) { 40632cc4dd751569721aa19218b4d947145577060d0nicolasroard Action action = mActions.get(i); 40732cc4dd751569721aa19218b4d947145577060d0nicolasroard action.setImageFrame(new Rect(0, 0, 96, 96), 0); 40832cc4dd751569721aa19218b4d947145577060d0nicolasroard } 40932cc4dd751569721aa19218b4d947145577060d0nicolasroard } 41032cc4dd751569721aa19218b4d947145577060d0nicolasroard 411860af325f2030a03c526e8551a85230d17df7b15nicolasroard public void updateVersions() { 412860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.clear(); 413860af325f2030a03c526e8551a85230d17df7b15nicolasroard FilterUserPresetRepresentation originalRep = new FilterUserPresetRepresentation( 414860af325f2030a03c526e8551a85230d17df7b15nicolasroard getString(R.string.filtershow_version_original), new ImagePreset(), -1); 415860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.add( 416860af325f2030a03c526e8551a85230d17df7b15nicolasroard new Action(this, originalRep, Action.FULL_VIEW)); 417860af325f2030a03c526e8551a85230d17df7b15nicolasroard ImagePreset current = new ImagePreset(MasterImage.getImage().getPreset()); 418860af325f2030a03c526e8551a85230d17df7b15nicolasroard FilterUserPresetRepresentation currentRep = new FilterUserPresetRepresentation( 419860af325f2030a03c526e8551a85230d17df7b15nicolasroard getString(R.string.filtershow_version_current), current, -1); 420860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.add( 421860af325f2030a03c526e8551a85230d17df7b15nicolasroard new Action(this, currentRep, Action.FULL_VIEW)); 42255a0279ee420c649606edd7815403d3ca1820c07nicolasroard if (mVersions.size() > 0) { 42355a0279ee420c649606edd7815403d3ca1820c07nicolasroard mCategoryVersionsAdapter.add(new Action(this, Action.SPACER)); 42455a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 425860af325f2030a03c526e8551a85230d17df7b15nicolasroard for (FilterUserPresetRepresentation rep : mVersions) { 426860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.add( 42755a0279ee420c649606edd7815403d3ca1820c07nicolasroard new Action(this, rep, Action.FULL_VIEW, true)); 428860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 429860af325f2030a03c526e8551a85230d17df7b15nicolasroard mCategoryVersionsAdapter.notifyDataSetInvalidated(); 430860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 431860af325f2030a03c526e8551a85230d17df7b15nicolasroard 432860af325f2030a03c526e8551a85230d17df7b15nicolasroard public void addCurrentVersion() { 433860af325f2030a03c526e8551a85230d17df7b15nicolasroard ImagePreset current = new ImagePreset(MasterImage.getImage().getPreset()); 434860af325f2030a03c526e8551a85230d17df7b15nicolasroard mVersionsCounter++; 435860af325f2030a03c526e8551a85230d17df7b15nicolasroard FilterUserPresetRepresentation rep = new FilterUserPresetRepresentation( 436860af325f2030a03c526e8551a85230d17df7b15nicolasroard "" + mVersionsCounter, current, -1); 437860af325f2030a03c526e8551a85230d17df7b15nicolasroard mVersions.add(rep); 438860af325f2030a03c526e8551a85230d17df7b15nicolasroard updateVersions(); 439860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 440860af325f2030a03c526e8551a85230d17df7b15nicolasroard 441860af325f2030a03c526e8551a85230d17df7b15nicolasroard public void removeVersion(Action action) { 442860af325f2030a03c526e8551a85230d17df7b15nicolasroard mVersions.remove(action.getRepresentation()); 443860af325f2030a03c526e8551a85230d17df7b15nicolasroard updateVersions(); 444860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 445860af325f2030a03c526e8551a85230d17df7b15nicolasroard 4460a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard public void removeLook(Action action) { 4475af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard FilterUserPresetRepresentation rep = 4485af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard (FilterUserPresetRepresentation) action.getRepresentation(); 4490a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard if (rep == null) { 4500a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard return; 4510a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard } 4520a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard mUserPresetsManager.delete(rep.getId()); 4535af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard updateUserPresetsFromManager(); 4540a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard } 4550a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard 45624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private void fillEffects() { 4573a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 45824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getEffects(); 45932cc4dd751569721aa19218b4d947145577060d0nicolasroard if (mCategoryFiltersAdapter != null) { 46032cc4dd751569721aa19218b4d947145577060d0nicolasroard mCategoryFiltersAdapter.clear(); 46132cc4dd751569721aa19218b4d947145577060d0nicolasroard } 462f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter = new CategoryAdapter(this); 463f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : filtersRepresentations) { 464f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getTextId() != 0) { 465f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.setName(getString(representation.getTextId())); 466f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 467f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.add(new Action(this, representation)); 468f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 4693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 4703a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 47124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private void fillTools() { 47238fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 47324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getTools(); 47432cc4dd751569721aa19218b4d947145577060d0nicolasroard if (mCategoryGeometryAdapter != null) { 47532cc4dd751569721aa19218b4d947145577060d0nicolasroard mCategoryGeometryAdapter.clear(); 47632cc4dd751569721aa19218b4d947145577060d0nicolasroard } 477f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter = new CategoryAdapter(this); 478edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard boolean found = false; 479f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : filtersRepresentations) { 480f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter.add(new Action(this, representation)); 481edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard if (representation instanceof FilterDrawRepresentation) { 482edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard found = true; 483edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 484edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 485edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard if (!found) { 486edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard FilterRepresentation representation = new FilterDrawRepresentation(); 487edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard Action action = new Action(this, representation); 488edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard action.setIsDoubleAction(true); 489edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard mCategoryGeometryAdapter.add(action); 490f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 4913a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 4923a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 4933a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void processIntent() { 4940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 495a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 496a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 497a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 498a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 499ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mAction = intent.getAction(); 500b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui mSelectedImageUri = intent.getData(); 501b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui Uri loadUri = mSelectedImageUri; 502afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (mOriginalImageUri != null) { 503b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui loadUri = mOriginalImageUri; 504afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 505b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui if (loadUri != null) { 506b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui startLoadBitmap(loadUri); 5070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 5080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 5090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5123a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setupEditors() { 5133a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 5143a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorManager.addEditors(mEditorPlaceHolder); 5153a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setOldViews(mImageViews); 5163a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5173a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5183a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillEditors() { 519bc8e077e77cf6f0dda8efd8318b8a8e7eda16f61John Hoford mEditorPlaceHolder.addEditor(new EditorChanSat()); 520e162b032fe387eabbd69d367dae6fe7003e850a1John Hoford mEditorPlaceHolder.addEditor(new EditorGrad()); 5213a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorDraw()); 52249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford mEditorPlaceHolder.addEditor(new EditorColorBorder()); 5233a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new BasicEditor()); 5243a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 5253a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); 5263a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRedEye()); 5273a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorCrop()); 528b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk mEditorPlaceHolder.addEditor(new EditorMirror()); 5293a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRotate()); 5303a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorStraighten()); 5313a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5323a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5333a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setDefaultValues() { 5343a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Resources res = getResources(); 5353a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5363a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard // TODO: get those values from XML. 5373a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 5383a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 5393a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 5403a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5413a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 5423a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 5433a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 5443a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 5453759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford 5463759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford mOriginalImageUri = null; 5473a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5483a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 549d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 550733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 551733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.INVISIBLE); 552f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford startLoadingIndicator(); 553f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mShowingTinyPlanet = false; 554f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mLoadBitmapTask = new LoadBitmapTask(); 555d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 556d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 557d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 558f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private void fillBorders() { 55924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 56024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ArrayList<FilterRepresentation> borders = filtersManager.getBorders(); 5614c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford 562f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk for (int i = 0; i < borders.size(); i++) { 56324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard FilterRepresentation filter = borders.get(i); 5643cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk filter.setName(getString(R.string.borders)); 565f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk if (i == 0) { 5663cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk filter.setName(getString(R.string.none)); 5679090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 568f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 569f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 57032cc4dd751569721aa19218b4d947145577060d0nicolasroard if (mCategoryBordersAdapter != null) { 57132cc4dd751569721aa19218b4d947145577060d0nicolasroard mCategoryBordersAdapter.clear(); 57232cc4dd751569721aa19218b4d947145577060d0nicolasroard } 573f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryBordersAdapter = new CategoryAdapter(this); 574f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard for (FilterRepresentation representation : borders) { 575f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation.getTextId() != 0) { 576f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard representation.setName(getString(representation.getTextId())); 5779090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 57800259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard mCategoryBordersAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 5799090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 5809090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 5819090141f56b4e2000704d0c4a778d3a819821726nicolasroard 582fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard public UserPresetsAdapter getUserPresetsAdapter() { 583fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard return mUserPresetsAdapter; 584fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 585fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 586f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryLooksAdapter() { 587f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryLooksAdapter; 588f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 589f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 590f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryBordersAdapter() { 591f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryBordersAdapter; 592f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 593f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 594f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryGeometryAdapter() { 595f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryGeometryAdapter; 596f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 597f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 598f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public CategoryAdapter getCategoryFiltersAdapter() { 599f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCategoryFiltersAdapter; 600f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 601f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 602860af325f2030a03c526e8551a85230d17df7b15nicolasroard public CategoryAdapter getCategoryVersionsAdapter() { 603860af325f2030a03c526e8551a85230d17df7b15nicolasroard return mCategoryVersionsAdapter; 604860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 605860af325f2030a03c526e8551a85230d17df7b15nicolasroard 606f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void removeFilterRepresentation(FilterRepresentation filterRepresentation) { 607f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation == null) { 608f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 609f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 610f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset oldPreset = MasterImage.getImage().getPreset(); 611f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 612f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.removeFilter(filterRepresentation); 613ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(copy, copy.getLastRepresentation(), true); 614f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 615f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FilterRepresentation lastRepresentation = copy.getLastRepresentation(); 616f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(lastRepresentation); 617f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 618f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 619f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 620f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void useFilterRepresentation(FilterRepresentation filterRepresentation) { 621f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (filterRepresentation == null) { 622f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 623f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 62457bd092bd5757576f07341135272ed1c3df729ffnicolasroard if (!(filterRepresentation instanceof FilterRotateRepresentation) 62557bd092bd5757576f07341135272ed1c3df729ffnicolasroard && !(filterRepresentation instanceof FilterMirrorRepresentation) 62657bd092bd5757576f07341135272ed1c3df729ffnicolasroard && MasterImage.getImage().getCurrentFilterRepresentation() == filterRepresentation) { 627f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 628f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 6299f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard if (filterRepresentation instanceof FilterUserPresetRepresentation 6309f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard || filterRepresentation instanceof FilterRotateRepresentation 6319f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard || filterRepresentation instanceof FilterMirrorRepresentation) { 6329f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard MasterImage.getImage().onNewLook(filterRepresentation); 6339f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard } 634f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset oldPreset = MasterImage.getImage().getPreset(); 635f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 636f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard FilterRepresentation representation = copy.getRepresentation(filterRepresentation); 637f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (representation == null) { 6383cd6fc8e632e406628b5977ee47c191523552500nicolasroard filterRepresentation = filterRepresentation.copy(); 639f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard copy.addFilter(filterRepresentation); 640f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else { 641c9ca6d1eb85a71b7667f4c25d879e78cce16ac4cztenghui if (filterRepresentation.allowsSingleInstanceOnly()) { 642d2e9ea0ce1949e192e80ce806e702606694440acztenghui // Don't just update the filter representation. Centralize the 643d2e9ea0ce1949e192e80ce806e702606694440acztenghui // logic in the addFilter(), such that we can keep "None" as 644d2e9ea0ce1949e192e80ce806e702606694440acztenghui // null. 64520667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard if (!representation.equals(filterRepresentation)) { 64620667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard // Only do this if the filter isn't the same 64720667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard // (state panel clicks can lead us here) 64820667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard copy.removeFilter(representation); 64920667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard copy.addFilter(filterRepresentation); 65020667d21eac2074b0e265d8839539bd9cfec9f92nicolasroard } 6519090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 6529090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 653ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(copy, filterRepresentation, true); 654f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(filterRepresentation); 655f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 656f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 657f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void showRepresentation(FilterRepresentation representation) { 658f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford if (representation == null) { 659f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford return; 660f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford } 661e5f4b784ddfaf359fe460998d0edc25755df8bdcnicolasroard 66257bd092bd5757576f07341135272ed1c3df729ffnicolasroard if (representation instanceof FilterRotateRepresentation) { 66357bd092bd5757576f07341135272ed1c3df729ffnicolasroard FilterRotateRepresentation r = (FilterRotateRepresentation) representation; 66457bd092bd5757576f07341135272ed1c3df729ffnicolasroard r.rotateCW(); 66557bd092bd5757576f07341135272ed1c3df729ffnicolasroard } 66657bd092bd5757576f07341135272ed1c3df729ffnicolasroard if (representation instanceof FilterMirrorRepresentation) { 66757bd092bd5757576f07341135272ed1c3df729ffnicolasroard FilterMirrorRepresentation r = (FilterMirrorRepresentation) representation; 66857bd092bd5757576f07341135272ed1c3df729ffnicolasroard r.cycle(); 66957bd092bd5757576f07341135272ed1c3df729ffnicolasroard } 670edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard if (representation.isBooleanFilter()) { 671edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard ImagePreset preset = MasterImage.getImage().getPreset(); 672edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard if (preset.getRepresentation(representation) != null) { 673edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard // remove 674edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard ImagePreset copy = new ImagePreset(preset); 675edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard copy.removeFilter(representation); 676edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard FilterRepresentation filterRepresentation = representation.copy(); 677edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard MasterImage.getImage().setPreset(copy, filterRepresentation, true); 678edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(null); 679edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard return; 680edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 681edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 682b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk useFilterRepresentation(representation); 683f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 684f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard // show representation 6859f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard if (mCurrentEditor != null) { 6869f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard mCurrentEditor.detach(); 6879f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard } 6889f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId()); 689f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadEditorPanel(representation, mCurrentEditor); 690f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 691f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 692f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public Editor getEditor(int editorID) { 693f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mEditorPlaceHolder.getEditor(editorID); 694f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 695f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 696f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void setCurrentPanel(int currentPanel) { 697f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCurrentPanel = currentPanel; 698f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 699f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 700f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public int getCurrentPanel() { 701f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return mCurrentPanel; 7029090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 7039090141f56b4e2000704d0c4a778d3a819821726nicolasroard 704acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard public void updateCategories() { 70526f23e62096eb50344815e1b066e9a1efb629bb0nicolasroard if (mMasterImage == null) { 70626f23e62096eb50344815e1b066e9a1efb629bb0nicolasroard return; 70726f23e62096eb50344815e1b066e9a1efb629bb0nicolasroard } 708acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard ImagePreset preset = mMasterImage.getPreset(); 709acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard mCategoryLooksAdapter.reflectImagePreset(preset); 710acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard mCategoryBordersAdapter.reflectImagePreset(preset); 711acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard } 712acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard 713e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard public View getMainStatePanelContainer(int id) { 714e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard return findViewById(id); 715e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard } 716e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard 71764fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford public void onShowMenu(PopupMenu menu) { 71864fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford mCurrentMenu = menu; 71964fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford menu.setOnDismissListener(this); 72064fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford } 72164fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford 72264fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford @Override 72364fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford public void onDismiss(PopupMenu popupMenu){ 72464fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford if (mCurrentMenu == null) { 72564fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford return; 72664fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford } 72764fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford mCurrentMenu.setOnDismissListener(null); 72864fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford mCurrentMenu = null; 72964fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford } 73064fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford 7316125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford @Override 7326125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford public void onShow(DialogInterface dialog) { 7336125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford mCurrentDialog = dialog; 7346125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford } 7356125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford 7366125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford @Override 7376125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford public void onDismiss(DialogInterface dialogInterface) { 7386125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford mCurrentDialog = null; 7396125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford } 7406125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford 741be84355fddceb9690eef752707c42457ea251e77nicolasroard private class LoadHighresBitmapTask extends AsyncTask<Void, Void, Boolean> { 742be84355fddceb9690eef752707c42457ea251e77nicolasroard @Override 743be84355fddceb9690eef752707c42457ea251e77nicolasroard protected Boolean doInBackground(Void... params) { 7440c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk MasterImage master = MasterImage.getImage(); 7450c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Rect originalBounds = master.getOriginalBounds(); 7460c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (master.supportsHighRes()) { 7470c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk int highresPreviewSize = master.getOriginalBitmapLarge().getWidth() * 2; 7480c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (highresPreviewSize > originalBounds.width()) { 7490c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk highresPreviewSize = originalBounds.width(); 7500c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk } 75147886ac74f2874633d4c1284b91c33117f056581Ruben Brunk Rect bounds = new Rect(); 75247886ac74f2874633d4c1284b91c33117f056581Ruben Brunk Bitmap originalHires = ImageLoader.loadOrientedConstrainedBitmap(master.getUri(), 75347886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.getActivity(), highresPreviewSize, 75447886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.getOrientation(), bounds); 75547886ac74f2874633d4c1284b91c33117f056581Ruben Brunk master.setOriginalBounds(bounds); 7560c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk master.setOriginalBitmapHighres(originalHires); 757db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mBoundService.setOriginalBitmapHighres(originalHires); 7580c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk master.warnListeners(); 7590c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk } 760be84355fddceb9690eef752707c42457ea251e77nicolasroard return true; 761be84355fddceb9690eef752707c42457ea251e77nicolasroard } 762be84355fddceb9690eef752707c42457ea251e77nicolasroard 763be84355fddceb9690eef752707c42457ea251e77nicolasroard @Override 764be84355fddceb9690eef752707c42457ea251e77nicolasroard protected void onPostExecute(Boolean result) { 7650c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Bitmap highresBitmap = MasterImage.getImage().getOriginalBitmapHighres(); 766be84355fddceb9690eef752707c42457ea251e77nicolasroard if (highresBitmap != null) { 7670c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk float highResPreviewScale = (float) highresBitmap.getWidth() 7680c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk / (float) MasterImage.getImage().getOriginalBounds().width(); 769db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mBoundService.setHighresPreviewScaleFactor(highResPreviewScale); 770be84355fddceb9690eef752707c42457ea251e77nicolasroard } 77180b216d5c8e17e0358cf1508a1e177ccada8383fnicolasroard MasterImage.getImage().warnListeners(); 772be84355fddceb9690eef752707c42457ea251e77nicolasroard } 773be84355fddceb9690eef752707c42457ea251e77nicolasroard } 774be84355fddceb9690eef752707c42457ea251e77nicolasroard 775f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford public boolean isLoadingVisible() { 776f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford return mLoadingVisible; 777f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford } 778f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford 779f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford public void startLoadingIndicator() { 780f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford final View loading = findViewById(R.id.loading); 781f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford mLoadingVisible = true; 782f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford loading.setVisibility(View.VISIBLE); 783f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford } 784f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford 78532cc4dd751569721aa19218b4d947145577060d0nicolasroard public void stopLoadingIndicator() { 78632cc4dd751569721aa19218b4d947145577060d0nicolasroard final View loading = findViewById(R.id.loading); 78732cc4dd751569721aa19218b4d947145577060d0nicolasroard loading.setVisibility(View.GONE); 788f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford mLoadingVisible = false; 78932cc4dd751569721aa19218b4d947145577060d0nicolasroard } 79032cc4dd751569721aa19218b4d947145577060d0nicolasroard 7918965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 792d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 7933d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 794f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public LoadBitmapTask() { 795d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 7963d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 7973d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 7983d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 799d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 8000c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk if (!MasterImage.getImage().loadBitmap(params[0], mBitmapSize)) { 8018965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 8028965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 8030c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk publishProgress(ImageLoader.queryLightCycle360(MasterImage.getImage().getActivity())); 8048965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 8053d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 8063d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 8073d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 8088965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 80900914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 8106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 8118965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 8126416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 8138965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 8145300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford mShowingTinyPlanet = true; 8158965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 81600914f56c3390caa224b1c9fc07624665de40113John Reck } 81700914f56c3390caa224b1c9fc07624665de40113John Reck 81800914f56c3390caa224b1c9fc07624665de40113John Reck @Override 8193d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 82069f5d8cbf51422454257a00d7959b2e8d50cb0caRuben Brunk MasterImage.setMaster(mMasterImage); 8213d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 8223d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 8233d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 824588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 8258965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 8263759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford if (mOriginalImageUri != null 8273759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford && !mOriginalImageUri.equals(mSelectedImageUri)) { 828441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford mOriginalImageUri = mSelectedImageUri; 829441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford mOriginalPreset = null; 830441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford Toast.makeText(FilterShowActivity.this, 831441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford R.string.cannot_edit_original, Toast.LENGTH_SHORT).show(); 832441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford startLoadBitmap(mOriginalImageUri); 833441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford } else { 834441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford cannotLoadImage(); 835441d7a8930360d1c043daabd76a6599f2a8a60baJohn Hoford } 836a08fab5958ecd50ada4b7c013af362029c61f117ztenghui return; 8373d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 8388965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 83952fa110135563740ebc27326afab4326bbb9b9f5John Hoford if (null == CachingPipeline.getRenderScriptContext()){ 84052fa110135563740ebc27326afab4326bbb9b9f5John Hoford Log.v(LOGTAG,"RenderScript context destroyed during load"); 84152fa110135563740ebc27326afab4326bbb9b9f5John Hoford return; 84252fa110135563740ebc27326afab4326bbb9b9f5John Hoford } 843733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 844733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.VISIBLE); 845733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 84632cc4dd751569721aa19218b4d947145577060d0nicolasroard 8470c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk Bitmap largeBitmap = MasterImage.getImage().getOriginalBitmapLarge(); 848db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mBoundService.setOriginalBitmap(largeBitmap); 849db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 8500c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk float previewScale = (float) largeBitmap.getWidth() 8510c1b4c6422a4d2d9b81cc0946d1c9675440a94e2Ruben Brunk / (float) MasterImage.getImage().getOriginalBounds().width(); 852db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mBoundService.setPreviewScaleFactor(previewScale); 853f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (!mShowingTinyPlanet) { 854f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.removeTinyPlanet(); 855f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 856f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.imageLoaded(); 857f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryBordersAdapter.imageLoaded(); 858f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryGeometryAdapter.imageLoaded(); 859f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.imageLoaded(); 860d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 861ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 86232cc4dd751569721aa19218b4d947145577060d0nicolasroard MasterImage.getImage().warnListeners(); 86332cc4dd751569721aa19218b4d947145577060d0nicolasroard loadActions(); 86432cc4dd751569721aa19218b4d947145577060d0nicolasroard 865afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (mOriginalPreset != null) { 866d2e9ea0ce1949e192e80ce806e702606694440acztenghui MasterImage.getImage().setLoadedPreset(mOriginalPreset); 867ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard MasterImage.getImage().setPreset(mOriginalPreset, 868ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard mOriginalPreset.getLastRepresentation(), true); 869afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalPreset = null; 87032cc4dd751569721aa19218b4d947145577060d0nicolasroard } else { 87132cc4dd751569721aa19218b4d947145577060d0nicolasroard setDefaultPreset(); 872afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 873c7b38f384ce7d4dd8cc472c802d691e490c8e162nicolasroard 87432cc4dd751569721aa19218b4d947145577060d0nicolasroard MasterImage.getImage().resetGeometryImages(true); 87532cc4dd751569721aa19218b4d947145577060d0nicolasroard 876f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (mAction == TINY_PLANET_ACTION) { 877f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard showRepresentation(mCategoryFiltersAdapter.getTinyPlanet()); 878ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } 879be84355fddceb9690eef752707c42457ea251e77nicolasroard LoadHighresBitmapTask highresLoad = new LoadHighresBitmapTask(); 880be84355fddceb9690eef752707c42457ea251e77nicolasroard highresLoad.execute(); 88180b216d5c8e17e0358cf1508a1e177ccada8383fnicolasroard MasterImage.getImage().warnListeners(); 8823d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 8833d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 8843d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 8853d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 8863d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 887f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk private void clearGalleryBitmapPool() { 888f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk (new AsyncTask<Void, Void, Void>() { 889f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk @Override 890f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk protected Void doInBackground(Void... params) { 891f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk // Free memory held in Gallery's Bitmap pool. May be O(n) for n bitmaps. 892f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk GalleryBitmapPool.getInstance().clear(); 893f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk return null; 894f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 895f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk }).execute(); 896f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 897f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 8983d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 8993d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 900d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 901d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 9023d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 903fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager.close(); 90424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard doUnbindService(); 9053d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 9063d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 9073d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 90847886ac74f2874633d4c1284b91c33117f056581Ruben Brunk // TODO: find a more robust way of handling image size selection 90947886ac74f2874633d4c1284b91c33117f056581Ruben Brunk // for high screen densities. 9100f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 91147886ac74f2874633d4c1284b91c33117f056581Ruben Brunk DisplayMetrics outMetrics = new DisplayMetrics(); 91247886ac74f2874633d4c1284b91c33117f056581Ruben Brunk getWindowManager().getDefaultDisplay().getMetrics(outMetrics); 913a08fab5958ecd50ada4b7c013af362029c61f117ztenghui return Math.max(outMetrics.heightPixels, outMetrics.widthPixels); 914fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 915fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 9160addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 917ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 918ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 919ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 920ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 921ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 922ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 923ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 924ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 925ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 9260addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 9270addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 9280addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 9290addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 9300addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 9310addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 9320addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 933ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 934ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 935ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 936ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 937ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 938ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 93908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 94008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 941ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 942ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 943ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 9440ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 9450ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 9460ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 9470ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 9480ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 9490ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 9500ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 9510ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 9520ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 9530ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 954ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 9550ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 9560ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 9570ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 9580ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 9590ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 96092e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 96192e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 9620ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 9630ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 9640ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 9650ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 9660ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 9670ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 9680ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 9690ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 9700addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 9710ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 9720ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 9730ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 9740ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 9750ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 9760ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 9770ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 9780ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 9790ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 98024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mSharedOutputFile = SaveImage.getNewFile(this, MasterImage.getImage().getUri()); 9810ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 9820ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 9830ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 9840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 9850ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 9860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 9879594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 9889594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 9899594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 990bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 991bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 992bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 9939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 994bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 9959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9960ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 9970ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 9980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 9990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 10003759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford mMenu = menu; 100146868d049a2b4b96c50559ad8a50a4104af15c80John Hoford setupMenu(); 10023759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford return true; 10033759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford } 100423e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 10053759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford private void setupMenu(){ 100646868d049a2b4b96c50559ad8a50a4104af15c80John Hoford if (mMenu == null || mMasterImage == null) { 100746868d049a2b4b96c50559ad8a50a4104af15c80John Hoford return; 100846868d049a2b4b96c50559ad8a50a4104af15c80John Hoford } 10093759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford MenuItem undoItem = mMenu.findItem(R.id.undoButton); 10103759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford MenuItem redoItem = mMenu.findItem(R.id.redoButton); 10113759b2d6670df1e645f630d18b2387c458fdfcc1John Hoford MenuItem resetItem = mMenu.findItem(R.id.resetHistoryButton); 1012ef3cc52f473f15534f00b61b55b53e93931fef97John Hoford MenuItem printItem = mMenu.findItem(R.id.printButton); 1013391e4a190d4afcfdf89b8e7892e972cc998cdf41Svetoslav Ganov if (!PrintHelper.systemSupportsPrint()) { 1014ef3cc52f473f15534f00b61b55b53e93931fef97John Hoford printItem.setVisible(false); 1015ef3cc52f473f15534f00b61b55b53e93931fef97John Hoford } 101663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 10179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 10189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 101992e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 10206e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 10216e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 10226e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 10236e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 10246e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 10256e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 10266e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 10276e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 10286e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 10296e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 10306e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 10316e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 10326e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 10336e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 10346e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 10356e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 10369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 10379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 10389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 10396a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 10409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 104163a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 1042a7a6a3a5efaf62cdd5d562a9141678671952d27dJohn Hoford backToMain(); 10439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 10449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 10459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 10469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 10476a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 10489594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 104963a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 10509594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 10519594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 10529594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 1053f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 1054f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 1055f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 1056f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 1057bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 1058bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 1059bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 1060bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 1061568b8d8bade4aac4bc598dff9b76ced159c533bfRuben Brunk case R.id.exportFlattenButton: { 1062077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk showExportOptionsDialog(); 1063568b8d8bade4aac4bc598dff9b76ced159c533bfRuben Brunk return true; 1064568b8d8bade4aac4bc598dff9b76ced159c533bfRuben Brunk } 10659594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 10669594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 10679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 10689594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 1069fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard case R.id.manageUserPresets: { 1070fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard manageUserPresets(); 1071fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard return true; 1072fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1073860af325f2030a03c526e8551a85230d17df7b15nicolasroard case R.id.showInfoPanel: { 10745d1cf1f9c8c6359905988e096b50f07ce326df21John Hoford toggleInformationPanel(); 1075860af325f2030a03c526e8551a85230d17df7b15nicolasroard return true; 1076860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 10779c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard case R.id.printButton: { 10789c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard print(); 10799c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard return true; 10809c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard } 10819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 10829594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 10839594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 10849594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 10859c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard public void print() { 10869c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard Bitmap bitmap = MasterImage.getImage().getHighresImage(); 1087391e4a190d4afcfdf89b8e7892e972cc998cdf41Svetoslav Ganov PrintHelper printer = new PrintHelper(this); 1088391e4a190d4afcfdf89b8e7892e972cc998cdf41Svetoslav Ganov printer.printBitmap("ImagePrint", bitmap); 10899c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard } 10909c5d6700209699c3f1a47b6fa37618ddcd2f24c3nicolasroard 109155a0279ee420c649606edd7815403d3ca1820c07nicolasroard public void addNewPreset() { 109255a0279ee420c649606edd7815403d3ca1820c07nicolasroard DialogFragment dialog = new PresetManagementDialog(); 109355a0279ee420c649606edd7815403d3ca1820c07nicolasroard dialog.show(getSupportFragmentManager(), "NoticeDialogFragment"); 109455a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 109555a0279ee420c649606edd7815403d3ca1820c07nicolasroard 1096fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private void manageUserPresets() { 1097fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard DialogFragment dialog = new PresetManagementDialog(); 1098fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard dialog.show(getSupportFragmentManager(), "NoticeDialogFragment"); 1099fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1100fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1101077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk private void showExportOptionsDialog() { 1102077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk DialogFragment dialog = new ExportDialog(); 1103077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk dialog.show(getSupportFragmentManager(), "ExportDialogFragment"); 1104077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk } 1105077e718ecb6eb07997ad7c458d38eb21b3b2e6f9Ruben Brunk 1106fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard public void updateUserPresetsFromAdapter(UserPresetsAdapter adapter) { 1107fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard ArrayList<FilterUserPresetRepresentation> representations = 1108fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard adapter.getDeletedRepresentations(); 1109fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard for (FilterUserPresetRepresentation representation : representations) { 1110fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard deletePreset(representation.getId()); 1111fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1112fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard ArrayList<FilterUserPresetRepresentation> changedRepresentations = 1113fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard adapter.getChangedRepresentations(); 1114fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard for (FilterUserPresetRepresentation representation : changedRepresentations) { 1115fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard updatePreset(representation); 1116fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1117fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard adapter.clearDeletedRepresentations(); 1118fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard adapter.clearChangedRepresentations(); 1119fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard loadUserPresets(); 1120fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1121fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1122fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard public void loadUserPresets() { 1123fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager.load(); 11245af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard updateUserPresetsFromManager(); 1125fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1126fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1127fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard public void updateUserPresetsFromManager() { 1128fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard ArrayList<FilterUserPresetRepresentation> presets = mUserPresetsManager.getRepresentations(); 1129fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard if (presets == null) { 1130fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard return; 1131fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1132fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard if (mCategoryLooksAdapter != null) { 1133fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard fillLooks(); 1134fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 113555a0279ee420c649606edd7815403d3ca1820c07nicolasroard if (presets.size() > 0) { 113655a0279ee420c649606edd7815403d3ca1820c07nicolasroard mCategoryLooksAdapter.add(new Action(this, Action.SPACER)); 113755a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 1138fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsAdapter.clear(); 1139fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard for (int i = 0; i < presets.size(); i++) { 1140fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard FilterUserPresetRepresentation representation = presets.get(i); 1141fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mCategoryLooksAdapter.add( 11420a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard new Action(this, representation, Action.FULL_VIEW, true)); 1143fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 1144fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 114555a0279ee420c649606edd7815403d3ca1820c07nicolasroard if (presets.size() > 0) { 114655a0279ee420c649606edd7815403d3ca1820c07nicolasroard mCategoryLooksAdapter.add(new Action(this, Action.ADD_ACTION)); 114755a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 11485af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard mCategoryLooksAdapter.notifyDataSetChanged(); 1149fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mCategoryLooksAdapter.notifyDataSetInvalidated(); 1150fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1151fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 11520a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard public void saveCurrentImagePreset(String name) { 11530a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard mUserPresetsManager.save(MasterImage.getImage().getPreset(), name); 1154fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1155fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1156fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private void deletePreset(int id) { 1157fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager.delete(id); 1158fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1159fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1160fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard private void updatePreset(FilterUserPresetRepresentation representation) { 1161fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard mUserPresetsManager.update(representation); 1162fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard } 1163fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard 1164bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 1165545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui if (mSaveButton != null) { 1166bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 1167545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui } 1168bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 1169bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 117024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private void fillLooks() { 117124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 117224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard ArrayList<FilterRepresentation> filtersRepresentations = filtersManager.getLooks(); 1173f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 117432cc4dd751569721aa19218b4d947145577060d0nicolasroard if (mCategoryLooksAdapter != null) { 117532cc4dd751569721aa19218b4d947145577060d0nicolasroard mCategoryLooksAdapter.clear(); 117632cc4dd751569721aa19218b4d947145577060d0nicolasroard } 11771a1cb07982f574a59cd84b0501770da97accad89nicolasroard mCategoryLooksAdapter = new CategoryAdapter(this); 1178f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard int verticalItemHeight = (int) getResources().getDimension(R.dimen.action_item_height); 1179f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.setItemHeight(verticalItemHeight); 1180f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 1181f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryLooksAdapter.add(new Action(this, representation, Action.FULL_VIEW)); 1182f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard } 118355a0279ee420c649606edd7815403d3ca1820c07nicolasroard if (mUserPresetsManager.getRepresentations() == null 118455a0279ee420c649606edd7815403d3ca1820c07nicolasroard || mUserPresetsManager.getRepresentations().size() == 0) { 118555a0279ee420c649606edd7815403d3ca1820c07nicolasroard mCategoryLooksAdapter.add(new Action(this, Action.ADD_ACTION)); 118655a0279ee420c649606edd7815403d3ca1820c07nicolasroard } 11875af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard 11885af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 11895af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard if (panel != null) { 11905af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard if (panel instanceof MainPanel) { 11915af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard MainPanel mainPanel = (MainPanel) panel; 11925af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard mainPanel.loadCategoryLookPanel(true); 11935af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard } 11945af55f4f37c3d8fd471144f1175a45e2933ca015nicolasroard } 11953a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 11960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11973a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard public void setDefaultPreset() { 11980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 1199ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard ImagePreset preset = new ImagePreset(); // empty 1200ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard mMasterImage.setPreset(preset, preset.getLastRepresentation(), true); 12010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 12040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 120592e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 12060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 12080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 12098537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 12100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 12140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 12150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 12160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12175b85b092af404effd32aa513f9c45a0232d7ae81nicolasroard mEditorPlaceHolder.hide(); 12180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 12190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 1221bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 1222bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 1223f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void toggleImageStatePanel() { 1224fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidateOptionsMenu(); 1225f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mShowingImageStatePanel = !mShowingImageStatePanel; 1226f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 1227f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (panel != null) { 1228f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (panel instanceof EditorPanel) { 1229f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard EditorPanel editorPanel = (EditorPanel) panel; 1230f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard editorPanel.showImageStatePanel(mShowingImageStatePanel); 1231f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else if (panel instanceof MainPanel) { 1232f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MainPanel mainPanel = (MainPanel) panel; 1233f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mainPanel.showImageStatePanel(mShowingImageStatePanel); 1234f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 1235bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 1236bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 1237bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 1238860af325f2030a03c526e8551a85230d17df7b15nicolasroard public void toggleVersionsPanel() { 1239860af325f2030a03c526e8551a85230d17df7b15nicolasroard mShowingVersionsPanel = !mShowingVersionsPanel; 1240860af325f2030a03c526e8551a85230d17df7b15nicolasroard Fragment panel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 1241860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (panel != null && panel instanceof MainPanel) { 1242860af325f2030a03c526e8551a85230d17df7b15nicolasroard MainPanel mainPanel = (MainPanel) panel; 1243860af325f2030a03c526e8551a85230d17df7b15nicolasroard mainPanel.loadCategoryVersionsPanel(); 1244860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1245860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1246860af325f2030a03c526e8551a85230d17df7b15nicolasroard 1247a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 1248a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 1249a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 1250a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 1251f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford 12523a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 1253f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford if (mMasterImage == null) { 1254f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford return; 1255f7f24e806ef4646db3f49f637e86417d3a0bebf2John Hoford } 12563a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 1257b9b95fb792c2b0f0b1ecbbcb30713b345475b332nicolasroard fillCategories(); 1258f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 1259f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 126064fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford if (mCurrentMenu != null) { 126164fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford mCurrentMenu.dismiss(); 126264fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford mCurrentMenu = null; 126364fc2ed005e2f1dc9ed0b34481c46a370c244b86John Hoford } 12646125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford if (mCurrentDialog != null) { 12656125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford mCurrentDialog.dismiss(); 12666125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford mCurrentDialog = null; 12676125a082a2b5ddc0d34a5198c5a7e826bd77e202John Hoford } 1268f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford // mLoadBitmapTask==null implies you have looked at the intent 1269f57e5885f74f586760daa9eeb0808c53ac4b2c9dJohn Hoford if (!mShowingTinyPlanet && (mLoadBitmapTask == null)) { 1270f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mCategoryFiltersAdapter.removeTinyPlanet(); 12715300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford } 127232cc4dd751569721aa19218b4d947145577060d0nicolasroard stopLoadingIndicator(); 1273a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 1274a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 127563a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 12763a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 1277ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard HistoryManager historyManager = new HistoryManager(); 1278ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard StateAdapter imageStateAdapter = new StateAdapter(this, 0); 1279588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage.reset(); 1280588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mMasterImage = MasterImage.getImage(); 1281ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard mMasterImage.setHistoryManager(historyManager); 1282ffc6aea8d586de43e246e60155e573fd34d90da2nicolasroard mMasterImage.setStateAdapter(imageStateAdapter); 128363a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 12844dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 12854dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard if (Runtime.getRuntime().maxMemory() > LIMIT_SUPPORTS_HIGHRES) { 12864dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(true); 12874dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } else { 12884dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(false); 12894dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } 129063a7dac01d394523799939596b960cb03321798dJohn Hoford } 129163a7dac01d394523799939596b960cb03321798dJohn Hoford 12922e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 12936a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard HistoryManager adapter = mMasterImage.getHistory(); 12949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 1295ed60979e64de8837dd1e2e8b2d208e34583d853cnicolasroard HistoryItem historyItem = adapter.getItem(0); 129632646aabd8228e1494ba090a02ffb8adaa369127nicolasroard ImagePreset original = null; 129732646aabd8228e1494ba090a02ffb8adaa369127nicolasroard if (RESET_TO_LOADED) { 129832646aabd8228e1494ba090a02ffb8adaa369127nicolasroard original = new ImagePreset(historyItem.getImagePreset()); 129932646aabd8228e1494ba090a02ffb8adaa369127nicolasroard } else { 130032646aabd8228e1494ba090a02ffb8adaa369127nicolasroard original = new ImagePreset(); 130132646aabd8228e1494ba090a02ffb8adaa369127nicolasroard } 130232646aabd8228e1494ba090a02ffb8adaa369127nicolasroard FilterRepresentation rep = null; 130332646aabd8228e1494ba090a02ffb8adaa369127nicolasroard if (historyItem != null) { 130432646aabd8228e1494ba090a02ffb8adaa369127nicolasroard rep = historyItem.getFilterRepresentation(); 130532646aabd8228e1494ba090a02ffb8adaa369127nicolasroard } 130632646aabd8228e1494ba090a02ffb8adaa369127nicolasroard mMasterImage.setPreset(original, rep, true); 13079594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 1308be9c8105b431de765f5811bfd170c899d1c8d3b3John Reck backToMain(); 13090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 13100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1311f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void showDefaultImageView() { 1312f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mEditorPlaceHolder.hide(); 1313f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mImageShow.setVisibility(View.VISIBLE); 1314f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilter(null); 1315f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard MasterImage.getImage().setCurrentFilterRepresentation(null); 1316f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 1317f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 1318f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public void backToMain() { 1319f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 1320f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (currentPanel instanceof MainPanel) { 1321f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard return; 1322f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 1323f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard loadMainPanel(); 1324f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard showDefaultImageView(); 1325f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } 1326f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 132775608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 132875608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 1329f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); 1330f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (currentPanel instanceof MainPanel) { 1331f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (!mImageShow.hasModifications()) { 1332a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 1333a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } else { 1334a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk AlertDialog.Builder builder = new AlertDialog.Builder(this); 1335a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setMessage(R.string.unsaved).setTitle(R.string.save_before_exit); 1336a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setPositiveButton(R.string.save_and_exit, new DialogInterface.OnClickListener() { 1337b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui @Override 1338a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 1339a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk saveImage(); 1340a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 1341a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 1342e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() { 1343b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui @Override 1344a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 1345a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 1346a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 1347a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 1348e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.show(); 1349a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 1350f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard } else { 1351f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard backToMain(); 135275608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 135375608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 1354e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 1355e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 1356a2c4bda1ed7b44085516b2e8f140637e4691bab1Ruben Brunk Toast.makeText(this, R.string.cannot_load_image, Toast.LENGTH_SHORT).show(); 1357e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 1358e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 1359e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 13600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 13610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 13620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 13630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 13640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 13650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 13660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 13670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 13680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 13690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 13700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 137163a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 13720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 13730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 13740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 13750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 13760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 13770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 13780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 13790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 13800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 13810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 13820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 138392e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 13840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 13850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 13860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 13870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 1388d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 13890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 13900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 13910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 13920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 13936416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 13940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 1395d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk if (mImageShow.hasModifications()) { 1396d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk // Get the name of the album, to which the image will be saved 139724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard File saveDir = SaveImage.getFinalSaveDirectory(this, mSelectedImageUri); 1398d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 1399d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 1400d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk showSavingProgress(albumName); 1401d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk mImageShow.saveImage(this, null); 1402d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk } else { 14036416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 14046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 14056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 14066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1407a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 14086416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 1409d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk hideSavingProgress(); 141052fa110135563740ebc27326afab4326bbb9b9f5John Hoford if (mLoadBitmapTask != null) { 141152fa110135563740ebc27326afab4326bbb9b9f5John Hoford mLoadBitmapTask.cancel(false); 141252fa110135563740ebc27326afab4326bbb9b9f5John Hoford } 14136416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 14140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 14150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1416afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford private void extractXMPData() { 1417afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford XMresults res = XmpPresets.extractXMPData( 1418afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford getBaseContext(), mMasterImage, getIntent().getData()); 1419afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford if (res == null) 1420afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford return; 1421afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford 1422afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalImageUri = res.originalimage; 1423afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford mOriginalPreset = res.preset; 1424afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford } 1425b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 1426b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui public Uri getSelectedImageUri() { 1427b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui return mSelectedImageUri; 1428b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui } 1429b3f62e4ed7a80010017dc3893460ca9043afb383ztenghui 14309737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard public void setHandlesSwipeForView(View view, float startX, float startY) { 1431860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (view != null) { 1432860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandlingSwipeButton = true; 1433860af325f2030a03c526e8551a85230d17df7b15nicolasroard } else { 1434860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandlingSwipeButton = false; 1435860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1436860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeView = view; 1437860af325f2030a03c526e8551a85230d17df7b15nicolasroard int[] location = new int[2]; 1438860af325f2030a03c526e8551a85230d17df7b15nicolasroard view.getLocationInWindow(location); 14399737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard mSwipeStartX = location[0] + startX; 1440860af325f2030a03c526e8551a85230d17df7b15nicolasroard mSwipeStartY = location[1] + startY; 1441860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1442860af325f2030a03c526e8551a85230d17df7b15nicolasroard 1443860af325f2030a03c526e8551a85230d17df7b15nicolasroard public boolean dispatchTouchEvent (MotionEvent ev) { 1444860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (mHandlingSwipeButton) { 14459737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard int direction = CategoryView.HORIZONTAL; 14469737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard if (mHandledSwipeView instanceof CategoryView) { 14479737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard direction = ((CategoryView) mHandledSwipeView).getOrientation(); 14489737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard } 1449860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (ev.getActionMasked() == MotionEvent.ACTION_MOVE) { 1450860af325f2030a03c526e8551a85230d17df7b15nicolasroard float delta = ev.getY() - mSwipeStartY; 14519737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard float distance = mHandledSwipeView.getHeight(); 14529737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard if (direction == CategoryView.VERTICAL) { 14539737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard delta = ev.getX() - mSwipeStartX; 14549737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard mHandledSwipeView.setTranslationX(delta); 14559737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard distance = mHandledSwipeView.getWidth(); 14569737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard } else { 14579737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard mHandledSwipeView.setTranslationY(delta); 14589737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard } 1459860af325f2030a03c526e8551a85230d17df7b15nicolasroard delta = Math.abs(delta); 14609737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard float transparency = Math.min(1, delta / distance); 1461860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeView.setAlpha(1.f - transparency); 1462860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeViewLastDelta = delta; 1463860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1464860af325f2030a03c526e8551a85230d17df7b15nicolasroard if (ev.getActionMasked() == MotionEvent.ACTION_CANCEL 1465860af325f2030a03c526e8551a85230d17df7b15nicolasroard || ev.getActionMasked() == MotionEvent.ACTION_UP) { 14669737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard mHandledSwipeView.setTranslationX(0); 1467860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeView.setTranslationY(0); 1468860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandledSwipeView.setAlpha(1.f); 1469860af325f2030a03c526e8551a85230d17df7b15nicolasroard mHandlingSwipeButton = false; 14709737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard float distance = mHandledSwipeView.getHeight(); 14719737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard if (direction == CategoryView.VERTICAL) { 14729737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard distance = mHandledSwipeView.getWidth(); 14739737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard } 14749737f3a18a8c302160e213afa30a4db710e41fb6nicolasroard if (mHandledSwipeViewLastDelta > distance) { 1475860af325f2030a03c526e8551a85230d17df7b15nicolasroard ((SwipableView) mHandledSwipeView).delete(); 1476860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1477860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1478860af325f2030a03c526e8551a85230d17df7b15nicolasroard return true; 1479860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 1480860af325f2030a03c526e8551a85230d17df7b15nicolasroard return super.dispatchTouchEvent(ev); 1481860af325f2030a03c526e8551a85230d17df7b15nicolasroard } 14829f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard 148332cc4dd751569721aa19218b4d947145577060d0nicolasroard public Point mHintTouchPoint = new Point(); 148432cc4dd751569721aa19218b4d947145577060d0nicolasroard 148532cc4dd751569721aa19218b4d947145577060d0nicolasroard public Point hintTouchPoint(View view) { 148632cc4dd751569721aa19218b4d947145577060d0nicolasroard int location[] = new int[2]; 148732cc4dd751569721aa19218b4d947145577060d0nicolasroard view.getLocationOnScreen(location); 148832cc4dd751569721aa19218b4d947145577060d0nicolasroard int x = mHintTouchPoint.x - location[0]; 148932cc4dd751569721aa19218b4d947145577060d0nicolasroard int y = mHintTouchPoint.y - location[1]; 149032cc4dd751569721aa19218b4d947145577060d0nicolasroard return new Point(x, y); 149132cc4dd751569721aa19218b4d947145577060d0nicolasroard } 149232cc4dd751569721aa19218b4d947145577060d0nicolasroard 14939f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard public void startTouchAnimation(View target, float x, float y) { 14949f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard final CategorySelected hint = 14959f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard (CategorySelected) findViewById(R.id.categorySelectedIndicator); 14969f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard int location[] = new int[2]; 14979f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard target.getLocationOnScreen(location); 149832cc4dd751569721aa19218b4d947145577060d0nicolasroard mHintTouchPoint.x = (int) (location[0] + x); 149932cc4dd751569721aa19218b4d947145577060d0nicolasroard mHintTouchPoint.y = (int) (location[1] + y); 15009f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard int locationHint[] = new int[2]; 15019f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard ((View)hint.getParent()).getLocationOnScreen(locationHint); 15029f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard int dx = (int) (x - (hint.getWidth())/2); 15039f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard int dy = (int) (y - (hint.getHeight())/2); 15049f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setTranslationX(location[0] - locationHint[0] + dx); 15059f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setTranslationY(location[1] - locationHint[1] + dy); 15069f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setVisibility(View.VISIBLE); 15079f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.animate().scaleX(2).scaleY(2).alpha(0).withEndAction(new Runnable() { 15089f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard @Override 15099f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard public void run() { 15109f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setVisibility(View.INVISIBLE); 15119f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setScaleX(1); 15129f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setScaleY(1); 15139f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard hint.setAlpha(1); 15149f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard } 15159f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard }); 15169f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard } 15170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1518