FilterShowActivity.java revision bf93da72576b28f4e9dfb27f8f3fef702c8ae82d
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; 38bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroardimport android.widget.FrameLayout; 39bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroardimport android.widget.FrameLayout.LayoutParams; 400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ImageButton; 410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.LinearLayout; 420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.ListView; 430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.widget.Toast; 440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard@TargetApi(16) 460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardpublic class FilterShowActivity extends Activity implements OnItemClickListener { 470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageLoader mImageLoader = null; 490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageShow mImageShow = null; 500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageCurves mImageCurves = null; 510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageBorder mImageBorders = null; 520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageStraighten mImageStraighten = null; 530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListFx = null; 550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListBorders = null; 560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListGeometry = null; 570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private View mListColors = null; 580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mFxButton = null; 600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mBorderButton = null; 610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mGeometryButton = null; 620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mColorsButton = null; 630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mVignetteButton = null; 650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mCurvesButtonRGB = null; 660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mSharpenButton = null; 67d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford 680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private ImageButton mContrastButton = null; 69d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford private ImageButton mSaturationButton = null; 70d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford private ImageButton mTintButton = null; 71d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford private ImageButton mVibranceButton = null; 72d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford private ImageButton mExposureButton = null; 73d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford private ImageButton mShadowRecoveryButton = null; 740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final int SELECT_PICTURE = 1; 760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private static final String LOGTAG = "FilterShowActivity"; 770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard protected static final boolean ANIMATE_PANELS = false; 780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private boolean mShowingHistoryPanel = false; 80bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private boolean mShowingImageStatePanel = false; 81bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private Vector<ImageShow> mImageViews = new Vector<ImageShow>(); 830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private Vector<View> mListViews = new Vector<View>(); 840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private Vector<ImageButton> mBottomPanelButtons = new Vector<ImageButton>(); 850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private Vector<ImageButton> mColorsPanelButtons = new Vector<ImageButton>(); 860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onCreate(Bundle savedInstanceState) { 890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard super.onCreate(savedInstanceState); 900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setContentView(R.layout.filtershow_activity); 929594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ActionBar actionBar = getActionBar(); 93786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 94786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.setCustomView(R.layout.filtershow_actionbar); 95786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard 96786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard actionBar.getCustomView().setOnClickListener(new OnClickListener() { 97786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard @Override 98786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard public void onClick(View view) { 99786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard saveImage(); 100786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard } 101786fe6476e4ccf4b98489ff69d8ef439533cdc2anicolasroard }); 1020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader = new ImageLoader(getApplicationContext()); 1040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters); 1060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders); 1070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow = (ImageShow) findViewById(R.id.imageShow); 1090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves = (ImageCurves) findViewById(R.id.imageCurves); 1100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders = (ImageBorder) findViewById(R.id.imageBorder); 1110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten); 1120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageShow); 1140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageCurves); 1150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageBorders); 1160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageViews.add(mImageStraighten); 1170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx = findViewById(R.id.fxList); 1190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders = findViewById(R.id.bordersList); 1200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListGeometry = findViewById(R.id.gemoetryList); 1210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors = findViewById(R.id.colorsFxList); 1220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListFx); 1230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListBorders); 1240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListGeometry); 1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListViews.add(mListColors); 1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton = (ImageButton) findViewById(R.id.fxButton); 1280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton = (ImageButton) findViewById(R.id.borderButton); 1290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); 1300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton = (ImageButton) findViewById(R.id.colorsButton); 1310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBottomPanelButtons.add(mFxButton); 1320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBottomPanelButtons.add(mBorderButton); 1330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBottomPanelButtons.add(mGeometryButton); 1340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBottomPanelButtons.add(mColorsButton); 1350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton.setSelected(true); 1360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mVignetteButton = (ImageButton) findViewById(R.id.vignetteButton); 1380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRGB = (ImageButton) findViewById(R.id.curvesButtonRGB); 1390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mSharpenButton = (ImageButton) findViewById(R.id.sharpenButton); 140d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mVibranceButton = (ImageButton) findViewById(R.id.vibranceButton); 1410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mContrastButton = (ImageButton) findViewById(R.id.contrastButton); 142d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mSaturationButton = (ImageButton) findViewById(R.id.saturationButton); 143d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mTintButton = (ImageButton) findViewById(R.id.tintButton); 144d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mExposureButton = (ImageButton) findViewById(R.id.exposureButton); 145d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mShadowRecoveryButton = (ImageButton) findViewById(R.id.shadowRecoveryButton); 146d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford 1470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mVignetteButton); 1480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mCurvesButtonRGB); 1490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mSharpenButton); 1500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsPanelButtons.add(mContrastButton); 151d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mColorsPanelButtons.add(mSaturationButton); 152d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mColorsPanelButtons.add(mTintButton); 153d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mColorsPanelButtons.add(mVibranceButton); 154d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mColorsPanelButtons.add(mExposureButton); 155d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mColorsPanelButtons.add(mShadowRecoveryButton); 1560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1579594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard // TODO: instead of click listeners, make the activity the single 1589594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard // listener and do a dispatch in the listener callback method. 1590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.showOriginalButton).setOnTouchListener(createOnTouchShowOriginalButton()); 1600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.straightenButton).setOnClickListener(createOnClickStraightenButton()); 1610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.cropButton).setOnClickListener(createOnClickCropButton()); 1620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.rotateButton).setOnClickListener(createOnClickRotateButton()); 1630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.flipButton).setOnClickListener(createOnClickFlipButton()); 1640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mVignetteButton.setOnClickListener(createOnClickVignetteButton()); 1660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRGB.setOnClickListener(createOnClickCurvesRGBButton()); 1670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mSharpenButton.setOnClickListener(createOnClickSharpenButton()); 1690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mContrastButton.setOnClickListener(createOnClickContrastButton()); 170d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mSaturationButton.setOnClickListener(createOnClickSaturationButton()); 171d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford 172d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mTintButton.setOnClickListener(createOnClickTintButton()); 173d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mVibranceButton.setOnClickListener(createOnClickVibranceButton()); 174d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mExposureButton.setOnClickListener(createOnClickExposureButton()); 175d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mShadowRecoveryButton.setOnClickListener(createOnClickShadowRecoveryButton()); 1760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton.setOnClickListener(createOnClickFxButton()); 1780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton.setOnClickListener(createOnClickBorderButton()); 1790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton.setOnClickListener(createOnClickGeometryButton()); 1800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton.setOnClickListener(createOnClickColorsButton()); 1810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard findViewById(R.id.resetOperationsButton).setOnClickListener( 1830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard createOnClickResetOperationsButton()); 1840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ListView operationsList = (ListView) findViewById(R.id.operationsList); 186bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard operationsList.setAdapter(mImageShow.getHistoryAdapter()); 1870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard operationsList.setOnItemClickListener(this); 188bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard ListView imageStateList = (ListView) findViewById(R.id.imageStateList); 189bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard imageStateList.setAdapter(mImageShow.getImageStateAdapter()); 190bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mImageLoader.setAdapter((HistoryAdapter) mImageShow.getHistoryAdapter()); 1910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListImages(listFilters); 1930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard fillListBorders(listBorders); 1940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 1950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImageLoader(mImageLoader); 1960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setImageLoader(mImageLoader); 1970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setMaster(mImageShow); 1980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders.setImageLoader(mImageLoader); 1990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders.setMaster(mImageShow); 2000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.setImageLoader(mImageLoader); 2010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.setMaster(mImageShow); 2020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = getIntent(); 2040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard String data = intent.getDataString(); 2050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (data != null) { 2060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri uri = Uri.parse(data); 2070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader.loadBitmap(uri); 2080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } else { 2090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard pickImage(); 2100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2139594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard @Override 2149594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onCreateOptionsMenu(Menu menu) { 2159594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu); 216bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showHistory = menu.findItem(R.id.operationsButton); 2179594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (mShowingHistoryPanel) { 218bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.hide_history_panel); 219bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 220bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showHistory.setTitle(R.string.show_history_panel); 221bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 222bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard MenuItem showState = menu.findItem(R.id.showImageStateButton); 223bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 224bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.hide_imagestate_panel); 2259594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 226bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard showState.setTitle(R.string.show_imagestate_panel); 2279594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2289594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2299594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2309594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 2319594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public boolean onOptionsItemSelected(MenuItem item) { 2329594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard switch (item.getItemId()) { 2339594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.undoButton: { 2349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 235bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 2369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.undo(); 2379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 2389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Undo"); 2399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 2409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.redoButton: { 2439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 244bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 2459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard int position = adapter.redo(); 2469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.onItemClick(position); 2479594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.showToast("Redo"); 2489594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 2499594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2509594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 251bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard case R.id.showImageStateButton: { 252bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard toggleImageStatePanel(); 253bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard return true; 254bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 2559594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case R.id.operationsButton: { 2569594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard toggleHistoryPanel(); 2579594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2589594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2599594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard case android.R.id.home: { 2609594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard saveImage(); 2619594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return true; 2629594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2639594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2649594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard return false; 2659594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 2669594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard 2670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListImages(LinearLayout listFilters) { 2680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 2690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the filters straight from the filesystem 2700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset[] preset = new ImagePreset[9]; 2710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 2720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePreset(); 2730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetSaturated(); 2740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetOld(); 2750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetXProcessing(); 2760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBW(); 2770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWRed(); 2780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWGreen(); 2790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[p++] = new ImagePresetBWBlue(); 2800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 2820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageSmallFilter filter = new ImageSmallFilter(getBaseContext()); 2830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard preset[i].setIsFx(true); 2840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImagePreset(preset[i]); 2850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 2860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 2870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listFilters.addView(filter); 2880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Default preset (original) 2910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(preset[0]); 2920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 2930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 2940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private void fillListBorders(LinearLayout listBorders) { 2950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use listview 2960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: load the borders straight from the filesystem 2970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard int p = 0; 2980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageFilter[] borders = new ImageFilter[8]; 2990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(null); 3000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd3 = getResources().getDrawable(R.drawable.filtershow_border_film3); 3020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd3); 3030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd = getResources().getDrawable( 3040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard R.drawable.filtershow_border_scratch3); 3050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd); 3060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd2 = getResources().getDrawable(R.drawable.filtershow_border_black); 3070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd2); 3080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd6 = getResources().getDrawable( 3090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard R.drawable.filtershow_border_rounded_black); 3100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd6); 3110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd4 = getResources().getDrawable(R.drawable.filtershow_border_white); 3120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd4); 3130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Drawable npd5 = getResources().getDrawable( 3140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard R.drawable.filtershow_border_rounded_white); 3150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard borders[p++] = new ImageFilterBorder(npd5); 3160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (int i = 0; i < p; i++) { 3180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageSmallFilter filter = new ImageSmallFilter(getBaseContext()); 3190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageFilter(borders[i]); 3200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setController(this); 3210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard filter.setImageLoader(mImageLoader); 322bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard filter.setShowTitle(false); 3230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard listBorders.addView(filter); 3240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 3280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Some utility functions 3290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void showOriginalViews(boolean value) { 3310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 3320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.showOriginal(value); 3330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void invalidateViews() { 3370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageShow views : mImageViews) { 3380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard views.invalidate(); 3390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideListViews() { 3430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mListViews) { 3440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 3450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void hideImageViews() { 3490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(false); // reset 3500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (View view : mImageViews) { 3510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setVisibility(View.GONE); 3520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectBottomPanelButtons() { 3560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : mBottomPanelButtons) { 3570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 3580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void unselectPanelButtons(Vector<ImageButton> buttons) { 3620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard for (ImageButton button : buttons) { 3630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard button.setSelected(false); 3640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 3680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Click handlers for the top row buttons 3690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnTouchListener createOnTouchShowOriginalButton() { 3710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnTouchListener() { 3720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 3730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public boolean onTouch(View v, MotionEvent event) { 3740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard boolean show = false; 3750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if ((event.getActionMasked() != MotionEvent.ACTION_UP) 3760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard || (event.getActionMasked() == MotionEvent.ACTION_CANCEL)) { 3770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard show = true; 3780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard showOriginalViews(show); 3800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return true; 3810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 3830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 3840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 3850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 386bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // imageState panel... 387bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 388bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard private void toggleImageStatePanel() { 389bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View view = findViewById(R.id.mainPanel); 390bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard final View viewList = findViewById(R.id.imageStatePanel); 391bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 392bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingHistoryPanel) { 393bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.historyPanel).setVisibility(View.INVISIBLE); 394bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingHistoryPanel = false; 395bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 396bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 397bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (!mShowingImageStatePanel) { 398bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = true; 399bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(-viewList.getWidth()) 400bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .withLayer().withEndAction(new Runnable() { 401bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard public void run() { 402bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setAlpha(0); 403bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.VISIBLE); 404bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.animate().setDuration(100) 405bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .alpha(1.0f).start(); 406bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 407bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard }).start(); 408bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } else { 409bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 410bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard viewList.setVisibility(View.INVISIBLE); 411bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard view.animate().setDuration(200).x(0).withLayer() 412bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 413bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 414bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard invalidateOptionsMenu(); 415bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 416bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 417bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard // ////////////////////////////////////////////////////////////////////////////// 4180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // history panel... 4190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4209594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void toggleHistoryPanel() { 4219594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View view = findViewById(R.id.mainPanel); 4229594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard final View viewList = findViewById(R.id.historyPanel); 423bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 424bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (mShowingImageStatePanel) { 425bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard findViewById(R.id.imageStatePanel).setVisibility(View.INVISIBLE); 426bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mShowingImageStatePanel = false; 427bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard } 428bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard 4299594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard if (!mShowingHistoryPanel) { 4309594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = true; 4319594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(-viewList.getWidth()) 4329594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .withLayer().withEndAction(new Runnable() { 4339594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard public void run() { 4349594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setAlpha(0); 4359594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.VISIBLE); 4369594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.animate().setDuration(100) 4379594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard .alpha(1.0f).start(); 4389594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 4399594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard }).start(); 4409594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } else { 4419594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mShowingHistoryPanel = false; 4429594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard viewList.setVisibility(View.INVISIBLE); 4439594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard view.animate().setDuration(200).x(0).withLayer() 444bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .start(); 4459594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 4469594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateOptionsMenu(); 4479594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard } 4480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4499594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard private void resetHistory() { 4509594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard HistoryAdapter adapter = (HistoryAdapter) mImageShow 451bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard .getHistoryAdapter(); 4529594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard adapter.reset(); 4539594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard ImagePreset original = new ImagePreset(adapter.getItem(0)); 4549594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard mImageShow.setImagePreset(original); 4559594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard invalidateViews(); 4560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // reset button in the history panel. 4590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickResetOperationsButton() { 4600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4639594c8d3e0dd0d6157710ceae1d1deea8e566db4nicolasroard resetHistory(); 4640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 4690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Now, let's deal with the bottom panel. 4700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickFxButton() { 4720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 4760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideListViews(); 4770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectBottomPanelButtons(); 4780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 4790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListFx.setVisibility(View.VISIBLE); 4800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mFxButton.setSelected(true); 4810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickBorderButton() { 4860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 4870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 4880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 4890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 4900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideListViews(); 4910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectBottomPanelButtons(); 4920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageBorders.setVisibility(View.VISIBLE); 4930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListBorders.setVisibility(View.VISIBLE); 4940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mBorderButton.setSelected(true); 4950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 4970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 4980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 4990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickGeometryButton() { 5000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideListViews(); 5050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectBottomPanelButtons(); 5060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.setVisibility(View.VISIBLE); 5070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListGeometry.setVisibility(View.VISIBLE); 5080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mGeometryButton.setSelected(true); 5090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (ANIMATE_PANELS) { 5110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListGeometry.setX(mListGeometry.getWidth()); 5120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListGeometry.animate().setDuration(200).x(0).withLayer().start(); 5130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickColorsButton() { 5190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideListViews(); 5240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectBottomPanelButtons(); 5250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mListColors.setVisibility(View.VISIBLE); 5260c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setVisibility(View.VISIBLE); 5270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mColorsButton.setSelected(true); 5280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (ANIMATE_PANELS) { 5300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard View view = findViewById(R.id.listColorsFx); 5310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.setX(mListColors.getWidth()); 5320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard view.animate().setDuration(200).x(0).withLayer().start(); 5330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 5390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Geometry sub-panel 5400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickStraightenButton() { 5420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.setVisibility(View.VISIBLE); 5470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageStraighten.showToast("Straighten", true); 5480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickCropButton() { 5530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 5580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.showToast("Crop", true); 5590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickRotateButton() { 5640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 5690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.showToast("Rotate", true); 5700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickFlipButton() { 5750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 5800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.showToast("Flip", true); 5810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 5830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 5840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 5860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // Filters sub-panel 5870d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 5880d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickVignetteButton() { 5890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 5900d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 5910d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 5920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 5930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 5940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setShowControls(true); 5950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset preset = mImageShow.getImagePreset(); 5960d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageFilter filter = preset.getFilter("Vignette"); 5970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (filter == null) { 5980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImageFilterVignette vignette = new ImageFilterVignette(); 5990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(preset); 6000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.add(vignette); 601bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard copy.setHistoryName(vignette.getName()); 6020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.setIsFx(false); 6039579b81504c16ac77aa7442767fbabe6abcfe24bnicolasroard filter = copy.getFilter("Vignette"); 6040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(copy); 6050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 606863b4e65d172a19111f46e43f97e7e41927a3bc7nicolasroard mImageShow.setCurrentFilter(filter); 6070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 6080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mVignetteButton.setSelected(true); 6090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 6100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard private OnClickListener createOnClickCurvesRGBButton() { 6150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 6180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 6190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setVisibility(View.VISIBLE); 6200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 6210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mCurvesButtonRGB.setSelected(true); 6220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseRed(true); 6230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseGreen(true); 6240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.setUseBlue(true); 6250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.reloadCurve(); 6260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6300c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard private OnClickListener createOnClickSharpenButton() { 6310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 6340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 6350c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setVisibility(View.VISIBLE); 6360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 6370c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mSharpenButton.setSelected(true); 6380c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.showToast("Sharpen", true); 6390c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setCurrentFilter(null); 6400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6440c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard private OnClickListener createOnClickContrastButton() { 6450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 6480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 6490c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setVisibility(View.VISIBLE); 6500c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setShowControls(true); 6510c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset preset = mImageShow.getImagePreset(); 6520c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilter filter = preset.getFilter("Contrast"); 6530c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard if (filter == null) { 6540c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilterContrast contrast = new ImageFilterContrast(); 6550c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset copy = new ImagePreset(preset); 6560c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.add(contrast); 657bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard copy.setHistoryName(contrast.getName()); 6580c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.setIsFx(false); 6590c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard filter = copy.getFilter("Contrast"); 6600c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setImagePreset(copy); 6610c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 6620c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setCurrentFilter(filter); 6630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 6640c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mContrastButton.setSelected(true); 6650c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard invalidateViews(); 6660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6700c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard private OnClickListener createOnClickSaturationButton() { 6710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 6740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 6750c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setVisibility(View.VISIBLE); 6760c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setShowControls(true); 6770c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset preset = mImageShow.getImagePreset(); 6780c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilter filter = preset.getFilter("Saturated"); 6790c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard if (filter == null) { 6800c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilterSaturated sat = new ImageFilterSaturated(); 6810c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset copy = new ImagePreset(preset); 6820c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.add(sat); 683bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard copy.setHistoryName(sat.getName()); 6840c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.setIsFx(false); 6850c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard filter = copy.getFilter("Saturated"); 6860c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setImagePreset(copy); 6870c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 6880c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setCurrentFilter(filter); 6890d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 6900c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mSaturationButton.setSelected(true); 6910c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard invalidateViews(); 6920d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6930d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 6940d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 6950d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 6960c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard private OnClickListener createOnClickTintButton() { 6970d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 6980d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 6990d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 7000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 7010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 7020c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setShowControls(true); 7030c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset preset = mImageShow.getImagePreset(); 7040c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilter filter = preset.getFilter("Hue"); 7050c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard if (filter == null) { 7060c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilterHue contrast = new ImageFilterHue(); 7070c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset copy = new ImagePreset(preset); 7080c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.add(contrast); 709bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard copy.setHistoryName(contrast.getName()); 7100c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.setIsFx(false); 7110c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard filter = copy.getFilter("Hue"); 7120c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setImagePreset(copy); 7130c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 7140c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setCurrentFilter(filter); 7150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 7160c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mTintButton.setSelected(true); 7170c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard invalidateViews(); 7180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 7200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 7220c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard private OnClickListener createOnClickVibranceButton() { 7230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return new View.OnClickListener() { 7240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 7250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onClick(View v) { 7260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard hideImageViews(); 7270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setVisibility(View.VISIBLE); 728d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mImageShow.setShowControls(true); 729d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford ImagePreset preset = mImageShow.getImagePreset(); 7300c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilter filter = preset.getFilter("Hue"); 731d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford if (filter == null) { 7320c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilterHue contrast = new ImageFilterHue(); 733d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford ImagePreset copy = new ImagePreset(preset); 734d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford copy.add(contrast); 735bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard copy.setHistoryName(contrast.getName()); 736d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford copy.setIsFx(false); 7370c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard filter = copy.getFilter("Hue"); 738d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mImageShow.setImagePreset(copy); 739d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford } 740d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford mImageShow.setCurrentFilter(filter); 7410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard unselectPanelButtons(mColorsPanelButtons); 7420c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mVibranceButton.setSelected(true); 743d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford invalidateViews(); 7440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard }; 7460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 7470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 748d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford private OnClickListener createOnClickExposureButton() { 7490c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard return new View.OnClickListener() { 7500c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard @Override 7510c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard public void onClick(View v) { 7520c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard hideImageViews(); 7530c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setVisibility(View.VISIBLE); 7540c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setShowControls(true); 7550c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset preset = mImageShow.getImagePreset(); 7560c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilter filter = preset.getFilter("Brightness"); 7570c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard if (filter == null) { 7580c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilterBrightness bright = new ImageFilterBrightness(); 7590c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset copy = new ImagePreset(preset); 7600c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.add(bright); 761bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard copy.setHistoryName(bright.getName()); 7620c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.setIsFx(false); 7630c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard filter = copy.getFilter("Brightness"); 7640c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setImagePreset(copy); 7650c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 7660c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setCurrentFilter(filter); 7670c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard unselectPanelButtons(mColorsPanelButtons); 7680c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mExposureButton.setSelected(true); 7690c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard invalidateViews(); 7700c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 7710c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard }; 7720c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 773d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford 774d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford private OnClickListener createOnClickShadowRecoveryButton() { 7750c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard return new View.OnClickListener() { 7760c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard @Override 7770c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard public void onClick(View v) { 7780c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard hideImageViews(); 7790c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setVisibility(View.VISIBLE); 7800c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setShowControls(true); 7810c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset preset = mImageShow.getImagePreset(); 7820c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilter filter = preset.getFilter("Hue"); 7830c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard if (filter == null) { 7840c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImageFilterHue contrast = new ImageFilterHue(); 7850c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard ImagePreset copy = new ImagePreset(preset); 7860c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.add(contrast); 787bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard copy.setHistoryName(contrast.getName()); 7880c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard copy.setIsFx(false); 7890c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard filter = copy.getFilter("Hue"); 7900c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setImagePreset(copy); 7910c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 7920c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mImageShow.setCurrentFilter(filter); 7930c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard unselectPanelButtons(mColorsPanelButtons); 7940c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard mShadowRecoveryButton.setSelected(true); 7950c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard invalidateViews(); 7960c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 7970c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard }; 7980c3203f1789df3f8bd772dfd655e73b44636b629nicolasroard } 799d42f6c69c5980110c16cd679f914c4e4e7caa29dJohn Hoford 8000d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // ////////////////////////////////////////////////////////////////////////////// 8010d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8020d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public float getPixelsFromDip(float value) { 8030d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Resources r = getResources(); 8040d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, 8050d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard r.getDisplayMetrics()); 8060d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8070d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8080d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void useImagePreset(ImagePreset preset) { 8090d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset == null) { 8100d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 8110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(preset); 8130d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.setImagePreset(copy); 8140d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (preset.isFx()) { 8150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // if it's an FX we rest the curve adjustment too 8160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageCurves.resetCurve(); 8170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 8190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void useImageFilter(ImageFilter imageFilter) { 8220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (imageFilter == null) { 8230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard return; 8240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset oldPreset = mImageShow.getImagePreset(); 8260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard ImagePreset copy = new ImagePreset(oldPreset); 8270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard // TODO: use a numerical constant instead. 828bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard if (imageFilter.getName().equalsIgnoreCase("Border")) { 8290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.remove("Border"); 8300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.setHistoryName("Border"); 8310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard copy.add(imageFilter); 833bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard mImageShow.setImagePreset(copy); 8340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 8350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard @Override 8380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onItemClick(AdapterView<?> parent, View view, int position, 8390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard long id) { 8400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.onItemClick(position); 8410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard invalidateViews(); 8420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void pickImage() { 8450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Intent intent = new Intent(); 8460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setType("image/*"); 8470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard intent.setAction(Intent.ACTION_GET_CONTENT); 8480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard startActivityForResult(Intent.createChooser(intent, getString(R.string.select_image)), 8490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard SELECT_PICTURE); 8500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void onActivityResult(int requestCode, int resultCode, Intent data) { 8530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Log.v(LOGTAG, "onActivityResult"); 8540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (resultCode == RESULT_OK) { 8550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard if (requestCode == SELECT_PICTURE) { 8560d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Uri selectedImageUri = data.getData(); 8570d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageLoader.loadBitmap(selectedImageUri); 8580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8600d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8610d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void saveImage() { 8630d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Toast toast = Toast.makeText(getBaseContext(), getString(R.string.saving_image), 8640d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard Toast.LENGTH_SHORT); 8650d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard toast.setGravity(Gravity.CENTER, 0, 0); 8660d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard toast.show(); 8670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard mImageShow.saveImage(this); 8690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard public void completeSaveImage(Uri saveUri) { 8720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard setResult(RESULT_OK, new Intent().setData(saveUri)); 8730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard finish(); 8740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard static { 877e3f9f579d73af613a33ba1d0a93dc101ea671a69nicolasroard System.loadLibrary("jni_filtershow_filters"); 8780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard } 8790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard 8800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard} 881