FilterShowActivity.java revision 9594c8d3e0dd0d6157710ceae1d1deea8e566db4
10d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 20d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardpackage com.android.gallery3d.filtershow; 30d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 40d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport java.util.Vector; 50d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 60d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.cache.ImageLoader; 70d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.filters.*; 80d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageBorder; 90d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow; 100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; 110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageStraighten; 120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.presets.*; 130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.ui.ImageCurves; 140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.R; 150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.net.Uri; 170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.os.Bundle; 180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.annotation.TargetApi; 199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.app.ActionBar; 200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.app.Activity; 210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.Intent; 220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.content.res.Resources; 230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.Drawable; 240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.drawable.NinePatchDrawable; 250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log; 260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.TypedValue; 270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Gravity; 280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.Menu; 299594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroardimport android.view.MenuItem; 300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.MotionEvent; 310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View; 320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnClickListener; 330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.view.View.OnTouchListener; 340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AbsoluteLayout; 350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView; 360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.AdapterView.OnItemClickListener; 370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.Button; 380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ImageButton; 390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.LinearLayout; 400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ListView; 410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.Toast; 420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard@TargetApi(16) 440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener { 450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageCurves mImageCurves = null; 490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageBorder mImageBorders = null; 500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageStraighten mImageStraighten = null; 510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListFx = null; 530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListBorders = null; 540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListGeometry = null; 550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListColors = null; 560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mVignetteButton = null; 630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mCurvesButtonRGB = null; 640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mCurvesButtonRed = null; 650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mCurvesButtonGreen = null; 660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mCurvesButtonBlue = null; 670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mSharpenButton = null; 680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mContrastButton = null; 690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard protected static final boolean ANIMATE_PANELS = false; 730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private Vector<View> mListViews = new Vector<View>(); 770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>(); 780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private Vector<ImageButton> mColorsPanelButtons = new Vector<ImageButton>(); 790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 859594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 869594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard actionBar.setDisplayHomeAsUpEnabled(true); 879594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard actionBar.setTitle(R.string.done); 880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader = new ImageLoader(getApplicationContext()); 900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); 920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); 930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves = (ImageCurves) findViewById(R.id.imageCurves); 960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders = (ImageBorder) findViewById(R.id.imageBorder); 970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); 980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 1000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageCurves); 1010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageBorders); 1020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageStraighten); 1030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx = findViewById(R.id.fxList); 1050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders = findViewById(R.id.bordersList); 1060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListGeometry = findViewById(R.id.gemoetryList); 1070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors = findViewById(R.id.colorsFxList); 1080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListFx); 1090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListBorders); 1100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListGeometry); 1110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListColors); 1120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 1150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 1160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBottomPanelButtons.add(mFxButton); 1180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBottomPanelButtons.add(mBorderButton); 1190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBottomPanelButtons.add(mGeometryButton); 1200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBottomPanelButtons.add(mColorsButton); 1210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton.setSelected(true); 1220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mVignetteButton = (ImageButton) findViewById(R.id.vignetteButton); 1240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRGB = (ImageButton) findViewById(R.id.curvesButtonRGB); 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRed = (ImageButton) findViewById(R.id.curvesButtonRed); 1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonGreen = (ImageButton) findViewById(R.id.curvesButtonGreen); 1270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonBlue = (ImageButton) findViewById(R.id.curvesButtonBlue); 1280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mSharpenButton = (ImageButton) findViewById(R.id.sharpenButton); 1290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mContrastButton = (ImageButton) findViewById(R.id.contrastButton); 1300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mVignetteButton); 1310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mCurvesButtonRGB); 1320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mCurvesButtonRed); 1330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mCurvesButtonGreen); 1340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mCurvesButtonBlue); 1350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mSharpenButton); 1360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mContrastButton); 1370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRGB.setSelected(true); 1390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard // TODO: instead of click listeners, make the activity the single 1419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard // listener and do a dispatch in the listener callback method. 1420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.showOriginalButton).setOnTouchListener(createOnTouchShowOriginalButton()); 1430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.straightenButton).setOnClickListener(createOnClickStraightenButton()); 1440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.cropButton).setOnClickListener(createOnClickCropButton()); 1450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.rotateButton).setOnClickListener(createOnClickRotateButton()); 1460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.flipButton).setOnClickListener(createOnClickFlipButton()); 1470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mVignetteButton.setOnClickListener(createOnClickVignetteButton()); 1490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRGB.setOnClickListener(createOnClickCurvesRGBButton()); 1500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRed.setOnClickListener(createOnClickCurvesRedButton()); 1510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonGreen.setOnClickListener(createOnClickCurvesGreenButton()); 1520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonBlue.setOnClickListener(createOnClickCurvesBlueButton()); 1530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mSharpenButton.setOnClickListener(createOnClickSharpenButton()); 1550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mContrastButton.setOnClickListener(createOnClickContrastButton()); 1560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton.setOnClickListener(createOnClickFxButton()); 1580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton.setOnClickListener(createOnClickBorderButton()); 1590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton.setOnClickListener(createOnClickGeometryButton()); 1600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton.setOnClickListener(createOnClickColorsButton()); 1610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 1630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 1640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 1660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setAdapter(mImageShow.getListAdapter()); 1670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 1680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader.setAdapter((HistoryAdapter) mImageShow.getListAdapter()); 1690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListImages(listFilters); 1710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListBorders(listBorders); 1720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImageLoader(mImageLoader); 1740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setImageLoader(mImageLoader); 1750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setMaster(mImageShow); 1760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders.setImageLoader(mImageLoader); 1770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders.setMaster(mImageShow); 1780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.setImageLoader(mImageLoader); 1790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.setMaster(mImageShow); 1800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 1820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard String data = intent.getDataString(); 1830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (data != null) { 1840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri uri = Uri.parse(data); 1850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader.loadBitmap(uri); 1860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 1870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 1880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 1890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 1900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 1929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 1939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 1949594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard MenuItem item = menu.findItem(R.id.operationsButton); 1959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 1969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard item.setTitle(R.string.hide_history_panel); 1979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 1989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard item.setTitle(R.string.show_history_panel); 1999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2029594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 2039594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 2049594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 2059594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 2069594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 2079594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .getListAdapter(); 2089594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 2099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 2109594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 2119594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 2129594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2149594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 2159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 2169594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .getListAdapter(); 2179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 2189594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 2199594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 2209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 2219594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2239594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 2249594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 2259594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2269594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2279594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 2289594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 2299594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2309594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2319594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2329594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 2339594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 2350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 2360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 2370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 2380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset[] preset = new ImagePreset[9]; 2390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 2400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePreset(); 2410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetSaturated(); 2420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetOld(); 2430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetXProcessing(); 2440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBW(); 2450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWRed(); 2460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWGreen(); 2470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWBlue(); 2480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 2500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageSmallFilter filter = new ImageSmallFilter(getBaseContext()); 2510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[i].setIsFx(true); 2520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImagePreset(preset[i]); 2530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 2540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 2550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listFilters.addView(filter); 2560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 2590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(preset[0]); 2600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListBorders(LinearLayout listBorders) { 2630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 2640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the borders straight from the filesystem 2650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 2660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageFilter[] borders = new ImageFilter[8]; 2670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(null); 2680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd3 = getResources().getDrawable(R.drawable.filtershow_border_film3); 2700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd3); 2710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd = getResources().getDrawable( 2720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard R.drawable.filtershow_border_scratch3); 2730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd); 2740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd2 = getResources().getDrawable(R.drawable.filtershow_border_black); 2750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd2); 2760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd6 = getResources().getDrawable( 2770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard R.drawable.filtershow_border_rounded_black); 2780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd6); 2790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd4 = getResources().getDrawable(R.drawable.filtershow_border_white); 2800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd4); 2810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd5 = getResources().getDrawable( 2820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard R.drawable.filtershow_border_rounded_white); 2830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd5); 2840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 2860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageSmallFilter filter = new ImageSmallFilter(getBaseContext()); 2870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageFilter(borders[i]); 2880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 2890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 2900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listBorders.addView(filter); 2910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 2950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 2960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void showOriginalViews(boolean value) { 2980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 2990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.showOriginal(value); 3000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 3040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 3050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 3060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideListViews() { 3100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mListViews) { 3110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 3120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 3160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(false); // reset 3170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 3180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 3190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectBottomPanelButtons() { 3230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : mBottomPanelButtons) { 3240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 3250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectPanelButtons(Vector<ImageButton> buttons) { 3290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : buttons) { 3300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 3310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 3350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Click handlers for the top row buttons 3360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnTouchListener createOnTouchShowOriginalButton() { 3380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnTouchListener() { 3390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 3400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public boolean onTouch(View v, MotionEvent event) { 3410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard boolean show = false; 3420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if ((event.getActionMasked() != MotionEvent.ACTION_UP) 3430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard || (event.getActionMasked() == MotionEvent.ACTION_CANCEL)) { 3440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard show = true; 3450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard showOriginalViews(show); 3470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return true; 3480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 3500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 3530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 3540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3559594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void toggleHistoryPanel() { 3569594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 3579594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 3589594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard View rootView = viewList.getRootView(); 3599594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 3609594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard // TODO: use a custom layout instead of absolutelayout... 3619594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final AbsoluteLayout.LayoutParams lp = (AbsoluteLayout.LayoutParams) view 3629594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .getLayoutParams(); 3639594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final AbsoluteLayout.LayoutParams lph = (AbsoluteLayout.LayoutParams) viewList 3649594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .getLayoutParams(); 3659594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final int positionHistoryPanel = (int) (rootView.getWidth() - viewList 3669594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .getWidth()); 3679594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 3689594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 3699594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(-viewList.getWidth()) 3709594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 3719594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 3729594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.setLayoutParams(lp); 3739594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard lph.x = positionHistoryPanel; 3749594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setLayoutParams(lph); 3759594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 3769594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 3779594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 3789594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 3799594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3809594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 3819594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 3829594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 3839594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 3849594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(0).withLayer() 3859594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withEndAction(new Runnable() { 3869594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 3879594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard lp.x = 0; 3889594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.setLayoutParams(lp); 3899594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3909594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 3919594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 3939594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 3940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3959594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void resetHistory() { 3969594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 3979594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .getListAdapter(); 3989594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 3999594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 4009594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.setImagePreset(original); 4019594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 4020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 4050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 4060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4099594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 4100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 4150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Now, let's deal with the bottom panel. 4160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickFxButton() { 4180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 4220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideListViews(); 4230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectBottomPanelButtons(); 4240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 4250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx.setVisibility(View.VISIBLE); 4260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton.setSelected(true); 4270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickBorderButton() { 4320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 4360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideListViews(); 4370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectBottomPanelButtons(); 4380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders.setVisibility(View.VISIBLE); 4390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders.setVisibility(View.VISIBLE); 4400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton.setSelected(true); 4410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickGeometryButton() { 4460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 4500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideListViews(); 4510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectBottomPanelButtons(); 4520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.setVisibility(View.VISIBLE); 4530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListGeometry.setVisibility(View.VISIBLE); 4540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton.setSelected(true); 4550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (ANIMATE_PANELS) { 4570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListGeometry.setX(mListGeometry.getWidth()); 4580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListGeometry.animate().setDuration(200).x(0).withLayer().start(); 4590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickColorsButton() { 4650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 4690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideListViews(); 4700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectBottomPanelButtons(); 4710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors.setVisibility(View.VISIBLE); 4720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setVisibility(View.VISIBLE); 4730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton.setSelected(true); 4740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (ANIMATE_PANELS) { 4760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard View view = findViewById(R.id.listColorsFx); 4770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setX(mListColors.getWidth()); 4780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.animate().setDuration(200).x(0).withLayer().start(); 4790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 4850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Geometry sub-panel 4860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickStraightenButton() { 4880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 4920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.setVisibility(View.VISIBLE); 4930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.showToast("Straighten", true); 4940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickCropButton() { 4990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 5040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.showToast("Crop", true); 5050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickRotateButton() { 5100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 5150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.showToast("Rotate", true); 5160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickFlipButton() { 5210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 5260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.showToast("Flip", true); 5270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 5320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Filters sub-panel 5330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickVignetteButton() { 5350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 5400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(true); 5410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset preset = mImageShow.getImagePreset(); 5420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageFilter filter = preset.getFilter("Vignette"); 5430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (filter == null) { 5440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageFilterVignette vignette = new ImageFilterVignette(); 5450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(preset); 5460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.add(vignette); 5470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.setHistoryName(vignette.name()); 5480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.setIsFx(false); 5499579b81504c16ac77aa7442767fbabe6abcfe24bnicolasroard filter = copy.getFilter("Vignette"); 5500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(copy); 5510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 552863b4e65d172a19111f46e43f97e7e41927a3bc7nicolasroard mImageShow.setCurrentFilter(filter); 5530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 5540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mVignetteButton.setSelected(true); 5550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 5560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickCurvesRGBButton() { 5610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setVisibility(View.VISIBLE); 5660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 5670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRGB.setSelected(true); 5680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseRed(true); 5690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseGreen(true); 5700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseBlue(true); 5710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.reloadCurve(); 5720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickCurvesRedButton() { 5770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setVisibility(View.VISIBLE); 5820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 5830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRed.setSelected(true); 5840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseRed(true); 5850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseGreen(false); 5860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseBlue(false); 5870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.reloadCurve(); 5880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickCurvesGreenButton() { 5930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setVisibility(View.VISIBLE); 5980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 5990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonGreen.setSelected(true); 6000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseRed(false); 6010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseGreen(true); 6020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseBlue(false); 6030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.reloadCurve(); 6040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickCurvesBlueButton() { 6090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 6120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 6130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setVisibility(View.VISIBLE); 6140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 6150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonBlue.setSelected(true); 6160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseRed(false); 6170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseGreen(false); 6180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseBlue(true); 6190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.reloadCurve(); 6200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickSharpenButton() { 6250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 6280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 6290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 6300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 6310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mSharpenButton.setSelected(true); 6320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.showToast("Sharpen", true); 6339579b81504c16ac77aa7442767fbabe6abcfe24bnicolasroard mImageShow.setCurrentFilter(null); 6340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickContrastButton() { 6390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 6420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 6430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 6440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 6450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mContrastButton.setSelected(true); 6460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.showToast("Contrast", true); 6479579b81504c16ac77aa7442767fbabe6abcfe24bnicolasroard mImageShow.setCurrentFilter(null); 6480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 6530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 6550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 6560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 6570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 6580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void useImagePreset(ImagePreset preset) { 6610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset == null) { 6620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 6630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(preset); 6650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(copy); 6660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset.isFx()) { 6670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // if it's an FX we rest the curve adjustment too 6680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.resetCurve(); 6690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 6710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void useImageFilter(ImageFilter imageFilter) { 6740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (imageFilter == null) { 6750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 6760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset oldPreset = mImageShow.getImagePreset(); 6780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 6790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use a numerical constant instead. 6800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (imageFilter.name().equalsIgnoreCase("Border")) { 6810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.remove("Border"); 6820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.setHistoryName("Border"); 6830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.add(imageFilter); 6850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 6860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 6900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 6910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.onItemClick(position); 6920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 6930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 6960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 6970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 6980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 6990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 7000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 7010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 7040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Log.v(LOGTAG, "onActivityResult"); 7050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 7060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 7070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 7080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader.loadBitmap(selectedImageUri); 7090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 7140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Toast toast = Toast.makeText(getBaseContext(), getString(R.string.saving_image), 7150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Toast.LENGTH_SHORT); 7160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard toast.setGravity(Gravity.CENTER, 0, 0); 7170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard toast.show(); 7180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.saveImage(this); 7200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void completeSaveImage(Uri saveUri) { 7230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 7240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard finish(); 7250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 728e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 7290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 732