FilterShowActivity.java revision 3a5556d3ce5dba33021867468ae0d5d222f256db
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; 200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.app.Activity; 21ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport android.app.ProgressDialog; 226416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport android.app.WallpaperManager; 230ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.content.ContentValues; 242e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport android.content.Context; 250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 26a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 28457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 29457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.BitmapFactory; 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; 37fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 40fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.view.Display; 412e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport android.view.LayoutInflater; 420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Menu; 439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.view.MenuItem; 440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View; 450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 4698ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroardimport android.view.WindowManager; 47be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.AdapterView; 480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 49be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.FrameLayout; 50be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ImageButton; 51be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.LinearLayout; 52be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ListView; 53be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.ShareActionProvider; 540ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 55be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport android.widget.Toast; 560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 580addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 59cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroardimport com.android.gallery3d.filtershow.cache.FilteringPipeline; 6092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 611b1a79f1ccb6f847d017a72fa4c288b2195ffd99John Hofordimport com.android.gallery3d.filtershow.editors.BasicEditor; 62d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorCrop; 63915d60a378b0ca7bbe3af6312ccd2f4b94eb2da1John Hofordimport com.android.gallery3d.filtershow.editors.EditorDraw; 64d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorFlip; 65d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorInfo; 665aa08941bda0cfbcfba522c53937dd66867f890dJohn Hofordimport com.android.gallery3d.filtershow.editors.EditorManager; 6712c7c8ed14ca9dff9de64e121282f1970cbe7ae4John Hofordimport com.android.gallery3d.filtershow.editors.EditorRedEye; 68d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorRotate; 69d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorStraighten; 7044a499a64158cd5a12f8e44655f82b68c33bf3b2John Hofordimport com.android.gallery3d.filtershow.editors.EditorTinyPlanet; 71be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 72be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.filters.FilterColorBorderRepresentation; 73be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.filters.FilterFxRepresentation; 74be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.filters.FilterImageBorderRepresentation; 75be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.filters.FilterRepresentation; 76be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.filters.FiltersManager; 77be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.filters.ImageFilter; 78be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterBorder; 79be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterRS; 80d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.imageshow.GeometryMetadata; 81de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 8292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 832c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet; 8492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageZoom; 8563a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 8692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 8792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 88a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunkimport com.android.gallery3d.filtershow.tools.BitmapTask; 8992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 902e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport com.android.gallery3d.filtershow.ui.FilterIconButton; 917592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 923992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 930addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 9492e2341248e99c691f38820503984bc5e2f18811nicolasroard 9592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport java.io.IOException; 97ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 9892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 9992e2341248e99c691f38820503984bc5e2f18811nicolasroard 1000ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener, 1010ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 1020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1036416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // fields for supporting crop action 104795776f67fe5bca902b09c01edec630879263341Ruben Brunk public static final String CROP_ACTION = "com.android.camera.action.CROP"; 1056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private CropExtras mCropExtras = null; 106ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private String mAction = ""; 107588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage mMasterImage = null; 1086416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 109a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 110a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 1116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public static final int MAX_BMAP_IN_INTENT = 990000; 11292e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 1130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1152c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard private ImageTinyPlanet mImageTinyPlanet = null; 1160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 117bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1195aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 1205aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 1210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 12392e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 124f129cb70f4d2b43a147b399d91650414defa6dd9nicolasroard private static int mImageBorderSize = 4; // in percent 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 127bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 128bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 12992e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 1300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1340ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 136ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 13755550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 138d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 1392e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullFxFilter; 1402e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullBorderFilter; 1412e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private int mIconSeedSize = 140; 1423d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 1433a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 1440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 14863a7dac01d394523799939596b960cb03321798dJohn Hoford setupMasterImage(); 1493a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 1503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillEditors(); 1515448bf8095483574649afcc2add7f153670c7450nicolasroard 1523a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 1533a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultPreset(); 1542e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 1553a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard processIntent(); 1563a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 1575ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 1583a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void loadXML() { 1590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 1619594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 162786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 163786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 164786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 165bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 166bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 167786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 168786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 169786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 170786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 171786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 1742c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet = (ImageTinyPlanet) findViewById(R.id.imageTinyPlanet); 1750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 1762c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageViews.add(mImageTinyPlanet); 1770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1783a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupEditors(); 1795aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 180733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard mEditorPlaceHolder.hide(); 181733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 18292e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 1832c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setImageLoader(mImageLoader); 184db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford 1853a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.clear(); 18698ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard mPanelController.setActivity(this); 1875aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mPanelController.setEditorPlaceHolder(mEditorPlaceHolder); 18898ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard 18992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 1902c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mPanelController.addImageView(findViewById(R.id.imageTinyPlanet)); 19192e2341248e99c691f38820503984bc5e2f18811nicolasroard 1923a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.addPanel(R.id.fxButton, R.id.fxList, 0); 1933a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.addPanel(R.id.borderButton, R.id.bordersList, 1); 1943a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.addPanel(R.id.geometryButton, R.id.geometryList, 2); 1953a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.addPanel(R.id.colorsButton, R.id.colorsFxList, 3); 196d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford 1973a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillFilters(); 1983a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillGeometry(); 1993a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillFx((LinearLayout) findViewById(R.id.listFilters), R.id.fxButton); 2003a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard LoadBordersTask loadBorders = new LoadBordersTask((LinearLayout) findViewById(R.id.listBorders)); 2013a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadBorders.execute(); 2026900cad45d240c9a54b92991538b6a33652e766cnicolasroard 20392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 2043a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 2060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 2070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 20963a7dac01d394523799939596b960cb03321798dJohn Hoford operationsList.setAdapter(mMasterImage.getHistory()); 2100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 2113a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 212bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 21363a7dac01d394523799939596b960cb03321798dJohn Hoford imageStateList.setAdapter(mMasterImage.getState()); 21463a7dac01d394523799939596b960cb03321798dJohn Hoford mImageLoader.setAdapter(mMasterImage.getHistory()); 2150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 21692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 2178537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), 2189820e7e753b7e1977ef3d2163605431769ce9165nicolasroard findViewById(R.id.panelAccessoryViewList), 2199820e7e753b7e1977ef3d2163605431769ce9165nicolasroard findViewById(R.id.applyEffect)); 22063a7dac01d394523799939596b960cb03321798dJohn Hoford 2213a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mPanelController.setCurrentPanel(R.id.fxButton); 2223a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2233a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2243a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillFilters() { 2253a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 2263a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2273a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 2283a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard filtersManager.addEffects(filtersRepresentations); 2293a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2303a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageButton colorsButton = (ImageButton) findViewById(R.id.colorsButton); 2313a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 2323a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupFilterRepresentationButton(representation, 2333a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard (LinearLayout) findViewById(R.id.listColorsFx), colorsButton); 2343a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2353a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2363a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2373a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillGeometry() { 2383a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard // TODO: move to a separate function. 2393a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard GeometryMetadata geo = new GeometryMetadata(); 2403a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int[] editorsId = geo.getEditorIds(); 2413a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageButton geometryButton = (ImageButton) findViewById(R.id.geometryButton); 2423a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard for (int i = 0; i < editorsId.length; i++) { 2433a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int editorId = editorsId[i]; 2443a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard GeometryMetadata geometry = new GeometryMetadata(geo); 2453a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setEditorId(editorId); 2463a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorInfo editorInfo = (EditorInfo) mEditorPlaceHolder.getEditor(editorId); 2473a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setTextId(editorInfo.getTextId()); 2483a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setOverlayId(editorInfo.getOverlayId()); 2493a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry.setOverlayOnly(editorInfo.getOverlayOnly()); 2503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupFilterRepresentationButton( 2513a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard geometry, (LinearLayout) findViewById(R.id.listGeometry), geometryButton); 2523a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2533a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 2543a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 2553a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void processIntent() { 2560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 257a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 258a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 259a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 260a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 261ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mAction = intent.getAction(); 262ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 263d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (intent.getData() != null) { 264d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(intent.getData()); 2650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 2660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 2670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 26863926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 2696416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Handle behavior for various actions 270ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mAction.equalsIgnoreCase(CROP_ACTION)) { 2716416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Bundle extras = intent.getExtras(); 2726416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (extras != null) { 2736416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras = new CropExtras(extras.getInt(CropExtras.KEY_OUTPUT_X, 0), 2746416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_OUTPUT_Y, 0), 2756416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE, true) && 2766416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE_UP_IF_NEEDED, false), 2776416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_X, 0), 2786416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_Y, 0), 2796416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SET_AS_WALLPAPER, false), 2806416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_RETURN_DATA, false), 2816416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT), 2826416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getString(CropExtras.KEY_OUTPUT_FORMAT), 2836416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SHOW_WHEN_LOCKED, false), 2846416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_X), 2856416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_Y)); 2866416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 2876416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getShowWhenLocked()) { 2886416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 2896416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 2906416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setCropExtras(mCropExtras); 2916416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 292d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford // FIXME: moving to editors breaks the crop action 293be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford EditorCrop crop = (EditorCrop) mEditorPlaceHolder.getEditor(EditorCrop.ID); 294be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford 295be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford crop.setExtras(mCropExtras); 2966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String s = getString(R.string.Fixed); 297be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford crop.setAspectString(s); 298be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford crop.setCropActionFlag(true); 2996416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mPanelController.setFixedAspect(mCropExtras.getAspectX() > 0 3006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk && mCropExtras.getAspectY() > 0); 3016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 30263926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk } 3030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3053a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setupEditors() { 3063a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 3073a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard EditorManager.addEditors(mEditorPlaceHolder); 3083a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setOldViews(mImageViews); 3093a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.setImageLoader(mImageLoader); 3103a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3113a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3123a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillEditors() { 3133a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorDraw()); 3143a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new BasicEditor()); 3153a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 3163a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); 3173a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRedEye()); 3183a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorCrop()); 3193a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorFlip()); 3203a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorRotate()); 3213a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mEditorPlaceHolder.addEditor(new EditorStraighten()); 3223a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3233a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3243a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void setDefaultValues() { 3253a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageFilter.setActivityForMemoryToasts(this); 3263a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageFilterRS.setRenderScriptContext(this); 3273a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3283a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Resources res = getResources(); 3293a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageFilterBorder filterBorder = (ImageFilterBorder) FiltersManager.getManager().getFilter(ImageFilterBorder.class); 3303a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard filterBorder.setResources(res); 3313a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3323a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setDefaultBackgroundColor(res.getColor(R.color.background_screen)); 3333a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard // TODO: get those values from XML. 3343a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageZoom.setZoomedSize(getPixelsFromDip(256)); 3353a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 3363a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 3373a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 3383a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setTextSize((int) getPixelsFromDip(12)); 3393a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setTextPadding((int) getPixelsFromDip(10)); 3403a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4)); 3413a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setOriginalTextSize((int) getPixelsFromDip(18)); 3423a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageShow.setOriginalText(res.getString(R.string.original_picture_text)); 3433a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mIconSeedSize = res.getDimensionPixelSize(R.dimen.thumbnail_size); 3443a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3453a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 3463a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 3473a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 3483a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 3493a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 3503a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 3513a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 3523a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 3533a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 3543a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 355d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 35600914f56c3390caa224b1c9fc07624665de40113John Reck final View filters = findViewById(R.id.filtersPanel); 35700914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 358733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 359733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.INVISIBLE); 36000914f56c3390caa224b1c9fc07624665de40113John Reck filters.setVisibility(View.INVISIBLE); 361733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.VISIBLE); 362733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 363d4653680279a85720f792f21e32578ccf5c6c34fJohn Hoford View tinyPlanetView = findViewById(EditorTinyPlanet.ID); 364d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (tinyPlanetView != null) { 365d49d53206a197b08ec4754d8751b6860e33d9f48John Reck tinyPlanetView.setVisibility(View.GONE); 366d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 367d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = new LoadBitmapTask(tinyPlanetView); 368d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 369d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 370d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 3719090141f56b4e2000704d0c4a778d3a819821726nicolasroard private class LoadBordersTask extends AsyncTask<Void, Boolean, Boolean> { 37292e387187a872b3b0986b378954eb611aa83fdeanicolasroard Vector<FilterRepresentation> mBorders; 3739090141f56b4e2000704d0c4a778d3a819821726nicolasroard LinearLayout mList; 3749090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3759090141f56b4e2000704d0c4a778d3a819821726nicolasroard public LoadBordersTask(LinearLayout list) { 3769090141f56b4e2000704d0c4a778d3a819821726nicolasroard mList = list; 37792e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders = new Vector<FilterRepresentation>(); 3789090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3799090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3809090141f56b4e2000704d0c4a778d3a819821726nicolasroard @Override 3819090141f56b4e2000704d0c4a778d3a819821726nicolasroard protected Boolean doInBackground(Void... params) { 382588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(0)); 383588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_4x5)); 384588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_brush)); 385588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_grunge)); 386588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_sumi_e)); 387588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_tape)); 38892e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.BLACK, mImageBorderSize, 0)); 38992e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.BLACK, mImageBorderSize, mImageBorderSize)); 39092e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.WHITE, mImageBorderSize, 0)); 39192e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.WHITE, mImageBorderSize, mImageBorderSize)); 3929090141f56b4e2000704d0c4a778d3a819821726nicolasroard int creamColor = Color.argb(255, 237, 237, 227); 39392e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(creamColor, mImageBorderSize, 0)); 39492e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(creamColor, mImageBorderSize, mImageBorderSize)); 3959090141f56b4e2000704d0c4a778d3a819821726nicolasroard return true; 3969090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3979090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3989090141f56b4e2000704d0c4a778d3a819821726nicolasroard @Override 3999090141f56b4e2000704d0c4a778d3a819821726nicolasroard protected void onPostExecute(Boolean result) { 4009090141f56b4e2000704d0c4a778d3a819821726nicolasroard if (!result) { 4019090141f56b4e2000704d0c4a778d3a819821726nicolasroard return; 4029090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4039090141f56b4e2000704d0c4a778d3a819821726nicolasroard for (int i = 0; i < mBorders.size(); i++) { 40492e387187a872b3b0986b378954eb611aa83fdeanicolasroard FilterRepresentation filter = mBorders.elementAt(i); 4059090141f56b4e2000704d0c4a778d3a819821726nicolasroard filter.setName(getString(R.string.borders)); 40692e387187a872b3b0986b378954eb611aa83fdeanicolasroard if (i == 0) { 40792e387187a872b3b0986b378954eb611aa83fdeanicolasroard filter.setName(getString(R.string.none)); 40892e387187a872b3b0986b378954eb611aa83fdeanicolasroard } 4093a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageButton borderButton = (ImageButton) findViewById(R.id.borderButton); 4103a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FilterIconButton b = setupFilterRepresentationButton(filter, mList, borderButton); 4119090141f56b4e2000704d0c4a778d3a819821726nicolasroard if (i == 0) { 4129090141f56b4e2000704d0c4a778d3a819821726nicolasroard mNullBorderFilter = b; 4139090141f56b4e2000704d0c4a778d3a819821726nicolasroard mNullBorderFilter.setSelected(true); 4149090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4159090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4169090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4179090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4189090141f56b4e2000704d0c4a778d3a819821726nicolasroard 4198965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 4203d4f2c7443f6f6015efab769bfaad19263137c67John Hoford View mTinyPlanetButton; 421d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 4223d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 423d49d53206a197b08ec4754d8751b6860e33d9f48John Reck public LoadBitmapTask(View button) { 4243d4f2c7443f6f6015efab769bfaad19263137c67John Hoford mTinyPlanetButton = button; 425d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 4263d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4273d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4283d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 429d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 4308965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!mImageLoader.loadBitmap(params[0], mBitmapSize)) { 4318965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 4328965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 4338965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk publishProgress(mImageLoader.queryLightCycle360()); 4348965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 4353d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4363d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4373d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4388965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 43900914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 4406416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 4418965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 4426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 4438965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 4448965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk mTinyPlanetButton.setVisibility(View.VISIBLE); 4458965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 44600914f56c3390caa224b1c9fc07624665de40113John Reck } 44700914f56c3390caa224b1c9fc07624665de40113John Reck 44800914f56c3390caa224b1c9fc07624665de40113John Reck @Override 4493d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 450588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 4513d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 4523d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 4533d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 454588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 4558965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 4568965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk cannotLoadImage(); 4573d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4588965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 459733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View loading = findViewById(R.id.loading); 460733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.GONE); 461733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View filters = findViewById(R.id.filtersPanel); 462733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard filters.setVisibility(View.VISIBLE); 463d31603218b1f5f58a3617a21425622790ffff472nicolasroard if (PanelController.useAnimations()) { 464d31603218b1f5f58a3617a21425622790ffff472nicolasroard float y = filters.getY(); 465d31603218b1f5f58a3617a21425622790ffff472nicolasroard filters.setY(y + filters.getHeight()); 466d31603218b1f5f58a3617a21425622790ffff472nicolasroard filters.animate().setDuration(600).y(y).withLayer().start(); 467d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 468733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 469733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.VISIBLE); 470733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 471cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); 472cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 473cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setOriginal(largeBitmap); 474cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard float previewScale = (float) largeBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 475cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setPreviewScaleFactor(previewScale); 476cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard 4773a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillButtonIcons(); 478be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford MasterImage.getImage().setOriginalGeometry(largeBitmap); 479d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 480ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 481ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mAction == CROP_ACTION) { 482be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford mPanelController.showComponent(findViewById(EditorCrop.ID)); 483ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } else if (mAction == TINY_PLANET_ACTION) { 484be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford mPanelController.showComponent(findViewById(EditorTinyPlanet.ID)); 485ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } 486ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 4873d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 4883d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4893d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4903d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4913d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4923a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillButtonIcons() { 4933a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard Bitmap bmap = mImageLoader.getOriginalBitmapSmall(); 4943a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard if (bmap != null && bmap.getWidth() > 0 && bmap.getHeight() > 0) { 4953a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard float w = bmap.getWidth(); 4963a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard float h = bmap.getHeight(); 4973a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard float f = mIconSeedSize / Math.min(w, h); 4983a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard w = w * f; 4993a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard h = h * f; 5003a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard bmap = Bitmap.createScaledBitmap(bmap, (int) w, (int) h, true); 5013a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5023a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard LinearLayout listColors = (LinearLayout) findViewById(R.id.listColorsFx); 5033a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int num_colors_buttons = listColors.getChildCount(); 5043a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard for (int i = 0; i < num_colors_buttons; i++) { 5053a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FilterIconButton b = (FilterIconButton) listColors.getChildAt(i); 5063a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard b.setIcon(bmap); 5073a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5083a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5093a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); 5103a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int num_filters_buttons = listFilters.getChildCount(); 5113a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard for (int i = 0; i < num_filters_buttons; i++) { 5123a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FilterIconButton b = (FilterIconButton) listFilters.getChildAt(i); 5133a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard b.setIcon(bmap); 5143a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5153a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5163a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); 5173a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard int num_borders_buttons = listBorders.getChildCount(); 5183a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard for (int i = 0; i < num_borders_buttons; i++) { 5193a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard FilterIconButton b = (FilterIconButton) listBorders.getChildAt(i); 5203a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard b.setIcon(bmap); 5213a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5223a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5233a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5243a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 5253a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 5263d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 5273d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 528d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 529d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 5303d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 53121a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk // TODO: Using singletons is a bad design choice for many of these 53221a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk // due static reference leaks and in general. Please refactor. 533b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk MasterImage.reset(); 534b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk FilteringPipeline.reset(); 535b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk ImageFilter.resetStatics(); 53621a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk FiltersManager.reset(); 5373d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 5383d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5393d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5404d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard private int translateMainPanel(View viewPanel) { 5414d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int accessoryPanelWidth = viewPanel.getWidth(); 5424d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainViewWidth = findViewById(R.id.mainView).getWidth(); 5434d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainPanelWidth = mImageShow.getDisplayedImageBounds().width(); 544f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard if (mainPanelWidth == 0) { 545f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard mainPanelWidth = mainViewWidth; 546f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard } 547cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard int filtersPanelWidth = findViewById(R.id.filtersPanel).getWidth(); 548cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard if (mainPanelWidth < filtersPanelWidth) { 549cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard mainPanelWidth = filtersPanelWidth; 550cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard } 5514d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int leftOver = mainViewWidth - mainPanelWidth - accessoryPanelWidth; 5524d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard if (leftOver < 0) { 5534d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return -accessoryPanelWidth; 5544d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 5554d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return 0; 5564d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 5574d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard 5580f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 5590f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk DisplayMetrics metrics = new DisplayMetrics(); 560fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford Display display = getWindowManager().getDefaultDisplay(); 5610f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk Point size = new Point(); 562fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getSize(size); 563fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getMetrics(metrics); 564fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford int msize = Math.min(size.x, size.y); 5650f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk return (133 * msize) / metrics.densityDpi; 566fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 567fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 5680addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 569ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 570ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 571ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 572ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 573ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 574ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 575ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 576ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 577ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 5780addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 5790addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 5800addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 5810addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 5820addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 5830addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 5840addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 585ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 586ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 587ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 588ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 589ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 590ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 59108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 59208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 593ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 594ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 595ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 5960ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 5970ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 5980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 5990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6000ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6010ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 6020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 6030ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 6040ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6050ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 606ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 6070ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 6080ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6090ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6100ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 6110ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 61292e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 61392e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 6140ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6160ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 6170ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 6180ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 6190ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 6200ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6210ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 6220addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 6230ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 6240ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 6250ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6260ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6270ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 6280ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 6290ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 6300ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 6310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 6320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 6330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6340ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 6360ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 6370ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 6409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 6419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 642bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showHistory = menu.findItem(R.id.operationsButton); 6439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 644bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.hide_history_panel); 645bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 646bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.show_history_panel); 647bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 648bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 649bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 650bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 6519594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 652bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 6539594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6540ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 6550ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 6560ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 6570ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 65823e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 65923e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 66023e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 66123e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 66263a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 6639594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6649594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6659594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 66692e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 6676e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 6686e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 6696e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6706e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 6716e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6726e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6736e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6746e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6756e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 6766e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 6776e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6786e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 6796e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6806e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6816e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6826e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6839594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 6849594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 6859594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 68663a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6879594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 68863a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6899594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 6909594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 69463a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 69663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 6989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 7009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 701f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 702f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 703f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 704f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 705bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 706bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 707bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 708bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 7099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 7109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 7119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 7129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 7149594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 7159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 7169594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 7199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 721bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 722bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu if (mSaveButton != null) 723bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 724bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 725bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 726d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard public FilterIconButton setupFilterRepresentationButton(FilterRepresentation representation, LinearLayout panel, View button) { 727d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard LayoutInflater inflater = 728d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 729d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterIconButton icon = (FilterIconButton) inflater.inflate(R.layout.filtericonbutton, 730d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard panel, false); 7316900cad45d240c9a54b92991538b6a33652e766cnicolasroard if (representation.getTextId() != 0) { 7326900cad45d240c9a54b92991538b6a33652e766cnicolasroard representation.setName(getString(representation.getTextId())); 7336900cad45d240c9a54b92991538b6a33652e766cnicolasroard } 734d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard String text = representation.getName(); 73531e52aae5eeefd8383cb238e7dd3047e883968efnicolasroard icon.setup(text, mPanelController, panel); 736d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard icon.setFilterRepresentation(representation); 737be61c1fcfae87f00d2b3111b15e90bbf4a88b6bcJohn Hoford icon.setId(representation.getEditorId()); 7382e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mPanelController.addComponent(button, icon); 7392e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk panel.addView(icon); 7402e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk return icon; 7412e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 7422e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 7433a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard private void fillFx(LinearLayout listFilters, int buttonId) { 7440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 7450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 746a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 747d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation[] fxArray = new FilterFxRepresentation[18]; 7480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 749457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 75008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] drawid = { 75143b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0005_punch, 752457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0000_vintage, 753457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0004_bw_contrast, 75443b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0002_bleach, 75543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0001_instant, 756457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0007_washout, 75743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0003_blue_crush, 75843b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0008_washout_color, 75943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0006_x_process 760457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 761457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 76208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] fxNameid = { 76343b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_punch, 764457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_vintage, 765457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bw_contrast, 76643b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_bleach, 76743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_instant, 768457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout, 76943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_blue_crush, 770457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout_color, 77143b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_x_process 772457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 773457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 77453f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford BitmapFactory.Options o = new BitmapFactory.Options(); 77553f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford o.inScaled = false; 77608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 777457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford for (int i = 0; i < drawid.length; i++) { 77853f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o); 779d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation fx = new FilterFxRepresentation(getString(fxNameid[i]), drawid[i], fxNameid[i]); 780d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard fx.setFxBitmap(b); 781d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard fxArray[p++] = fx; 782457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford } 7832e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 7843a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImageButton button = (ImageButton) findViewById(buttonId); 7853a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 786d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation nullFx = new FilterFxRepresentation(getString(R.string.none), 0, R.string.none); 7873a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mNullFxFilter = setupFilterRepresentationButton(nullFx, listFilters, button); 7882e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mNullFxFilter.setSelected(true); 7892e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 790f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 791f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard FiltersManager.getManager().addLooks(filtersRepresentations); 792f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 7933a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupFilterRepresentationButton(representation, listFilters, button); 794f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard } 795f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard 7960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 7973a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setupFilterRepresentationButton(fxArray[i], listFilters, button); 7980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7993a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 8000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8013a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard public void setDefaultPreset() { 8020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 8033a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty 8043a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard preset.setImageLoader(mImageLoader); 8053a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 80663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(preset, true); 8070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 8100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 81192e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 8120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 8140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 8150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 8168537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 8170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 8210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 8220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 8230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8245b85b092af404effd32aa513f9c45a0232d7ae81nicolasroard mEditorPlaceHolder.hide(); 8250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 828bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 829bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 830d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public boolean isShowingHistoryPanel() { 831d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard return mShowingHistoryPanel; 832d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard } 833d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard 834bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 835bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 836bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 837bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 838bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 839bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 840bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 841bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 842bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 843bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 8443a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard viewList.setVisibility(View.VISIBLE); 845bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 846bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 8473a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard viewList.setVisibility(View.GONE); 848bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 849bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 850bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 851bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 852a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 853a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 854a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 855a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 8563a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard setDefaultValues(); 8573a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loadXML(); 8583a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard fillButtonIcons(); 859a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (mShowingHistoryPanel) { 860a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard toggleHistoryPanel(); 861a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 8623a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard final View loading = findViewById(R.id.loading); 8633a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard loading.setVisibility(View.GONE); 864a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 865a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 86663a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 8673a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 8683a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 86963a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter mHistoryAdapter = new HistoryAdapter( 87063a7dac01d394523799939596b960cb03321798dJohn Hoford this, R.layout.filtershow_history_operation_row, 87163a7dac01d394523799939596b960cb03321798dJohn Hoford R.id.rowTextView); 87263a7dac01d394523799939596b960cb03321798dJohn Hoford ImageStateAdapter mImageStateAdapter = new ImageStateAdapter(this, 87363a7dac01d394523799939596b960cb03321798dJohn Hoford R.layout.filtershow_imagestate_row); 87463a7dac01d394523799939596b960cb03321798dJohn Hoford 875588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage.reset(); 876588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mMasterImage = MasterImage.getImage(); 87763a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setHistoryAdapter(mHistoryAdapter); 87863a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setStateAdapter(mImageStateAdapter); 87963a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 88063a7dac01d394523799939596b960cb03321798dJohn Hoford } 88163a7dac01d394523799939596b960cb03321798dJohn Hoford 882bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 8830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 8840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 885d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public void toggleHistoryPanel() { 8869594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 8879594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 888bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 889bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 890bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 891bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 892bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 893bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 8944d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 8959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 8969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 897d31603218b1f5f58a3617a21425622790ffff472nicolasroard if (PanelController.useAnimations()) { 898d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.animate().setDuration(200).x(translate) 8999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 90092e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 9029594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 9039594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 9049594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 9059594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 9069594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9079594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 908d31603218b1f5f58a3617a21425622790ffff472nicolasroard } else { 909d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.setX(translate); 910c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.setAlpha(0); 911c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.setVisibility(View.VISIBLE); 912c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.animate().setDuration(100) 913c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford .alpha(1.0f).start(); 914d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 9159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 9169594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 9179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 918d31603218b1f5f58a3617a21425622790ffff472nicolasroard if (PanelController.useAnimations()) { 919d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.animate().setDuration(200).x(0).withLayer() 920bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 921d31603218b1f5f58a3617a21425622790ffff472nicolasroard } else { 922d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.setX(0); 923d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 9249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9259594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 9269594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9282e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk public void dispatchNullFilterClick() { 929af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.onClick(mNullFxFilter); 930af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullBorderFilter.onClick(mNullBorderFilter); 9312e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 932af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford 9332e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 9342e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk dispatchNullFilterClick(); 93563a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 9369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 9379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 93863a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(original, true); 9393992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.resetParameters(); 9409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 9410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 9440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 9450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 9460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 9489594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 9490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 9510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 95375608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 95475608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 95575608166f54891972ebad3d8fd958fed9a5300e6nicolasroard if (mPanelController.onBackPressed()) { 95655550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard saveImage(); 95775608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 95875608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 959e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 9603a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard public PanelController getPanelController() { 9613a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard return mPanelController; 9623a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard } 9633a5556d3ce5dba33021867468ae0d5d222f256dbnicolasroard 964e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 965e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard CharSequence text = getString(R.string.cannot_load_image); 966e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 967e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard toast.show(); 968e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 969e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 970e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 9710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 9720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 9740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 9750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 9760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 9770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 9810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 98263a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 9830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 9840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 9870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 9880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 9890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 9900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 9910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 9920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 99492e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 9960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 9970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 9980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 999d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 10000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveToExtraUri = false; 10056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveAsWallpaper = false; 10066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mReturnAsExtra = false; 1007ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private boolean mOutputted = false; 10086416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 10106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras != null) { 10116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getExtraOutput() != null) { 10126416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveToExtraUri = true; 1013ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 10146416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10156416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getSetAsWallpaper()) { 10166416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveAsWallpaper = true; 1017ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 10186416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10196416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getReturnData()) { 10206416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10216416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mReturnAsExtra = true; 1022ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 10236416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10246416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1025ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mOutputted) { 10266416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setUseCropExtrasFlag(true); 10276416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(null); 10286416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.returnFilteredResult(this); 10296416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10306416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 1031ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (!mOutputted) { 10326416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mImageShow.hasModifications()) { 10336416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Get the name of the album, to which the image will be saved 10346416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 10356416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 10366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 10376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(albumName); 10386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveImage(this, null); 10396416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 10406416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10416416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10436416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10446416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10456416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void onFilteredResult(Bitmap filtered) { 10466416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Intent intent = new Intent(); 10476416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_CROPPED_RECT, mImageShow.getImageCropBounds()); 10486416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveToExtraUri) { 10496416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveToUri(filtered, mCropExtras.getExtraOutput(), 10506416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras.getOutputFormat(), this); 10516416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10526416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveAsWallpaper) { 1053a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk setWallpaperInBackground(filtered); 105455550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } 10556416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mReturnAsExtra) { 10566416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (filtered != null) { 10576416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bmapSize = filtered.getRowBytes() * filtered.getHeight(); 10586416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk /* 10596416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Max size of Binder transaction buffer is 1Mb, so constrain 10606416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Bitmap to be somewhat less than this, otherwise we get 10616416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * TransactionTooLargeExceptions. 10626416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk */ 10636416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (bmapSize > MAX_BMAP_IN_INTENT) { 10646416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "Bitmap too large to be returned via intent"); 10656416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 10666416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_DATA, filtered); 10676416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10686416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10696416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10706416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk setResult(RESULT_OK, intent); 10716416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!mSaveToExtraUri) { 10726416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10736416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10746416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10756416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1076a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk void setWallpaperInBackground(final Bitmap bmap) { 1077a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk Toast.makeText(this, R.string.setting_wallpaper, Toast.LENGTH_LONG).show(); 1078a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk BitmapTask.Callbacks<FilterShowActivity> cb = new BitmapTask.Callbacks<FilterShowActivity>() { 1079a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 1080a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public void onComplete(Bitmap result) {} 1081a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 1082a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 1083a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public void onCancel() {} 1084a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 1085a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 1086a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public Bitmap onExecute(FilterShowActivity param) { 1087a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk try { 1088a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk WallpaperManager.getInstance(param).setBitmap(bmap); 1089a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } catch (IOException e) { 1090a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk Log.w(LOGTAG, "fail to set wall paper", e); 1091a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1092a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk return null; 1093a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1094a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk }; 1095a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk (new BitmapTask<FilterShowActivity>(cb)).execute(this); 1096a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1097a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 10986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 1099ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mOutputted) { 11006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk hideSavingProgress(); 11016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11026416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 11030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 1106e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 11070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1110