FilterShowActivity.java revision d61a2f9fcaad0309132b6b9b666c3dc6df62fed7
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; 47733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroardimport android.widget.*; 480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 490ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 520addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 53cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroardimport com.android.gallery3d.filtershow.cache.FilteringPipeline; 5492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 551b1a79f1ccb6f847d017a72fa4c288b2195ffd99John Hofordimport com.android.gallery3d.filtershow.editors.BasicEditor; 56d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorCrop; 57915d60a378b0ca7bbe3af6312ccd2f4b94eb2da1John Hofordimport com.android.gallery3d.filtershow.editors.EditorDraw; 58d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorFlip; 59d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorInfo; 605aa08941bda0cfbcfba522c53937dd66867f890dJohn Hofordimport com.android.gallery3d.filtershow.editors.EditorManager; 6112c7c8ed14ca9dff9de64e121282f1970cbe7ae4John Hofordimport com.android.gallery3d.filtershow.editors.EditorRedEye; 62d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorRotate; 63d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.editors.EditorStraighten; 648029c8567a162eb66fe54255bdeae264d594278dJohn Hofordimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 6544a499a64158cd5a12f8e44655f82b68c33bf3b2John Hofordimport com.android.gallery3d.filtershow.editors.EditorTinyPlanet; 6671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroardimport com.android.gallery3d.filtershow.filters.*; 67d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hofordimport com.android.gallery3d.filtershow.imageshow.GeometryMetadata; 68de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 69de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageFlip; 70de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRotate; 7192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 7292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageStraighten; 732c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet; 7492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageZoom; 7563a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 7692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 7792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 78a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunkimport com.android.gallery3d.filtershow.tools.BitmapTask; 7992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 802e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport com.android.gallery3d.filtershow.ui.FilterIconButton; 817592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 823992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 830addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 8492e2341248e99c691f38820503984bc5e2f18811nicolasroard 8592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 866416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport java.io.IOException; 87ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 8892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 8992e2341248e99c691f38820503984bc5e2f18811nicolasroard 900ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener, 910ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 936416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // fields for supporting crop action 94795776f67fe5bca902b09c01edec630879263341Ruben Brunk public static final String CROP_ACTION = "com.android.camera.action.CROP"; 956416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private CropExtras mCropExtras = null; 96ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private String mAction = ""; 97588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage mMasterImage = null; 986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 99a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 100a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 1016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public static final int MAX_BMAP_IN_INTENT = 990000; 10292e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 1030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 1040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1052c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard private ImageTinyPlanet mImageTinyPlanet = null; 1060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 107bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 1100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 1110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 1120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 1130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1145aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 1155aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 1160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 11892e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 119f129cb70f4d2b43a147b399d91650414defa6dd9nicolasroard private static int mImageBorderSize = 4; // in percent 1200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 122bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 123bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 12492e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1260ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1270ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1280ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1290ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1300ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 131ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 13255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 133d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 1342e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullFxFilter; 1352e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullBorderFilter; 1362e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private int mIconSeedSize = 140; 1373d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 1380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 141b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk ImageFilter.setActivityForMemoryToasts(this); 142588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard setResources(); 1430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1448b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu Resources res = getResources(); 14563a7dac01d394523799939596b960cb03321798dJohn Hoford setupMasterImage(); 1465448bf8095483574649afcc2add7f153670c7450nicolasroard ImageFilterRS.setRenderScriptContext(this); 1475448bf8095483574649afcc2add7f153670c7450nicolasroard 1488b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu ImageShow.setDefaultBackgroundColor(res.getColor(R.color.background_screen)); 1495ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard // TODO: get those values from XML. 1502f8301760867dc269c90bbeb338495f80e841c08nicolasroard ImageZoom.setZoomedSize(getPixelsFromDip(256)); 1517592704e662e49e4bbf3ba86a43d790774829bb0nicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 152f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 153f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 1545ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextSize((int) getPixelsFromDip(12)); 1555ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextPadding((int) getPixelsFromDip(10)); 156f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4)); 157f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextSize((int) getPixelsFromDip(18)); 1588b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu ImageShow.setOriginalText(res.getString(R.string.original_picture_text)); 1598b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu mIconSeedSize = res.getDimensionPixelSize(R.dimen.thumbnail_size); 1602e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 1618b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 1628b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 1633992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 1643992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 1655ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 1660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 168786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 169786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 170786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 171bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 172bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 173786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 174786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 175786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 176786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 177786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 179e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 1800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 1812c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet = (ImageTinyPlanet) findViewById(R.id.imageTinyPlanet); 1820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 183d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford ImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 184f46da69aefd9afe0b4326a2fcea8e33c294136bbRuben Brunk ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 1856e2dd284681a716c55e0937ef2e15a1c7507a1b2Ruben Brunk ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 1860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 1872c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageViews.add(mImageTinyPlanet); 1880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1895aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 190915d60a378b0ca7bbe3af6312ccd2f4b94eb2da1John Hoford mEditorPlaceHolder.addEditor(new EditorDraw()); 1911b1a79f1ccb6f847d017a72fa4c288b2195ffd99John Hoford mEditorPlaceHolder.addEditor(new BasicEditor()); 1928029c8567a162eb66fe54255bdeae264d594278dJohn Hoford mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 19344a499a64158cd5a12f8e44655f82b68c33bf3b2John Hoford mEditorPlaceHolder.addEditor(new EditorTinyPlanet()); 19412c7c8ed14ca9dff9de64e121282f1970cbe7ae4John Hoford mEditorPlaceHolder.addEditor(new EditorRedEye()); 195d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford mEditorPlaceHolder.addEditor(new EditorCrop()); 196d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford mEditorPlaceHolder.addEditor(new EditorFlip()); 197d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford mEditorPlaceHolder.addEditor(new EditorRotate()); 198d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford mEditorPlaceHolder.addEditor(new EditorStraighten()); 1995aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford EditorManager.addEditors(mEditorPlaceHolder); 2005aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mEditorPlaceHolder.setOldViews(mImageViews); 2015aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mEditorPlaceHolder.setImageLoader(mImageLoader); 2025aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 203733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard mEditorPlaceHolder.hide(); 204733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 2050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 2060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 2070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 2080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 20992e2341248e99c691f38820503984bc5e2f18811nicolasroard 21092e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 2112c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setImageLoader(mImageLoader); 212db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford 21398ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard mPanelController.setActivity(this); 2145aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mPanelController.setEditorPlaceHolder(mEditorPlaceHolder); 21598ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard 21692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 2172c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mPanelController.addImageView(findViewById(R.id.imageTinyPlanet)); 21892e2341248e99c691f38820503984bc5e2f18811nicolasroard 21910ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard mPanelController.addPanel(mFxButton, findViewById(R.id.fxList), 0); 22010ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard mPanelController.addPanel(mBorderButton, findViewById(R.id.bordersList), 1); 22110ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard mPanelController.addPanel(mGeometryButton, findViewById(R.id.geometryList), 2); 222d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford 223d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford // TODO: move to a separate function. 224d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford GeometryMetadata geo = new GeometryMetadata(); 225d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford int[] editorsId = geo.getEditorIds(); 226d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford for (int i = 0; i < editorsId.length; i++) { 227d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford int editorId = editorsId[i]; 228d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford GeometryMetadata geometry = new GeometryMetadata(geo); 229d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford geometry.setEditorId(editorId); 230d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford EditorInfo editorInfo = (EditorInfo) mEditorPlaceHolder.getEditor(editorId); 231d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford geometry.setTextId(editorInfo.getTextId()); 232d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford geometry.setOverlayId(editorInfo.getOverlayId()); 233d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford geometry.setOverlayOnly(editorInfo.getOverlayOnly()); 234d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford setupFilterRepresentationButton( 235d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford geometry, (LinearLayout) findViewById(R.id.listGeometry), mGeometryButton); 236d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford } 23792e2341248e99c691f38820503984bc5e2f18811nicolasroard 23810ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard mPanelController.addPanel(mColorsButton, findViewById(R.id.colorsFxList), 3); 239ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 2406900cad45d240c9a54b92991538b6a33652e766cnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 241f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard 242f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard FiltersManager filtersManager = FiltersManager.getManager(); 243f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard filtersManager.addEffects(filtersRepresentations); 244f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard 2456900cad45d240c9a54b92991538b6a33652e766cnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 24610ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard setupFilterRepresentationButton(representation, 24710ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard (LinearLayout) findViewById(R.id.listColorsFx), mColorsButton); 248ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 2496900cad45d240c9a54b92991538b6a33652e766cnicolasroard 25092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 2510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 2520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 2530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 25563a7dac01d394523799939596b960cb03321798dJohn Hoford operationsList.setAdapter(mMasterImage.getHistory()); 2560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 257bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 25863a7dac01d394523799939596b960cb03321798dJohn Hoford imageStateList.setAdapter(mMasterImage.getState()); 25963a7dac01d394523799939596b960cb03321798dJohn Hoford mImageLoader.setAdapter(mMasterImage.getHistory()); 2600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 26110ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard fillListImages((LinearLayout) findViewById(R.id.listFilters)); 26210ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard LoadBordersTask loadBorders = new LoadBordersTask((LinearLayout) findViewById(R.id.listBorders)); 2639090141f56b4e2000704d0c4a778d3a819821726nicolasroard loadBorders.execute(); 2640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 26592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 2668537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), 2679820e7e753b7e1977ef3d2163605431769ce9165nicolasroard findViewById(R.id.panelAccessoryViewList), 2689820e7e753b7e1977ef3d2163605431769ce9165nicolasroard findViewById(R.id.applyEffect)); 26963a7dac01d394523799939596b960cb03321798dJohn Hoford 27092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setCurrentPanel(mFxButton); 2710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 272a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 273a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 274a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 275a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 276ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mAction = intent.getAction(); 277ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 278d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (intent.getData() != null) { 279d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(intent.getData()); 2800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 2810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 2820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 28363926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 2846416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Handle behavior for various actions 285ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mAction.equalsIgnoreCase(CROP_ACTION)) { 2866416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Bundle extras = intent.getExtras(); 2876416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (extras != null) { 2886416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras = new CropExtras(extras.getInt(CropExtras.KEY_OUTPUT_X, 0), 2896416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_OUTPUT_Y, 0), 2906416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE, true) && 2916416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE_UP_IF_NEEDED, false), 2926416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_X, 0), 2936416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_Y, 0), 2946416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SET_AS_WALLPAPER, false), 2956416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_RETURN_DATA, false), 2966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT), 2976416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getString(CropExtras.KEY_OUTPUT_FORMAT), 2986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SHOW_WHEN_LOCKED, false), 2996416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_X), 3006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_Y)); 3016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 3026416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getShowWhenLocked()) { 3036416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 3046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 3056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setCropExtras(mCropExtras); 3066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 307d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford // FIXME: moving to editors breaks the crop action 308d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford// mImageCrop.setExtras(mCropExtras); 3096416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String s = getString(R.string.Fixed); 310d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford// mImageCrop.setAspectString(s); 311d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford// mImageCrop.setCropActionFlag(true); 3126416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mPanelController.setFixedAspect(mCropExtras.getAspectX() > 0 3136416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk && mCropExtras.getAspectY() > 0); 3146416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 31563926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk } 3160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 318d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 31900914f56c3390caa224b1c9fc07624665de40113John Reck final View filters = findViewById(R.id.filtersPanel); 32000914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 321733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 322733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.INVISIBLE); 32300914f56c3390caa224b1c9fc07624665de40113John Reck filters.setVisibility(View.INVISIBLE); 324733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.VISIBLE); 325733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 326d49d53206a197b08ec4754d8751b6860e33d9f48John Reck View tinyPlanetView = findViewById(R.id.tinyplanetButton); 327d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (tinyPlanetView != null) { 328d49d53206a197b08ec4754d8751b6860e33d9f48John Reck tinyPlanetView.setVisibility(View.GONE); 329d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 330d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = new LoadBitmapTask(tinyPlanetView); 331d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 332d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 333d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 3349090141f56b4e2000704d0c4a778d3a819821726nicolasroard private class LoadBordersTask extends AsyncTask<Void, Boolean, Boolean> { 33592e387187a872b3b0986b378954eb611aa83fdeanicolasroard Vector<FilterRepresentation> mBorders; 3369090141f56b4e2000704d0c4a778d3a819821726nicolasroard LinearLayout mList; 3379090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3389090141f56b4e2000704d0c4a778d3a819821726nicolasroard public LoadBordersTask(LinearLayout list) { 3399090141f56b4e2000704d0c4a778d3a819821726nicolasroard mList = list; 34092e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders = new Vector<FilterRepresentation>(); 3419090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3429090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3439090141f56b4e2000704d0c4a778d3a819821726nicolasroard @Override 3449090141f56b4e2000704d0c4a778d3a819821726nicolasroard protected Boolean doInBackground(Void... params) { 345588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(0)); 346588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_4x5)); 347588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_brush)); 348588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_grunge)); 349588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_sumi_e)); 350588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_tape)); 35192e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.BLACK, mImageBorderSize, 0)); 35292e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.BLACK, mImageBorderSize, mImageBorderSize)); 35392e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.WHITE, mImageBorderSize, 0)); 35492e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.WHITE, mImageBorderSize, mImageBorderSize)); 3559090141f56b4e2000704d0c4a778d3a819821726nicolasroard int creamColor = Color.argb(255, 237, 237, 227); 35692e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(creamColor, mImageBorderSize, 0)); 35792e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(creamColor, mImageBorderSize, mImageBorderSize)); 3589090141f56b4e2000704d0c4a778d3a819821726nicolasroard return true; 3599090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3609090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3619090141f56b4e2000704d0c4a778d3a819821726nicolasroard @Override 3629090141f56b4e2000704d0c4a778d3a819821726nicolasroard protected void onPostExecute(Boolean result) { 3639090141f56b4e2000704d0c4a778d3a819821726nicolasroard if (!result) { 3649090141f56b4e2000704d0c4a778d3a819821726nicolasroard return; 3659090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3669090141f56b4e2000704d0c4a778d3a819821726nicolasroard for (int i = 0; i < mBorders.size(); i++) { 36792e387187a872b3b0986b378954eb611aa83fdeanicolasroard FilterRepresentation filter = mBorders.elementAt(i); 3689090141f56b4e2000704d0c4a778d3a819821726nicolasroard filter.setName(getString(R.string.borders)); 36992e387187a872b3b0986b378954eb611aa83fdeanicolasroard if (i == 0) { 37092e387187a872b3b0986b378954eb611aa83fdeanicolasroard filter.setName(getString(R.string.none)); 37192e387187a872b3b0986b378954eb611aa83fdeanicolasroard } 37292e387187a872b3b0986b378954eb611aa83fdeanicolasroard FilterIconButton b = setupFilterRepresentationButton(filter, mList, mBorderButton); 3739090141f56b4e2000704d0c4a778d3a819821726nicolasroard if (i == 0) { 3749090141f56b4e2000704d0c4a778d3a819821726nicolasroard mNullBorderFilter = b; 3759090141f56b4e2000704d0c4a778d3a819821726nicolasroard mNullBorderFilter.setSelected(true); 3769090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3779090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3789090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3799090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3809090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3818965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 3823d4f2c7443f6f6015efab769bfaad19263137c67John Hoford View mTinyPlanetButton; 383d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 3843d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 385d49d53206a197b08ec4754d8751b6860e33d9f48John Reck public LoadBitmapTask(View button) { 3863d4f2c7443f6f6015efab769bfaad19263137c67John Hoford mTinyPlanetButton = button; 387d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 3883d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 3893d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 3903d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 391d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 3928965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!mImageLoader.loadBitmap(params[0], mBitmapSize)) { 3938965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 3948965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 3958965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk publishProgress(mImageLoader.queryLightCycle360()); 3968965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 3973d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 3983d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 3993d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4008965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 40100914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 4026416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 4038965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 4046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 4058965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 4068965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk mTinyPlanetButton.setVisibility(View.VISIBLE); 4078965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 40800914f56c3390caa224b1c9fc07624665de40113John Reck } 40900914f56c3390caa224b1c9fc07624665de40113John Reck 41000914f56c3390caa224b1c9fc07624665de40113John Reck @Override 4113d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 412588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 4133d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 4143d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 4153d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 416588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 4178965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 4188965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk cannotLoadImage(); 4193d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4208965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 421733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View loading = findViewById(R.id.loading); 422733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.GONE); 423733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View filters = findViewById(R.id.filtersPanel); 424733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard filters.setVisibility(View.VISIBLE); 425d31603218b1f5f58a3617a21425622790ffff472nicolasroard if (PanelController.useAnimations()) { 426d31603218b1f5f58a3617a21425622790ffff472nicolasroard float y = filters.getY(); 427d31603218b1f5f58a3617a21425622790ffff472nicolasroard filters.setY(y + filters.getHeight()); 428d31603218b1f5f58a3617a21425622790ffff472nicolasroard filters.animate().setDuration(600).y(y).withLayer().start(); 429d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 430733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 431733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.VISIBLE); 432733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 433cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); 434cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 435cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setOriginal(largeBitmap); 436cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard float previewScale = (float) largeBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 437cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setPreviewScaleFactor(previewScale); 438cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard 439c03c4360a10ac519b00cc75dd02794536c72182bnicolasroard Bitmap bmap = mImageLoader.getOriginalBitmapSmall(); 4402e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk if (bmap != null && bmap.getWidth() > 0 && bmap.getHeight() > 0) { 4412e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float w = bmap.getWidth(); 4422e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float h = bmap.getHeight(); 4432e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float f = mIconSeedSize / Math.min(w, h); 4442e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk w = w * f; 4452e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk h = h * f; 4462e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk bmap = Bitmap.createScaledBitmap(bmap, (int) w, (int) h, true); 4472e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 44810ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard LinearLayout listColors = (LinearLayout) findViewById(R.id.listColorsFx); 4492e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_colors_buttons = listColors.getChildCount(); 4502e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_colors_buttons; i++) { 4512e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listColors.getChildAt(i); 4522e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 4532e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 45410ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard 45510ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); 4562e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_filters_buttons = listFilters.getChildCount(); 4572e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_filters_buttons; i++) { 4582e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listFilters.getChildAt(i); 4592e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 4602e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 46110ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard 46210ece61a285633c1b06921ec7b8ce3c50bb37b73nicolasroard LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); 4632e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_borders_buttons = listBorders.getChildCount(); 4642e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_borders_buttons; i++) { 4652e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listBorders.getChildAt(i); 4662e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 4672e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 4682e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4692e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 470d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 471ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 472ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mAction == CROP_ACTION) { 473d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford // FIXME: broken by the move to editors 474d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford // mPanelController.showComponent(findViewById(R.id.cropButton)); 475ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } else if (mAction == TINY_PLANET_ACTION) { 476ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mPanelController.showComponent(findViewById(R.id.tinyplanetButton)); 477ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk } 478ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk 4793d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 4803d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4813d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4823d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4833d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4843d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4853d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 486d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 487d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 4883d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 48921a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk // TODO: Using singletons is a bad design choice for many of these 49021a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk // due static reference leaks and in general. Please refactor. 491b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk MasterImage.reset(); 492b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk FilteringPipeline.reset(); 493b17b1b0758799914fbad5f4a3afae71ce58891fcRuben Brunk ImageFilter.resetStatics(); 49421a01faab1125c5c347a3dfbf6a71de6aec233a1Ruben Brunk FiltersManager.reset(); 4953d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 4963d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4973d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4984d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard private int translateMainPanel(View viewPanel) { 4994d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int accessoryPanelWidth = viewPanel.getWidth(); 5004d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainViewWidth = findViewById(R.id.mainView).getWidth(); 5014d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainPanelWidth = mImageShow.getDisplayedImageBounds().width(); 502f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard if (mainPanelWidth == 0) { 503f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard mainPanelWidth = mainViewWidth; 504f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard } 505cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard int filtersPanelWidth = findViewById(R.id.filtersPanel).getWidth(); 506cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard if (mainPanelWidth < filtersPanelWidth) { 507cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard mainPanelWidth = filtersPanelWidth; 508cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard } 5094d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int leftOver = mainViewWidth - mainPanelWidth - accessoryPanelWidth; 5104d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard if (leftOver < 0) { 5114d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return -accessoryPanelWidth; 5124d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 5134d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return 0; 5144d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 5154d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard 5160f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 5170f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk DisplayMetrics metrics = new DisplayMetrics(); 518fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford Display display = getWindowManager().getDefaultDisplay(); 5190f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk Point size = new Point(); 520fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getSize(size); 521fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getMetrics(metrics); 522fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford int msize = Math.min(size.x, size.y); 5230f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk return (133 * msize) / metrics.densityDpi; 524fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 525fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 5260addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 527ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 528ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 529ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 530ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 531ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 532ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 533ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 534ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 535ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 5360addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 5370addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 5380addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 5390addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 5400addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 5410addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 5420addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 543ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 544ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 545ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 546ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 547ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 548ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 54908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 55008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 551ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 552ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 553ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 5540ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 5550ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 5560ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 5570ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5580ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5590ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 5600ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 5610ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 5620ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5630ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 564ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 5650ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 5660ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5670ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5680ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 5690ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 57092e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 57192e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 5720ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5730ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5740ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 5750ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 5760ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 5770ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 5780ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5790ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 5800addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 5810ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 5820ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 5830ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5850ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 5860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 5870ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 5880ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 5890ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 5900ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 5910ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5920ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5930ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 5940ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 5950ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5960ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 5989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 5999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 600bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showHistory = menu.findItem(R.id.operationsButton); 6019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 602bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.hide_history_panel); 603bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 604bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.show_history_panel); 605bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 606bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 607bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 608bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 6099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 610bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 6119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6120ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 6130ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 6140ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 6150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 61623e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 61723e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 61823e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 61923e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 62063a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 6219594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 62492e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 6256e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 6266e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 6276e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6286e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 6296e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6306e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6316e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6326e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6336e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 6346e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 6356e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6366e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 6376e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6386e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6396e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6406e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 6429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 6439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 64463a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 64663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6479594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 6489594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6499594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6509594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6519594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 65263a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6539594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 65463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6559594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 6569594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6579594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6589594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 659f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 660f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 661f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 662f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 663bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 664bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 665bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 666bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 6679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 6689594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 6699594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6709594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 6729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 6739594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6749594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6769594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 6779594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6789594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 679bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 680bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu if (mSaveButton != null) 681bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 682bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 683bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 684d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard public FilterIconButton setupFilterRepresentationButton(FilterRepresentation representation, LinearLayout panel, View button) { 685d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard LayoutInflater inflater = 686d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 687d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterIconButton icon = (FilterIconButton) inflater.inflate(R.layout.filtericonbutton, 688d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard panel, false); 6896900cad45d240c9a54b92991538b6a33652e766cnicolasroard if (representation.getTextId() != 0) { 6906900cad45d240c9a54b92991538b6a33652e766cnicolasroard representation.setName(getString(representation.getTextId())); 6916900cad45d240c9a54b92991538b6a33652e766cnicolasroard } 692d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard String text = representation.getName(); 69331e52aae5eeefd8383cb238e7dd3047e883968efnicolasroard icon.setup(text, mPanelController, panel); 694d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard icon.setFilterRepresentation(representation); 6956900cad45d240c9a54b92991538b6a33652e766cnicolasroard if (representation instanceof FilterTinyPlanetRepresentation) { 6966900cad45d240c9a54b92991538b6a33652e766cnicolasroard // needed to hide tinyplanet on startup 6976900cad45d240c9a54b92991538b6a33652e766cnicolasroard icon.setId(R.id.tinyplanetButton); 69871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard } 6992e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mPanelController.addComponent(button, icon); 7002e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk panel.addView(icon); 7012e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk return icon; 7022e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 7032e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 7040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 7050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 7060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 707a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 708d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation[] fxArray = new FilterFxRepresentation[18]; 7090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 710457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 71108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] drawid = { 71243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0005_punch, 713457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0000_vintage, 714457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0004_bw_contrast, 71543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0002_bleach, 71643b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0001_instant, 717457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0007_washout, 71843b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0003_blue_crush, 71943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0008_washout_color, 72043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0006_x_process 721457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 722457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 72308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] fxNameid = { 72443b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_punch, 725457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_vintage, 726457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bw_contrast, 72743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_bleach, 72843b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_instant, 729457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout, 73043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_blue_crush, 731457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout_color, 73243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_x_process 733457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 734457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 7350a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty 736e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford preset.setImageLoader(mImageLoader); 737a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 73853f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford BitmapFactory.Options o = new BitmapFactory.Options(); 73953f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford o.inScaled = false; 74008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 741457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford for (int i = 0; i < drawid.length; i++) { 74253f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o); 743d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation fx = new FilterFxRepresentation(getString(fxNameid[i]), drawid[i], fxNameid[i]); 744d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard fx.setFxBitmap(b); 745d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard fxArray[p++] = fx; 746457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford } 7472e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 748d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation nullFx = new FilterFxRepresentation(getString(R.string.none), 0, R.string.none); 749d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard mNullFxFilter = setupFilterRepresentationButton(nullFx, listFilters, mFxButton); 7502e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mNullFxFilter.setSelected(true); 7512e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 752f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard Vector<FilterRepresentation> filtersRepresentations = new Vector<FilterRepresentation>(); 753f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard FiltersManager.getManager().addLooks(filtersRepresentations); 754f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard for (FilterRepresentation representation : filtersRepresentations) { 755f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard setupFilterRepresentationButton(representation, listFilters, mFxButton); 756f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard } 757f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard 7580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 759d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard setupFilterRepresentationButton(fxArray[i], listFilters, mFxButton); 7600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 76363a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(preset, true); 7640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 7670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 76892e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 7690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 7710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 7720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 7738537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 7740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 7780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 7790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 7800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7815b85b092af404effd32aa513f9c45a0232d7ae81nicolasroard mEditorPlaceHolder.hide(); 7820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 785bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 786bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 787d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public boolean isShowingHistoryPanel() { 788d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard return mShowingHistoryPanel; 789d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard } 790d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard 791bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 792bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View view = findViewById(R.id.mainPanel); 793bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 794bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 795bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 796bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 797bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 798bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 799bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 8004d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 801bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 802bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 803d31603218b1f5f58a3617a21425622790ffff472nicolasroard if (PanelController.useAnimations()) { 804d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.animate().setDuration(200).x(translate) 805bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .withLayer().withEndAction(new Runnable() { 80692e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 807bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard public void run() { 808bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setAlpha(0); 809bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.VISIBLE); 810bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.animate().setDuration(100) 811bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .alpha(1.0f).start(); 812bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 813bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard }).start(); 814d31603218b1f5f58a3617a21425622790ffff472nicolasroard } else { 815d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.setX(translate); 816c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.setAlpha(0); 817c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.setVisibility(View.VISIBLE); 818c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.animate().setDuration(100) 819c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford .alpha(1.0f).start(); 820d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 821bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 822bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 823bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.INVISIBLE); 824d31603218b1f5f58a3617a21425622790ffff472nicolasroard if (PanelController.useAnimations()) { 825d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.animate().setDuration(200).x(0).withLayer() 826bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 827d31603218b1f5f58a3617a21425622790ffff472nicolasroard } else { 828d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.setX(0); 829d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 830bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 831bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 832bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 833bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 834a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 835a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 836a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 837a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 838588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard setResources(); 839a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (mShowingHistoryPanel) { 840a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard toggleHistoryPanel(); 841a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 842a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 843a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 84463a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 84563a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter mHistoryAdapter = new HistoryAdapter( 84663a7dac01d394523799939596b960cb03321798dJohn Hoford this, R.layout.filtershow_history_operation_row, 84763a7dac01d394523799939596b960cb03321798dJohn Hoford R.id.rowTextView); 84863a7dac01d394523799939596b960cb03321798dJohn Hoford ImageStateAdapter mImageStateAdapter = new ImageStateAdapter(this, 84963a7dac01d394523799939596b960cb03321798dJohn Hoford R.layout.filtershow_imagestate_row); 85063a7dac01d394523799939596b960cb03321798dJohn Hoford 851588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage.reset(); 852588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mMasterImage = MasterImage.getImage(); 85363a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setHistoryAdapter(mHistoryAdapter); 85463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setStateAdapter(mImageStateAdapter); 85563a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 85663a7dac01d394523799939596b960cb03321798dJohn Hoford } 85763a7dac01d394523799939596b960cb03321798dJohn Hoford 858bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 8590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 8600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 861d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public void toggleHistoryPanel() { 8629594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 8639594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 864bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 865bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 866bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 867bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 868bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 869bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 8704d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 8719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 8729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 873d31603218b1f5f58a3617a21425622790ffff472nicolasroard if (PanelController.useAnimations()) { 874d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.animate().setDuration(200).x(translate) 8759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 87692e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 8779594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 8789594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 8799594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 8809594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 8819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 8829594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 8839594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 884d31603218b1f5f58a3617a21425622790ffff472nicolasroard } else { 885d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.setX(translate); 886c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.setAlpha(0); 887c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.setVisibility(View.VISIBLE); 888c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford viewList.animate().setDuration(100) 889c364d9f2de28f79c636fcb145c355da52f52b7adJohn Hoford .alpha(1.0f).start(); 890d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 8919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 8929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 8939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 894d31603218b1f5f58a3617a21425622790ffff472nicolasroard if (PanelController.useAnimations()) { 895d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.animate().setDuration(200).x(0).withLayer() 896bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 897d31603218b1f5f58a3617a21425622790ffff472nicolasroard } else { 898d31603218b1f5f58a3617a21425622790ffff472nicolasroard view.setX(0); 899d31603218b1f5f58a3617a21425622790ffff472nicolasroard } 9009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 9029594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9042e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk public void dispatchNullFilterClick() { 905af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.onClick(mNullFxFilter); 906af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullBorderFilter.onClick(mNullBorderFilter); 9072e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 908af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford 9092e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 9102e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk dispatchNullFilterClick(); 91163a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 9129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 9139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 91463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(original, true); 9153992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.resetParameters(); 9169594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 9170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 9200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 9210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 9220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 9249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 9250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 9270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 92975608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 93075608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 93175608166f54891972ebad3d8fd958fed9a5300e6nicolasroard if (mPanelController.onBackPressed()) { 93255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard saveImage(); 93375608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 93475608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 935e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 936e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 937e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard CharSequence text = getString(R.string.cannot_load_image); 938e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 939e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard toast.show(); 940e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 941e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 942e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 9430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 9440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 9460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 9470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 9480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 9490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 9530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 95463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 9550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 9560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 9590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 9600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 9610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 9620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 9630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 9640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 96692e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 9680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 9690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 9700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 971d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 9720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9766416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveToExtraUri = false; 9776416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveAsWallpaper = false; 9786416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mReturnAsExtra = false; 979ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk private boolean mOutputted = false; 9806416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 9810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 9826416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras != null) { 9836416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getExtraOutput() != null) { 9846416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveToExtraUri = true; 985ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 9866416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9876416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getSetAsWallpaper()) { 9886416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveAsWallpaper = true; 989ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 9906416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9916416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getReturnData()) { 9926416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 9936416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mReturnAsExtra = true; 994ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk mOutputted = true; 9956416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 9966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 997ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mOutputted) { 9986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setUseCropExtrasFlag(true); 9996416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(null); 10006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.returnFilteredResult(this); 10016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10026416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 1003ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (!mOutputted) { 10046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mImageShow.hasModifications()) { 10056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Get the name of the album, to which the image will be saved 10066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 10076416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 10086416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 10096416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(albumName); 10106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveImage(this, null); 10116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 10126416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10136416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10146416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10156416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10166416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10176416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void onFilteredResult(Bitmap filtered) { 10186416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Intent intent = new Intent(); 10196416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_CROPPED_RECT, mImageShow.getImageCropBounds()); 10206416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveToExtraUri) { 10216416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveToUri(filtered, mCropExtras.getExtraOutput(), 10226416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras.getOutputFormat(), this); 10236416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10246416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveAsWallpaper) { 1025a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk setWallpaperInBackground(filtered); 102655550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } 10276416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mReturnAsExtra) { 10286416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (filtered != null) { 10296416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bmapSize = filtered.getRowBytes() * filtered.getHeight(); 10306416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk /* 10316416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Max size of Binder transaction buffer is 1Mb, so constrain 10326416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Bitmap to be somewhat less than this, otherwise we get 10336416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * TransactionTooLargeExceptions. 10346416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk */ 10356416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (bmapSize > MAX_BMAP_IN_INTENT) { 10366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "Bitmap too large to be returned via intent"); 10376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 10386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_DATA, filtered); 10396416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10406416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10416416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk setResult(RESULT_OK, intent); 10436416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!mSaveToExtraUri) { 10446416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10456416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10466416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10476416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 1048a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk void setWallpaperInBackground(final Bitmap bmap) { 1049a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk Toast.makeText(this, R.string.setting_wallpaper, Toast.LENGTH_LONG).show(); 1050a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk BitmapTask.Callbacks<FilterShowActivity> cb = new BitmapTask.Callbacks<FilterShowActivity>() { 1051a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 1052a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public void onComplete(Bitmap result) {} 1053a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 1054a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 1055a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public void onCancel() {} 1056a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 1057a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk @Override 1058a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk public Bitmap onExecute(FilterShowActivity param) { 1059a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk try { 1060a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk WallpaperManager.getInstance(param).setBitmap(bmap); 1061a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } catch (IOException e) { 1062a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk Log.w(LOGTAG, "fail to set wall paper", e); 1063a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1064a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk return null; 1065a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1066a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk }; 1067a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk (new BitmapTask<FilterShowActivity>(cb)).execute(this); 1068a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk } 1069a24145829118672e8b9b98e18de78eae71daaa08Ruben Brunk 10706416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 1071ab779def9c3aa45b100872f2369ec2f4a1d9a709Ruben Brunk if (mOutputted) { 10726416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk hideSavingProgress(); 10736416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10746416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 10750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1077588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard private void setResources() { 1078588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard ImageFilterBorder filterBorder = (ImageFilterBorder) FiltersManager.getManager().getFilter(ImageFilterBorder.class); 1079588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard filterBorder.setResources(getResources()); 1080588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard } 1081588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 10820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 1083e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 10840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1087