DesatImageView for Android

Desaturate photos, but show original on touch.

package fisk.fiskimageview;

import android.content.Context;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;

public class DesatImageView extends android.support.v7.widget.AppCompatImageView {

  public DesatImageView(Context context) {
    super(context);
    applyFilter();
  }

  public DesatImageView(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    applyFilter();
  }

  public DesatImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    applyFilter();
  }

  private void applyFilter(){
    ColorMatrix matrix = new ColorMatrix();
    matrix.setSaturation(0.5f);
    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
    setColorFilter(filter);
  }

  private void cancelFilter(){
    ColorMatrix matrix = new ColorMatrix();
    matrix.setSaturation(1f);
    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
    setColorFilter(filter);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        cancelFilter();
        if(hasOnClickListeners()){
          callOnClick();
        }
        return true;
      case MotionEvent.ACTION_UP:
        applyFilter();
    }
    return super.onTouchEvent(event);
  }
}