FilterShowActivity.java revision 63a7dac01d394523799939596b960cb03321798d
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 190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.annotation.TargetApi; 209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.app.ActionBar; 210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.app.Activity; 22ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport android.app.ProgressDialog; 236416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport android.app.WallpaperManager; 240ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.content.ContentValues; 252e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport android.content.Context; 260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 27a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 29457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 30457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.BitmapFactory; 3193dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Color; 32fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.graphics.Point; 330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 353d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 3692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport android.provider.MediaStore; 38fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 41fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.view.Display; 422e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport android.view.LayoutInflater; 430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Menu; 449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.view.MenuItem; 450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View; 460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 4798ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroardimport android.view.WindowManager; 480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView; 490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ImageButton; 510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.LinearLayout; 520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ListView; 5392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.widget.SeekBar; 540ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider; 550ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 56e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroardimport android.widget.Toast; 570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 590addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 6092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 61f93e60c1b334d510940406c736559895462aac31nicolasroardimport com.android.gallery3d.filtershow.filters.FiltersManager; 6292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilter; 6392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterBorder; 64a19830b4fd9050b48386cd904d99cfd2566cc515John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterFx; 6593dfe7a1df07a64701369b480578410efb740a27nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterParametricBorder; 6692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterRS; 6718e71eb1589f839667207414e5f5cf95ba78a183nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterRedEye; 68de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 69db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hofordimport com.android.gallery3d.filtershow.imageshow.ImageDraw; 70de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageFlip; 71cc93226fc364a50de3a1479c0912e9af1854b666nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRedEyes; 72de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRotate; 7392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 7492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageStraighten; 752c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet; 7692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageZoom; 7763a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 7892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 7992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 8092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 812e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport com.android.gallery3d.filtershow.ui.FilterIconButton; 827592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 8392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.ui.ImageCurves; 843992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 850addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 8692e2341248e99c691f38820503984bc5e2f18811nicolasroard 8792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 886416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport java.io.IOException; 89ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 9092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 9192e2341248e99c691f38820503984bc5e2f18811nicolasroard 920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard@TargetApi(16) 930ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener, 940ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // fields for supporting crop action 97795776f67fe5bca902b09c01edec630879263341Ruben Brunk public static final String CROP_ACTION = "com.android.camera.action.CROP"; 986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private CropExtras mCropExtras = null; 9963a7dac01d394523799939596b960cb03321798dJohn Hoford MasterImage mMasterImage = MasterImage.getImage(); 1006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 101a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 102a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 1036416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public static final int MAX_BMAP_IN_INTENT = 990000; 10492e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 1050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 1060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageCurves mImageCurves = null; 108cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard private ImageRedEyes mImageRedEyes = null; 109db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford private ImageDraw mImageDraw = null; 1100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageStraighten mImageStraighten = null; 1115448bf8095483574649afcc2add7f153670c7450nicolasroard private ImageZoom mImageZoom = null; 11262e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk private ImageCrop mImageCrop = null; 1138537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageRotate mImageRotate = null; 1148537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageFlip mImageFlip = null; 1152c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard private ImageTinyPlanet mImageTinyPlanet = null; 1160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListFx = null; 1180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListBorders = null; 1190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListGeometry = null; 1200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListColors = null; 12192e2341248e99c691f38820503984bc5e2f18811nicolasroard private View mListFilterButtons = null; 122bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 1270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 1280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1292e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private LinearLayout listColors = null; 1302e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private LinearLayout listFilters = null; 1312e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private LinearLayout listBorders = null; 1322e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 1330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 13592e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 136f129cb70f4d2b43a147b399d91650414defa6dd9nicolasroard private static int mImageBorderSize = 4; // in percent 1370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 139bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 140bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 14192e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 14292e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<View> mListViews = new Vector<View>(); 14392e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>(); 1440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1450ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1460ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1470ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1480ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1490ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 150ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 1513038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford private static final int SEEK_BAR_MAX = 600; 15255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 153d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 1542e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullFxFilter; 1552e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullBorderFilter; 1562e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private int mIconSeedSize = 140; 1573d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 1580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 16263a7dac01d394523799939596b960cb03321798dJohn Hoford setupMasterImage(); 1635448bf8095483574649afcc2add7f153670c7450nicolasroard ImageFilterRS.setRenderScriptContext(this); 1645448bf8095483574649afcc2add7f153670c7450nicolasroard 16595404c666640177abf72ca2278585a16f30cf390nicolasroard ImageShow.setDefaultBackgroundColor(getResources().getColor(R.color.background_screen)); 1665ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard // TODO: get those values from XML. 1672f8301760867dc269c90bbeb338495f80e841c08nicolasroard ImageZoom.setZoomedSize(getPixelsFromDip(256)); 1687592704e662e49e4bbf3ba86a43d790774829bb0nicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 169f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 170f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 1715ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextSize((int) getPixelsFromDip(12)); 1725ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextPadding((int) getPixelsFromDip(10)); 173f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4)); 174f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextSize((int) getPixelsFromDip(18)); 175f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalText(getResources().getString(R.string.original_picture_text)); 1762e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mIconSeedSize = getResources().getDimensionPixelSize(R.dimen.thumbnail_size); 1772e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 178c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard Drawable curveHandle = getResources().getDrawable(R.drawable.camera_crop); 1793992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard int curveHandleSize = (int) getResources().getDimension(R.dimen.crop_indicator_size); 1803992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 1813992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 1825ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 1830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1849594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 185786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 186786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 187786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 188bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 189bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 190786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 191786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 192786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 193786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 194786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 196e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 1970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1982e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk listFilters = (LinearLayout) findViewById(R.id.listFilters); 1992e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk listBorders = (LinearLayout) findViewById(R.id.listBorders); 2002e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk listColors = (LinearLayout) findViewById(R.id.listColorsFx); 2010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 2030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves = (ImageCurves) findViewById(R.id.imageCurves); 2040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); 2055448bf8095483574649afcc2add7f153670c7450nicolasroard mImageZoom = (ImageZoom) findViewById(R.id.imageZoom); 20662e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop = (ImageCrop) findViewById(R.id.imageCrop); 2078537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate = (ImageRotate) findViewById(R.id.imageRotate); 2088537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip = (ImageFlip) findViewById(R.id.imageFlip); 2092c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet = (ImageTinyPlanet) findViewById(R.id.imageTinyPlanet); 210cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageRedEyes = (ImageRedEyes) findViewById(R.id.imageRedEyes); 211db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford mImageDraw = (ImageDraw) findViewById(R.id.imageDraw); 2120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2135d834ce0c65f89cf3f249f586b360c1a6d7ab99bRuben Brunk mImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 214f46da69aefd9afe0b4326a2fcea8e33c294136bbRuben Brunk ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 2156e2dd284681a716c55e0937ef2e15a1c7507a1b2Ruben Brunk ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 2160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 2170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageCurves); 2180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageStraighten); 2195448bf8095483574649afcc2add7f153670c7450nicolasroard mImageViews.add(mImageZoom); 22062e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageViews.add(mImageCrop); 2218537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageRotate); 2228537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageFlip); 2232c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageViews.add(mImageTinyPlanet); 224cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageViews.add(mImageRedEyes); 225cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard for (ImageShow imageShow : mImageViews) { 226cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageLoader.addCacheListener(imageShow); 227cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard } 2280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx = findViewById(R.id.fxList); 2300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders = findViewById(R.id.bordersList); 23192e2341248e99c691f38820503984bc5e2f18811nicolasroard mListGeometry = findViewById(R.id.geometryList); 23292e2341248e99c691f38820503984bc5e2f18811nicolasroard mListFilterButtons = findViewById(R.id.filterButtonsList); 2330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors = findViewById(R.id.colorsFxList); 2340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListFx); 2350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListBorders); 2360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListGeometry); 23792e2341248e99c691f38820503984bc5e2f18811nicolasroard mListViews.add(mListFilterButtons); 2380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListColors); 2390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 2410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 2420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 2430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 24492e2341248e99c691f38820503984bc5e2f18811nicolasroard 2455b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk mBottomPanelButtons.add(mFxButton); 2465b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk mBottomPanelButtons.add(mBorderButton); 2475b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk mBottomPanelButtons.add(mGeometryButton); 2485b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk mBottomPanelButtons.add(mColorsButton); 2495b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk 25092e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 25192e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setImageLoader(mImageLoader); 25292e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setImageLoader(mImageLoader); 25392e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setImageLoader(mImageLoader); 25462e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop.setImageLoader(mImageLoader); 2558537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setImageLoader(mImageLoader); 2568537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setImageLoader(mImageLoader); 2572c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setImageLoader(mImageLoader); 258cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageRedEyes.setImageLoader(mImageLoader); 259db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford mImageDraw.setImageLoader(mImageLoader); 260db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford 26198ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard mPanelController.setActivity(this); 26298ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard 26392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 26492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageCurves)); 26592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageStraighten)); 26662e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addImageView(findViewById(R.id.imageCrop)); 2678537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageRotate)); 2688537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageFlip)); 26992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageZoom)); 2702c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mPanelController.addImageView(findViewById(R.id.imageTinyPlanet)); 271cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mPanelController.addImageView(findViewById(R.id.imageRedEyes)); 272db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford mPanelController.addImageView(findViewById(R.id.imageDraw)); 27392e2341248e99c691f38820503984bc5e2f18811nicolasroard 27492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mFxButton, mListFx, 0); 27592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mBorderButton, mListBorders, 1); 27692e2341248e99c691f38820503984bc5e2f18811nicolasroard 27792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mGeometryButton, mListGeometry, 2); 27892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton)); 27962e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton)); 28092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton)); 28192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton)); 282cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.redEyeButton)); 28392e2341248e99c691f38820503984bc5e2f18811nicolasroard 28492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mColorsButton, mListColors, 3); 285ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 286f93e60c1b334d510940406c736559895462aac31nicolasroard Vector<ImageFilter> filters = new Vector<ImageFilter>(); 287f93e60c1b334d510940406c736559895462aac31nicolasroard FiltersManager.addFilters(filters, mImageLoader); 288f93e60c1b334d510940406c736559895462aac31nicolasroard 289f93e60c1b334d510940406c736559895462aac31nicolasroard for (ImageFilter filter : filters) { 2902e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk filter.setParameter(filter.getDefaultParameter()); 291f93e60c1b334d510940406c736559895462aac31nicolasroard filter.setName(getString(filter.getTextId())); 2922e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk setupFilterButton(filter, listColors, mColorsButton); 293ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 29418e71eb1589f839667207414e5f5cf95ba78a183nicolasroard mPanelController.addFilter(new ImageFilterRedEye()); 295ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 29692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 2970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 2980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 2990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 30163a7dac01d394523799939596b960cb03321798dJohn Hoford operationsList.setAdapter(mMasterImage.getHistory()); 3020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 303bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 30463a7dac01d394523799939596b960cb03321798dJohn Hoford imageStateList.setAdapter(mMasterImage.getState()); 30563a7dac01d394523799939596b960cb03321798dJohn Hoford mImageLoader.setAdapter(mMasterImage.getHistory()); 3060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListImages(listFilters); 3080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListBorders(listBorders); 3090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 31092e2341248e99c691f38820503984bc5e2f18811nicolasroard SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar); 3113038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford seekBar.setMax(SEEK_BAR_MAX); 3123038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford 31392e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setSeekBar(seekBar); 314de154778c8f94121cb2117fcf6224c40c01b6132nicolasroard mImageZoom.setSeekBar(seekBar); 3152c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setSeekBar(seekBar); 31692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 3178537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), 3189820e7e753b7e1977ef3d2163605431769ce9165nicolasroard findViewById(R.id.panelAccessoryViewList), 3199820e7e753b7e1977ef3d2163605431769ce9165nicolasroard findViewById(R.id.applyEffect)); 32063a7dac01d394523799939596b960cb03321798dJohn Hoford 32192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setCurrentPanel(mFxButton); 3220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 323a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 324a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 325a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 326a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 327d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (intent.getData() != null) { 328d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(intent.getData()); 3290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 3300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 3310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 33263926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 3336416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Handle behavior for various actions 33463926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk String action = intent.getAction(); 335a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (action.equalsIgnoreCase(CROP_ACTION)) { 3366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Bundle extras = intent.getExtras(); 3376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (extras != null) { 3386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras = new CropExtras(extras.getInt(CropExtras.KEY_OUTPUT_X, 0), 3396416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_OUTPUT_Y, 0), 3406416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE, true) && 3416416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE_UP_IF_NEEDED, false), 3426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_X, 0), 3436416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_Y, 0), 3446416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SET_AS_WALLPAPER, false), 3456416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_RETURN_DATA, false), 3466416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT), 3476416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getString(CropExtras.KEY_OUTPUT_FORMAT), 3486416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SHOW_WHEN_LOCKED, false), 3496416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_X), 3506416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_Y)); 3516416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 3526416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getShowWhenLocked()) { 3536416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 3546416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 3556416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setCropExtras(mCropExtras); 3566416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 3576416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setExtras(mCropExtras); 3586416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String s = getString(R.string.Fixed); 3596416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setAspectString(s); 3606416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setCropActionFlag(true); 3616416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mPanelController.setFixedAspect(mCropExtras.getAspectX() > 0 3626416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk && mCropExtras.getAspectY() > 0); 3636416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 36463926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk mPanelController.showComponent(findViewById(R.id.cropButton)); 365a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu } else if (action.equalsIgnoreCase(TINY_PLANET_ACTION)) { 366a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu mPanelController.showComponent(findViewById(R.id.tinyplanetButton)); 36763926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk } 3680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 370d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 37100914f56c3390caa224b1c9fc07624665de40113John Reck final View filters = findViewById(R.id.filtersPanel); 37200914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 37300914f56c3390caa224b1c9fc07624665de40113John Reck loading.setVisibility(View.VISIBLE); 37400914f56c3390caa224b1c9fc07624665de40113John Reck filters.setVisibility(View.INVISIBLE); 375d49d53206a197b08ec4754d8751b6860e33d9f48John Reck View tinyPlanetView = findViewById(R.id.tinyplanetButton); 376d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (tinyPlanetView != null) { 377d49d53206a197b08ec4754d8751b6860e33d9f48John Reck tinyPlanetView.setVisibility(View.GONE); 378d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 379d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = new LoadBitmapTask(tinyPlanetView); 380d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 381d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 382d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 3838965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 3843d4f2c7443f6f6015efab769bfaad19263137c67John Hoford View mTinyPlanetButton; 385d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 3863d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 387d49d53206a197b08ec4754d8751b6860e33d9f48John Reck public LoadBitmapTask(View button) { 3883d4f2c7443f6f6015efab769bfaad19263137c67John Hoford mTinyPlanetButton = button; 389d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 3903d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 3913d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 3923d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 393d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 3948965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!mImageLoader.loadBitmap(params[0], mBitmapSize)) { 3958965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 3968965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 3978965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk publishProgress(mImageLoader.queryLightCycle360()); 3988965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 3993d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4003d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4013d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4028965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 40300914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 4046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 4058965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 4066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 40700914f56c3390caa224b1c9fc07624665de40113John Reck final View filters = findViewById(R.id.filtersPanel); 40800914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 40900914f56c3390caa224b1c9fc07624665de40113John Reck loading.setVisibility(View.GONE); 41000914f56c3390caa224b1c9fc07624665de40113John Reck filters.setVisibility(View.VISIBLE); 4118965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 4128965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk mTinyPlanetButton.setVisibility(View.VISIBLE); 4138965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 41400914f56c3390caa224b1c9fc07624665de40113John Reck } 41500914f56c3390caa224b1c9fc07624665de40113John Reck 41600914f56c3390caa224b1c9fc07624665de40113John Reck @Override 4173d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 4183d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 4193d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 4203d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4218965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 4228965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk cannotLoadImage(); 4233d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4248965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 4252e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk Bitmap bmap = mImageShow.getFilteredImage(); 4262e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk if (bmap != null && bmap.getWidth() > 0 && bmap.getHeight() > 0) { 4272e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float w = bmap.getWidth(); 4282e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float h = bmap.getHeight(); 4292e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float f = mIconSeedSize / Math.min(w, h); 4302e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk w = w * f; 4312e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk h = h * f; 4322e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk bmap = Bitmap.createScaledBitmap(bmap, (int) w, (int) h, true); 4332e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4342e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_colors_buttons = listColors.getChildCount(); 4352e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_colors_buttons; i++) { 4362e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listColors.getChildAt(i); 4372e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4382e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 4392e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 4402e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_filters_buttons = listFilters.getChildCount(); 4412e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_filters_buttons; i++) { 4422e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listFilters.getChildAt(i); 4432e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4442e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 4452e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 4462e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_borders_buttons = listBorders.getChildCount(); 4472e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_borders_buttons; i++) { 4482e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listBorders.getChildAt(i); 4492e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4502e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 4512e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 4522e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4532e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 454d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 4553d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 4563d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4573d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4583d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4593d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4603d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4613d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 462d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 463d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 4643d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4653d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 4663d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4673d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4684d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard private int translateMainPanel(View viewPanel) { 4694d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int accessoryPanelWidth = viewPanel.getWidth(); 4704d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainViewWidth = findViewById(R.id.mainView).getWidth(); 4714d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainPanelWidth = mImageShow.getDisplayedImageBounds().width(); 472f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard if (mainPanelWidth == 0) { 473f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard mainPanelWidth = mainViewWidth; 474f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard } 475cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard int filtersPanelWidth = findViewById(R.id.filtersPanel).getWidth(); 476cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard if (mainPanelWidth < filtersPanelWidth) { 477cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard mainPanelWidth = filtersPanelWidth; 478cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard } 4794d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int leftOver = mainViewWidth - mainPanelWidth - accessoryPanelWidth; 4804d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard if (leftOver < 0) { 4814d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return -accessoryPanelWidth; 4824d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 4834d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return 0; 4844d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 4854d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard 4860f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 4870f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk DisplayMetrics metrics = new DisplayMetrics(); 488fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford Display display = getWindowManager().getDefaultDisplay(); 4890f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk Point size = new Point(); 490fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getSize(size); 491fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getMetrics(metrics); 492fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford int msize = Math.min(size.x, size.y); 4930f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk return (133 * msize) / metrics.densityDpi; 494fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 495fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 4960addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 497ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 498ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 499ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 500ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 501ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 502ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 503ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 504ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 505ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 5060addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 5070addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 5080addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 5090addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 5100addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 5110addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 5120addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 513ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 514ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 515ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 516ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 517ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 518ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 51908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 52008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 521ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 522ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 523ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 5240ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 5250ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 5260ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 5270ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5280ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5290ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 5300ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 5310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 5320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 534ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 5350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 5360ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5370ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 5390ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 54092e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 54192e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 5420ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5430ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5440ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 5450ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 5460ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 5470ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 5480ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5490ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 5500addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 5510ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 5520ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 5530ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5540ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5550ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 5560ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 5570ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 5580ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 5590ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 5600ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 5610ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5620ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5630ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 5640ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 5650ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5660ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 5689594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 5699594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 570bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showHistory = menu.findItem(R.id.operationsButton); 5719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 572bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.hide_history_panel); 573bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 574bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.show_history_panel); 575bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 576bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 577bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 578bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 5799594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 580bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 5819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5820ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 5830ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 5840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 5850ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 58623e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 58723e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 58823e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 58923e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 59063a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem); 5919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 5929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 59492e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 5956e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 5966e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 5976e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 5986e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 5996e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6006e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6016e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6026e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6036e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 6046e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 6056e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6066e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 6076e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6086e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6096e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6106e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 6129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 6139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 61463a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 61663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 6189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6219594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 62263a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 62463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6259594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 6269594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6279594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6289594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 629f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 630f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 631f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 632f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 633bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 634bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 635bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 636bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 6379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 6389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 6399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 6429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 6439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 6479594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6489594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 649bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 650bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu if (mSaveButton != null) 651bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 652bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 653bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 6542e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk public FilterIconButton setupFilterButton(ImageFilter filter, LinearLayout panel, View button) { 6552e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk LayoutInflater inflater = 6562e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 6572e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton icon = (FilterIconButton) inflater.inflate(R.layout.filtericonbutton, 6582e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk panel, false); 6592e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk String text = filter.getName(); 6602e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk if (filter instanceof ImageFilterBorder || filter instanceof ImageFilterParametricBorder) { 6612e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk text = ""; 6622e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 6632e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk icon.setup(text, filter, this, panel); 6642e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk icon.setId(filter.getButtonId()); 6652e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mPanelController.addComponent(button, icon); 6662e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mPanelController.addFilter(filter); 6672e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk panel.addView(icon); 6682e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk return icon; 6692e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 6702e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 6710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 6720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 6730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 674a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 675a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford ImageFilterFx[] fxArray = new ImageFilterFx[18]; 6760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 677457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 67808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] drawid = { 67943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0005_punch, 680457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0000_vintage, 681457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0004_bw_contrast, 68243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0002_bleach, 68343b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0001_instant, 684457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0007_washout, 68543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0003_blue_crush, 68643b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0008_washout_color, 68743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0006_x_process 688457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 689457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 69008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] fxNameid = { 69143b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_punch, 692457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_vintage, 693457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bw_contrast, 69443b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_bleach, 69543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_instant, 696457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout, 69743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_blue_crush, 698457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout_color, 69943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_x_process 700457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 701457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 7020a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty 703e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford preset.setImageLoader(mImageLoader); 704a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 70553f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford BitmapFactory.Options o = new BitmapFactory.Options(); 70653f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford o.inScaled = false; 70708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 708457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford for (int i = 0; i < drawid.length; i++) { 70953f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o); 7102e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk fxArray[p++] = new ImageFilterFx(b, getString(fxNameid[i]), fxNameid[i]); 711457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford } 7122e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 7132e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk ImageFilterFx nullFilter = new ImageFilterFx(null, getString(R.string.none), R.string.none); 7142e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mNullFxFilter = setupFilterButton(nullFilter, listFilters, mFxButton); 7152e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mNullFxFilter.setSelected(true); 7162e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 7170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 7182e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk setupFilterButton(fxArray[i], listFilters, mFxButton); 7190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 72263a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(preset, true); 7230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListBorders(LinearLayout listBorders) { 7260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 7270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the borders straight from the filesystem 7280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 72948b29c82472006102911f981be7025d21f5fc805nicolasroard ImageFilter[] borders = new ImageFilter[12]; 7300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(null); 7310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7328e1536da92f155731d5fd729ec5b2bf00709091anicolasroard Drawable npd1 = getResources().getDrawable(R.drawable.filtershow_border_4x5); 7338e1536da92f155731d5fd729ec5b2bf00709091anicolasroard borders[p++] = new ImageFilterBorder(npd1); 7348e1536da92f155731d5fd729ec5b2bf00709091anicolasroard Drawable npd2 = getResources().getDrawable(R.drawable.filtershow_border_brush); 7358e1536da92f155731d5fd729ec5b2bf00709091anicolasroard borders[p++] = new ImageFilterBorder(npd2); 73648b29c82472006102911f981be7025d21f5fc805nicolasroard Drawable npd3 = getResources().getDrawable(R.drawable.filtershow_border_grunge); 73748b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterBorder(npd3); 73848b29c82472006102911f981be7025d21f5fc805nicolasroard Drawable npd4 = getResources().getDrawable(R.drawable.filtershow_border_sumi_e); 73948b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterBorder(npd4); 74048b29c82472006102911f981be7025d21f5fc805nicolasroard Drawable npd5 = getResources().getDrawable(R.drawable.filtershow_border_tape); 74148b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterBorder(npd5); 7425ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 0); 7430f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 7440f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageBorderSize); 7455ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 0); 7460f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 7470f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageBorderSize); 74848b29c82472006102911f981be7025d21f5fc805nicolasroard int creamColor = Color.argb(255, 237, 237, 227); 74948b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterParametricBorder(creamColor, mImageBorderSize, 0); 75048b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterParametricBorder(creamColor, mImageBorderSize, 75148b29c82472006102911f981be7025d21f5fc805nicolasroard mImageBorderSize); 7520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 7540a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk borders[i].setName(getString(R.string.borders)); 7552e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = setupFilterButton(borders[i], listBorders, mBorderButton); 7562e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk if (i == 0) { 7572e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mNullBorderFilter = b; 7582e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mNullBorderFilter.setSelected(true); 7592e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 7600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 7640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 76592e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 7660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void showOriginalViews(boolean value) { 7680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 7690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.showOriginal(value); 7700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 7740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 7750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 7768537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 7770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideListViews() { 7810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mListViews) { 7820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 7830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 7870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(false); // reset 7880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 7890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 7900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectBottomPanelButtons() { 7940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : mBottomPanelButtons) { 7950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 7960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectPanelButtons(Vector<ImageButton> buttons) { 8000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : buttons) { 8010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 8020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8055b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk public void disableFilterButtons() { 8065b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk for (ImageButton b : mBottomPanelButtons) { 8075b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setEnabled(false); 8085b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setClickable(false); 8095b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setAlpha(0.4f); 8105b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk } 8115b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk } 8125b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk 8135b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk public void enableFilterButtons() { 8145b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk for (ImageButton b : mBottomPanelButtons) { 8155b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setEnabled(true); 8165b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setClickable(true); 8175b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setAlpha(1.0f); 8185b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk } 8195b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk } 8205b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk 8210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 822bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 823bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 824d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public boolean isShowingHistoryPanel() { 825d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard return mShowingHistoryPanel; 826d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard } 827d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard 828bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 829bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View view = findViewById(R.id.mainPanel); 830bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 831bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 832bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 833bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 834bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 835bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 836bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 8374d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 838bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 839bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 8404d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard view.animate().setDuration(200).x(translate) 841bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .withLayer().withEndAction(new Runnable() { 84292e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 843bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard public void run() { 844bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setAlpha(0); 845bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.VISIBLE); 846bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.animate().setDuration(100) 847bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .alpha(1.0f).start(); 848bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 849bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard }).start(); 850bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 851bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 852bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.INVISIBLE); 853bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(0).withLayer() 854bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 855bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 856bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 857bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 858bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 859a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 860a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 861a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 862a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 863a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (mShowingHistoryPanel) { 864a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard toggleHistoryPanel(); 865a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 866a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 867a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 86863a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 86963a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter mHistoryAdapter = new HistoryAdapter( 87063a7dac01d394523799939596b960cb03321798dJohn Hoford this, R.layout.filtershow_history_operation_row, 87163a7dac01d394523799939596b960cb03321798dJohn Hoford R.id.rowTextView); 87263a7dac01d394523799939596b960cb03321798dJohn Hoford ImageStateAdapter mImageStateAdapter = new ImageStateAdapter(this, 87363a7dac01d394523799939596b960cb03321798dJohn Hoford R.layout.filtershow_imagestate_row); 87463a7dac01d394523799939596b960cb03321798dJohn Hoford 87563a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setHistoryAdapter(mHistoryAdapter); 87663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setStateAdapter(mImageStateAdapter); 87763a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 87863a7dac01d394523799939596b960cb03321798dJohn Hoford } 87963a7dac01d394523799939596b960cb03321798dJohn Hoford 880bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 8810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 8820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 883d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public void toggleHistoryPanel() { 8849594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 8859594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 886bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 887bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 888bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 889bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 890bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 891bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 8924d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 8939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 8949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 8954d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard view.animate().setDuration(200).x(translate) 8969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 89792e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 8989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 8999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 9009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 9019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 9029594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 9039594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9049594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 9059594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 9069594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 9079594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 9089594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(0).withLayer() 909bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 9109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 9129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9142e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk public void dispatchNullFilterClick() { 915af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.onClick(mNullFxFilter); 916af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullBorderFilter.onClick(mNullBorderFilter); 9172e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 918af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford 9192e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 9202e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk dispatchNullFilterClick(); 92163a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 9229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 9239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 92463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(original, true); 9253992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.resetParameters(); 9269594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 9270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 9300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 9310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 9320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 9349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 9350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 9370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 93975608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 94075608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 94175608166f54891972ebad3d8fd958fed9a5300e6nicolasroard if (mPanelController.onBackPressed()) { 94255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard saveImage(); 94375608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 94475608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 945e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 946e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 947e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard CharSequence text = getString(R.string.cannot_load_image); 948e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 949e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard toast.show(); 950e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 951e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 952e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 9530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 9540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 9560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 9570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 9580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 9590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9612e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk public void useFilter(ImageFilter filter) { 96263a7dac01d394523799939596b960cb03321798dJohn Hoford if (mMasterImage.getCurrentFilter() == filter) { 9630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 9640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 96563a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setCurrentFilter(filter); 9660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset oldPreset = mImageShow.getImagePreset(); 9670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 9680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use a numerical constant instead. 969a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 9702e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk copy.add(filter); 971a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 97263a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(copy, true); 9730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 9740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 9780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 97963a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 9800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 9810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 9840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 9850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 9860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 9870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 9880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 9890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 99192e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 9930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 9940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 9950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 996d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 9970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveToExtraUri = false; 10026416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveAsWallpaper = false; 10036416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mReturnAsExtra = false; 10046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean outputted = false; 10056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 10076416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras != null) { 10086416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getExtraOutput() != null) { 10096416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveToExtraUri = true; 10106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10126416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getSetAsWallpaper()) { 10136416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveAsWallpaper = true; 10146416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10156416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10166416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getReturnData()) { 10176416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10186416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mReturnAsExtra = true; 10196416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10206416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10216416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10226416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (outputted) { 10236416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setUseCropExtrasFlag(true); 10246416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(null); 10256416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.returnFilteredResult(this); 10266416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10276416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10286416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!outputted) { 10296416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mImageShow.hasModifications()) { 10306416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Get the name of the album, to which the image will be saved 10316416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 10326416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 10336416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 10346416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(albumName); 10356416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveImage(this, null); 10366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 10376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10396416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10406416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10416416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void onFilteredResult(Bitmap filtered) { 10436416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Intent intent = new Intent(); 10446416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_CROPPED_RECT, mImageShow.getImageCropBounds()); 10456416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveToExtraUri) { 10466416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveToUri(filtered, mCropExtras.getExtraOutput(), 10476416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras.getOutputFormat(), this); 10486416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10496416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveAsWallpaper) { 10506416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk try { 10516416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk WallpaperManager.getInstance(this).setBitmap(filtered); 10526416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } catch (IOException e) { 10536416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "fail to set wall paper", e); 10546416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 105555550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } 10566416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mReturnAsExtra) { 10576416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (filtered != null) { 10586416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bmapSize = filtered.getRowBytes() * filtered.getHeight(); 10596416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk /* 10606416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Max size of Binder transaction buffer is 1Mb, so constrain 10616416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Bitmap to be somewhat less than this, otherwise we get 10626416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * TransactionTooLargeExceptions. 10636416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk */ 10646416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (bmapSize > MAX_BMAP_IN_INTENT) { 10656416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "Bitmap too large to be returned via intent"); 10666416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 10676416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_DATA, filtered); 10686416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10696416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10706416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10716416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk setResult(RESULT_OK, intent); 10726416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!mSaveToExtraUri) { 10736416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10746416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10756416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10766416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10776416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 10786416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (outputted) { 10796416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk hideSavingProgress(); 10806416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10816416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 10820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 1085e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 10860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1089