package com.vansuita.gaussianblur.sample.frag;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.vansuita.gaussianblur.GaussianBlur;
import com.vansuita.gaussianblur.sample.R;
import com.vansuita.gaussianblur.sample.act.MainActivity;
import com.vansuita.gaussianblur.sample.anim.Animate;
import com.vansuita.gaussianblur.sample.lis.IOnSettingsChanged;
/**
* Created by jrvansuita on 18/02/17.
*/
public class DinosaurFragment extends Fragment implements View.OnTouchListener {
public static final String TAG = "TAG";
private ImageView ivRawImage;
private ImageView ivBlurredImage;
private Handler handler;
private int dinosaurId;
@Override
public void onAttach(Context context) {
super.onAttach(context);
getMain().addOnSettingsChanged(onSettingsChanged);
}
private MainActivity getMain() {
return ((MainActivity) getActivity());
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dinosaur_fragment, null);
bind(view);
init();
setHasOptionsMenu(true);
return view;
}
private void bind(View view) {
ivRawImage = (ImageView) view.findViewById(R.id.raw_image);
ivBlurredImage = (ImageView) view.findViewById(R.id.blurred_image);
}
private int getResource() {
int position = getArguments().getInt(TAG);
String dinosaurName = getResources().getStringArray(R.array.dinosaurs)[position];
return getResources().getIdentifier(dinosaurName.replace(' ', '_').toLowerCase(), "mipmap", getActivity().getPackageName());
}
private void init() {
dinosaurId = getResource();
ivRawImage.setImageResource(dinosaurId);
ivBlurredImage.setOnTouchListener(this);
applyBlur();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_unblur:
Animate.with(ivBlurredImage).toggleVisibility();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() != MotionEvent.ACTION_MOVE)
runDetectUnblurRequested(motionEvent.getAction());
return true;
}
private void runDetectUnblurRequested(final int action) {
if (handler != null) {
handler.removeCallbacksAndMessages(null);
handler = null;
}
switch (action) {
case MotionEvent.ACTION_CANCEL:
ivBlurredImage.setVisibility(View.VISIBLE);
break;
case MotionEvent.ACTION_DOWN:
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Animate.with(ivBlurredImage).toggleVisibility();
}
}, 200);
break;
case MotionEvent.ACTION_UP:
Animate.with(ivBlurredImage).toggleVisibility();
break;
default: break;
}
}
private IOnSettingsChanged onSettingsChanged = new IOnSettingsChanged() {
@Override
public void onChanged() {
applyBlur();
}
};
private void applyBlur() {
GaussianBlur.with(getActivity())
.size(getMain().getActualMaxSize())
.radius(getMain().getActualRadius())
.put(dinosaurId, ivBlurredImage);
}
@Override
public void onDetach() {
super.onDetach();
getMain().removeOnSettingsChanged(onSettingsChanged);
}
}