FilterShowActivity.java revision 733a013ae1f2fe9979fb5a277b98af1544b8afb7
1a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard/* 2a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Copyright (C) 2012 The Android Open Source Project 3a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 4a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Licensed under the Apache License, Version 2.0 (the "License"); 5a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * you may not use this file except in compliance with the License. 6a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * You may obtain a copy of the License at 7a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 8a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * http://www.apache.org/licenses/LICENSE-2.0 9a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 10a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Unless required by applicable law or agreed to in writing, software 11a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * distributed under the License is distributed on an "AS IS" BASIS, 12a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * See the License for the specific language governing permissions and 14a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * limitations under the License. 15a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard */ 160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardpackage com.android.gallery3d.filtershow; 180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.annotation.TargetApi; 209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.app.ActionBar; 210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.app.Activity; 22ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport android.app.ProgressDialog; 236416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport android.app.WallpaperManager; 240ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.content.ContentValues; 252e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport android.content.Context; 260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 27a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroardimport android.content.res.Configuration; 280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 29457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 30457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.BitmapFactory; 3193dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Color; 32fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.graphics.Point; 338b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescuimport android.graphics.drawable.BitmapDrawable; 340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 3592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 363d4f2c7443f6f6015efab769bfaad19263137c67John Hofordimport android.os.AsyncTask; 3792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport android.provider.MediaStore; 39fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 42fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.view.Display; 432e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport android.view.LayoutInflater; 440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Menu; 459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.view.MenuItem; 460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View; 470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 4898ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroardimport android.view.WindowManager; 49733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroardimport android.widget.*; 500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 510ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 540addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 55cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroardimport com.android.gallery3d.filtershow.cache.FilteringPipeline; 5692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 571b1a79f1ccb6f847d017a72fa4c288b2195ffd99John Hofordimport com.android.gallery3d.filtershow.editors.BasicEditor; 58915d60a378b0ca7bbe3af6312ccd2f4b94eb2da1John Hofordimport com.android.gallery3d.filtershow.editors.EditorDraw; 595aa08941bda0cfbcfba522c53937dd66867f890dJohn Hofordimport com.android.gallery3d.filtershow.editors.EditorManager; 608029c8567a162eb66fe54255bdeae264d594278dJohn Hofordimport com.android.gallery3d.filtershow.editors.ImageOnlyEditor; 6171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroardimport com.android.gallery3d.filtershow.filters.*; 62de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 63db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hofordimport com.android.gallery3d.filtershow.imageshow.ImageDraw; 64de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageFlip; 65cc93226fc364a50de3a1479c0912e9af1854b666nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRedEyes; 66de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRotate; 6792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 6892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageStraighten; 692c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageTinyPlanet; 7092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageZoom; 7163a7dac01d394523799939596b960cb03321798dJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage; 7292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 7392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 7492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 752e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunkimport com.android.gallery3d.filtershow.ui.FilterIconButton; 767592704e662e49e4bbf3ba86a43d790774829bb0nicolasroardimport com.android.gallery3d.filtershow.ui.FramedTextButton; 773992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 780addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 7992e2341248e99c691f38820503984bc5e2f18811nicolasroard 8092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 816416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunkimport java.io.IOException; 82ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 8392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 8492e2341248e99c691f38820503984bc5e2f18811nicolasroard 850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard@TargetApi(16) 860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener, 870ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 896416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // fields for supporting crop action 90795776f67fe5bca902b09c01edec630879263341Ruben Brunk public static final String CROP_ACTION = "com.android.camera.action.CROP"; 916416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private CropExtras mCropExtras = null; 92588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage mMasterImage = null; 936416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 94a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu public static final String TINY_PLANET_ACTION = "com.android.camera.action.TINY_PLANET"; 95a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu public static final String LAUNCH_FULLSCREEN = "launch-fullscreen"; 966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public static final int MAX_BMAP_IN_INTENT = 990000; 9792e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 100cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard private ImageRedEyes mImageRedEyes = null; 101db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford private ImageDraw mImageDraw = null; 1020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageStraighten mImageStraighten = null; 10362e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk private ImageCrop mImageCrop = null; 1048537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageRotate mImageRotate = null; 1058537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageFlip mImageFlip = null; 1062c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard private ImageTinyPlanet mImageTinyPlanet = null; 1070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListFx = null; 1090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListBorders = null; 1100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListGeometry = null; 1110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListColors = null; 11292e2341248e99c691f38820503984bc5e2f18811nicolasroard private View mListFilterButtons = null; 113bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu private View mSaveButton = null; 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 1160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 1180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 1190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1202e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private LinearLayout listColors = null; 1212e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private LinearLayout listFilters = null; 1222e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private LinearLayout listBorders = null; 1232e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 1245aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this); 1255aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 12892e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 129f129cb70f4d2b43a147b399d91650414defa6dd9nicolasroard private static int mImageBorderSize = 4; // in percent 1300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 132bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 133bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 13492e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 13592e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<View> mListViews = new Vector<View>(); 13692e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>(); 1370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1390ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1400ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1410ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1420ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 143ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 1443038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford private static final int SEEK_BAR_MAX = 600; 14555550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 146d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private LoadBitmapTask mLoadBitmapTask; 1472e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullFxFilter; 1482e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private FilterIconButton mNullBorderFilter; 1492e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private int mIconSeedSize = 140; 1503d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 1510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 154588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard setResources(); 1550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1568b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu Resources res = getResources(); 15763a7dac01d394523799939596b960cb03321798dJohn Hoford setupMasterImage(); 1585448bf8095483574649afcc2add7f153670c7450nicolasroard ImageFilterRS.setRenderScriptContext(this); 1595448bf8095483574649afcc2add7f153670c7450nicolasroard 1608b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu ImageShow.setDefaultBackgroundColor(res.getColor(R.color.background_screen)); 1615ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard // TODO: get those values from XML. 1622f8301760867dc269c90bbeb338495f80e841c08nicolasroard ImageZoom.setZoomedSize(getPixelsFromDip(256)); 1637592704e662e49e4bbf3ba86a43d790774829bb0nicolasroard FramedTextButton.setTextSize((int) getPixelsFromDip(14)); 164f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4)); 165f675cd16e8188a8d0b3a34dbc1a74c40ed36eb1enicolasroard FramedTextButton.setTriangleSize((int) getPixelsFromDip(10)); 1665ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextSize((int) getPixelsFromDip(12)); 1675ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextPadding((int) getPixelsFromDip(10)); 168f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4)); 169f7403a58d17e56de6e3bebd9ac08bc77f3cd43e4nicolasroard ImageShow.setOriginalTextSize((int) getPixelsFromDip(18)); 1708b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu ImageShow.setOriginalText(res.getString(R.string.original_picture_text)); 1718b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu mIconSeedSize = res.getDimensionPixelSize(R.dimen.thumbnail_size); 1722e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 1738b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu Drawable curveHandle = res.getDrawable(R.drawable.camera_crop); 1748b9ea2fe62d9bcc342e0d69e94be1cb9b87ee0baBobby Georgescu int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size); 1753992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 1763992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 1775ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 1780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1799594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 180786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 181786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 182786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 183bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton = actionBar.getCustomView(); 184bf1677a434760fcb7389a30c18e05cc3e7926d40Doris Liu mSaveButton.setOnClickListener(new OnClickListener() { 185786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 186786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 187786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 188786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 189786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 191e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 1920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1932e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk listFilters = (LinearLayout) findViewById(R.id.listFilters); 1942e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk listBorders = (LinearLayout) findViewById(R.id.listBorders); 1952e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk listColors = (LinearLayout) findViewById(R.id.listColorsFx); 1960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 1980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); 19962e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop = (ImageCrop) findViewById(R.id.imageCrop); 2008537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate = (ImageRotate) findViewById(R.id.imageRotate); 2018537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip = (ImageFlip) findViewById(R.id.imageFlip); 2022c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet = (ImageTinyPlanet) findViewById(R.id.imageTinyPlanet); 203cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageRedEyes = (ImageRedEyes) findViewById(R.id.imageRedEyes); 204db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford mImageDraw = (ImageDraw) findViewById(R.id.imageDraw); 2050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2065d834ce0c65f89cf3f249f586b360c1a6d7ab99bRuben Brunk mImageCrop.setAspectTextSize((int) getPixelsFromDip(18)); 207f46da69aefd9afe0b4326a2fcea8e33c294136bbRuben Brunk ImageCrop.setTouchTolerance((int) getPixelsFromDip(25)); 2086e2dd284681a716c55e0937ef2e15a1c7507a1b2Ruben Brunk ImageCrop.setMinCropSize((int) getPixelsFromDip(55)); 2090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 2100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageStraighten); 21162e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageViews.add(mImageCrop); 2128537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageRotate); 2138537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageFlip); 2142c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageViews.add(mImageTinyPlanet); 215cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageViews.add(mImageRedEyes); 2160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2175aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mEditorPlaceHolder.setContainer((FrameLayout) findViewById(R.id.editorContainer)); 218915d60a378b0ca7bbe3af6312ccd2f4b94eb2da1John Hoford mEditorPlaceHolder.addEditor(new EditorDraw()); 2191b1a79f1ccb6f847d017a72fa4c288b2195ffd99John Hoford mEditorPlaceHolder.addEditor(new BasicEditor()); 2208029c8567a162eb66fe54255bdeae264d594278dJohn Hoford mEditorPlaceHolder.addEditor(new ImageOnlyEditor()); 2215aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford EditorManager.addEditors(mEditorPlaceHolder); 2225aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mEditorPlaceHolder.setOldViews(mImageViews); 2235aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mEditorPlaceHolder.setImageLoader(mImageLoader); 2245aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford 225733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard mEditorPlaceHolder.hide(); 226733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 2270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx = findViewById(R.id.fxList); 2280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders = findViewById(R.id.bordersList); 22992e2341248e99c691f38820503984bc5e2f18811nicolasroard mListGeometry = findViewById(R.id.geometryList); 23092e2341248e99c691f38820503984bc5e2f18811nicolasroard mListFilterButtons = findViewById(R.id.filterButtonsList); 2310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors = findViewById(R.id.colorsFxList); 2320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListFx); 2330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListBorders); 2340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListGeometry); 23592e2341248e99c691f38820503984bc5e2f18811nicolasroard mListViews.add(mListFilterButtons); 2360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListColors); 2370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 2390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 2400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 2410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 24292e2341248e99c691f38820503984bc5e2f18811nicolasroard 2435b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk mBottomPanelButtons.add(mFxButton); 2445b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk mBottomPanelButtons.add(mBorderButton); 2455b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk mBottomPanelButtons.add(mGeometryButton); 2465b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk mBottomPanelButtons.add(mColorsButton); 2475b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk 24892e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 24992e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setImageLoader(mImageLoader); 25062e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop.setImageLoader(mImageLoader); 2518537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setImageLoader(mImageLoader); 2528537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setImageLoader(mImageLoader); 2532c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mImageTinyPlanet.setImageLoader(mImageLoader); 254cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mImageRedEyes.setImageLoader(mImageLoader); 255db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford mImageDraw.setImageLoader(mImageLoader); 256db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford 25798ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard mPanelController.setActivity(this); 2585aa08941bda0cfbcfba522c53937dd66867f890dJohn Hoford mPanelController.setEditorPlaceHolder(mEditorPlaceHolder); 25998ba1a5eb757bb358d75b2f2e5d6fc4c11d805d9nicolasroard 26092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 26192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageStraighten)); 26262e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addImageView(findViewById(R.id.imageCrop)); 2638537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageRotate)); 2648537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageFlip)); 2652c6ea941a80ea22317d664e329aed51f5f7417b9nicolasroard mPanelController.addImageView(findViewById(R.id.imageTinyPlanet)); 266cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mPanelController.addImageView(findViewById(R.id.imageRedEyes)); 267db94725c415a9e16abfce05c0315bd7c1c3ecce2John Hoford mPanelController.addImageView(findViewById(R.id.imageDraw)); 26892e2341248e99c691f38820503984bc5e2f18811nicolasroard 26992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mFxButton, mListFx, 0); 27092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mBorderButton, mListBorders, 1); 27192e2341248e99c691f38820503984bc5e2f18811nicolasroard 27292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mGeometryButton, mListGeometry, 2); 27392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton)); 27462e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton)); 27592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton)); 27692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton)); 277cc93226fc364a50de3a1479c0912e9af1854b666nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.redEyeButton)); 27892e2341248e99c691f38820503984bc5e2f18811nicolasroard 27992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mColorsButton, mListColors, 3); 280ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 281f93e60c1b334d510940406c736559895462aac31nicolasroard Vector<ImageFilter> filters = new Vector<ImageFilter>(); 282f93e60c1b334d510940406c736559895462aac31nicolasroard FiltersManager.addFilters(filters, mImageLoader); 283f93e60c1b334d510940406c736559895462aac31nicolasroard 284f93e60c1b334d510940406c736559895462aac31nicolasroard for (ImageFilter filter : filters) { 285f93e60c1b334d510940406c736559895462aac31nicolasroard filter.setName(getString(filter.getTextId())); 2862e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk setupFilterButton(filter, listColors, mColorsButton); 287ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 28818e71eb1589f839667207414e5f5cf95ba78a183nicolasroard mPanelController.addFilter(new ImageFilterRedEye()); 289ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 29092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 2910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 2920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 2930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 29563a7dac01d394523799939596b960cb03321798dJohn Hoford operationsList.setAdapter(mMasterImage.getHistory()); 2960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 297bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 29863a7dac01d394523799939596b960cb03321798dJohn Hoford imageStateList.setAdapter(mMasterImage.getState()); 29963a7dac01d394523799939596b960cb03321798dJohn Hoford mImageLoader.setAdapter(mMasterImage.getHistory()); 3000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListImages(listFilters); 3029090141f56b4e2000704d0c4a778d3a819821726nicolasroard LoadBordersTask loadBorders = new LoadBordersTask(listBorders); 3039090141f56b4e2000704d0c4a778d3a819821726nicolasroard loadBorders.execute(); 3040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 30592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 3068537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), 3079820e7e753b7e1977ef3d2163605431769ce9165nicolasroard findViewById(R.id.panelAccessoryViewList), 3089820e7e753b7e1977ef3d2163605431769ce9165nicolasroard findViewById(R.id.applyEffect)); 30963a7dac01d394523799939596b960cb03321798dJohn Hoford 31092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setCurrentPanel(mFxButton); 3110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 312a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) { 313a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 314a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu } 315a850a543225e9f7a72c5a49bb6099573c7efda13Bobby Georgescu 316d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (intent.getData() != null) { 317d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(intent.getData()); 3180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 3190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 3200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 32163926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 3226416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Handle behavior for various actions 32363926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk String action = intent.getAction(); 324a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (action.equalsIgnoreCase(CROP_ACTION)) { 3256416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Bundle extras = intent.getExtras(); 3266416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (extras != null) { 3276416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras = new CropExtras(extras.getInt(CropExtras.KEY_OUTPUT_X, 0), 3286416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_OUTPUT_Y, 0), 3296416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE, true) && 3306416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SCALE_UP_IF_NEEDED, false), 3316416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_X, 0), 3326416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getInt(CropExtras.KEY_ASPECT_Y, 0), 3336416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SET_AS_WALLPAPER, false), 3346416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_RETURN_DATA, false), 3356416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT), 3366416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getString(CropExtras.KEY_OUTPUT_FORMAT), 3376416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getBoolean(CropExtras.KEY_SHOW_WHEN_LOCKED, false), 3386416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_X), 3396416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk extras.getFloat(CropExtras.KEY_SPOTLIGHT_Y)); 3406416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 3416416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getShowWhenLocked()) { 3426416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 3436416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 3446416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setCropExtras(mCropExtras); 3456416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 3466416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setExtras(mCropExtras); 3476416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String s = getString(R.string.Fixed); 3486416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setAspectString(s); 3496416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageCrop.setCropActionFlag(true); 3506416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mPanelController.setFixedAspect(mCropExtras.getAspectX() > 0 3516416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk && mCropExtras.getAspectY() > 0); 3526416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 35363926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk mPanelController.showComponent(findViewById(R.id.cropButton)); 354a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu } else if (action.equalsIgnoreCase(TINY_PLANET_ACTION)) { 355a680a0c32ae3321c632288b36083f2782af2c55bDoris Liu mPanelController.showComponent(findViewById(R.id.tinyplanetButton)); 35663926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk } 3570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 359d49d53206a197b08ec4754d8751b6860e33d9f48John Reck private void startLoadBitmap(Uri uri) { 36000914f56c3390caa224b1c9fc07624665de40113John Reck final View filters = findViewById(R.id.filtersPanel); 36100914f56c3390caa224b1c9fc07624665de40113John Reck final View loading = findViewById(R.id.loading); 362733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 363733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.INVISIBLE); 36400914f56c3390caa224b1c9fc07624665de40113John Reck filters.setVisibility(View.INVISIBLE); 365733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.VISIBLE); 366733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 367d49d53206a197b08ec4754d8751b6860e33d9f48John Reck View tinyPlanetView = findViewById(R.id.tinyplanetButton); 368d49d53206a197b08ec4754d8751b6860e33d9f48John Reck if (tinyPlanetView != null) { 369d49d53206a197b08ec4754d8751b6860e33d9f48John Reck tinyPlanetView.setVisibility(View.GONE); 370d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 371d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask = new LoadBitmapTask(tinyPlanetView); 372d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mLoadBitmapTask.execute(uri); 373d49d53206a197b08ec4754d8751b6860e33d9f48John Reck } 374d49d53206a197b08ec4754d8751b6860e33d9f48John Reck 3759090141f56b4e2000704d0c4a778d3a819821726nicolasroard private class LoadBordersTask extends AsyncTask<Void, Boolean, Boolean> { 37692e387187a872b3b0986b378954eb611aa83fdeanicolasroard Vector<FilterRepresentation> mBorders; 3779090141f56b4e2000704d0c4a778d3a819821726nicolasroard LinearLayout mList; 3789090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3799090141f56b4e2000704d0c4a778d3a819821726nicolasroard public LoadBordersTask(LinearLayout list) { 3809090141f56b4e2000704d0c4a778d3a819821726nicolasroard mList = list; 38192e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders = new Vector<FilterRepresentation>(); 3829090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 3839090141f56b4e2000704d0c4a778d3a819821726nicolasroard 3849090141f56b4e2000704d0c4a778d3a819821726nicolasroard @Override 3859090141f56b4e2000704d0c4a778d3a819821726nicolasroard protected Boolean doInBackground(Void... params) { 386588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(0)); 387588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_4x5)); 388588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_brush)); 389588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_grunge)); 390588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_sumi_e)); 391588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mBorders.add(new FilterImageBorderRepresentation(R.drawable.filtershow_border_tape)); 39292e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.BLACK, mImageBorderSize, 0)); 39392e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.BLACK, mImageBorderSize, mImageBorderSize)); 39492e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.WHITE, mImageBorderSize, 0)); 39592e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(Color.WHITE, mImageBorderSize, mImageBorderSize)); 3969090141f56b4e2000704d0c4a778d3a819821726nicolasroard int creamColor = Color.argb(255, 237, 237, 227); 39792e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(creamColor, mImageBorderSize, 0)); 39892e387187a872b3b0986b378954eb611aa83fdeanicolasroard mBorders.add(new FilterColorBorderRepresentation(creamColor, mImageBorderSize, mImageBorderSize)); 3999090141f56b4e2000704d0c4a778d3a819821726nicolasroard return true; 4009090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4019090141f56b4e2000704d0c4a778d3a819821726nicolasroard 4029090141f56b4e2000704d0c4a778d3a819821726nicolasroard @Override 4039090141f56b4e2000704d0c4a778d3a819821726nicolasroard protected void onPostExecute(Boolean result) { 4049090141f56b4e2000704d0c4a778d3a819821726nicolasroard if (!result) { 4059090141f56b4e2000704d0c4a778d3a819821726nicolasroard return; 4069090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4079090141f56b4e2000704d0c4a778d3a819821726nicolasroard for (int i = 0; i < mBorders.size(); i++) { 40892e387187a872b3b0986b378954eb611aa83fdeanicolasroard FilterRepresentation filter = mBorders.elementAt(i); 4099090141f56b4e2000704d0c4a778d3a819821726nicolasroard filter.setName(getString(R.string.borders)); 41092e387187a872b3b0986b378954eb611aa83fdeanicolasroard if (i == 0) { 41192e387187a872b3b0986b378954eb611aa83fdeanicolasroard filter.setName(getString(R.string.none)); 41292e387187a872b3b0986b378954eb611aa83fdeanicolasroard } 41392e387187a872b3b0986b378954eb611aa83fdeanicolasroard FilterIconButton b = setupFilterRepresentationButton(filter, mList, mBorderButton); 4149090141f56b4e2000704d0c4a778d3a819821726nicolasroard if (i == 0) { 4159090141f56b4e2000704d0c4a778d3a819821726nicolasroard mNullBorderFilter = b; 4169090141f56b4e2000704d0c4a778d3a819821726nicolasroard mNullBorderFilter.setSelected(true); 4179090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4189090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4199090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4209090141f56b4e2000704d0c4a778d3a819821726nicolasroard } 4219090141f56b4e2000704d0c4a778d3a819821726nicolasroard 4228965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> { 4233d4f2c7443f6f6015efab769bfaad19263137c67John Hoford View mTinyPlanetButton; 424d49d53206a197b08ec4754d8751b6860e33d9f48John Reck int mBitmapSize; 4253d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 426d49d53206a197b08ec4754d8751b6860e33d9f48John Reck public LoadBitmapTask(View button) { 4273d4f2c7443f6f6015efab769bfaad19263137c67John Hoford mTinyPlanetButton = button; 428d49d53206a197b08ec4754d8751b6860e33d9f48John Reck mBitmapSize = getScreenImageSize(); 4293d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4303d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4313d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 432d49d53206a197b08ec4754d8751b6860e33d9f48John Reck protected Boolean doInBackground(Uri... params) { 4338965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!mImageLoader.loadBitmap(params[0], mBitmapSize)) { 4348965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return false; 4358965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 4368965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk publishProgress(mImageLoader.queryLightCycle360()); 4378965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return true; 4383d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4393d4f2c7443f6f6015efab769bfaad19263137c67John Hoford 4403d4f2c7443f6f6015efab769bfaad19263137c67John Hoford @Override 4418965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk protected void onProgressUpdate(Boolean... values) { 44200914f56c3390caa224b1c9fc07624665de40113John Reck super.onProgressUpdate(values); 4436416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (isCancelled()) { 4448965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk return; 4456416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 4468965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (values[0]) { 4478965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk mTinyPlanetButton.setVisibility(View.VISIBLE); 4488965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk } 44900914f56c3390caa224b1c9fc07624665de40113John Reck } 45000914f56c3390caa224b1c9fc07624665de40113John Reck 45100914f56c3390caa224b1c9fc07624665de40113John Reck @Override 4523d4f2c7443f6f6015efab769bfaad19263137c67John Hoford protected void onPostExecute(Boolean result) { 453588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 4543d4f2c7443f6f6015efab769bfaad19263137c67John Hoford if (isCancelled()) { 4553d4f2c7443f6f6015efab769bfaad19263137c67John Hoford return; 4563d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 457588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 4588965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk if (!result) { 4598965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk cannotLoadImage(); 4603d4f2c7443f6f6015efab769bfaad19263137c67John Hoford } 4618965d1f4c2d437e0a0ad4fd225ea2cad9d2471c4Ruben Brunk 462733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View loading = findViewById(R.id.loading); 463733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard loading.setVisibility(View.GONE); 464733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View filters = findViewById(R.id.filtersPanel); 465733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard filters.setVisibility(View.VISIBLE); 466733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard float y = filters.getY(); 467733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard filters.setY(y + filters.getHeight()); 468733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard filters.animate().setDuration(600).y(y).withLayer().start(); 469733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard final View imageShow = findViewById(R.id.imageShow); 470733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard imageShow.setVisibility(View.VISIBLE); 471733a013ae1f2fe9979fb5a277b98af1544b8afb7nicolasroard 472cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); 473cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard FilteringPipeline pipeline = FilteringPipeline.getPipeline(); 474cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setOriginal(largeBitmap); 475cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard float previewScale = (float) largeBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); 476cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard pipeline.setPreviewScaleFactor(previewScale); 477cf0b2aad3bc5d80c51316ae10e1cf2c3476259aanicolasroard 478c03c4360a10ac519b00cc75dd02794536c72182bnicolasroard Bitmap bmap = mImageLoader.getOriginalBitmapSmall(); 4792e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk if (bmap != null && bmap.getWidth() > 0 && bmap.getHeight() > 0) { 4802e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float w = bmap.getWidth(); 4812e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float h = bmap.getHeight(); 4822e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk float f = mIconSeedSize / Math.min(w, h); 4832e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk w = w * f; 4842e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk h = h * f; 4852e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk bmap = Bitmap.createScaledBitmap(bmap, (int) w, (int) h, true); 4862e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4872e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_colors_buttons = listColors.getChildCount(); 4882e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_colors_buttons; i++) { 4892e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listColors.getChildAt(i); 4902e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4912e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 4922e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 4932e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_filters_buttons = listFilters.getChildCount(); 4942e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_filters_buttons; i++) { 4952e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listFilters.getChildAt(i); 4962e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 4972e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 4982e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 4992e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk int num_borders_buttons = listBorders.getChildCount(); 5002e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk for (int i = 0; i < num_borders_buttons; i++) { 5012e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton b = (FilterIconButton) listBorders.getChildAt(i); 5022e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 5032e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk b.setIcon(bmap); 5042e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 5052e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 5062e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben 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); 64363a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.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: { 66763a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6689594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 66963a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 6709594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 6719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 6739594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6749594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 67563a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 6769594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 67763a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(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 707d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard public FilterIconButton setupFilterRepresentationButton(FilterRepresentation representation, LinearLayout panel, View button) { 708d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard LayoutInflater inflater = 709d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 710d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterIconButton icon = (FilterIconButton) inflater.inflate(R.layout.filtericonbutton, 711d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard panel, false); 712d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard String text = representation.getName(); 713d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard icon.setup(text, this, panel); 714d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard icon.setFilterRepresentation(representation); 715d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard mPanelController.addComponent(button, icon); 716d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard panel.addView(icon); 717d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard return icon; 718d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard } 719d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard 7202e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk public FilterIconButton setupFilterButton(ImageFilter filter, LinearLayout panel, View button) { 7212e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk LayoutInflater inflater = 7222e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 7232e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk FilterIconButton icon = (FilterIconButton) inflater.inflate(R.layout.filtericonbutton, 7242e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk panel, false); 7252e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk String text = filter.getName(); 7262e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk if (filter instanceof ImageFilterBorder || filter instanceof ImageFilterParametricBorder) { 7272e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk text = ""; 7282e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 7292e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk icon.setup(text, filter, this, panel); 73071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard // TODO: get rid of hasDefaultRepresentation() 73171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard if (filter.hasDefaultRepresentation()) { 73271f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard icon.setFilterRepresentation(filter.getDefaultRepresentation()); 73371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard } 7342e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk icon.setId(filter.getButtonId()); 7352e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mPanelController.addComponent(button, icon); 7362e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mPanelController.addFilter(filter); 7372e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk panel.addView(icon); 7382e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk return icon; 7392e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 7402e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 7410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 7420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 7430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 744a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 745d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation[] fxArray = new FilterFxRepresentation[18]; 7460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 747457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 74808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] drawid = { 74943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0005_punch, 750457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0000_vintage, 751457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0004_bw_contrast, 75243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0002_bleach, 75343b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0001_instant, 754457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0007_washout, 75543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0003_blue_crush, 75643b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0008_washout_color, 75743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0006_x_process 758457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 759457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 76008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] fxNameid = { 76143b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_punch, 762457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_vintage, 763457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bw_contrast, 76443b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_bleach, 76543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_instant, 766457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout, 76743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_blue_crush, 768457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout_color, 76943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_x_process 770457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 771457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 7720a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk ImagePreset preset = new ImagePreset(getString(R.string.history_original)); // empty 773e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford preset.setImageLoader(mImageLoader); 774a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 77553f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford BitmapFactory.Options o = new BitmapFactory.Options(); 77653f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford o.inScaled = false; 77708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 778457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford for (int i = 0; i < drawid.length; i++) { 77953f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o); 780d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation fx = new FilterFxRepresentation(getString(fxNameid[i]), drawid[i], fxNameid[i]); 781d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard fx.setFxBitmap(b); 782d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard fxArray[p++] = fx; 783457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford } 7842e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 785d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard FilterFxRepresentation nullFx = new FilterFxRepresentation(getString(R.string.none), 0, R.string.none); 786d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard mNullFxFilter = setupFilterRepresentationButton(nullFx, listFilters, mFxButton); 7872e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk mNullFxFilter.setSelected(true); 7882e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 7890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 790d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard setupFilterRepresentationButton(fxArray[i], listFilters, mFxButton); 7910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 79463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(preset, true); 7950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 7980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 79992e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 8000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void showOriginalViews(boolean value) { 8020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 8030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.showOriginal(value); 8040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 8080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 8090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 8108537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 8110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideListViews() { 8150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mListViews) { 8160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 8170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 8210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(false); // reset 8220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 8230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 8240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8255b85b092af404effd32aa513f9c45a0232d7ae81nicolasroard mEditorPlaceHolder.hide(); 8260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectBottomPanelButtons() { 8290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : mBottomPanelButtons) { 8300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 8310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectPanelButtons(Vector<ImageButton> buttons) { 8350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : buttons) { 8360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 8370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8405b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk public void disableFilterButtons() { 8415b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk for (ImageButton b : mBottomPanelButtons) { 8425b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setEnabled(false); 8435b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setClickable(false); 8445b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setAlpha(0.4f); 8455b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk } 8465b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk } 8475b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk 8485b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk public void enableFilterButtons() { 8495b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk for (ImageButton b : mBottomPanelButtons) { 8505b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setEnabled(true); 8515b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setClickable(true); 8525b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk b.setAlpha(1.0f); 8535b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk } 8545b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk } 8555b188c94f5895cd166fc29def1e5295498e298c9Ruben Brunk 8560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 857bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 858bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 859d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public boolean isShowingHistoryPanel() { 860d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard return mShowingHistoryPanel; 861d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard } 862d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard 863bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 864bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View view = findViewById(R.id.mainPanel); 865bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 866bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 867bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 868bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 869bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 870bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 871bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 8724d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 873bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 874bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 8754d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard view.animate().setDuration(200).x(translate) 876bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .withLayer().withEndAction(new Runnable() { 87792e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 878bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard public void run() { 879bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setAlpha(0); 880bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.VISIBLE); 881bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.animate().setDuration(100) 882bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .alpha(1.0f).start(); 883bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 884bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard }).start(); 885bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 886bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 887bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.INVISIBLE); 888bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(0).withLayer() 889bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 890bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 891bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 892bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 893bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 894a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard @Override 895a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard public void onConfigurationChanged(Configuration newConfig) 896a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard { 897a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard super.onConfigurationChanged(newConfig); 898588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard setResources(); 899a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard if (mShowingHistoryPanel) { 900a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard toggleHistoryPanel(); 901a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 902a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard } 903a9bc8ef5774557a66bcb9bb6d38cb16f7ef56e2enicolasroard 90463a7dac01d394523799939596b960cb03321798dJohn Hoford public void setupMasterImage() { 90563a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter mHistoryAdapter = new HistoryAdapter( 90663a7dac01d394523799939596b960cb03321798dJohn Hoford this, R.layout.filtershow_history_operation_row, 90763a7dac01d394523799939596b960cb03321798dJohn Hoford R.id.rowTextView); 90863a7dac01d394523799939596b960cb03321798dJohn Hoford ImageStateAdapter mImageStateAdapter = new ImageStateAdapter(this, 90963a7dac01d394523799939596b960cb03321798dJohn Hoford R.layout.filtershow_imagestate_row); 91063a7dac01d394523799939596b960cb03321798dJohn Hoford 911588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard MasterImage.reset(); 912588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard mMasterImage = MasterImage.getImage(); 91363a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setHistoryAdapter(mHistoryAdapter); 91463a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setStateAdapter(mImageStateAdapter); 91563a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setActivity(this); 91663a7dac01d394523799939596b960cb03321798dJohn Hoford } 91763a7dac01d394523799939596b960cb03321798dJohn Hoford 918bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 9190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 9200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 921d7899c56b8df278dfd6720ae11eadc2f89fe8094nicolasroard public void toggleHistoryPanel() { 9229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 9239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 924bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 925bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 926bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 927bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 928bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 929bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 9304d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard int translate = translateMainPanel(viewList); 9319594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 9329594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 9334d276f338bbdc53f8a3b4806265bc26c7fe0ea7cnicolasroard view.animate().setDuration(200).x(translate) 9349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 93592e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 9369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 9379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 9389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 9399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 9409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 9419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 9439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 9449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 9459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 9469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(0).withLayer() 947bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 9489594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9499594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 9509594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 9510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9522e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk public void dispatchNullFilterClick() { 953af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullFxFilter.onClick(mNullFxFilter); 954af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford mNullBorderFilter.onClick(mNullBorderFilter); 9552e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 956af0dc7f486553fd96b33b15e5380cb1928462d69John Hoford 9572e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk void resetHistory() { 9582e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk dispatchNullFilterClick(); 95963a7dac01d394523799939596b960cb03321798dJohn Hoford HistoryAdapter adapter = mMasterImage.getHistory(); 9609594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 9619594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 96263a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.setPreset(original, true); 9633992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.resetParameters(); 9649594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 9650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 9680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 9690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 9700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 9710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 9729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 9730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 9750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 97775608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 97875608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 97975608166f54891972ebad3d8fd958fed9a5300e6nicolasroard if (mPanelController.onBackPressed()) { 98055550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard saveImage(); 98175608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 98275608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 983e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 984e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 985e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard CharSequence text = getString(R.string.cannot_load_image); 986e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 987e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard toast.show(); 988e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 989e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 990e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 9910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 9920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 9940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 9950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 9960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 9970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 9980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 99971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard public void useFilterRepresentation(FilterRepresentation filterRepresentation) { 100071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard if (filterRepresentation == null) { 100171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard return; 100271f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard } 100371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard if (mMasterImage.getCurrentFilterRepresentation() == filterRepresentation) { 10040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 10050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 100657eedfd99676913f575b1f76e3a874026d1ddf7cnicolasroard ImagePreset oldPreset = mMasterImage.getPreset(); 10070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 100871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard FilterRepresentation representation = copy.getRepresentation(filterRepresentation); 100971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard if (representation == null) { 101071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard copy.addFilter(filterRepresentation); 101171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard } else { 101292e387187a872b3b0986b378954eb611aa83fdeanicolasroard if (filterRepresentation.allowsMultipleInstances()) { 1013d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard representation.useParametersFrom(filterRepresentation); 1014d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard copy.setHistoryName(filterRepresentation.getName()); 1015d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard } 101671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard filterRepresentation = representation; 101757eedfd99676913f575b1f76e3a874026d1ddf7cnicolasroard } 10186205c8100d7c0ec2a2db0baf9f043ae472a8da29nicolasroard mMasterImage.setPreset(copy, true); 101971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard mMasterImage.setCurrentFilterRepresentation(filterRepresentation); 10200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 10210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 10240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 10250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 102663a7dac01d394523799939596b960cb03321798dJohn Hoford mMasterImage.onHistoryItemClick(position); 10270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 10280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 10310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 10320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 10330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 10340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 10350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 10360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 103892e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 10390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 10400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 10410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 10420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 1043d49d53206a197b08ec4754d8751b6860e33d9f48John Reck startLoadBitmap(selectedImageUri); 10440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 10470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10486416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveToExtraUri = false; 10496416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mSaveAsWallpaper = false; 10506416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean mReturnAsExtra = false; 10516416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk private boolean outputted = false; 10526416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 10546416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras != null) { 10556416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getExtraOutput() != null) { 10566416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveToExtraUri = true; 10576416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10586416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10596416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getSetAsWallpaper()) { 10606416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mSaveAsWallpaper = true; 10616416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10626416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10636416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mCropExtras.getReturnData()) { 10646416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10656416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mReturnAsExtra = true; 10666416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk outputted = true; 10676416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10686416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10696416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (outputted) { 10706416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.getImagePreset().mGeoData.setUseCropExtrasFlag(true); 10716416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(null); 10726416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.returnFilteredResult(this); 10736416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10746416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10756416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!outputted) { 10766416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mImageShow.hasModifications()) { 10776416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk // Get the name of the album, to which the image will be saved 10786416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 10796416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 10806416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 10816416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk showSavingProgress(albumName); 10826416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveImage(this, null); 10836416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 10846416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 10856416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10866416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10876416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10886416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 10896416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void onFilteredResult(Bitmap filtered) { 10906416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Intent intent = new Intent(); 10916416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_CROPPED_RECT, mImageShow.getImageCropBounds()); 10926416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveToExtraUri) { 10936416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mImageShow.saveToUri(filtered, mCropExtras.getExtraOutput(), 10946416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk mCropExtras.getOutputFormat(), this); 10956416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 10966416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mSaveAsWallpaper) { 10976416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk try { 10986416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk WallpaperManager.getInstance(this).setBitmap(filtered); 10996416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } catch (IOException e) { 11006416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "fail to set wall paper", e); 11016416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 110255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } 11036416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (mReturnAsExtra) { 11046416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (filtered != null) { 11056416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk int bmapSize = filtered.getRowBytes() * filtered.getHeight(); 11066416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk /* 11076416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Max size of Binder transaction buffer is 1Mb, so constrain 11086416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * Bitmap to be somewhat less than this, otherwise we get 11096416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk * TransactionTooLargeExceptions. 11106416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk */ 11116416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (bmapSize > MAX_BMAP_IN_INTENT) { 11126416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk Log.w(LOGTAG, "Bitmap too large to be returned via intent"); 11136416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } else { 11146416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk intent.putExtra(CropExtras.KEY_DATA, filtered); 11156416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11166416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11176416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11186416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk setResult(RESULT_OK, intent); 11196416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (!mSaveToExtraUri) { 11206416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk done(); 11216416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11226416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11236416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk 11246416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk public void done() { 11256416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk if (outputted) { 11266416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk hideSavingProgress(); 11276416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk } 11286416dd59687768d4152d5d954dd0e8c3617b9d97Ruben Brunk finish(); 11290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1131588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard private void setResources() { 1132588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard ImageFilterBorder filterBorder = (ImageFilterBorder) FiltersManager.getManager().getFilter(ImageFilterBorder.class); 1133588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard filterBorder.setResources(getResources()); 1134588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard } 1135588c30c74178bc399b043a5401f0c1f93ae22378nicolasroard 11360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 1137e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 11380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 11390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 11400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 1141