FilterShowActivity.java revision 08458dc637d92ee5f12e34d49c34cc10f4e19c7d
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; 90d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 11457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.Bitmap; 12457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport android.graphics.BitmapFactory; 1393dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Color; 140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 1592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.net.Uri; 1692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.os.Bundle; 170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Menu; 209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.view.MenuItem; 210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.MotionEvent; 220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View; 230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnTouchListener; 250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView; 260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ImageButton; 280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.LinearLayout; 290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ListView; 3092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport android.widget.SeekBar; 310ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider; 320ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.R; 3592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 3692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilter; 3792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterBorder; 3893dfe7a1df07a64701369b480578410efb740a27nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterParametricBorder; 3992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilterRS; 4092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageBorder; 41de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageCrop; 42de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageFlip; 43de154778c8f94121cb2117fcf6224c40c01b6132nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageRotate; 4492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 4508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallBorder; 4692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; 4792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageStraighten; 4892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageZoom; 4992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePreset; 5092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePresetBW; 5192e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePresetBWBlue; 5292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePresetBWGreen; 5392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePresetBWRed; 54457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hofordimport com.android.gallery3d.filtershow.presets.ImagePresetFX; 5592e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePresetOld; 5692e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePresetSaturated; 5792e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.presets.ImagePresetXProcessing; 5892e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.provider.SharedImageProvider; 5992e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.tools.SaveCopyTask; 6092e2341248e99c691f38820503984bc5e2f18811nicolasroardimport com.android.gallery3d.filtershow.ui.ImageCurves; 6192e2341248e99c691f38820503984bc5e2f18811nicolasroard 6292e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.io.File; 63ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescuimport java.lang.ref.WeakReference; 6492e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector; 6592e2341248e99c691f38820503984bc5e2f18811nicolasroard 660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard@TargetApi(16) 670ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener, 680ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard OnShareTargetSelectedListener { 690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7092e2341248e99c691f38820503984bc5e2f18811nicolasroard private final PanelController mPanelController = new PanelController(); 710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageCurves mImageCurves = null; 740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageBorder mImageBorders = null; 750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageStraighten mImageStraighten = null; 765448bf8095483574649afcc2add7f153670c7450nicolasroard private ImageZoom mImageZoom = null; 778537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageCrop mImageCrop = null; 788537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageRotate mImageRotate = null; 798537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk private ImageFlip mImageFlip = null; 800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListFx = null; 820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListBorders = null; 830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListGeometry = null; 840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListColors = null; 8592e2341248e99c691f38820503984bc5e2f18811nicolasroard private View mListFilterButtons = null; 860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 9208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard private ImageSmallFilter mCurrentImageSmallFilter = null; 930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 9592e2341248e99c691f38820503984bc5e2f18811nicolasroard protected static final boolean ANIMATE_PANELS = true; 960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 98bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 99bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 10092e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 10192e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<View> mListViews = new Vector<View>(); 10292e2341248e99c691f38820503984bc5e2f18811nicolasroard private final Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>(); 1030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1040ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private ShareActionProvider mShareActionProvider; 1050ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private File mSharedOutputFile = null; 1060ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 1070ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private boolean mSharingImage = false; 1080ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 109ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private WeakReference<ProgressDialog> mSavingProgressDialog; 110ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 1110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 1120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 1130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1155448bf8095483574649afcc2add7f153670c7450nicolasroard ImageFilterRS.setRenderScriptContext(this); 1165448bf8095483574649afcc2add7f153670c7450nicolasroard 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 1189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 119786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 120786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 121786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 122786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.getCustomView().setOnClickListener(new OnClickListener() { 123786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 124786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 125786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 126786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 127786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader = new ImageLoader(getApplicationContext()); 1300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); 1320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); 1330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 1350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves = (ImageCurves) findViewById(R.id.imageCurves); 1360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders = (ImageBorder) findViewById(R.id.imageBorder); 1370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); 1385448bf8095483574649afcc2add7f153670c7450nicolasroard mImageZoom = (ImageZoom) findViewById(R.id.imageZoom); 1398537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageCrop = (ImageCrop) findViewById(R.id.imageCrop); 1408537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate = (ImageRotate) findViewById(R.id.imageRotate); 1418537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip = (ImageFlip) findViewById(R.id.imageFlip); 1420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 1440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageCurves); 1450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageBorders); 1460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageStraighten); 1475448bf8095483574649afcc2add7f153670c7450nicolasroard mImageViews.add(mImageZoom); 1488537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageCrop); 1498537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageRotate); 1508537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageViews.add(mImageFlip); 1510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx = findViewById(R.id.fxList); 1530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders = findViewById(R.id.bordersList); 15492e2341248e99c691f38820503984bc5e2f18811nicolasroard mListGeometry = findViewById(R.id.geometryList); 15592e2341248e99c691f38820503984bc5e2f18811nicolasroard mListFilterButtons = findViewById(R.id.filterButtonsList); 1560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors = findViewById(R.id.colorsFxList); 1570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListFx); 1580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListBorders); 1590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListGeometry); 16092e2341248e99c691f38820503984bc5e2f18811nicolasroard mListViews.add(mListFilterButtons); 1610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListColors); 1620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 1640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 1650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 1660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 16792e2341248e99c691f38820503984bc5e2f18811nicolasroard 16892e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setImageLoader(mImageLoader); 16992e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setImageLoader(mImageLoader); 17092e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageCurves.setMaster(mImageShow); 17192e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageBorders.setImageLoader(mImageLoader); 17292e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageBorders.setMaster(mImageShow); 17392e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setImageLoader(mImageLoader); 17492e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageStraighten.setMaster(mImageShow); 17592e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setImageLoader(mImageLoader); 17692e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageZoom.setMaster(mImageShow); 1778537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageCrop.setImageLoader(mImageLoader); 1788537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageCrop.setMaster(mImageShow); 1798537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setImageLoader(mImageLoader); 1808537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageRotate.setMaster(mImageShow); 1818537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setImageLoader(mImageLoader); 1828537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mImageFlip.setMaster(mImageShow); 18392e2341248e99c691f38820503984bc5e2f18811nicolasroard 18492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageShow)); 18592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageCurves)); 18692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageBorder)); 18792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageStraighten)); 1888537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageCrop)); 1898537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageRotate)); 1908537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.addImageView(findViewById(R.id.imageFlip)); 19192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addImageView(findViewById(R.id.imageZoom)); 19292e2341248e99c691f38820503984bc5e2f18811nicolasroard 19392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mFxButton, mListFx, 0); 19492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mBorderButton, mListBorders, 1); 19592e2341248e99c691f38820503984bc5e2f18811nicolasroard 19692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mGeometryButton, mListGeometry, 2); 19792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton)); 19892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton)); 19992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton)); 20092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton)); 20192e2341248e99c691f38820503984bc5e2f18811nicolasroard 20292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addPanel(mColorsButton, mListColors, 3); 20392e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.vignetteButton)); 20492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.curvesButtonRGB)); 20592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.sharpenButton)); 20692e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.vibranceButton)); 20792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.contrastButton)); 20892e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.saturationButton)); 20992e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.tintButton)); 21092e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.exposureButton)); 21192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addComponent(mColorsButton, findViewById(R.id.shadowRecoveryButton)); 21290b1d251973bfa748d435896fc277cb4024451adJohn Hoford mPanelController.addComponent(mColorsButton, findViewById(R.id.redEyeButton)); 21392e2341248e99c691f38820503984bc5e2f18811nicolasroard 21492e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.resetEffect)); 21592e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.addView(findViewById(R.id.applyEffect)); 21692e2341248e99c691f38820503984bc5e2f18811nicolasroard 21708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard findViewById(R.id.compareWithOriginalImage).setOnTouchListener( 21808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard createOnTouchShowOriginalButton()); 2190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 2210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 2220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 224bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard operationsList.setAdapter(mImageShow.getHistoryAdapter()); 2250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 226bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 227bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard imageStateList.setAdapter(mImageShow.getImageStateAdapter()); 228bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mImageLoader.setAdapter((HistoryAdapter) mImageShow.getHistoryAdapter()); 2290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListImages(listFilters); 2310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListBorders(listBorders); 2320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 23392e2341248e99c691f38820503984bc5e2f18811nicolasroard SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar); 23492e2341248e99c691f38820503984bc5e2f18811nicolasroard seekBar.setMax(200); 23592e2341248e99c691f38820503984bc5e2f18811nicolasroard mImageShow.setSeekBar(seekBar); 236de154778c8f94121cb2117fcf6224c40c01b6132nicolasroard mImageZoom.setSeekBar(seekBar); 23792e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); 2388537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk mPanelController.setUtilityPanel(this, findViewById(R.id.filterButtonsList), 23992e2341248e99c691f38820503984bc5e2f18811nicolasroard findViewById(R.id.compareWithOriginalImage), 24092e2341248e99c691f38820503984bc5e2f18811nicolasroard findViewById(R.id.applyEffect)); 24192e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setMasterImage(mImageShow); 24292e2341248e99c691f38820503984bc5e2f18811nicolasroard mPanelController.setCurrentPanel(mFxButton); 2430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 2440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard String data = intent.getDataString(); 2450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (data != null) { 2460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri uri = Uri.parse(data); 2470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader.loadBitmap(uri); 2480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 2490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 2500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 253ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void showSavingProgress() { 254ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress; 255ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 256ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = mSavingProgressDialog.get(); 257ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (progress != null) { 258ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress.show(); 259ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu return; 260ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 261ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 262ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu // TODO: Allow cancellation of the saving process 263ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu progress = ProgressDialog.show(this, "", getString(R.string.saving_image), true, false); 264ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu mSavingProgressDialog = new WeakReference<ProgressDialog>(progress); 265ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 266ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 267ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu private void hideSavingProgress() { 268ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu if (mSavingProgressDialog != null) { 269ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu ProgressDialog progress = mSavingProgressDialog.get(); 27008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (progress != null) 27108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard progress.dismiss(); 272ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 273ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu } 274ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu 2750ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public void completeSaveImage(Uri saveUri) { 2760ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard if (mSharingImage && mSharedOutputFile != null) { 2770ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Image saved, we unblock the content provider 2780ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 2790ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 2800ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 2810ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, false); 2820ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 2830ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 2840ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 285ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu hideSavingProgress(); 2860ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard finish(); 2870ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 2880ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 2890ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard @Override 2900ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { 29192e2341248e99c691f38820503984bc5e2f18811nicolasroard // First, let's tell the SharedImageProvider that it will need to wait 29292e2341248e99c691f38820503984bc5e2f18811nicolasroard // for the image 2930ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 2940ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 2950ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard ContentValues values = new ContentValues(); 2960ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard values.put(SharedImageProvider.PREPARE, true); 2970ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard getContentResolver().insert(uri, values); 2980ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharingImage = true; 2990ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 3000ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard // Process and save the image in the background. 301ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu showSavingProgress(); 3020ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, mSharedOutputFile); 3030ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return true; 3040ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 3050ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 3060ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard private Intent getDefaultShareIntent() { 3070ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Intent intent = new Intent(Intent.ACTION_SEND); 3080ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 3090ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 3100ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.setType(SharedImageProvider.MIME_TYPE); 3110ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri()); 3120ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, 3130ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard Uri.encode(mSharedOutputFile.getAbsolutePath())); 3140ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard intent.putExtra(Intent.EXTRA_STREAM, uri); 3150ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard return intent; 3160ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard } 3170ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard 3189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 3199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 3209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 321bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showHistory = menu.findItem(R.id.operationsButton); 3229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 323bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.hide_history_panel); 324bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 325bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.show_history_panel); 326bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 327bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 328bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 329bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 3309594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 331bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 3329594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3330ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share) 3340ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard .getActionProvider(); 3350ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setShareIntent(getDefaultShareIntent()); 3360ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mShareActionProvider.setOnShareTargetSelectedListener(this); 3379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 3389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 34092e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 3416e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onPause() { 3426e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onPause(); 3436e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 3446e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(null); 3456e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 3466e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 3476e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 3486e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 3496e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu public void onResume() { 3506e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu super.onResume(); 3516e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu if (mShareActionProvider != null) { 3526e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 3536e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 3546e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu } 3556e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu 3566e733b74465ad6994c23d624fd8ee9b7c249e7b3Bobby Georgescu @Override 3579594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 3589594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 3599594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 3609594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 361bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 3629594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 3639594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 3649594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 3659594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 3669594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 3679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3689594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 3699594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 370bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 3719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 3729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 3739594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 3749594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 3759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 3769594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 377f47e790e3f3553f69abe054eec20bd7585118843nicolasroard case R.id.resetHistoryButton: { 378f47e790e3f3553f69abe054eec20bd7585118843nicolasroard resetHistory(); 379f47e790e3f3553f69abe054eec20bd7585118843nicolasroard return true; 380f47e790e3f3553f69abe054eec20bd7585118843nicolasroard } 381bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 382bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 383bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 384bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 3859594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 3869594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 3879594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 3889594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3899594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 3909594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 3919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 3929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 3959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 3970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 3980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 3990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 400457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford ImagePreset[] preset = new ImagePreset[18]; 4010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 402457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 40308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] drawid = { 404457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0000_vintage, 405457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0001_instant, 406457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0002_bleach, 407457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0003_blue_crush, 408457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0004_bw_contrast, 409457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0005_punch, 410457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0006_x_process, 411457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0007_washout, 412457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.drawable.filtershow_fx_0008_washout_color 413457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 414457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 41508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard int[] fxNameid = { 416457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_vintage, 417457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_instant, 418457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bleach, 419457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_blue_crush, 420457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_bw_contrast, 421457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_punch, 422457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_x_process, 423457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout, 424457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford R.string.ffx_washout_color, 425457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford }; 426457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 42708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard preset[p++] = new ImagePreset(); 42808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 429457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford for (int i = 0; i < drawid.length; i++) { 43008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard Bitmap b = BitmapFactory.decodeResource(getResources(), drawid[i]); 431457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford preset[p++] = new ImagePresetFX(b, getString(fxNameid[i])); 432457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford } 433457e88cd2ba6a8a93b1643a3fb3d50ee758671adJohn Hoford 4340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetSaturated(); 4350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetOld(); 4360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetXProcessing(); 4370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBW(); 4380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWRed(); 4390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWGreen(); 4400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWBlue(); 4410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 44208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallFilter previousFilter = null; 4430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 44408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallFilter filter = new ImageSmallFilter(this); 44508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (i == 0) { 44608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard filter.setSelected(true); 44708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = filter; 44808458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 44908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard filter.setPreviousImageSmallFilter(previousFilter); 4500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[i].setIsFx(true); 4510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImagePreset(preset[i]); 4520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 4530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 4540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listFilters.addView(filter); 45508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard previousFilter = filter; 4560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 4590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(preset[0]); 4600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListBorders(LinearLayout listBorders) { 4630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 4640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the borders straight from the filesystem 4650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 46693dfe7a1df07a64701369b480578410efb740a27nicolasroard ImageFilter[] borders = new ImageFilter[7]; 4670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(null); 4680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd3 = getResources().getDrawable(R.drawable.filtershow_border_film3); 4700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd3); 4710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd = getResources().getDrawable( 4720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard R.drawable.filtershow_border_scratch3); 4730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd); 47408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard borders[p++] = new ImageFilterParametricBorder(Color.BLACK, 100, 0); 47508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard borders[p++] = new ImageFilterParametricBorder(Color.BLACK, 100, 100); 47608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard borders[p++] = new ImageFilterParametricBorder(Color.WHITE, 100, 0); 47708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard borders[p++] = new ImageFilterParametricBorder(Color.WHITE, 100, 100); 4780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 47908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallFilter previousFilter = null; 4800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 48108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard ImageSmallBorder filter = new ImageSmallBorder(this); 48208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard filter.setPreviousImageSmallFilter(previousFilter); 4830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageFilter(borders[i]); 4840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 48593dfe7a1df07a64701369b480578410efb740a27nicolasroard filter.setBorder(true); 4860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 487bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard filter.setShowTitle(false); 4880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listBorders.addView(filter); 48908458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard previousFilter = filter; 4900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 4940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 49592e2341248e99c691f38820503984bc5e2f18811nicolasroard // TODO: finish the cleanup. 4960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void showOriginalViews(boolean value) { 4980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 4990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.showOriginal(value); 5000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 5040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 5050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 5068537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk views.updateImage(); 5070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideListViews() { 5110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mListViews) { 5120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 5130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 5170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(false); // reset 5180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 5190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 5200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectBottomPanelButtons() { 5240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : mBottomPanelButtons) { 5250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 5260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectPanelButtons(Vector<ImageButton> buttons) { 5300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : buttons) { 5310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 5320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 5360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Click handlers for the top row buttons 5370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnTouchListener createOnTouchShowOriginalButton() { 5390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnTouchListener() { 5400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public boolean onTouch(View v, MotionEvent event) { 5420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard boolean show = false; 5430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if ((event.getActionMasked() != MotionEvent.ACTION_UP) 5440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard || (event.getActionMasked() == MotionEvent.ACTION_CANCEL)) { 5450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard show = true; 5460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard showOriginalViews(show); 5480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return true; 5490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 554bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 555bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 556bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 557bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View view = findViewById(R.id.mainPanel); 558bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 559bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 560bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 561bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 562bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 563bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 564bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 565bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 566bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 567bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(-viewList.getWidth()) 568bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .withLayer().withEndAction(new Runnable() { 56992e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 570bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard public void run() { 571bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setAlpha(0); 572bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.VISIBLE); 573bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.animate().setDuration(100) 574bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .alpha(1.0f).start(); 575bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 576bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard }).start(); 577bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 578bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 579bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.INVISIBLE); 580bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(0).withLayer() 581bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 582bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 583bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 584bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 585bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 586bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 5870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 5880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5899594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void toggleHistoryPanel() { 5909594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 5919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 592bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 593bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 594bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 595bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 596bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 597bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 5989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 5999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 6009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(-viewList.getWidth()) 6019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 60292e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 6039594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 6049594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 6059594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 6069594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 6079594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 6089594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 6109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 6119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 6129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 6139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(0).withLayer() 614bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 6159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6169594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 6179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 6180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void resetHistory() { 6209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 621bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 6229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 6239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 6249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.setImagePreset(original); 6259594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 6260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 6290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 6300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 6339594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 6340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 6390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 6410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 6420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 6430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 6440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 64608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard public void useImagePreset(ImageSmallFilter imageSmallFilter, ImagePreset preset) { 6470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset == null) { 6480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 6490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 65008458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 65108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (mCurrentImageSmallFilter != null) { 65208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(false); 65308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 65408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = imageSmallFilter; 65508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(true); 65608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 6570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(preset); 6580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(copy); 6590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset.isFx()) { 6600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // if it's an FX we rest the curve adjustment too 6610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.resetCurve(); 6620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 6640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 66608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard public void useImageFilter(ImageSmallFilter imageSmallFilter, ImageFilter imageFilter, 66708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard boolean setBorder) { 6680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (imageFilter == null) { 6690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 6700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 67108458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 67208458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard if (mCurrentImageSmallFilter != null) { 67308458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(false); 67408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard } 67508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter = imageSmallFilter; 67608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard mCurrentImageSmallFilter.setSelected(true); 67708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard 6780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset oldPreset = mImageShow.getImagePreset(); 6790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 6800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use a numerical constant instead. 68193dfe7a1df07a64701369b480578410efb740a27nicolasroard if (setBorder) { 6820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.setHistoryName("Border"); 68393dfe7a1df07a64701369b480578410efb740a27nicolasroard copy.setBorder(imageFilter); 68493dfe7a1df07a64701369b480578410efb740a27nicolasroard } else { 68593dfe7a1df07a64701369b480578410efb740a27nicolasroard copy.add(imageFilter); 6860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 687bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mImageShow.setImagePreset(copy); 6880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 6890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 6930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 6940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.onItemClick(position); 6950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 6960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 6990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 7000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 7010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 7020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 7030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 7040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 70692e2341248e99c691f38820503984bc5e2f18811nicolasroard @Override 7070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 7080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Log.v(LOGTAG, "onActivityResult"); 7090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 7100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 7110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 7120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader.loadBitmap(selectedImageUri); 7130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 718ec29b73d77a8ff2f000eb04d662d85d63d8f8d09Bobby Georgescu showSavingProgress(); 7190ee91a2b74808fa3f51d370daaddf99f588d72efnicolasroard mImageShow.saveImage(this, null); 7200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 723e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 7240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 727