FilterShowActivity.java revision d49d53206a197b08ec4754d8751b6860e33d9f48
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; 230ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.content.ContentValues; 240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 25a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 27457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 28457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.BitmapFactory; 2993dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Color; 30fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.graphics.Point; 310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 333d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 3492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 35fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 38fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.view.Display; 390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Menu; 409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.view.MenuItem; 410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View; 420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 4398ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroardimport android.view.WindowManager; 440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView; 450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ImageButton; 470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.LinearLayout; 480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ListView; 4992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.widget.SeekBar; 500ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider; 510ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 52e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroardimport android.widget.Toast; 530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 550addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 5692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 5792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilter; 5892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterBorder; 5967fefdb9b77644c955e1c0c5b1fcd51e2374f212John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterBwFilter; 60ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterContrast; 61ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterExposure; 62a19830b4fd9050b48386cd904d99cfd2566cc515John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterFx; 63ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterHue; 6493dfe7a1df07a64701369b480578410efb740a27nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterParametricBorder; 6592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterRS; 66ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterSaturated; 67ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterShadows; 682576a29cccf1d96edeef071914e8b775c230e8e8Sascha Haeberlingimport com.android.gallery3d.filtershow.filters.ImageFilterTinyPlanet; 69ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterVibrance; 70ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterVignette; 71ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterWBalance; 7292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageBorder; 73de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 74de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageFlip; 75de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRotate; 7692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 7708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallBorder; 7892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; 7992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageStraighten; 80ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.imageshow.ImageWithIcon; 8192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageZoom; 8292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 8392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 8492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 855ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroardimport com.android.gallery3d.filtershow.ui.ImageButtonTitle; 8692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.ui.ImageCurves; 873992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 880addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 8992e2341248e99c691f38820503984bc5e2f18811nicolasroard 9092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 91ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 9292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 9392e2341248e99c691f38820503984bc5e2f18811nicolasroard 940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard@TargetApi(16) 950ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener, 960ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9863926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk public static final String CROP_ACTION = "com.android.camera.action.CROP"; 99a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 100a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 10192e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 1020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 1030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 1040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageCurves mImageCurves = null; 1050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageBorder mImageBorders = null; 1060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageStraighten mImageStraighten = null; 1075448bf8095483574649afcc2add7f153670c7450nicolasroard private ImageZoom mImageZoom = null; 10862e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk private ImageCrop mImageCrop = null; 1098537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageRotate mImageRotate = null; 1108537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageFlip mImageFlip = null; 1110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListFx = null; 1130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListBorders = null; 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListGeometry = null; 1150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListColors = null; 11692e2341248e99c691f38820503984bc5e2f18811nicolasroard private View mListFilterButtons = null; 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 1190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 1200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 1210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 1220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 12308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard private ImageSmallFilter mCurrentImageSmallFilter = null; 1240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 12692e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 127f129cb70f4d2b43a147b399d91650414defa6dd9nicolasroard private static int mImageBorderSize = 4; // in percent 1280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 130bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 131bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 13292e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 13392e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<View> mListViews = new Vector<View>(); 13492e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>(); 1350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1360ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1370ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1390ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1400ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 141ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 1423038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford private static final int SEEK_BAR_MAX = 600; 14355550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 144d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 1453d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 1460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1505448bf8095483574649afcc2add7f153670c7450nicolasroard ImageFilterRS.setRenderScriptContext(this); 1515448bf8095483574649afcc2add7f153670c7450nicolasroard 15295404c666640177abf72ca2278585a16f30cf390nicolasroard ImageShow.setDefaultBackgroundColor(getResources().getColor(R.color.background_screen)); 1535ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard // TODO: get those values from XML. 1545ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextSize((int) getPixelsFromDip(12)); 1555ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextPadding((int) getPixelsFromDip(10)); 156f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4)); 157f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextSize((int) getPixelsFromDip(18)); 158f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalText(getResources().getString(R.string.original_picture_text)); 1595ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageButtonTitle.setTextSize((int) getPixelsFromDip(12)); 1605ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageButtonTitle.setTextPadding((int) getPixelsFromDip(10)); 16195404c666640177abf72ca2278585a16f30cf390nicolasroard ImageSmallFilter.setMargin((int) getPixelsFromDip(3)); 1625ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageSmallFilter.setTextMargin((int) getPixelsFromDip(4)); 163c5590eb1a20b112e67e4c43684790587f844fc6bnicolasroard Drawable curveHandle = getResources().getDrawable(R.drawable.camera_crop); 1643992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard int curveHandleSize = (int) getResources().getDimension(R.dimen.crop_indicator_size); 1653992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 1663992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 1675ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 1680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1699594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 170786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 171786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 172786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 173786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.getCustomView().setOnClickListener(new OnClickListener() { 174786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 175786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 176786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 177786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 178786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 180e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 1810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); 1830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); 184ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford LinearLayout listColors = (LinearLayout) findViewById(R.id.listColorsFx); 1850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 1870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves = (ImageCurves) findViewById(R.id.imageCurves); 1880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders = (ImageBorder) findViewById(R.id.imageBorder); 1890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); 1905448bf8095483574649afcc2add7f153670c7450nicolasroard mImageZoom = (ImageZoom) findViewById(R.id.imageZoom); 19162e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop = (ImageCrop) findViewById(R.id.imageCrop); 1928537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate = (ImageRotate) findViewById(R.id.imageRotate); 1938537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip = (ImageFlip) findViewById(R.id.imageFlip); 1940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 195f46da69aefd9afe0b4326a2fcea8e33c294136bbRuben Brunk ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 1960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 1970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageCurves); 1980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageBorders); 1990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageStraighten); 2005448bf8095483574649afcc2add7f153670c7450nicolasroard mImageViews.add(mImageZoom); 20162e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageViews.add(mImageCrop); 2028537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageRotate); 2038537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageFlip); 2040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx = findViewById(R.id.fxList); 2060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders = findViewById(R.id.bordersList); 20792e2341248e99c691f38820503984bc5e2f18811nicolasroard mListGeometry = findViewById(R.id.geometryList); 20892e2341248e99c691f38820503984bc5e2f18811nicolasroard mListFilterButtons = findViewById(R.id.filterButtonsList); 2090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors = findViewById(R.id.colorsFxList); 2100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListFx); 2110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListBorders); 2120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListGeometry); 21392e2341248e99c691f38820503984bc5e2f18811nicolasroard mListViews.add(mListFilterButtons); 2140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListColors); 2150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 2170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 2180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 2190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 22092e2341248e99c691f38820503984bc5e2f18811nicolasroard 22192e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 22292e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setImageLoader(mImageLoader); 22392e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setMaster(mImageShow); 22492e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageBorders.setImageLoader(mImageLoader); 22592e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageBorders.setMaster(mImageShow); 22692e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setImageLoader(mImageLoader); 22792e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setMaster(mImageShow); 22892e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setImageLoader(mImageLoader); 22992e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setMaster(mImageShow); 23062e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop.setImageLoader(mImageLoader); 23162e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop.setMaster(mImageShow); 2328537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setImageLoader(mImageLoader); 2338537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setMaster(mImageShow); 2348537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setImageLoader(mImageLoader); 2358537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setMaster(mImageShow); 23692e2341248e99c691f38820503984bc5e2f18811nicolasroard 23798ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard mPanelController.setActivity(this); 23898ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard 23992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 24092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageCurves)); 24192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageBorder)); 24292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageStraighten)); 24362e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addImageView(findViewById(R.id.imageCrop)); 2448537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageRotate)); 2458537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageFlip)); 24692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageZoom)); 24792e2341248e99c691f38820503984bc5e2f18811nicolasroard 24892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mFxButton, mListFx, 0); 24992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mBorderButton, mListBorders, 1); 25092e2341248e99c691f38820503984bc5e2f18811nicolasroard 25192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mGeometryButton, mListGeometry, 2); 25292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton)); 25362e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton)); 25492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton)); 25592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton)); 25692e2341248e99c691f38820503984bc5e2f18811nicolasroard 25792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mColorsButton, mListColors, 3); 258ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 2590f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] recastIDs = { 2602576a29cccf1d96edeef071914e8b775c230e8e8Sascha Haeberling R.id.tinyplanetButton, 261ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.vignetteButton, 262ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.vibranceButton, 263ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.contrastButton, 264ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.saturationButton, 26567fefdb9b77644c955e1c0c5b1fcd51e2374f212John Hoford R.id.bwfilterButton, 266ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.wbalanceButton, 267ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.hueButton, 268ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.exposureButton, 269ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.shadowRecoveryButton 270ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 2710f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk ImageFilter[] filters = { 2722576a29cccf1d96edeef071914e8b775c230e8e8Sascha Haeberling new ImageFilterTinyPlanet(), 273ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterVignette(), 274ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterVibrance(), 275ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterContrast(), 276ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterSaturated(), 27767fefdb9b77644c955e1c0c5b1fcd51e2374f212John Hoford new ImageFilterBwFilter(), 278ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterWBalance(), 279ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterHue(), 280ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterExposure(), 281ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterShadows() 282ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 283ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 284ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford for (int i = 0; i < filters.length; i++) { 285ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford ImageSmallFilter fView = new ImageSmallFilter(this); 286ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford View v = listColors.findViewById(recastIDs[i]); 287ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford int pos = listColors.indexOfChild(v); 288ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford listColors.removeView(v); 289ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 2902f879102d630815df64636b8d37e3a7eea8e8b65Sascha Haeberling filters[i].setParameter(filters[i].getPreviewParameter()); 291a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (v instanceof ImageButtonTitle) 29243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk filters[i].setName(((ImageButtonTitle) v).getText()); 293ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageFilter(filters[i]); 294ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setController(this); 295ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageLoader(mImageLoader); 296ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setId(recastIDs[i]); 297ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mPanelController.addComponent(mColorsButton, fView); 2980f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk listColors.addView(fView, pos); 299ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 300ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 3010f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] overlayIDs = { 302ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.sharpenButton, 303ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.curvesButtonRGB 304ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 3050f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] overlayBitmaps = { 306ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.drawable.filtershow_button_colors_sharpen, 307ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.drawable.filtershow_button_colors_curve 308ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 309a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard int[] overlayNames = { 31043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.sharpness, 311ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.string.curvesRGB 312ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 313ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 3140f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk for (int i = 0; i < overlayIDs.length; i++) { 315ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford ImageWithIcon fView = new ImageWithIcon(this); 316ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford View v = listColors.findViewById(overlayIDs[i]); 317ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford int pos = listColors.indexOfChild(v); 318ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford listColors.removeView(v); 3190f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk final int sid = overlayNames[i]; 3200f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk ImageFilterExposure efilter = new ImageFilterExposure() { 321ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford { 322ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mName = getString(sid); 323ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 324ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 325ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford efilter.setParameter(-300); 326ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 3270f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk overlayBitmaps[i]); 328ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 329ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setIcon(bitmap); 330ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageFilter(efilter); 331ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setController(this); 332ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageLoader(mImageLoader); 333ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setId(overlayIDs[i]); 334ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mPanelController.addComponent(mColorsButton, fView); 3350f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk listColors.addView(fView, pos); 336ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 337ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 33892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 3393992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.addView(findViewById(R.id.pickCurvesChannel)); 3400f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mPanelController.addView(findViewById(R.id.aspect)); 3410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 3420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 3430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 345d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard operationsList.setAdapter(mImageShow.getHistory()); 3460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 347bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 348bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard imageStateList.setAdapter(mImageShow.getImageStateAdapter()); 349d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard mImageLoader.setAdapter(mImageShow.getHistory()); 3500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListImages(listFilters); 3520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListBorders(listBorders); 3530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 35492e2341248e99c691f38820503984bc5e2f18811nicolasroard SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar); 3553038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford seekBar.setMax(SEEK_BAR_MAX); 3563038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford 35792e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setSeekBar(seekBar); 358de154778c8f94121cb2117fcf6224c40c01b6132nicolasroard mImageZoom.setSeekBar(seekBar); 35992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 3608537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), 36133e58a68ee1d4866169d41b7d88c6eff0c70dae0nicolasroard findViewById(R.id.applyEffect), findViewById(R.id.aspect), 36233e58a68ee1d4866169d41b7d88c6eff0c70dae0nicolasroard findViewById(R.id.pickCurvesChannel)); 36392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setMasterImage(mImageShow); 36492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setCurrentPanel(mFxButton); 3650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 366a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 367a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 368a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 369a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 370d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (intent.getData() != null) { 371d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(intent.getData()); 3720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 3730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 3740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 37563926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 37663926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk String action = intent.getAction(); 377a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (action.equalsIgnoreCase(CROP_ACTION)) { 37863926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk mPanelController.showComponent(findViewById(R.id.cropButton)); 379a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu } else if (action.equalsIgnoreCase(TINY_PLANET_ACTION)) { 380a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu mPanelController.showComponent(findViewById(R.id.tinyplanetButton)); 38163926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk } 3820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 384d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 385d49d53206a197b08ec4754d8751b6860e33d9f48John Reck View tinyPlanetView = findViewById(R.id.tinyplanetButton); 386d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (tinyPlanetView != null) { 387d49d53206a197b08ec4754d8751b6860e33d9f48John Reck tinyPlanetView.setVisibility(View.GONE); 388d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 389d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = new LoadBitmapTask(tinyPlanetView); 390d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 391d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 392d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 393d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private class LoadBitmapTask extends AsyncTask<Uri, Void, Boolean> { 3943d4f2c7443f6f6015efab769bfaad19263137c67John Hoford View mTinyPlanetButton; 395d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 3963d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 397d49d53206a197b08ec4754d8751b6860e33d9f48John Reck public LoadBitmapTask(View button) { 3983d4f2c7443f6f6015efab769bfaad19263137c67John Hoford mTinyPlanetButton = button; 399d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 4003d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4013d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4023d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 403d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 404d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mImageLoader.loadBitmap(params[0], mBitmapSize); 4053d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return mImageLoader.queryLightCycle360(); 4063d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4073d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4083d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4093d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 4103d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 4113d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 4123d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4133d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (result) { 4143d4f2c7443f6f6015efab769bfaad19263137c67John Hoford mTinyPlanetButton.setVisibility(View.VISIBLE); 4153d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 416d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = null; 4173d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onPostExecute(result); 4183d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4193d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4203d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4213d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4223d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4233d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onDestroy() { 424d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (mLoadBitmapTask != null) { 425d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.cancel(false); 4263d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4273d4f2c7443f6f6015efab769bfaad19263137c67John Hoford super.onDestroy(); 4283d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4293d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4304d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard private int translateMainPanel(View viewPanel) { 4314d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int accessoryPanelWidth = viewPanel.getWidth(); 4324d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainViewWidth = findViewById(R.id.mainView).getWidth(); 4334d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int mainPanelWidth = mImageShow.getDisplayedImageBounds().width(); 4344d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int leftOver = mainViewWidth - mainPanelWidth - accessoryPanelWidth; 4354d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard if (leftOver < 0) { 4364d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return -accessoryPanelWidth; 4374d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 4384d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard return 0; 4394d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard } 4404d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard 4410f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 4420f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk DisplayMetrics metrics = new DisplayMetrics(); 443fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford Display display = getWindowManager().getDefaultDisplay(); 4440f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk Point size = new Point(); 445fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getSize(size); 446fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getMetrics(metrics); 447fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford int msize = Math.min(size.x, size.y); 4480f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk return (133 * msize) / metrics.densityDpi; 449fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 450fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 4510addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 452ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 453ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 454ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 455ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 456ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 457ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 458ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 459ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 460ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 4610addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 4620addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 4630addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 4640addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 4650addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 4660addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 4670addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 468ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 469ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 470ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 471ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 472ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 473ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 47408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 47508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 476ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 477ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 478ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 4790ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 4800ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 4810ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 4820ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 4830ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 4840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 4850ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 4860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 4870ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 4880ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 489ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 4900ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 4910ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 4920ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 4930ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 4940ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 49592e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 49692e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 4970ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 4980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 4990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 5000ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 5010ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 5020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 5030ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5040ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 5050addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 5060ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 5070ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 5080ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5090ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5100ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 5110ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 5120ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 5130ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 5140ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 5150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 5160ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 5170ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 5180ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 5190ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 5200ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 5210ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 5229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 5239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 5249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 525bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showHistory = menu.findItem(R.id.operationsButton); 5269594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 527bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.hide_history_panel); 528bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 529bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.show_history_panel); 530bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 531bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 532bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 533bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 5349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 535bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 5369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5370ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 5380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 5390ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 5400ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 54123e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard 54223e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem undoItem = menu.findItem(R.id.undoButton); 54323e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem redoItem = menu.findItem(R.id.redoButton); 54423e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard MenuItem resetItem = menu.findItem(R.id.resetHistoryButton); 54523e58b3595de28bc8f899f3fba1ca9734533213cnicolasroard mImageShow.getHistory().setMenuItems(undoItem, redoItem, resetItem); 5469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 5479594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5489594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 54992e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 5506e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 5516e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 5526e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 5536e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 5546e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 5556e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 5566e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 5576e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 5586e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 5596e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 5606e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 5616e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 5626e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 5636e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 5646e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 5656e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 5669594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 5679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 5689594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 569d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard HistoryAdapter adapter = mImageShow.getHistory(); 5709594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 5719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 5729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 5739594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 5749594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 5759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5769594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 577d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard HistoryAdapter adapter = mImageShow.getHistory(); 5789594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 5799594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 5809594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 5819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 5829594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 5839594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 584f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 585f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 586f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 587f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 588bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 589bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 590bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 591bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 5929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 5939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 5949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 5959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 5979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 5989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 5999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 6029594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6039594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 6040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 6050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 6060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 607a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 608a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford ImageFilterFx[] fxArray = new ImageFilterFx[18]; 6090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 610457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 61108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] drawid = { 61243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0005_punch, 613457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0000_vintage, 614457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0004_bw_contrast, 61543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0002_bleach, 61643b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0001_instant, 617457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0007_washout, 61843b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0003_blue_crush, 61943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0008_washout_color, 62043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0006_x_process 621457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 622457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 62308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] fxNameid = { 62443b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_punch, 625457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_vintage, 626457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bw_contrast, 62743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_bleach, 62843b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_instant, 629457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout, 63043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_blue_crush, 631457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout_color, 63243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_x_process 633457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 634457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 6350a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty 636e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford preset.setImageLoader(mImageLoader); 637a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford ImageSmallFilter filter = new ImageSmallFilter(this); 638a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 639a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setSelected(true); 640a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford mCurrentImageSmallFilter = filter; 641a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 642a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard filter.setImageFilter(new ImageFilterFx(null, getString(R.string.none))); 643a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 644a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setController(this); 645a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setImageLoader(mImageLoader); 646a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford listFilters.addView(filter); 6470f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk ImageSmallFilter previousFilter = filter; 648a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 64953f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford BitmapFactory.Options o = new BitmapFactory.Options(); 65053f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford o.inScaled = false; 65108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 652457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford for (int i = 0; i < drawid.length; i++) { 65353f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o); 654a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford fxArray[p++] = new ImageFilterFx(b, getString(fxNameid[i])); 655457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford } 656457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 6570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 658a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter = new ImageSmallFilter(this); 659a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setImageFilter(fxArray[i]); 6600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 6610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 6620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listFilters.addView(filter); 66308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard previousFilter = filter; 6640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 667a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford mImageShow.setImagePreset(preset); 6680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListBorders(LinearLayout listBorders) { 6710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 6720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the borders straight from the filesystem 6730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 67493dfe7a1df07a64701369b480578410efb740a27nicolasroard ImageFilter[] borders = new ImageFilter[7]; 6750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(null); 6760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6778e1536da92f155731d5fd729ec5b2bf00709091anicolasroard Drawable npd1 = getResources().getDrawable(R.drawable.filtershow_border_4x5); 6788e1536da92f155731d5fd729ec5b2bf00709091anicolasroard borders[p++] = new ImageFilterBorder(npd1); 6798e1536da92f155731d5fd729ec5b2bf00709091anicolasroard Drawable npd2 = getResources().getDrawable(R.drawable.filtershow_border_brush); 6808e1536da92f155731d5fd729ec5b2bf00709091anicolasroard borders[p++] = new ImageFilterBorder(npd2); 6815ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 0); 6820f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 6830f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageBorderSize); 6845ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 0); 6850f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 6860f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageBorderSize); 6870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 68808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallFilter previousFilter = null; 6890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 69008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallBorder filter = new ImageSmallBorder(this); 6910a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk borders[i].setName(getString(R.string.borders)); 6920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageFilter(borders[i]); 6930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 69493dfe7a1df07a64701369b480578410efb740a27nicolasroard filter.setBorder(true); 6950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 696bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard filter.setShowTitle(false); 6970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listBorders.addView(filter); 69808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard previousFilter = filter; 6990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 7030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 70492e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 7050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void showOriginalViews(boolean value) { 7070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 7080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.showOriginal(value); 7090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 7130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 7140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 7158537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 7160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideListViews() { 7200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mListViews) { 7210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 7220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 7260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(false); // reset 7270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 7280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 7290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectBottomPanelButtons() { 7330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : mBottomPanelButtons) { 7340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 7350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectPanelButtons(Vector<ImageButton> buttons) { 7390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : buttons) { 7400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 7410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 745bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 746bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 747d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public boolean isShowingHistoryPanel() { 748d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard return mShowingHistoryPanel; 749d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard } 750d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard 751bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 752bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View view = findViewById(R.id.mainPanel); 753bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 754bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 755bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 756bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 757bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 758bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 759bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 7604d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 761bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 762bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 7634d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard view.animate().setDuration(200).x(translate) 764bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .withLayer().withEndAction(new Runnable() { 76592e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 766bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard public void run() { 767bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setAlpha(0); 768bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.VISIBLE); 769bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.animate().setDuration(100) 770bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .alpha(1.0f).start(); 771bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 772bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard }).start(); 773bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 774bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 775bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.INVISIBLE); 776bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(0).withLayer() 777bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 778bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 779bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 780bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 781bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 782a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 783a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 784a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 785a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 786a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (mShowingHistoryPanel) { 787a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard toggleHistoryPanel(); 788a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 789a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 790a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 791bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 7920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 7930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 794d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public void toggleHistoryPanel() { 7959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 7969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 797bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 798bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 799bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 800bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 801bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 802bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 8034d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 8049594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 8059594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 8064d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard view.animate().setDuration(200).x(translate) 8079594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 80892e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 8099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 8109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 8119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 8129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 8139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 8149594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 8159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 8169594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 8179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 8189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 8199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(0).withLayer() 820bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 8219594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 8229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 8239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 8240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8259594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void resetHistory() { 826d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard HistoryAdapter adapter = mImageShow.getHistory(); 8279594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 8289594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 8299594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.setImagePreset(original); 8303992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.resetParameters(); 8319594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 8320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 8350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 8360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 8370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 8380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 8399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 8400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 8420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 84475608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 84575608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 84675608166f54891972ebad3d8fd958fed9a5300e6nicolasroard if (mPanelController.onBackPressed()) { 84755550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard saveImage(); 84875608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 84975608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 850e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 851e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 852e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard CharSequence text = getString(R.string.cannot_load_image); 853e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 854e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard toast.show(); 855e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 856e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 857e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 8580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 8590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 8610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 8620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 8630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 8640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 86608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard public void useImagePreset(ImageSmallFilter imageSmallFilter, ImagePreset preset) { 8670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset == null) { 8680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 8690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 87008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 87108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (mCurrentImageSmallFilter != null) { 87208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(false); 87308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 87408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = imageSmallFilter; 87508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(true); 87608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 8770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(preset); 8780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(copy); 8790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset.isFx()) { 8800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // if it's an FX we rest the curve adjustment too 8810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.resetCurve(); 8820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 8840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 88608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard public void useImageFilter(ImageSmallFilter imageSmallFilter, ImageFilter imageFilter, 88708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard boolean setBorder) { 8880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (imageFilter == null) { 8890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 8900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 89108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 89208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (mCurrentImageSmallFilter != null) { 89308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(false); 89408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 89508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = imageSmallFilter; 89608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(true); 89708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 8980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset oldPreset = mImageShow.getImagePreset(); 8990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 9000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use a numerical constant instead. 901a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 902a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford copy.add(imageFilter); 903a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 904bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mImageShow.setImagePreset(copy); 9050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 9060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 9100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 9110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.onItemClick(position); 9120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 9130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 9160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 9170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 9180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 9190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 9200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 9210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 92392e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 9250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Log.v(LOGTAG, "onActivityResult"); 9260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 9270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 9280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 929d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 9300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 93555550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard if (mImageShow.hasModifications()) { 9360addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu // Get the name of the album, to which the image will be saved 9370addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 9380addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 9390addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 9400addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(albumName); 94155550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard mImageShow.saveImage(this, null); 94255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } else { 94355550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard finish(); 94455550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } 9450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 948e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 9490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 952