FilterShowActivity.java revision 4c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4
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; 226416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport android.app.WallpaperManager; 230ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.content.ContentValues; 242e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport android.content.Context; 25a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunkimport android.content.DialogInterface; 260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 27a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 29457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 3093dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Color; 31fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.graphics.Point; 320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 343d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 3592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport android.provider.MediaStore; 37fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentActivity; 38fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.support.v4.app.FragmentTransaction; 39fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 426019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroardimport android.view.*; 430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 44be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.AdapterView; 450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 46be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.FrameLayout; 47be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ImageButton; 48be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.LinearLayout; 49be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ListView; 50be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ShareActionProvider; 510ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 52be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.Toast; 530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 550addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 56560f959b659bb510a6ac9a92831534c5dfcf16benicolasroardimport com.android.gallery3d.filtershow.cache.CachingPipeline; 57cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroardimport com.android.gallery3d.filtershow.cache.FilteringPipeline; 5892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 596fe165b7d28299d5b2f97deb135b233d84eb300fRuben Brunkimport com.android.gallery3d.filtershow.crop.CropExtras; 601b1a79f1ccb6f847d017a72fa4c288b2195ffd99John Hofordimport com.android.gallery3d.filtershow.editors.BasicEditor; 61d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorCrop; 62915d60a378b0ca7bbe3af6312ccd2f4b94eb2da1John Hofordimport com.android.gallery3d.filtershow.editors.EditorDraw; 63d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorFlip; 64d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorInfo; 655aa08941bda0cfbcfba522c53937dd66867f890dJohn Hofordimport com.android.gallery3d.filtershow.editors.EditorManager; 6612c7c8ed14ca9dff9de64e121282f1970cbe7ae4John Hofordimport com.android.gallery3d.filtershow.editors.EditorRedEye; 67d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorRotate; 68d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorStraighten; 6944a499a64158cd5a12f8e44655f82b68c33bf3b2John Hofordimport com.android.gallery3d.filtershow.editors.EditorTinyPlanet; 70be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 718d2c7ee02c8fde53effc787c172b10b14ae34d42nicolasroardimport com.android.gallery3d.filtershow.filters.*; 72d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.imageshow.GeometryMetadata; 73de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 7492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 752c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet; 7663a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 7792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 7892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 79fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport com.android.gallery3d.filtershow.state.StateAdapter; 80fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport com.android.gallery3d.filtershow.state.StatePanel; 81a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunkimport com.android.gallery3d.filtershow.tools.BitmapTask; 8292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 832e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport com.android.gallery3d.filtershow.ui.FilterIconButton; 847592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 853992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 860addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 87f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunkimport com.android.photos.data.GalleryBitmapPool; 8892e2341248e99c691f38820503984bc5e2f18811nicolasroard 8992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 906416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport java.io.IOException; 91ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 9292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 9392e2341248e99c691f38820503984bc5e2f18811nicolasroard 94fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardpublic class FilterShowActivity extends FragmentActivity implements OnItemClickListener, 950ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 97fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private String mPanelFragmentTag = "StatePanel"; 98fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 996416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // fields for supporting crop action 100795776f67fe5bca902b09c01edec630879263341Ruben Brunk public static final String CROP_ACTION = "com.android.camera.action.CROP"; 1016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private CropExtras mCropExtras = null; 102ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private String mAction = ""; 103588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage mMasterImage = null; 1046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1054dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard private static final long LIMIT_SUPPORTS_HIGHRES = 134217728; // 128Mb 1064dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 107a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 108a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 1096416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public static final int MAX_BMAP_IN_INTENT = 990000; 11092e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 1110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 1120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1132c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard private ImageTinyPlanet mImageTinyPlanet = null; 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 115bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1175aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 1185aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 1190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 12192e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 1220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1235300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford private boolean mShowingTinyPlanet = false; 124bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 125bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 12692e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 1270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1280ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1290ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1300ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 133ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 13455550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 135d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 1362e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullFxFilter; 1372e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullBorderFilter; 1382e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private int mIconSeedSize = 140; 1393d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 140efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard private View mImageCategoryPanel = null; 1413a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 1420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 146f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk clearGalleryBitmapPool(); 147f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 148560f959b659bb510a6ac9a92831534c5dfcf16benicolasroard CachingPipeline.createRenderscriptContext(this); 14963a7dac01d394523799939596b960cb03321798dJohn Hoford setupMasterImage(); 1503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 1513a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillEditors(); 1525448bf8095483574649afcc2add7f153670c7450nicolasroard 1533a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 15483bd8d346d295e4fe06212da957feb77ee23c04dnicolasroard 155cdea10749cbdb6bab8f49f1b5b562b6e89781981nicolasroard if (getResources().getConfiguration().orientation 156cdea10749cbdb6bab8f49f1b5b562b6e89781981nicolasroard == Configuration.ORIENTATION_LANDSCAPE) { 157cdea10749cbdb6bab8f49f1b5b562b6e89781981nicolasroard mShowingImageStatePanel = true; 158cdea10749cbdb6bab8f49f1b5b562b6e89781981nicolasroard } 15983bd8d346d295e4fe06212da957feb77ee23c04dnicolasroard 160fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mShowingImageStatePanel && (savedInstanceState == null)) { 161fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard loadImageStatePanel(); 162b2fcd4252cbcee124e68412bb53a8b875ce9ba36nicolasroard } 163cdea10749cbdb6bab8f49f1b5b562b6e89781981nicolasroard 1643a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultPreset(); 1652e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 1663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard processIntent(); 1673a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 1685ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 1693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void loadXML() { 1700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1713a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 1726f3ff5b486e30221361afd066510a7374962fd09John Hoford ((ViewStub) findViewById(R.id.stateCategoryStub)).inflate(); 1736f3ff5b486e30221361afd066510a7374962fd09John Hoford ((ViewStub) findViewById(R.id.editorPanelStub)).inflate(); 1746f3ff5b486e30221361afd066510a7374962fd09John Hoford 1759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 176786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 177786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 178786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 179bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 180bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 181786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 182786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 183786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 184786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 185786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 1882c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet = (ImageTinyPlanet) findViewById(R.id.imageTinyPlanet); 1890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 1902c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageViews.add(mImageTinyPlanet); 1910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1923a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupEditors(); 1935aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 194733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard mEditorPlaceHolder.hide(); 195733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 19692e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 1972c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setImageLoader(mImageLoader); 198db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford 1993a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.clear(); 20098ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard mPanelController.setActivity(this); 2015aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mPanelController.setEditorPlaceHolder(mEditorPlaceHolder); 20298ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard 20392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 2042c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mPanelController.addImageView(findViewById(R.id.imageTinyPlanet)); 20592e2341248e99c691f38820503984bc5e2f18811nicolasroard 2063a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.addPanel(R.id.fxButton, R.id.fxList, 0); 2073a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.addPanel(R.id.borderButton, R.id.bordersList, 1); 2083a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.addPanel(R.id.geometryButton, R.id.geometryList, 2); 2093a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.addPanel(R.id.colorsButton, R.id.colorsFxList, 3); 210d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford 2113a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillFx((LinearLayout) findViewById(R.id.listFilters), R.id.fxButton); 212f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk setupBorders(); 21338fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard fillGeometry(); 21438fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard fillFilters(); 2156900cad45d240c9a54b92991538b6a33652e766cnicolasroard 21692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 2173a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2186019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard setupStatePanel(); 219efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard 220efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard mImageCategoryPanel = findViewById(R.id.imageCategoryPanel); 221efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard } 222efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard 223efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard public void hideCategoryPanel() { 224efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard mImageCategoryPanel.setVisibility(View.GONE); 225efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard } 226efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard 227efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard public void showCategoryPanel() { 228efe8b71220d03bdeb84ed095a4dd0c8434a35e3dnicolasroard mImageCategoryPanel.setVisibility(View.VISIBLE); 2296019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard } 2306019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard 2316019ad95f1c85786488d2d4cae1cbb665d33bd30nicolasroard public void setupStatePanel() { 23263a7dac01d394523799939596b960cb03321798dJohn Hoford mImageLoader.setAdapter(mMasterImage.getHistory()); 2336a07dfbe03c8396cc43840a1630ea480a2cff663John Hoford mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 2346a07dfbe03c8396cc43840a1630ea480a2cff663John Hoford mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList)); 2356a07dfbe03c8396cc43840a1630ea480a2cff663John Hoford mPanelController.setCurrentPanel(R.id.fxButton); 2363a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2373a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 23838fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard private void fillPanel(Vector<FilterRepresentation> representations, int layoutId, int buttonId) { 23938fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard ImageButton button = (ImageButton) findViewById(buttonId); 24038fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard LinearLayout layout = (LinearLayout) findViewById(layoutId); 24138fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 24238fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard for (FilterRepresentation representation : representations) { 24338fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard setupFilterRepresentationButton(representation, layout, button); 24438fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard } 24538fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard } 24638fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 2473a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillFilters() { 2483a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 2493a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 2503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard filtersManager.addEffects(filtersRepresentations); 25138fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard fillPanel(filtersRepresentations, R.id.listColorsFx, R.id.colorsButton); 2523a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2533a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2543a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillGeometry() { 25538fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 25638fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 25738fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 2583a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard GeometryMetadata geo = new GeometryMetadata(); 2593a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int[] editorsId = geo.getEditorIds(); 2603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard for (int i = 0; i < editorsId.length; i++) { 2613a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int editorId = editorsId[i]; 2623a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard GeometryMetadata geometry = new GeometryMetadata(geo); 2633a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setEditorId(editorId); 2643a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorInfo editorInfo = (EditorInfo) mEditorPlaceHolder.getEditor(editorId); 2653a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setTextId(editorInfo.getTextId()); 2663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setOverlayId(editorInfo.getOverlayId()); 2673a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setOverlayOnly(editorInfo.getOverlayOnly()); 26838fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard filtersRepresentations.add(geometry); 2693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 27038fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard 27138fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard filtersManager.addTools(filtersRepresentations); 27238fc044a6d45e7283f05e6fe800bc5faf9f2e573nicolasroard fillPanel(filtersRepresentations, R.id.listGeometry, R.id.geometryButton); 2733a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2743a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2753a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void processIntent() { 2760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 277a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 278a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 279a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 280a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 281ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mAction = intent.getAction(); 282ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 283d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (intent.getData() != null) { 284d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(intent.getData()); 2850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 2860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 2870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 28863926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 2896416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Handle behavior for various actions 290ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mAction.equalsIgnoreCase(CROP_ACTION)) { 2916416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Bundle extras = intent.getExtras(); 2926416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (extras != null) { 2936416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras = new CropExtras(extras.getInt(CropExtras.KEY_OUTPUT_X, 0), 2946416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_OUTPUT_Y, 0), 2956416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE, true) && 2966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE_UP_IF_NEEDED, false), 2976416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_X, 0), 2986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_Y, 0), 2996416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SET_AS_WALLPAPER, false), 3006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_RETURN_DATA, false), 3016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT), 3026416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getString(CropExtras.KEY_OUTPUT_FORMAT), 3036416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SHOW_WHEN_LOCKED, false), 3046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_X), 3056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_Y)); 3066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 3076416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getShowWhenLocked()) { 3086416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 3096416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 3106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setCropExtras(mCropExtras); 3116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 312d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford // FIXME: moving to editors breaks the crop action 313be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford EditorCrop crop = (EditorCrop) mEditorPlaceHolder.getEditor(EditorCrop.ID); 314be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford 315be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford crop.setExtras(mCropExtras); 3166416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String s = getString(R.string.Fixed); 317be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford crop.setAspectString(s); 318be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford crop.setCropActionFlag(true); 3196416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mPanelController.setFixedAspect(mCropExtras.getAspectX() > 0 3206416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk && mCropExtras.getAspectY() > 0); 3216416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 32263926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk } 3230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3253a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setupEditors() { 3263a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 3273a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorManager.addEditors(mEditorPlaceHolder); 3283a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setOldViews(mImageViews); 3293a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setImageLoader(mImageLoader); 3303a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3313a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3323a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillEditors() { 3333a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorDraw()); 3343a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new BasicEditor()); 3353a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 3363a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); 3373a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRedEye()); 3383a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorCrop()); 3393a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorFlip()); 3403a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRotate()); 3413a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorStraighten()); 3423a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3433a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3443a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setDefaultValues() { 3453a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageFilter.setActivityForMemoryToasts(this); 3463a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3473a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Resources res = getResources(); 3483bc806a8575072c9459fe3698675d3713300d1d3nicolasroard FiltersManager.setResources(res); 3493a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setDefaultBackgroundColor(res.getColor(R.color.background_screen)); 3513a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard // TODO: get those values from XML. 3523a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 3533a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 3543a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 3553a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setTextSize((int) getPixelsFromDip(12)); 3563a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setTextPadding((int) getPixelsFromDip(10)); 3573a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4)); 3583a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setOriginalTextSize((int) getPixelsFromDip(18)); 3593a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setOriginalText(res.getString(R.string.original_picture_text)); 3603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mIconSeedSize = res.getDimensionPixelSize(R.dimen.thumbnail_size); 3614e1d35506bb72a2a6c16f08f8bd86bdfe8d1c902nicolasroard // TODO: pick correct value 3624e1d35506bb72a2a6c16f08f8bd86bdfe8d1c902nicolasroard // MasterImage.setIconSeedSize(mIconSeedSize); 3633a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3643a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 3653a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 3663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 3673a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 3683a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 3703a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 3713a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 3723a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3733a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 374d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 37500914f56c3390caa224b1c9fc07624665de40113John Reck final View filters = findViewById(R.id.filtersPanel); 37600914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 377733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 378733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.INVISIBLE); 37900914f56c3390caa224b1c9fc07624665de40113John Reck filters.setVisibility(View.INVISIBLE); 380733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.VISIBLE); 381733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 382d4653680279a85720f792f21e32578ccf5c6c34fJohn Hoford View tinyPlanetView = findViewById(EditorTinyPlanet.ID); 383d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (tinyPlanetView != null) { 3845300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford mShowingTinyPlanet = false; 385d49d53206a197b08ec4754d8751b6860e33d9f48John Reck tinyPlanetView.setVisibility(View.GONE); 386d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 387d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = new LoadBitmapTask(tinyPlanetView); 388d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 389d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 390d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 391f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk private void setupBorders() { 392f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk LinearLayout list = (LinearLayout) findViewById(R.id.listBorders); 393f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk Vector<FilterRepresentation> borders = new Vector<FilterRepresentation>(); 394d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk ImageButton borderButton = (ImageButton) findViewById(R.id.borderButton); 395d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk 396d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk // The "no border" implementation 397f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk borders.add(new FilterImageBorderRepresentation(0)); 398d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk 399d88683e307eb058e71c083bb795bd31945ed1292Ruben Brunk // Google-build borders 4004c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford FiltersManager.getManager().addBorders(this, borders); 4014c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford 402f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk for (int i = 0; i < borders.size(); i++) { 403f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FilterRepresentation filter = borders.elementAt(i); 404f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk if (i == 0) { 405f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk filter.setName(getString(R.string.none)); 4069090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 407f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FilterIconButton b = setupFilterRepresentationButton(filter, list, borderButton); 408f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk if (i == 0) { 409f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk mNullBorderFilter = b; 410f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk mNullBorderFilter.setSelected(true); 4119090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4129090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4139090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4149090141f56b4e2000704d0c4a778d3a819821726nicolasroard 4158965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 4163d4f2c7443f6f6015efab769bfaad19263137c67John Hoford View mTinyPlanetButton; 417d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 4183d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 419d49d53206a197b08ec4754d8751b6860e33d9f48John Reck public LoadBitmapTask(View button) { 4203d4f2c7443f6f6015efab769bfaad19263137c67John Hoford mTinyPlanetButton = button; 421d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 4223d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4233d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4243d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 425d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 4268965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!mImageLoader.loadBitmap(params[0], mBitmapSize)) { 4278965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 4288965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 4298965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk publishProgress(mImageLoader.queryLightCycle360()); 4308965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 4313d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4323d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4333d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4348965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 43500914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 4366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 4378965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 4386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 4398965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 4405300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford mShowingTinyPlanet = true; 4418965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk mTinyPlanetButton.setVisibility(View.VISIBLE); 4428965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 44300914f56c3390caa224b1c9fc07624665de40113John Reck } 44400914f56c3390caa224b1c9fc07624665de40113John Reck 44500914f56c3390caa224b1c9fc07624665de40113John Reck @Override 4463d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 447588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 4483d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 4493d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 4503d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 451588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 4528965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 4538965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk cannotLoadImage(); 4543d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4558965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 456733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View loading = findViewById(R.id.loading); 457733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.GONE); 458733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View filters = findViewById(R.id.filtersPanel); 459733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard filters.setVisibility(View.VISIBLE); 460b8270a94e539fc1944ae350c73b00b9df45832d5nicolasroard if (PanelController.useAnimationsLayer()) { 461d31603218b1f5f58a3617a21425622790ffff472nicolasroard float y = filters.getY(); 462d31603218b1f5f58a3617a21425622790ffff472nicolasroard filters.setY(y + filters.getHeight()); 463d31603218b1f5f58a3617a21425622790ffff472nicolasroard filters.animate().setDuration(600).y(y).withLayer().start(); 464d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 465733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 466733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.VISIBLE); 467733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 468cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); 469cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 470cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setOriginal(largeBitmap); 471cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard float previewScale = (float) largeBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 472cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setPreviewScaleFactor(previewScale); 4734dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard Bitmap highresBitmap = mImageLoader.getOriginalBitmapHighres(); 4744dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard if (highresBitmap != null) { 4754dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard float highResPreviewScale = (float) highresBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 4764dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard pipeline.setHighResPreviewScaleFactor(highResPreviewScale); 4774dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } 47833fca9ef7f89b60e3b1a361fdf5fc597b3994e74nicolasroard pipeline.turnOnPipeline(true); 479be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford MasterImage.getImage().setOriginalGeometry(largeBitmap); 480d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 481ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 482ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mAction == CROP_ACTION) { 483be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford mPanelController.showComponent(findViewById(EditorCrop.ID)); 484ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } else if (mAction == TINY_PLANET_ACTION) { 485be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford mPanelController.showComponent(findViewById(EditorTinyPlanet.ID)); 486ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } 4873d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 4883d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4893d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4903d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4913d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 492f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk private void clearGalleryBitmapPool() { 493f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk (new AsyncTask<Void, Void, Void>() { 494f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk @Override 495f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk protected Void doInBackground(Void... params) { 496f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk // Free memory held in Gallery's Bitmap pool. May be O(n) for n bitmaps. 497f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk GalleryBitmapPool.getInstance().clear(); 498f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk return null; 499f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 500f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk }).execute(); 501f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk } 502f07bb27436a65b233c1caf4aa06c6257a9cf4046Ruben Brunk 5033d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 5043d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 505d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 506d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 5073d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 50821a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk // TODO: Using singletons is a bad design choice for many of these 50921a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk // due static reference leaks and in general. Please refactor. 5108898eaabfa0cdf70e00078d2dea810f9aab4dfd1Ruben Brunk FilteringPipeline.getPipeline().turnOnPipeline(false); 511b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk MasterImage.reset(); 512b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk FilteringPipeline.reset(); 513b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk ImageFilter.resetStatics(); 514f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FiltersManager.getPreviewManager().freeRSFilterScripts(); 515f79f954f4eb23bce55061c683a07fc7b3a965451Ruben Brunk FiltersManager.getManager().freeRSFilterScripts(); 516e29b57330be471dd74672a7bdc74a93dcae3a98bnicolasroard FiltersManager.getHighresManager().freeRSFilterScripts(); 51721a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk FiltersManager.reset(); 518560f959b659bb510a6ac9a92831534c5dfcf16benicolasroard CachingPipeline.destroyRenderScriptContext(); 5193d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 5203d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5213d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5224d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard private int translateMainPanel(View viewPanel) { 5234d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int accessoryPanelWidth = viewPanel.getWidth(); 524948a4e6e38d8d9ec9926877524478d6692437105nicolasroard if (accessoryPanelWidth == 0) { 525948a4e6e38d8d9ec9926877524478d6692437105nicolasroard // TODO: fixes this by using a fragment. Currently, 526948a4e6e38d8d9ec9926877524478d6692437105nicolasroard // the first time we get called the panel hasn't been 527948a4e6e38d8d9ec9926877524478d6692437105nicolasroard // layed out yet, so we get a size zero. 528948a4e6e38d8d9ec9926877524478d6692437105nicolasroard accessoryPanelWidth = (int) getPixelsFromDip(200); 529948a4e6e38d8d9ec9926877524478d6692437105nicolasroard } 5304d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainViewWidth = findViewById(R.id.mainView).getWidth(); 5314d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainPanelWidth = mImageShow.getDisplayedImageBounds().width(); 532f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard if (mainPanelWidth == 0) { 533f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard mainPanelWidth = mainViewWidth; 534f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard } 535cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard int filtersPanelWidth = findViewById(R.id.filtersPanel).getWidth(); 536cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard if (mainPanelWidth < filtersPanelWidth) { 537cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard mainPanelWidth = filtersPanelWidth; 538cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard } 5394d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int leftOver = mainViewWidth - mainPanelWidth - accessoryPanelWidth; 5404d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard if (leftOver < 0) { 5414d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return -accessoryPanelWidth; 5424d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 5434d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return 0; 5444d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 5454d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard 5460f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 5470f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk DisplayMetrics metrics = new DisplayMetrics(); 548fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford Display display = getWindowManager().getDefaultDisplay(); 5490f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk Point size = new Point(); 550fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getSize(size); 551fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getMetrics(metrics); 552fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford int msize = Math.min(size.x, size.y); 5530f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk return (133 * msize) / metrics.densityDpi; 554fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 555fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 5560addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 557ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 558ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 559ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 560ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 561ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 562ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 563ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 564ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 565ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 5660addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 5670addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 5680addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 5690addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 5700addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 5710addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 5720addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 573ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 574ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 575ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 576ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 577ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 578ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 57908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 58008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 581ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 582ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 583ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 5840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 5850ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 5860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 5870ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5880ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5890ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 5900ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 5910ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 5920ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5930ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 594ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 5950ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 5960ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5970ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 5990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 60092e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 60192e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 6020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6030ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6040ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 6050ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 6060ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 6070ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 6080ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6090ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 6100addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 6110ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 6120ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 6130ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6140ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 6160ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 6170ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 6180ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 6190ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 6200ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 6210ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6220ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6230ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 6240ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 6250ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6260ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6279594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 6289594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 6299594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 630bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 631bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 632bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 6339594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 634bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 6359594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6360ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 6370ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 6380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 6390ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 64023e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 64123e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 64223e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 64323e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 64463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 6459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6479594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 64892e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 6496e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 6506e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 6516e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6526e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 6536e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6546e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6556e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6566e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6576e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 6586e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 6596e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6606e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 6616e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6626e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6636e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6646e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6659594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 6669594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 6679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 66819d2d157146841442feaef6e0be002581b69335bJohn Hoford mPanelController.resetParameters(); 66963a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6709594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 67163a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 6739594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6749594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6769594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 67763a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6789594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 67963a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6809594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 6819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6829594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6839594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 684f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 685f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 686f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 687f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 688bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 689bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 690bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 691bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 6929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 6939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 6949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 6989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 700bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 701bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu if (mSaveButton != null) 702bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 703bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 704bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 705d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard public FilterIconButton setupFilterRepresentationButton(FilterRepresentation representation, LinearLayout panel, View button) { 706d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard LayoutInflater inflater = 707d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 708d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterIconButton icon = (FilterIconButton) inflater.inflate(R.layout.filtericonbutton, 709d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard panel, false); 7106900cad45d240c9a54b92991538b6a33652e766cnicolasroard if (representation.getTextId() != 0) { 7116900cad45d240c9a54b92991538b6a33652e766cnicolasroard representation.setName(getString(representation.getTextId())); 7126900cad45d240c9a54b92991538b6a33652e766cnicolasroard } 713d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard String text = representation.getName(); 71431e52aae5eeefd8383cb238e7dd3047e883968efnicolasroard icon.setup(text, mPanelController, panel); 715d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard icon.setFilterRepresentation(representation); 716be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford icon.setId(representation.getEditorId()); 7172e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mPanelController.addComponent(button, icon); 7182e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk panel.addView(icon); 7192e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk return icon; 7202e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 7212e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 7223a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillFx(LinearLayout listFilters, int buttonId) { 7233a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageButton button = (ImageButton) findViewById(buttonId); 7243a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 725d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation nullFx = new FilterFxRepresentation(getString(R.string.none), 0, R.string.none); 7263a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mNullFxFilter = setupFilterRepresentationButton(nullFx, listFilters, button); 7272e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mNullFxFilter.setSelected(true); 7282e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 729f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 7304c792cc7b44be1ea0a2cfc2e7259828b81b0e4a4John Hoford FiltersManager.getManager().addLooks(this, filtersRepresentations); 731f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 7323a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupFilterRepresentationButton(representation, listFilters, button); 733f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard } 734f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard 7353a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 7360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7373a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard public void setDefaultPreset() { 7380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 7393a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty 7403a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard preset.setImageLoader(mImageLoader); 7413a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 74263a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(preset, true); 7430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 7460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 74792e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 7480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 7500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 7510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 7528537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 7530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 7570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 7580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 7590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7605b85b092af404effd32aa513f9c45a0232d7ae81nicolasroard mEditorPlaceHolder.hide(); 7610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 764bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 765bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 766bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 767fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidateOptionsMenu(); 768fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 769bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 770fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private void loadImageStatePanel() { 771fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard StatePanel statePanel = new StatePanel(); 772fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (findViewById(R.id.state_panel_container) != null) { 773fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 774fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard transaction.replace(R.id.state_panel_container, statePanel, mPanelFragmentTag); 775fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard transaction.commit(); 776bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 777bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 778bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 779a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 780a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 781a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 782a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 7833a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 7843a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 78563b33e8c7ebeeec2b520fb419d89ada712ad6604nicolasroard if (getResources().getConfiguration().orientation 78663b33e8c7ebeeec2b520fb419d89ada712ad6604nicolasroard == Configuration.ORIENTATION_LANDSCAPE) { 78763b33e8c7ebeeec2b520fb419d89ada712ad6604nicolasroard mShowingImageStatePanel = true; 788a2729a16717ec0e7bdaf8fa112d7a1d1760ba2e3nicolasroard } else if (mShowingImageStatePanel) { 789a2729a16717ec0e7bdaf8fa112d7a1d1760ba2e3nicolasroard toggleImageStatePanel(); 79063b33e8c7ebeeec2b520fb419d89ada712ad6604nicolasroard } 791fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mShowingImageStatePanel) { 792fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard loadImageStatePanel(); 793fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 7945300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford if (mShowingTinyPlanet == false) { 7955300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford View tinyPlanetView = findViewById(EditorTinyPlanet.ID); 7965300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford if (tinyPlanetView != null) { 7975300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford tinyPlanetView.setVisibility(View.GONE); 7985300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford } 7995300e0c54110d67f85fdb2ee9c90be58f50ca4acJohn Hoford } 8003a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard final View loading = findViewById(R.id.loading); 8013a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loading.setVisibility(View.GONE); 802a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 803a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 80463a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 8053a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 8063a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 80763a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter mHistoryAdapter = new HistoryAdapter( 80863a7dac01d394523799939596b960cb03321798dJohn Hoford this, R.layout.filtershow_history_operation_row, 80963a7dac01d394523799939596b960cb03321798dJohn Hoford R.id.rowTextView); 81063a7dac01d394523799939596b960cb03321798dJohn Hoford 811fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard StateAdapter mImageStateAdapter = new StateAdapter(this, 0); 812588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage.reset(); 813588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mMasterImage = MasterImage.getImage(); 81463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setHistoryAdapter(mHistoryAdapter); 81563a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setStateAdapter(mImageStateAdapter); 81663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 8178d2c7ee02c8fde53effc787c172b10b14ae34d42nicolasroard mMasterImage.setImageLoader(mImageLoader); 8184dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard 8194dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard if (Runtime.getRuntime().maxMemory() > LIMIT_SUPPORTS_HIGHRES) { 8204dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(true); 8214dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } else { 8224dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard mMasterImage.setSupportsHighRes(false); 8234dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard } 82463a7dac01d394523799939596b960cb03321798dJohn Hoford } 82563a7dac01d394523799939596b960cb03321798dJohn Hoford 8262e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk public void dispatchNullFilterClick() { 827af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.onClick(mNullFxFilter); 828af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullBorderFilter.onClick(mNullBorderFilter); 8292e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 830af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford 8312e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 8322e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk dispatchNullFilterClick(); 83363a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 8349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 8359594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 83663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(original, true); 8373992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.resetParameters(); 8389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 8390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 84175608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 84275608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 84375608166f54891972ebad3d8fd958fed9a5300e6nicolasroard if (mPanelController.onBackPressed()) { 844a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk if (detectSpecialExitCases()) { 845a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk saveImage(); 846a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } else if(!mImageShow.hasModifications()) { 847a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 848a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } else { 849a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk AlertDialog.Builder builder = new AlertDialog.Builder(this); 850a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setMessage(R.string.unsaved).setTitle(R.string.save_before_exit); 851a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk builder.setPositiveButton(R.string.save_and_exit, new DialogInterface.OnClickListener() { 852a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 853a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk saveImage(); 854a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 855a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 856e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() { 857a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void onClick(DialogInterface dialog, int id) { 858a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 859a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 860a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk }); 861e7aa98e533531f5e82f5de37c24701bc44bc6cd1Ruben Brunk builder.show(); 862a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 86375608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 86475608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 865e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 8663a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard public PanelController getPanelController() { 8673a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard return mPanelController; 8683a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 8693a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 870e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 871e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard CharSequence text = getString(R.string.cannot_load_image); 872e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 873e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard toast.show(); 874e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 875e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 876e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 8770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 8780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 8800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 8810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 8820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 8830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 8860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 8870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 88863a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 8890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 8900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 8930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 8940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 8950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 8960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 8970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 8980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 90092e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 9020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 9030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 9040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 905d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 9060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveToExtraUri = false; 9116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveAsWallpaper = false; 9126416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mReturnAsExtra = false; 913ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private boolean mOutputted = false; 9146416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 9150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 916a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk handleSpecialExitCases(); 917a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk if (!mOutputted) { 918a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk if (mImageShow.hasModifications()) { 919a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk // Get the name of the album, to which the image will be saved 920a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 921a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 922a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 923a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk showSavingProgress(albumName); 924a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk mImageShow.saveImage(this, null); 925a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } else { 926a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk done(); 927a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 928a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 929a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 930a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk 931a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public boolean detectSpecialExitCases() { 932a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk return mCropExtras != null && (mCropExtras.getExtraOutput() != null 933a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk || mCropExtras.getSetAsWallpaper() || mCropExtras.getReturnData()); 934a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk } 935a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk 936a3dbbd7dcbd9aead7b10653b95685f5d2a71947aRuben Brunk public void handleSpecialExitCases() { 9376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras != null) { 9386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getExtraOutput() != null) { 9396416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveToExtraUri = true; 940ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 9416416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getSetAsWallpaper()) { 9436416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveAsWallpaper = true; 944ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 9456416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9466416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getReturnData()) { 9476416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mReturnAsExtra = true; 948ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 9496416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 950ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mOutputted) { 9516416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setUseCropExtrasFlag(true); 9526416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(null); 9536416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.returnFilteredResult(this); 9546416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9556416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9566416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9576416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 9586416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void onFilteredResult(Bitmap filtered) { 9596416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Intent intent = new Intent(); 9606416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_CROPPED_RECT, mImageShow.getImageCropBounds()); 9616416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveToExtraUri) { 9626416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveToUri(filtered, mCropExtras.getExtraOutput(), 9636416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras.getOutputFormat(), this); 9646416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9656416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveAsWallpaper) { 966a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk setWallpaperInBackground(filtered); 96755550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } 9686416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mReturnAsExtra) { 9696416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (filtered != null) { 9706416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bmapSize = filtered.getRowBytes() * filtered.getHeight(); 9716416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk /* 9726416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Max size of Binder transaction buffer is 1Mb, so constrain 9736416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Bitmap to be somewhat less than this, otherwise we get 9746416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * TransactionTooLargeExceptions. 9756416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk */ 9766416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (bmapSize > MAX_BMAP_IN_INTENT) { 9776416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "Bitmap too large to be returned via intent"); 9786416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 9796416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_DATA, filtered); 9806416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9816416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9826416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9836416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk setResult(RESULT_OK, intent); 9846416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!mSaveToExtraUri) { 9856416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 9866416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9876416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9886416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 989a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk void setWallpaperInBackground(final Bitmap bmap) { 990a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk Toast.makeText(this, R.string.setting_wallpaper, Toast.LENGTH_LONG).show(); 991c01187e2ef31115518cd1eb900ebf4cfa14e1976Ruben Brunk BitmapTask.Callbacks<FilterShowActivity> cb = new BitmapTask.Callbacks<FilterShowActivity>() { 992a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 993a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public void onComplete(Bitmap result) {} 994a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 995a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 996a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public void onCancel() {} 997a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 998a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 999a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public Bitmap onExecute(FilterShowActivity param) { 1000a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk try { 1001a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk WallpaperManager.getInstance(param).setBitmap(bmap); 1002a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } catch (IOException e) { 1003a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk Log.w(LOGTAG, "fail to set wall paper", e); 1004a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1005a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk return null; 1006a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1007a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk }; 1008c01187e2ef31115518cd1eb900ebf4cfa14e1976Ruben Brunk (new BitmapTask<FilterShowActivity>(cb)).execute(this); 1009a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1010a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 10116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 1012ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mOutputted) { 10136416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk hideSavingProgress(); 10146416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10156416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 10160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 1019e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 10200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1023