FilterShowActivity.java revision 795776f67fe5bca902b09c01edec630879263341
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; 250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 26a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 28457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 29457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.BitmapFactory; 3093dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Color; 31fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.graphics.Point; 320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 343d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 3592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport android.provider.MediaStore; 37fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 40fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.view.Display; 410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Menu; 429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.view.MenuItem; 430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View; 440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 4598ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroardimport android.view.WindowManager; 460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView; 470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ImageButton; 490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.LinearLayout; 500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ListView; 5192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.widget.SeekBar; 520ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider; 530ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 54e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroardimport android.widget.Toast; 550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 570addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 5892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 5992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilter; 6092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterBorder; 6167fefdb9b77644c955e1c0c5b1fcd51e2374f212John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterBwFilter; 62ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterContrast; 63ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterExposure; 64a19830b4fd9050b48386cd904d99cfd2566cc515John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterFx; 65ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterHue; 6693dfe7a1df07a64701369b480578410efb740a27nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterParametricBorder; 6792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterRS; 68ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterSaturated; 69ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterShadows; 702576a29cccf1d96edeef071914e8b775c230e8e8Sascha Haeberlingimport com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet; 71ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterVibrance; 72ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterVignette; 73ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterWBalance; 7492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageBorder; 75de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 76de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageFlip; 77cc93226fc364a50de3a1479c0912e9af1854b666nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRedEyes; 78de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRotate; 7992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 8008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallBorder; 8192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; 8292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageStraighten; 832c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet; 84ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.imageshow.ImageWithIcon; 8592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageZoom; 8692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 8792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 8892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 897592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 905ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroardimport com.android.gallery3d.filtershow.ui.ImageButtonTitle; 9192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.ui.ImageCurves; 923992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 930addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 9492e2341248e99c691f38820503984bc5e2f18811nicolasroard 9592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport java.io.IOException; 97ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 9892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 9992e2341248e99c691f38820503984bc5e2f18811nicolasroard 1000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard@TargetApi(16) 1010ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener, 1020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 1030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // fields for supporting crop action 105795776f67fe5bca902b09c01edec630879263341Ruben Brunk public static final String CROP_ACTION = "com.android.camera.action.CROP"; 1066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private CropExtras mCropExtras = null; 1076416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 108a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 109a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 1106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public static final int MAX_BMAP_IN_INTENT = 990000; 11192e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 1120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 1130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageCurves mImageCurves = null; 1150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageBorder mImageBorders = null; 116cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard private ImageRedEyes mImageRedEyes = null; 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageStraighten mImageStraighten = null; 1185448bf8095483574649afcc2add7f153670c7450nicolasroard private ImageZoom mImageZoom = null; 11962e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk private ImageCrop mImageCrop = null; 1208537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageRotate mImageRotate = null; 1218537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageFlip mImageFlip = null; 1222c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard private ImageTinyPlanet mImageTinyPlanet = null; 1230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListFx = null; 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListBorders = null; 1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListGeometry = null; 1270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListColors = null; 12892e2341248e99c691f38820503984bc5e2f18811nicolasroard private View mListFilterButtons = null; 129bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 1320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 1330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 1340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 1350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 13608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard private ImageSmallFilter mCurrentImageSmallFilter = null; 1370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 13992e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 140f129cb70f4d2b43a147b399d91650414defa6dd9nicolasroard private static int mImageBorderSize = 4; // in percent 1410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 143bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 144bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 14592e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 14692e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<View> mListViews = new Vector<View>(); 14792e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>(); 1480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1490ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1500ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1510ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1520ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1530ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 154ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 1553038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford private static final int SEEK_BAR_MAX = 600; 15655550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 157d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 158af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford private ImageSmallFilter mNullFxFilter; 159af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford private ImageSmallFilter mNullBorderFilter; 1603d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 1610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1655448bf8095483574649afcc2add7f153670c7450nicolasroard ImageFilterRS.setRenderScriptContext(this); 1665448bf8095483574649afcc2add7f153670c7450nicolasroard 16795404c666640177abf72ca2278585a16f30cf390nicolasroard ImageShow.setDefaultBackgroundColor(getResources().getColor(R.color.background_screen)); 1688965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk ImageSmallFilter.setDefaultBackgroundColor(getResources().getColor( 1698965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk R.color.background_main_toolbar)); 1705ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard // TODO: get those values from XML. 1712f8301760867dc269c90bbeb338495f80e841c08nicolasroard ImageZoom.setZoomedSize(getPixelsFromDip(256)); 1727592704e662e49e4bbf3ba86a43d790774829bb0nicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 173f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 174f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 1755ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextSize((int) getPixelsFromDip(12)); 1765ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextPadding((int) getPixelsFromDip(10)); 177f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4)); 178f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextSize((int) getPixelsFromDip(18)); 179f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalText(getResources().getString(R.string.original_picture_text)); 1805ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageButtonTitle.setTextSize((int) getPixelsFromDip(12)); 1815ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageButtonTitle.setTextPadding((int) getPixelsFromDip(10)); 18295404c666640177abf72ca2278585a16f30cf390nicolasroard ImageSmallFilter.setMargin((int) getPixelsFromDip(3)); 1835ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageSmallFilter.setTextMargin((int) getPixelsFromDip(4)); 184c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard Drawable curveHandle = getResources().getDrawable(R.drawable.camera_crop); 1853992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard int curveHandleSize = (int) getResources().getDimension(R.dimen.crop_indicator_size); 1863992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 1873992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 1885ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 1890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1909594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 191786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 192786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 193786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 194bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 195bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 196786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 197786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 198786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 199786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 200786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 2010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 202e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 2030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); 2050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); 206ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford LinearLayout listColors = (LinearLayout) findViewById(R.id.listColorsFx); 2070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 2090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves = (ImageCurves) findViewById(R.id.imageCurves); 2100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders = (ImageBorder) findViewById(R.id.imageBorder); 2110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); 2125448bf8095483574649afcc2add7f153670c7450nicolasroard mImageZoom = (ImageZoom) findViewById(R.id.imageZoom); 21362e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop = (ImageCrop) findViewById(R.id.imageCrop); 2148537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate = (ImageRotate) findViewById(R.id.imageRotate); 2158537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip = (ImageFlip) findViewById(R.id.imageFlip); 2162c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet = (ImageTinyPlanet) findViewById(R.id.imageTinyPlanet); 217cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageRedEyes = (ImageRedEyes) findViewById(R.id.imageRedEyes); 2180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2195d834ce0c65f89cf3f249f586b360c1a6d7ab99bRuben Brunk mImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 220f46da69aefd9afe0b4326a2fcea8e33c294136bbRuben Brunk ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 2216e2dd284681a716c55e0937ef2e15a1c7507a1b2Ruben Brunk ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 2220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 2230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageCurves); 2240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageBorders); 2250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageStraighten); 2265448bf8095483574649afcc2add7f153670c7450nicolasroard mImageViews.add(mImageZoom); 22762e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageViews.add(mImageCrop); 2288537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageRotate); 2298537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageFlip); 2302c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageViews.add(mImageTinyPlanet); 231cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageViews.add(mImageRedEyes); 232cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard for (ImageShow imageShow : mImageViews) { 233cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageLoader.addCacheListener(imageShow); 234cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard } 2350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx = findViewById(R.id.fxList); 2370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders = findViewById(R.id.bordersList); 23892e2341248e99c691f38820503984bc5e2f18811nicolasroard mListGeometry = findViewById(R.id.geometryList); 23992e2341248e99c691f38820503984bc5e2f18811nicolasroard mListFilterButtons = findViewById(R.id.filterButtonsList); 2400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors = findViewById(R.id.colorsFxList); 2410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListFx); 2420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListBorders); 2430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListGeometry); 24492e2341248e99c691f38820503984bc5e2f18811nicolasroard mListViews.add(mListFilterButtons); 2450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListColors); 2460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 2480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 2490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 2500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 25192e2341248e99c691f38820503984bc5e2f18811nicolasroard 25292e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 25392e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setImageLoader(mImageLoader); 25492e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setMaster(mImageShow); 25592e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageBorders.setImageLoader(mImageLoader); 25692e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageBorders.setMaster(mImageShow); 25792e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setImageLoader(mImageLoader); 25892e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setMaster(mImageShow); 25992e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setImageLoader(mImageLoader); 26092e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setMaster(mImageShow); 26162e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop.setImageLoader(mImageLoader); 26262e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop.setMaster(mImageShow); 2638537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setImageLoader(mImageLoader); 2648537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setMaster(mImageShow); 2658537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setImageLoader(mImageLoader); 2668537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setMaster(mImageShow); 2672c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setImageLoader(mImageLoader); 2682c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setMaster(mImageShow); 269cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageRedEyes.setImageLoader(mImageLoader); 270cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageRedEyes.setMaster(mImageShow); 27192e2341248e99c691f38820503984bc5e2f18811nicolasroard 27298ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard mPanelController.setActivity(this); 27398ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard 27492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 27592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageCurves)); 27692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageBorder)); 27792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageStraighten)); 27862e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addImageView(findViewById(R.id.imageCrop)); 2798537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageRotate)); 2808537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageFlip)); 28192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageZoom)); 2822c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mPanelController.addImageView(findViewById(R.id.imageTinyPlanet)); 283cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mPanelController.addImageView(findViewById(R.id.imageRedEyes)); 28492e2341248e99c691f38820503984bc5e2f18811nicolasroard 28592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mFxButton, mListFx, 0); 28692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mBorderButton, mListBorders, 1); 28792e2341248e99c691f38820503984bc5e2f18811nicolasroard 28892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mGeometryButton, mListGeometry, 2); 28992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton)); 29062e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton)); 29192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton)); 29292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton)); 293cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.redEyeButton)); 29492e2341248e99c691f38820503984bc5e2f18811nicolasroard 29592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mColorsButton, mListColors, 3); 296ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 2970f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] recastIDs = { 2982576a29cccf1d96edeef071914e8b775c230e8e8Sascha Haeberling R.id.tinyplanetButton, 299ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.vignetteButton, 300ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.vibranceButton, 301ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.contrastButton, 302ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.saturationButton, 30367fefdb9b77644c955e1c0c5b1fcd51e2374f212John Hoford R.id.bwfilterButton, 304ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.wbalanceButton, 305ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.hueButton, 306ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.exposureButton, 307ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.shadowRecoveryButton 308ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 3090f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk ImageFilter[] filters = { 3102576a29cccf1d96edeef071914e8b775c230e8e8Sascha Haeberling new ImageFilterTinyPlanet(), 311ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterVignette(), 312ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterVibrance(), 313ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterContrast(), 314ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterSaturated(), 31567fefdb9b77644c955e1c0c5b1fcd51e2374f212John Hoford new ImageFilterBwFilter(), 316ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterWBalance(), 317ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterHue(), 318ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterExposure(), 319ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterShadows() 320ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 321ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 322ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford for (int i = 0; i < filters.length; i++) { 323ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford ImageSmallFilter fView = new ImageSmallFilter(this); 324ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford View v = listColors.findViewById(recastIDs[i]); 325ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford int pos = listColors.indexOfChild(v); 326ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford listColors.removeView(v); 327ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 3282f879102d630815df64636b8d37e3a7eea8e8b65Sascha Haeberling filters[i].setParameter(filters[i].getPreviewParameter()); 329a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (v instanceof ImageButtonTitle) 33043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk filters[i].setName(((ImageButtonTitle) v).getText()); 331ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageFilter(filters[i]); 332ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setController(this); 333ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageLoader(mImageLoader); 334ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setId(recastIDs[i]); 335ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mPanelController.addComponent(mColorsButton, fView); 3360f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk listColors.addView(fView, pos); 337ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 338ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 3390f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] overlayIDs = { 340ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.sharpenButton, 341ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.curvesButtonRGB 342ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 3430f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] overlayBitmaps = { 344ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.drawable.filtershow_button_colors_sharpen, 345ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.drawable.filtershow_button_colors_curve 346ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 347a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard int[] overlayNames = { 34843b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.sharpness, 349ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.string.curvesRGB 350ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 351ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 3520f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk for (int i = 0; i < overlayIDs.length; i++) { 353ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford ImageWithIcon fView = new ImageWithIcon(this); 354ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford View v = listColors.findViewById(overlayIDs[i]); 355ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford int pos = listColors.indexOfChild(v); 356ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford listColors.removeView(v); 3570f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk final int sid = overlayNames[i]; 3580f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk ImageFilterExposure efilter = new ImageFilterExposure() { 359ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford { 360ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mName = getString(sid); 361ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 362ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 363ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford efilter.setParameter(-300); 364ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 3650f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk overlayBitmaps[i]); 366ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 367ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setIcon(bitmap); 368ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageFilter(efilter); 369ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setController(this); 370ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageLoader(mImageLoader); 371ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setId(overlayIDs[i]); 372ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mPanelController.addComponent(mColorsButton, fView); 3730f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk listColors.addView(fView, pos); 374ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 375ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 37692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 3773992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.addView(findViewById(R.id.pickCurvesChannel)); 3780f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mPanelController.addView(findViewById(R.id.aspect)); 3790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 3800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 3810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 383d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard operationsList.setAdapter(mImageShow.getHistory()); 3840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 385bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 386bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard imageStateList.setAdapter(mImageShow.getImageStateAdapter()); 387d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard mImageLoader.setAdapter(mImageShow.getHistory()); 3880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListImages(listFilters); 3900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListBorders(listBorders); 3910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 39292e2341248e99c691f38820503984bc5e2f18811nicolasroard SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar); 3933038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford seekBar.setMax(SEEK_BAR_MAX); 3943038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford 39592e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setSeekBar(seekBar); 396de154778c8f94121cb2117fcf6224c40c01b6132nicolasroard mImageZoom.setSeekBar(seekBar); 3972c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setSeekBar(seekBar); 39892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 3998537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), 40033e58a68ee1d4866169d41b7d88c6eff0c70dae0nicolasroard findViewById(R.id.applyEffect), findViewById(R.id.aspect), 40133e58a68ee1d4866169d41b7d88c6eff0c70dae0nicolasroard findViewById(R.id.pickCurvesChannel)); 40292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setMasterImage(mImageShow); 40392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setCurrentPanel(mFxButton); 4040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 405a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 406a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 407a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 408a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 409d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (intent.getData() != null) { 410d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(intent.getData()); 4110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 4120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 4130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 41463926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 4156416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Handle behavior for various actions 41663926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk String action = intent.getAction(); 417a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (action.equalsIgnoreCase(CROP_ACTION)) { 4186416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Bundle extras = intent.getExtras(); 4196416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (extras != null) { 4206416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras = new CropExtras(extras.getInt(CropExtras.KEY_OUTPUT_X, 0), 4216416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_OUTPUT_Y, 0), 4226416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE, true) && 4236416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE_UP_IF_NEEDED, false), 4246416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_X, 0), 4256416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_Y, 0), 4266416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SET_AS_WALLPAPER, false), 4276416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_RETURN_DATA, false), 4286416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT), 4296416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getString(CropExtras.KEY_OUTPUT_FORMAT), 4306416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SHOW_WHEN_LOCKED, false), 4316416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_X), 4326416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_Y)); 4336416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 4346416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getShowWhenLocked()) { 4356416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 4366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 4376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setCropExtras(mCropExtras); 4386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 4396416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setExtras(mCropExtras); 4406416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String s = getString(R.string.Fixed); 4416416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setAspectString(s); 4426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setCropActionFlag(true); 4436416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mPanelController.setFixedAspect(mCropExtras.getAspectX() > 0 4446416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk && mCropExtras.getAspectY() > 0); 4456416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 44663926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk mPanelController.showComponent(findViewById(R.id.cropButton)); 447a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu } else if (action.equalsIgnoreCase(TINY_PLANET_ACTION)) { 448a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu mPanelController.showComponent(findViewById(R.id.tinyplanetButton)); 44963926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk } 4500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 452d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 45300914f56c3390caa224b1c9fc07624665de40113John Reck final View filters = findViewById(R.id.filtersPanel); 45400914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 45500914f56c3390caa224b1c9fc07624665de40113John Reck loading.setVisibility(View.VISIBLE); 45600914f56c3390caa224b1c9fc07624665de40113John Reck filters.setVisibility(View.INVISIBLE); 457d49d53206a197b08ec4754d8751b6860e33d9f48John Reck View tinyPlanetView = findViewById(R.id.tinyplanetButton); 458d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (tinyPlanetView != null) { 459d49d53206a197b08ec4754d8751b6860e33d9f48John Reck tinyPlanetView.setVisibility(View.GONE); 460d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 461d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = new LoadBitmapTask(tinyPlanetView); 462d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 463d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 464d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 4658965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 4663d4f2c7443f6f6015efab769bfaad19263137c67John Hoford View mTinyPlanetButton; 467d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 4683d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 469d49d53206a197b08ec4754d8751b6860e33d9f48John Reck public LoadBitmapTask(View button) { 4703d4f2c7443f6f6015efab769bfaad19263137c67John Hoford mTinyPlanetButton = button; 471d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 4723d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4733d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4743d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 475d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 4768965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!mImageLoader.loadBitmap(params[0], mBitmapSize)) { 4778965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 4788965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 4798965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk publishProgress(mImageLoader.queryLightCycle360()); 4808965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 4813d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4823d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4833d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4848965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 48500914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 4866416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 4878965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 4886416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 48900914f56c3390caa224b1c9fc07624665de40113John Reck final View filters = findViewById(R.id.filtersPanel); 49000914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 49100914f56c3390caa224b1c9fc07624665de40113John Reck loading.setVisibility(View.GONE); 49200914f56c3390caa224b1c9fc07624665de40113John Reck filters.setVisibility(View.VISIBLE); 4938965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 4948965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk mTinyPlanetButton.setVisibility(View.VISIBLE); 4958965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 49600914f56c3390caa224b1c9fc07624665de40113John Reck } 49700914f56c3390caa224b1c9fc07624665de40113John Reck 49800914f56c3390caa224b1c9fc07624665de40113John Reck @Override 4993d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 5003d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 5013d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 5023d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5038965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 5048965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk cannotLoadImage(); 5053d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5068965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 507d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 5083d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 5093d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5103d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5113d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5123d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5133d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 5143d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 515d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 516d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 5173d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5183d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 5193d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 5203d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 5214d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard private int translateMainPanel(View viewPanel) { 5224d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int accessoryPanelWidth = viewPanel.getWidth(); 5234d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainViewWidth = findViewById(R.id.mainView).getWidth(); 5244d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainPanelWidth = mImageShow.getDisplayedImageBounds().width(); 525f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard if (mainPanelWidth == 0) { 526f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard mainPanelWidth = mainViewWidth; 527f0eb72eab7be3183417deff6dadb4937b90b9e59nicolasroard } 528cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard int filtersPanelWidth = findViewById(R.id.filtersPanel).getWidth(); 529cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard if (mainPanelWidth < filtersPanelWidth) { 530cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard mainPanelWidth = filtersPanelWidth; 531cd84d67629075795d4c5c28d980f77ff8d75c593nicolasroard } 5324d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int leftOver = mainViewWidth - mainPanelWidth - accessoryPanelWidth; 5334d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard if (leftOver < 0) { 5344d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return -accessoryPanelWidth; 5354d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 5364d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return 0; 5374d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 5384d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard 5390f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 5400f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk DisplayMetrics metrics = new DisplayMetrics(); 541fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford Display display = getWindowManager().getDefaultDisplay(); 5420f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk Point size = new Point(); 543fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getSize(size); 544fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getMetrics(metrics); 545fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford int msize = Math.min(size.x, size.y); 5460f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk return (133 * msize) / metrics.densityDpi; 547fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 548fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 5490addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 550ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 551ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 552ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 553ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 554ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 555ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 556ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 557ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 558ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 5590addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 5600addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 5610addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 5620addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 5630addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 5640addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 5650addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 566ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 567ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 568ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 569ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 570ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 571ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 57208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 57308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 574ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 575ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 576ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 5770ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 5780ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 5790ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 5800ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5810ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5820ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 5830ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 5840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 5850ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 587ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 5880ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 5890ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5900ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5910ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 5920ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 59392e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 59492e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 5950ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5960ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5970ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 5980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 5990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 6000ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 6010ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 6030addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 6040ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 6050ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 6060ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6070ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6080ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 6090ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 6100ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 6110ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 6120ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 6130ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 6140ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 6150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 6160ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 6170ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 6180ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 6190ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 6209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 6219594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 6229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 623bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showHistory = menu.findItem(R.id.operationsButton); 6249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 625bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.hide_history_panel); 626bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 627bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.show_history_panel); 628bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 629bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 630bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 631bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 6329594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 633bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 6349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 6360ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 6370ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 6380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 63923e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 64023e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 64123e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 64223e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 64323e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard mImageShow.getHistory().setMenuItems(undoItem, redoItem, resetItem); 6449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 64792e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 6486e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 6496e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 6506e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6516e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 6526e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6536e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6546e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6556e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6566e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 6576e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 6586e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 6596e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 6606e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6616e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 6626e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 6636e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 6649594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 6659594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 6669594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 667d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard HistoryAdapter adapter = mImageShow.getHistory(); 6689594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 6699594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 6709594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 6719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6739594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6749594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 675d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard HistoryAdapter adapter = mImageShow.getHistory(); 6769594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 6779594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 6789594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 6799594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6809594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 682f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 683f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 684f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 685f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 686bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 687bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 688bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 689bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 6909594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 6919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 6929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 6959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 6969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 7009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 702bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu public void enableSave(boolean enable) { 703bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu if (mSaveButton != null) 704bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setEnabled(enable); 705bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu } 706bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu 7070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 7080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 7090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 710a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 711a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford ImageFilterFx[] fxArray = new ImageFilterFx[18]; 7120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 713457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 71408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] drawid = { 71543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0005_punch, 716457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0000_vintage, 717457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0004_bw_contrast, 71843b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0002_bleach, 71943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0001_instant, 720457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0007_washout, 72143b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0003_blue_crush, 72243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0008_washout_color, 72343b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0006_x_process 724457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 725457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 72608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] fxNameid = { 72743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_punch, 728457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_vintage, 729457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bw_contrast, 73043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_bleach, 73143b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_instant, 732457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout, 73343b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_blue_crush, 734457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout_color, 73543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_x_process 736457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 737457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 7380a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty 739e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford preset.setImageLoader(mImageLoader); 740af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter = new ImageSmallFilter(this); 741a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 742af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.setSelected(true); 743af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mCurrentImageSmallFilter = mNullFxFilter; 744a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 745af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.setImageFilter(new ImageFilterFx(null, getString(R.string.none))); 746a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 747af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.setController(this); 748af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.setImageLoader(mImageLoader); 749af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford listFilters.addView(mNullFxFilter); 750af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford ImageSmallFilter previousFilter = mNullFxFilter; 751a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 75253f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford BitmapFactory.Options o = new BitmapFactory.Options(); 75353f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford o.inScaled = false; 75408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 755457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford for (int i = 0; i < drawid.length; i++) { 75653f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o); 757a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford fxArray[p++] = new ImageFilterFx(b, getString(fxNameid[i])); 758457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford } 759af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford ImageSmallFilter filter; 7600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 761a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter = new ImageSmallFilter(this); 762a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setImageFilter(fxArray[i]); 7630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 764af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford filter.setNulfilter(mNullFxFilter); 7650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 7660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listFilters.addView(filter); 76708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard previousFilter = filter; 7680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 771a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford mImageShow.setImagePreset(preset); 7720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListBorders(LinearLayout listBorders) { 7750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 7760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the borders straight from the filesystem 7770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 77848b29c82472006102911f981be7025d21f5fc805nicolasroard ImageFilter[] borders = new ImageFilter[12]; 7790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(null); 7800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7818e1536da92f155731d5fd729ec5b2bf00709091anicolasroard Drawable npd1 = getResources().getDrawable(R.drawable.filtershow_border_4x5); 7828e1536da92f155731d5fd729ec5b2bf00709091anicolasroard borders[p++] = new ImageFilterBorder(npd1); 7838e1536da92f155731d5fd729ec5b2bf00709091anicolasroard Drawable npd2 = getResources().getDrawable(R.drawable.filtershow_border_brush); 7848e1536da92f155731d5fd729ec5b2bf00709091anicolasroard borders[p++] = new ImageFilterBorder(npd2); 78548b29c82472006102911f981be7025d21f5fc805nicolasroard Drawable npd3 = getResources().getDrawable(R.drawable.filtershow_border_grunge); 78648b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterBorder(npd3); 78748b29c82472006102911f981be7025d21f5fc805nicolasroard Drawable npd4 = getResources().getDrawable(R.drawable.filtershow_border_sumi_e); 78848b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterBorder(npd4); 78948b29c82472006102911f981be7025d21f5fc805nicolasroard Drawable npd5 = getResources().getDrawable(R.drawable.filtershow_border_tape); 79048b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterBorder(npd5); 7915ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 0); 7920f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 7930f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageBorderSize); 7945ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 0); 7950f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 7960f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageBorderSize); 79748b29c82472006102911f981be7025d21f5fc805nicolasroard int creamColor = Color.argb(255, 237, 237, 227); 79848b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterParametricBorder(creamColor, mImageBorderSize, 0); 79948b29c82472006102911f981be7025d21f5fc805nicolasroard borders[p++] = new ImageFilterParametricBorder(creamColor, mImageBorderSize, 80048b29c82472006102911f981be7025d21f5fc805nicolasroard mImageBorderSize); 8010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 80208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallFilter previousFilter = null; 8030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 80408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallBorder filter = new ImageSmallBorder(this); 805af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford if (i == 0) { // save the first to reset it 806af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullBorderFilter = filter; 807af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford } else { 808af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford filter.setNulfilter(mNullBorderFilter); 809af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford } 8100a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk borders[i].setName(getString(R.string.borders)); 8110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageFilter(borders[i]); 8120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 81393dfe7a1df07a64701369b480578410efb740a27nicolasroard filter.setBorder(true); 8140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 815bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard filter.setShowTitle(false); 8160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listBorders.addView(filter); 81708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard previousFilter = filter; 8180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 8220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 82392e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 8240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void showOriginalViews(boolean value) { 8260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 8270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.showOriginal(value); 8280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 8320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 8330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 8348537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 8350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideListViews() { 8390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mListViews) { 8400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 8410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 8450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(false); // reset 8460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 8470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 8480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectBottomPanelButtons() { 8520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : mBottomPanelButtons) { 8530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 8540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectPanelButtons(Vector<ImageButton> buttons) { 8580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : buttons) { 8590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 8600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 864bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 865bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 866d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public boolean isShowingHistoryPanel() { 867d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard return mShowingHistoryPanel; 868d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard } 869d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard 870bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 871bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View view = findViewById(R.id.mainPanel); 872bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 873bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 874bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 875bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 876bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 877bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 878bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 8794d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 880bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 881bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 8824d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard view.animate().setDuration(200).x(translate) 883bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .withLayer().withEndAction(new Runnable() { 88492e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 885bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard public void run() { 886bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setAlpha(0); 887bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.VISIBLE); 888bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.animate().setDuration(100) 889bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .alpha(1.0f).start(); 890bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 891bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard }).start(); 892bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 893bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 894bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.INVISIBLE); 895bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(0).withLayer() 896bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 897bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 898bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 899bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 900bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 901a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 902a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 903a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 904a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 905a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (mShowingHistoryPanel) { 906a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard toggleHistoryPanel(); 907a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 908a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 909a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 910bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 9110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 9120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 913d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public void toggleHistoryPanel() { 9149594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 9159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 916bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 917bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 918bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 919bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 920bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 921bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 9224d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 9239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 9249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 9254d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard view.animate().setDuration(200).x(translate) 9269594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 92792e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9289594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 9299594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 9309594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 9319594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 9329594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 9339594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 9359594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 9369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 9379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 9389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(0).withLayer() 939bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 9409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 9429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void resetHistory() { 945af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.onClick(mNullFxFilter); 946af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullBorderFilter.onClick(mNullBorderFilter); 947af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford 948d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard HistoryAdapter adapter = mImageShow.getHistory(); 9499594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 9509594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 9519594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.setImagePreset(original); 9523992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.resetParameters(); 9539594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 9540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 9570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 9580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 9590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 961af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford 9629594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 9630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 9650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 96775608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 96875608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 96975608166f54891972ebad3d8fd958fed9a5300e6nicolasroard if (mPanelController.onBackPressed()) { 97055550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard saveImage(); 97175608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 97275608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 973e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 974e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 975e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard CharSequence text = getString(R.string.cannot_load_image); 976e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 977e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard toast.show(); 978e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 979e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 980e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 9810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 9820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 9840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 9850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 9860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 9870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 98908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard public void useImagePreset(ImageSmallFilter imageSmallFilter, ImagePreset preset) { 9900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset == null) { 9910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 9920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 99308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 99408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (mCurrentImageSmallFilter != null) { 99508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(false); 99608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 99708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = imageSmallFilter; 99808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(true); 99908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 10000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(preset); 10010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(copy); 10020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset.isFx()) { 10030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // if it's an FX we rest the curve adjustment too 10040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.resetCurve(); 10050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 10070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 100908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard public void useImageFilter(ImageSmallFilter imageSmallFilter, ImageFilter imageFilter, 101008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard boolean setBorder) { 10110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (imageFilter == null) { 10120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 10130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 101408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 101508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (mCurrentImageSmallFilter != null) { 101608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(false); 101708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 101808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = imageSmallFilter; 101908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(true); 102008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 10210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset oldPreset = mImageShow.getImagePreset(); 10220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 10230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use a numerical constant instead. 1024a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 1025a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford copy.add(imageFilter); 1026a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 1027bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mImageShow.setImagePreset(copy); 10280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 10290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 10320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 10330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 10340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.onItemClick(position); 10350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 10360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 10390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 10400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 10410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 10420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 10430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 10440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 104692e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 10470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 10480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Log.v(LOGTAG, "onActivityResult"); 10490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 10500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 10510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 1052d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 10530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10576416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveToExtraUri = false; 10586416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveAsWallpaper = false; 10596416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mReturnAsExtra = false; 10606416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean outputted = false; 10616416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 10636416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // boolean outputted = false; 10646416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras != null) { 10656416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getExtraOutput() != null) { 10666416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveToExtraUri = true; 10676416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10686416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10696416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getSetAsWallpaper()) { 10706416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveAsWallpaper = true; 10716416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10726416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10736416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getReturnData()) { 10746416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10756416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mReturnAsExtra = true; 10766416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10776416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10786416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10796416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (outputted) { 10806416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setUseCropExtrasFlag(true); 10816416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(null); 10826416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.returnFilteredResult(this); 10836416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10846416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10856416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!outputted) { 10866416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mImageShow.hasModifications()) { 10876416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Get the name of the album, to which the image will be saved 10886416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 10896416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 10906416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 10916416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(albumName); 10926416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveImage(this, null); 10936416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 10946416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10956416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10976416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10996416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void onFilteredResult(Bitmap filtered) { 11006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Intent intent = new Intent(); 11016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_CROPPED_RECT, mImageShow.getImageCropBounds()); 11026416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveToExtraUri) { 11036416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveToUri(filtered, mCropExtras.getExtraOutput(), 11046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras.getOutputFormat(), this); 11056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveAsWallpaper) { 11076416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk try { 11086416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk WallpaperManager.getInstance(this).setBitmap(filtered); 11096416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } catch (IOException e) { 11106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "fail to set wall paper", e); 11116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 111255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } 11136416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mReturnAsExtra) { 11146416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (filtered != null) { 11156416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bmapSize = filtered.getRowBytes() * filtered.getHeight(); 11166416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk /* 11176416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Max size of Binder transaction buffer is 1Mb, so constrain 11186416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Bitmap to be somewhat less than this, otherwise we get 11196416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * TransactionTooLargeExceptions. 11206416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk */ 11216416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (bmapSize > MAX_BMAP_IN_INTENT) { 11226416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "Bitmap too large to be returned via intent"); 11236416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 11246416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_DATA, filtered); 11256416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11266416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11276416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11286416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk setResult(RESULT_OK, intent); 11296416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!mSaveToExtraUri) { 11306416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 11316416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11326416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11336416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 11346416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 11356416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (outputted) { 11366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk hideSavingProgress(); 11376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 11390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 1142e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 11430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1146