package com.example.administrator.cookman.ui.fragment;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.administrator.cookman.IView.ICookSearchView;
import com.example.administrator.cookman.R;
import com.example.administrator.cookman.model.entity.CookEntity.CookDetail;
import com.example.administrator.cookman.model.entity.CookEntity.CookSearchHistory;
import com.example.administrator.cookman.model.manager.CookSearchHistoryManager;
import com.example.administrator.cookman.presenter.CookSearchPresenter;
import com.example.administrator.cookman.ui.activity.CookSearchResultActivity;
import com.example.administrator.cookman.ui.adapter.TagCookSearchHistoryAdapter;
import com.example.administrator.cookman.ui.component.fab_transformation.animation.SupportAnimator;
import com.example.administrator.cookman.ui.component.fab_transformation.animation.ViewAnimationUtils;
import com.example.administrator.cookman.ui.component.tagCloudLayout.TagCloudLayout;
import com.example.administrator.cookman.utils.KeyboardUtil;
import com.example.administrator.cookman.utils.ToastUtil;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Created by Administrator on 2017/2/20.
*/
public class SearchFragment extends Fragment implements View.OnClickListener
, ICookSearchView
{
@Bind(R.id.content)
public View content;
@Bind(R.id.edit_lay)
public View editLay;
@Bind(R.id.edit_search)
public EditText editSearch;
@Bind(R.id.img_search)
public ImageView imgvSearch;
@Bind(R.id.items)
public View items;
@Bind(R.id.tag_history)
public TagCloudLayout tagHistory;
private int centerX;
private int centerY;
private List<CookSearchHistory> datas;
private CookSearchPresenter cookSearchPresenter;
private TagCookSearchHistoryAdapter tagCookSearchHistoryAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.fragment_cook_search, container, false);
ButterKnife.bind(this, rootView);
editLay.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
editLay.getViewTreeObserver().removeOnPreDrawListener(this);
items.setVisibility(View.INVISIBLE);
items.setOnClickListener(SearchFragment.this);
editLay.setVisibility(View.INVISIBLE);
centerX = imgvSearch.getLeft() + imgvSearch.getWidth() / 2;
centerY = imgvSearch.getTop() + imgvSearch.getHeight() / 2;
SupportAnimator mRevealAnimator = ViewAnimationUtils.createCircularReveal(
editLay, centerX, centerY, 20, hypo(editLay.getWidth(), editLay.getHeight()));
mRevealAnimator.addListener(new SupportAnimator.AnimatorListener() {
@Override
public void onAnimationStart() {
editLay.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
items.setVisibility(View.VISIBLE);
editSearch.requestFocus();
if (getActivity()!=null) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editSearch, InputMethodManager.SHOW_IMPLICIT);
}
}
}, 100);
}
@Override
public void onAnimationCancel() {
}
@Override
public void onAnimationRepeat() {
}
});
mRevealAnimator.setDuration(400);
mRevealAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
mRevealAnimator.start();
return true;
}
});
datas = CookSearchHistoryManager.getInstance().getDatas();
tagCookSearchHistoryAdapter = new TagCookSearchHistoryAdapter(getActivity(), datas);
tagHistory.setAdapter(tagCookSearchHistoryAdapter);
tagHistory.setItemClickListener(new TagCloudLayout.TagItemClickListener() {
@Override
public void itemClick(int position) {
if(position == datas.size()){
tagCookSearchHistoryClean();
}
else {
tagCookSearchHistoryClick(datas.get(position).getName());
}
}
});
editSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) {
if(actionId == EditorInfo.IME_ACTION_SEARCH || keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER){
search(editSearch.getText().toString());
return true;
}
return false;
}
});
cookSearchPresenter = new CookSearchPresenter(getActivity(), this);
return rootView;
}
@Override
public void onPause(){
super.onPause();
}
@Override
public void onDestroy(){
super.onDestroy();
}
public boolean onBackPressed() {
SupportAnimator mRevealAnimator = ViewAnimationUtils.createCircularReveal(
content, centerX, centerY, 20, hypo(content.getWidth(), content.getHeight()));
mRevealAnimator = mRevealAnimator.reverse();
if (mRevealAnimator == null)
return false;
mRevealAnimator.addListener(new SupportAnimator.AnimatorListener() {
@Override
public void onAnimationStart() {
content.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd() {
content.setVisibility(View.INVISIBLE);
if (getActivity()!=null)
getActivity().getSupportFragmentManager().popBackStack();
}
@Override
public void onAnimationCancel() {
}
@Override
public void onAnimationRepeat() {
}
});
mRevealAnimator.setDuration(400);
mRevealAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
mRevealAnimator.start();
return true;
}
private float hypo(int a, int b){
return (float) Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.root:
onBackPressed();
break;
}
}
@OnClick(R.id.img_search)
public void onClickSearch(){
search(editSearch.getText().toString());
}
@Override
public void onCookSearchSuccess(ArrayList<CookDetail> list, int totalPages){
CookSearchHistoryManager.getInstance().save();
CookSearchResultActivity.startActivity(getActivity(), searchKey, totalPages, list);
onBackPressed();
}
@Override
public void onCookSearchFaile(String msg){
ToastUtil.showToast(getActivity(), msg);
}
@Override
public void onCookSearchEmpty(){
ToastUtil.showToast(getActivity(), getString(R.string.toast_msg_no_more_search_data));
}
private void tagCookSearchHistoryClick(String key){
search(key);
}
private void tagCookSearchHistoryClean(){
CookSearchHistoryManager.getInstance().clean();
tagHistory.setVisibility(View.GONE);
}
private String searchKey = "";
private void search(String text){
//去除换行符
searchKey = text.replaceAll("\r|\n", "");
if(TextUtils.isEmpty(searchKey))
return ;
KeyboardUtil.showKeyboard(getActivity(), editSearch, false);
CookSearchHistoryManager.getInstance().add2Buffer(new CookSearchHistory(searchKey));
cookSearchPresenter.search(searchKey);
}
}