FilterShowActivity.java revision 0addfc7f6342184a67cdd8b5cc3872c6a5c87e55
10d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 20d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardpackage com.android.gallery3d.filtershow; 30d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 40d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.annotation.TargetApi; 59594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.app.ActionBar; 60d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.app.Activity; 7ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport android.app.ProgressDialog; 80ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.content.ContentValues; 90addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport android.content.Context; 100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 12457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 13457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.BitmapFactory; 1493dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Color; 15fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.graphics.Point; 160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 1792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 1892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 19fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.util.DisplayMetrics; 200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 22fafb2edbb9928039b887f59685d82593bd79e06aJohn Hofordimport android.view.Display; 230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Menu; 249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.view.MenuItem; 250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View; 260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView; 280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ImageButton; 300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.LinearLayout; 310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ListView; 3292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.widget.SeekBar; 330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider; 340ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 35e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroardimport android.widget.Toast; 360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 380addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.data.LocalAlbum; 3992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 4092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilter; 4192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterBorder; 42ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterContrast; 43ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterExposure; 44a19830b4fd9050b48386cd904d99cfd2566cc515John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterFx; 45ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterHue; 4693dfe7a1df07a64701369b480578410efb740a27nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterParametricBorder; 4792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterRS; 48ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterSaturated; 49ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterShadows; 50ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterVibrance; 51ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterVignette; 52ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.filters.ImageFilterWBalance; 5392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageBorder; 54de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 55de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageFlip; 56de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRotate; 5792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 5808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallBorder; 5992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; 6092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageStraighten; 61ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hofordimport com.android.gallery3d.filtershow.imageshow.ImageWithIcon; 6292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageZoom; 6392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 6492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 6592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 665ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroardimport com.android.gallery3d.filtershow.ui.ImageButtonTitle; 6792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.ui.ImageCurves; 683992ae6cf1cbb7b57a22d8287c40451558408335nicolasroardimport com.android.gallery3d.filtershow.ui.Spline; 690addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liuimport com.android.gallery3d.util.GalleryUtils; 7092e2341248e99c691f38820503984bc5e2f18811nicolasroard 7192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 72ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 7392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 7492e2341248e99c691f38820503984bc5e2f18811nicolasroard 750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard@TargetApi(16) 760ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener, 770ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7963926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk public static final String CROP_ACTION = "com.android.camera.action.CROP"; 8092e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageCurves mImageCurves = null; 840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageBorder mImageBorders = null; 850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageStraighten mImageStraighten = null; 865448bf8095483574649afcc2add7f153670c7450nicolasroard private ImageZoom mImageZoom = null; 8762e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk private ImageCrop mImageCrop = null; 888537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageRotate mImageRotate = null; 898537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageFlip mImageFlip = null; 900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListFx = null; 920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListBorders = null; 930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListGeometry = null; 940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListColors = null; 9592e2341248e99c691f38820503984bc5e2f18811nicolasroard private View mListFilterButtons = null; 960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 1000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 1010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 10208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard private ImageSmallFilter mCurrentImageSmallFilter = null; 1030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 1040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 10592e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 1065ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard private static int mImageBorderSize = 40; 1070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 109bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 110bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 11192e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 11292e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<View> mListViews = new Vector<View>(); 11392e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>(); 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1160ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1170ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1180ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1190ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 120ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 1213038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford private static final int SEEK_BAR_MAX = 600; 12255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard 1230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1275448bf8095483574649afcc2add7f153670c7450nicolasroard ImageFilterRS.setRenderScriptContext(this); 1285448bf8095483574649afcc2add7f153670c7450nicolasroard 12995404c666640177abf72ca2278585a16f30cf390nicolasroard ImageShow.setDefaultBackgroundColor(getResources().getColor(R.color.background_screen)); 1305ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard // TODO: get those values from XML. 1315ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextSize((int) getPixelsFromDip(12)); 1325ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageShow.setTextPadding((int) getPixelsFromDip(10)); 1335ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageButtonTitle.setTextSize((int) getPixelsFromDip(12)); 1345ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageButtonTitle.setTextPadding((int) getPixelsFromDip(10)); 13595404c666640177abf72ca2278585a16f30cf390nicolasroard ImageSmallFilter.setMargin((int) getPixelsFromDip(3)); 1365ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard ImageSmallFilter.setTextMargin((int) getPixelsFromDip(4)); 1375ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard mImageBorderSize = (int) getPixelsFromDip(20); 1383992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Drawable curveHandle = getResources().getDrawable(R.drawable.camera_crop_holo); 1393992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard int curveHandleSize = (int) getResources().getDimension(R.dimen.crop_indicator_size); 1403992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveHandle(curveHandle, curveHandleSize); 1413992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard Spline.setCurveWidth((int) getPixelsFromDip(3)); 1425ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard 1430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 145786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 146786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 147786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 148786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.getCustomView().setOnClickListener(new OnClickListener() { 149786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 150786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 151786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 152786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 153786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 155e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard mImageLoader = new ImageLoader(this, getApplicationContext()); 1560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); 1580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); 159ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford LinearLayout listColors = (LinearLayout) findViewById(R.id.listColorsFx); 1600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 1620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves = (ImageCurves) findViewById(R.id.imageCurves); 1630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders = (ImageBorder) findViewById(R.id.imageBorder); 1640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); 1655448bf8095483574649afcc2add7f153670c7450nicolasroard mImageZoom = (ImageZoom) findViewById(R.id.imageZoom); 16662e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop = (ImageCrop) findViewById(R.id.imageCrop); 1678537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate = (ImageRotate) findViewById(R.id.imageRotate); 1688537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip = (ImageFlip) findViewById(R.id.imageFlip); 1690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 1710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageCurves); 1720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageBorders); 1730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageStraighten); 1745448bf8095483574649afcc2add7f153670c7450nicolasroard mImageViews.add(mImageZoom); 17562e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageViews.add(mImageCrop); 1768537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageRotate); 1778537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageFlip); 1780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx = findViewById(R.id.fxList); 1800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders = findViewById(R.id.bordersList); 18192e2341248e99c691f38820503984bc5e2f18811nicolasroard mListGeometry = findViewById(R.id.geometryList); 18292e2341248e99c691f38820503984bc5e2f18811nicolasroard mListFilterButtons = findViewById(R.id.filterButtonsList); 1830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors = findViewById(R.id.colorsFxList); 1840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListFx); 1850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListBorders); 1860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListGeometry); 18792e2341248e99c691f38820503984bc5e2f18811nicolasroard mListViews.add(mListFilterButtons); 1880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListColors); 1890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 1910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 1920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 1930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 19492e2341248e99c691f38820503984bc5e2f18811nicolasroard 19592e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 19692e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setImageLoader(mImageLoader); 19792e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setMaster(mImageShow); 19892e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageBorders.setImageLoader(mImageLoader); 19992e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageBorders.setMaster(mImageShow); 20092e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setImageLoader(mImageLoader); 20192e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setMaster(mImageShow); 20292e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setImageLoader(mImageLoader); 20392e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setMaster(mImageShow); 20462e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop.setImageLoader(mImageLoader); 20562e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mImageCrop.setMaster(mImageShow); 2068537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setImageLoader(mImageLoader); 2078537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setMaster(mImageShow); 2088537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setImageLoader(mImageLoader); 2098537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setMaster(mImageShow); 21092e2341248e99c691f38820503984bc5e2f18811nicolasroard 21192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 21292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageCurves)); 21392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageBorder)); 21492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageStraighten)); 21562e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addImageView(findViewById(R.id.imageCrop)); 2168537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageRotate)); 2178537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageFlip)); 21892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageZoom)); 21992e2341248e99c691f38820503984bc5e2f18811nicolasroard 22092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mFxButton, mListFx, 0); 22192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mBorderButton, mListBorders, 1); 22292e2341248e99c691f38820503984bc5e2f18811nicolasroard 22392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mGeometryButton, mListGeometry, 2); 22492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton)); 22562e962bcb9fc03f3cfeac5ece8d3e95fc2dd0718Ruben Brunk mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton)); 22692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton)); 22792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton)); 22892e2341248e99c691f38820503984bc5e2f18811nicolasroard 22992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mColorsButton, mListColors, 3); 230ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 2310f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] recastIDs = { 232ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.vignetteButton, 233ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.vibranceButton, 234ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.contrastButton, 235ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.saturationButton, 236ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.wbalanceButton, 237ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.hueButton, 238ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.exposureButton, 239ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.shadowRecoveryButton 240ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 2410f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk ImageFilter[] filters = { 242ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterVignette(), 243ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterVibrance(), 244ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterContrast(), 245ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterSaturated(), 246ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterWBalance(), 247ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterHue(), 248ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterExposure(), 249ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford new ImageFilterShadows() 250ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 251ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 252ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford for (int i = 0; i < filters.length; i++) { 253ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 254ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford ImageSmallFilter fView = new ImageSmallFilter(this); 255ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford View v = listColors.findViewById(recastIDs[i]); 256ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford int pos = listColors.indexOfChild(v); 257ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford listColors.removeView(v); 258ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 259ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford filters[i].setParameter(100); 26043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk if(v instanceof ImageButtonTitle) 26143b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk filters[i].setName(((ImageButtonTitle) v).getText()); 262ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageFilter(filters[i]); 263ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setController(this); 264ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageLoader(mImageLoader); 265ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setId(recastIDs[i]); 266ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mPanelController.addComponent(mColorsButton, fView); 2670f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk listColors.addView(fView, pos); 268ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 269ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 2700f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] overlayIDs = { 271ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.sharpenButton, 272ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.id.curvesButtonRGB 273ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 2740f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk int[] overlayBitmaps = { 275ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.drawable.filtershow_button_colors_sharpen, 276ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.drawable.filtershow_button_colors_curve 277ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 27843b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk int []overlayNames = { 27943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.sharpness, 280ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford R.string.curvesRGB 281ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 282ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 2830f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk for (int i = 0; i < overlayIDs.length; i++) { 284ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford ImageWithIcon fView = new ImageWithIcon(this); 285ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford View v = listColors.findViewById(overlayIDs[i]); 286ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford int pos = listColors.indexOfChild(v); 287ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford listColors.removeView(v); 2880f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk final int sid = overlayNames[i]; 2890f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk ImageFilterExposure efilter = new ImageFilterExposure() { 290ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford { 291ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mName = getString(sid); 292ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 293ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford }; 294ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford efilter.setParameter(-300); 295ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 2960f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk overlayBitmaps[i]); 297ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 298ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setIcon(bitmap); 299ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageFilter(efilter); 300ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setController(this); 301ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setImageLoader(mImageLoader); 302ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford fView.setId(overlayIDs[i]); 303ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford mPanelController.addComponent(mColorsButton, fView); 3040f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk listColors.addView(fView, pos); 305ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford } 306ea5df36ac1cdfbb569e6ba725c2df433d614d0f5John Hoford 30792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.curvesButtonRGB)); 30892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.sharpenButton)); 30992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.vibranceButton)); 31092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.contrastButton)); 31192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.saturationButton)); 3124988eff4c8eda325a616337d1aaa0666cc301a7cJohn Hoford mPanelController.addComponent(mColorsButton, findViewById(R.id.wbalanceButton)); 3134988eff4c8eda325a616337d1aaa0666cc301a7cJohn Hoford mPanelController.addComponent(mColorsButton, findViewById(R.id.hueButton)); 31492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.exposureButton)); 31592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.shadowRecoveryButton)); 31692e2341248e99c691f38820503984bc5e2f18811nicolasroard 31792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 3183992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.addView(findViewById(R.id.pickCurvesChannel)); 3190f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mPanelController.addView(findViewById(R.id.aspect)); 3200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 3210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 3220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 324bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard operationsList.setAdapter(mImageShow.getHistoryAdapter()); 3250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 326bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 327bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard imageStateList.setAdapter(mImageShow.getImageStateAdapter()); 328bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mImageLoader.setAdapter((HistoryAdapter) mImageShow.getHistoryAdapter()); 3290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListImages(listFilters); 3310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListBorders(listBorders); 3320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 33392e2341248e99c691f38820503984bc5e2f18811nicolasroard SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar); 3343038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford seekBar.setMax(SEEK_BAR_MAX); 3353038d014b7ade998d1820c997242b9d9d8bc7ccfJohn Hoford 33692e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setSeekBar(seekBar); 337de154778c8f94121cb2117fcf6224c40c01b6132nicolasroard mImageZoom.setSeekBar(seekBar); 33892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 3398537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), 3400f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk findViewById(R.id.applyEffect), findViewById(R.id.aspect)); 34192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setMasterImage(mImageShow); 34292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setCurrentPanel(mFxButton); 3430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 3440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard String data = intent.getDataString(); 3450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (data != null) { 3460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri uri = Uri.parse(data); 3470f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageLoader.loadBitmap(uri, getScreenImageSize()); 3480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 3490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 3500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 35163926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 35263926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk String action = intent.getAction(); 35363926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk if (action == CROP_ACTION){ 35463926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk mPanelController.showComponent(findViewById(R.id.cropButton)); 35563926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk } 35663926d2ed2ca2921de8dca9b3a52c1d64d8afc46Ruben Brunk 3570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3590f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk private int getScreenImageSize() { 3600f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk DisplayMetrics metrics = new DisplayMetrics(); 361fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford Display display = getWindowManager().getDefaultDisplay(); 3620f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk Point size = new Point(); 363fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getSize(size); 364fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford display.getMetrics(metrics); 365fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford int msize = Math.min(size.x, size.y); 3660f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk return (133 * msize) / metrics.densityDpi; 367fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford } 368fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford 3690addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu private void showSavingProgress(String albumName) { 370ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 371ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 372ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 373ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 374ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 375ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 376ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 377ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 378ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 3790addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String progressText; 3800addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu if (albumName == null) { 3810addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.saving_image); 3820addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } else { 3830addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progressText = getString(R.string.filtershow_saving_image, albumName); 3840addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu } 3850addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu progress = ProgressDialog.show(this, "", progressText, true, false); 386ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 387ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 388ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 389ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 390ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 391ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 39208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 39308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 394ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 395ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 396ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 3970ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 3980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 3990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 4000ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 4010ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 4020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 4030ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 4040ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 4050ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 4060ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 407ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 4080ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 4090ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 4100ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 4110ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 4120ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 41392e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 41492e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 4150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 4160ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 4170ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 4180ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 4190ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 4200ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 4210ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 4220ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 4230addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(null); 4240ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 4250ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 4260ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 4270ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 4280ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 4290ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 4300ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 4310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 4320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 4330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 4340ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 4350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 4360ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 4370ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 4380ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 4390ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 4409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 4419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 4429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 443bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showHistory = menu.findItem(R.id.operationsButton); 4449594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 445bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.hide_history_panel); 446bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 447bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.show_history_panel); 448bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 449bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 450bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 451bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 4529594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 453bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 4549594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 4550ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 4560ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 4570ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 4580ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 4599594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 4609594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 4619594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 46292e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 4636e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 4646e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 4656e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 4666e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 4676e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 4686e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 4696e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 4706e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 4716e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 4726e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 4736e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 4746e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 4756e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 4766e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 4776e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 4786e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 4799594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 4809594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 4819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 4829594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 483bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 4849594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 4859594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 4869594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 4879594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 4889594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 4899594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 4909594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 4919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 492bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 4939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 4949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 4959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 4969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 4979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 4989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 499f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 500f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 501f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 502f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 503bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 504bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 505bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 506bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 5079594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 5089594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 5099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 5109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 5129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 5139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 5149594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5169594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 5179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 5189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 5190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 5200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 5210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 522a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 523a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford ImageFilterFx[] fxArray = new ImageFilterFx[18]; 5240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 525457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 52608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] drawid = { 52743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0005_punch, 528457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0000_vintage, 529457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0004_bw_contrast, 53043b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0002_bleach, 53143b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0001_instant, 532457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0007_washout, 53343b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0003_blue_crush, 53443b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0008_washout_color, 53543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.drawable.filtershow_fx_0006_x_process 536457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 537457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 53808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] fxNameid = { 53943b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_punch, 540457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_vintage, 541457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bw_contrast, 54243b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_bleach, 54343b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_instant, 544457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout, 54543b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_blue_crush, 546457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout_color, 54743b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk R.string.ffx_x_process 548457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 549457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 550a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford ImagePreset preset = new ImagePreset(); // empty 551a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford ImageSmallFilter filter = new ImageSmallFilter(this); 552a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 553a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setSelected(true); 554a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford mCurrentImageSmallFilter = filter; 555a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 55643b906d81caa4379eae1a1643194c8b3d34b1ad5Ruben Brunk filter.setImageFilter(new ImageFilterFx(null,getString(R.string.none))); 557a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 558a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setController(this); 559a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setImageLoader(mImageLoader); 560a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford listFilters.addView(filter); 5610f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk ImageSmallFilter previousFilter = filter; 562a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 56353f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford BitmapFactory.Options o = new BitmapFactory.Options(); 56453f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford o.inScaled = false; 56508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 566457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford for (int i = 0; i < drawid.length; i++) { 56753f24f0fbfd787a4ab2f129499d2c7ef240a517fJohn Hoford Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i], o); 568a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford fxArray[p++] = new ImageFilterFx(b, getString(fxNameid[i])); 569457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford } 570457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 5710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 572a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter = new ImageSmallFilter(this); 573a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford filter.setImageFilter(fxArray[i]); 5740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 5750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 5760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listFilters.addView(filter); 57708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard previousFilter = filter; 5780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 581a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford mImageShow.setImagePreset(preset); 5820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListBorders(LinearLayout listBorders) { 5850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 5860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the borders straight from the filesystem 5870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 58893dfe7a1df07a64701369b480578410efb740a27nicolasroard ImageFilter[] borders = new ImageFilter[7]; 5890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(null); 5900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5918e1536da92f155731d5fd729ec5b2bf00709091anicolasroard Drawable npd1 = getResources().getDrawable(R.drawable.filtershow_border_4x5); 5928e1536da92f155731d5fd729ec5b2bf00709091anicolasroard borders[p++] = new ImageFilterBorder(npd1); 5938e1536da92f155731d5fd729ec5b2bf00709091anicolasroard Drawable npd2 = getResources().getDrawable(R.drawable.filtershow_border_brush); 5948e1536da92f155731d5fd729ec5b2bf00709091anicolasroard borders[p++] = new ImageFilterBorder(npd2); 5955ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 0); 5960f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk borders[p++] = new ImageFilterParametricBorder(Color.BLACK, mImageBorderSize, 5970f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageBorderSize); 5985ec40a6ba587fa8bd50958d263bb6fc6280de4c1nicolasroard borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 0); 5990f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk borders[p++] = new ImageFilterParametricBorder(Color.WHITE, mImageBorderSize, 6000f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageBorderSize); 6010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 60208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallFilter previousFilter = null; 6030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 60408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallBorder filter = new ImageSmallBorder(this); 6050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageFilter(borders[i]); 6060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 60793dfe7a1df07a64701369b480578410efb740a27nicolasroard filter.setBorder(true); 6080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 609bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard filter.setShowTitle(false); 6100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listBorders.addView(filter); 61108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard previousFilter = filter; 6120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 6160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 61792e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 6180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void showOriginalViews(boolean value) { 6200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 6210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.showOriginal(value); 6220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 6260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 6270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 6288537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 6290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideListViews() { 6330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mListViews) { 6340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 6350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 6390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(false); // reset 6400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 6410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 6420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectBottomPanelButtons() { 6460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : mBottomPanelButtons) { 6470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 6480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectPanelButtons(Vector<ImageButton> buttons) { 6520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : buttons) { 6530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 6540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 658bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 659bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 660bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 661bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View view = findViewById(R.id.mainPanel); 662bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 663bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 664bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 665bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 666bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 667bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 668bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 669bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 670bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 671bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(-viewList.getWidth()) 672bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .withLayer().withEndAction(new Runnable() { 67392e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 674bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard public void run() { 675bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setAlpha(0); 676bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.VISIBLE); 677bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.animate().setDuration(100) 678bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .alpha(1.0f).start(); 679bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 680bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard }).start(); 681bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 682bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 683bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.INVISIBLE); 684bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(0).withLayer() 685bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 686bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 687bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 688bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 689bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 690bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 6910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 6920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void toggleHistoryPanel() { 6949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 6959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 696bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 697bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 698bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 699bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 700bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 701bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 7029594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 7039594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 7049594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(-viewList.getWidth()) 7059594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 70692e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 7079594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 7089594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 7099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 7109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 7119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 7129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 7149594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 7159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 7169594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 7179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(0).withLayer() 718bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 7199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 7219594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 7220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void resetHistory() { 7249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 725bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 7269594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 7279594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 7289594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.setImagePreset(original); 7293992ae6cf1cbb7b57a22d8287c40451558408335nicolasroard mPanelController.resetParameters(); 7309594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 7310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 7340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 7350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 7360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 7370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 7389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 7390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 7410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 74375608166f54891972ebad3d8fd958fed9a5300e6nicolasroard @Override 74475608166f54891972ebad3d8fd958fed9a5300e6nicolasroard public void onBackPressed() { 74575608166f54891972ebad3d8fd958fed9a5300e6nicolasroard if (mPanelController.onBackPressed()) { 74655550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard saveImage(); 74775608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 74875608166f54891972ebad3d8fd958fed9a5300e6nicolasroard } 749e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 750e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard public void cannotLoadImage() { 751e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard CharSequence text = getString(R.string.cannot_load_image); 752e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 753e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard toast.show(); 754e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard finish(); 755e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard } 756e34a5a5eaedb870798a5cc7415079d04a6ca42e0nicolasroard 7570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 7580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 7600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 7610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 7620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 7630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 76508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard public void useImagePreset(ImageSmallFilter imageSmallFilter, ImagePreset preset) { 7660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset == null) { 7670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 7680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 76908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 77008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (mCurrentImageSmallFilter != null) { 77108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(false); 77208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 77308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = imageSmallFilter; 77408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(true); 77508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 7760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(preset); 7770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(copy); 7780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset.isFx()) { 7790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // if it's an FX we rest the curve adjustment too 7800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.resetCurve(); 7810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 7830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 78508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard public void useImageFilter(ImageSmallFilter imageSmallFilter, ImageFilter imageFilter, 78608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard boolean setBorder) { 7870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (imageFilter == null) { 7880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 7890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 79008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 79108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (mCurrentImageSmallFilter != null) { 79208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(false); 79308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 79408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = imageSmallFilter; 79508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(true); 79608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 7970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset oldPreset = mImageShow.getImagePreset(); 7980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 7990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use a numerical constant instead. 800a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 801a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford copy.add(imageFilter); 802a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford 803bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mImageShow.setImagePreset(copy); 8040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 8050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 8080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 8090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 8100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.onItemClick(position); 8110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 8120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 8150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 8160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 8170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 8180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 8190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 8200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 82292e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 8230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 8240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Log.v(LOGTAG, "onActivityResult"); 8250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 8260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 8270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 8280f7dc6ef6e736c0993240450b50b91721c79c43eRuben Brunk mImageLoader.loadBitmap(selectedImageUri, getScreenImageSize()); 8290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 83455550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard if (mImageShow.hasModifications()) { 8350addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu // Get the name of the album, to which the image will be saved 8360addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri()); 8370addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu int bucketId = GalleryUtils.getBucketId(saveDir.getPath()); 8380addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null); 8390addfc7f6342184a67cdd8b5cc3872c6a5c87e55Doris Liu showSavingProgress(albumName); 84055550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard mImageShow.saveImage(this, null); 84155550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } else { 84255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard finish(); 84355550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard } 8440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 847e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 8480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 851