package net.coding.program.search;
import android.content.Context;
import android.graphics.Color;
import android.support.v4.view.ViewPager;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import net.coding.program.common.util.DensityUtil;
import net.coding.program.R;
import net.coding.program.common.SearchProjectCache;
import net.coding.program.common.adapter.SearchHistoryListAdapter;
import net.coding.program.common.ui.BaseActivity;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import java.util.ArrayList;
import java.util.List;
@EActivity(R.layout.activity_search_project)
public class SearchProjectActivity extends BaseActivity implements TextView.OnEditorActionListener, TextWatcher, View.OnClickListener, AdapterView.OnItemClickListener {
private static final String TAG = SearchProjectActivity.class.getSimpleName();
@ViewById
View emptyView;
@ViewById
net.coding.program.common.PagerSlidingTabStrip tabs;
@ViewById(R.id.pager)
ViewPager pager;
// footer
private TextView mSearchFooterClearAllView;
private View mSearchFooterDivider;
@ViewById
ListView emptyListView;
private InputMethodManager imm;
SearchHistoryListAdapter mSearchHistoryListAdapter;
// 历史搜索的记录
private List<String> mSearchHistoryList = new ArrayList<String>();
private String mSearchData = "";
private Button btnCancel;
private EditText editText;
@AfterViews
void init() {
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
btnCancel = (Button) this.findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(this);
editText = (EditText) this.findViewById(R.id.editText);
final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
.getDisplayMetrics());
pager.setPageMargin(pageMargin);
tabs.setTextSize(DensityUtil.dip2px(this, 16));
tabs.setTabPaddingLeftRight(DensityUtil.dip2px(this, 20));
setTabsValue();
emptyListView.setOnItemClickListener(this);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
initSearchFooterView();
mSearchHistoryListAdapter = new SearchHistoryListAdapter(this, mSearchHistoryList);
emptyListView.setAdapter(mSearchHistoryListAdapter);
emptyListView.setOnItemClickListener(this);
emptyListView.setVisibility(View.VISIBLE);
loadSearchCache();
editText.addTextChangedListener(this);
editText.setOnEditorActionListener(this);
}
private void setTabsValue() {
DisplayMetrics dm = getResources().getDisplayMetrics();
// 设置Tab是自动填充满屏幕的
tabs.setShouldExpand(true);
// 设置Tab的分割线是透明的
tabs.setDividerColor(Color.TRANSPARENT);
tabs.setTextSelectedColor(this.getResources().getColor(R.color.user_info_tags_bg_2));
// 设置Tab底部线的高度
tabs.setUnderlineHeight((int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 1, dm));
// 设置Tab Indicator的高度
tabs.setIndicatorHeight((int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 3, dm));
// 设置Tab标题文字的大小
tabs.setTextSize((int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP, 16, dm));
// 设置Tab Indicator的颜色
tabs.setIndicatorColor(Color.parseColor("#3bbd79"));
// 取消点击Tab时的背景色
tabs.setTabBackground(0);
}
private void initSearchFooterView() {
View footerView = LayoutInflater.from(this).inflate(R.layout.subject_search_history_list_footer, null);
mSearchFooterClearAllView = (TextView) footerView.findViewById(R.id.subject_search_hot_footer_clear);
mSearchFooterClearAllView.setOnClickListener(mOnClickListener);
mSearchFooterDivider = footerView.findViewById(R.id.subject_search_hot_footer_divider);
mSearchFooterDivider.setVisibility(View.GONE);
emptyListView.addFooterView(footerView, null, false);
}
private void loadSearchCache() {
mSearchHistoryList.clear();
mSearchHistoryList.addAll(SearchProjectCache.getInstance(this).getSearchCacheList());
notifySearchHistoryDataChanged();
}
private void notifySearchHistoryDataChanged() {
if (mSearchHistoryList.size() > 0)
showSearchClearView();
else
hideSearchClearView();
mSearchHistoryListAdapter.notifyDataSetChanged();
}
private void showSearchClearView() {
mSearchFooterClearAllView.setVisibility(View.VISIBLE);
}
private void hideSearchClearView() {
mSearchFooterClearAllView.setVisibility(View.GONE);
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.
overridePendingTransition(0, 0);
}
private void search(String condition) {
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
mSearchData = condition;
emptyListView.setVisibility(View.GONE);
tabs.setVisibility(View.VISIBLE);
pager.setVisibility(View.VISIBLE);
pager.setAdapter(new SearchFramgentAdapter(getSupportFragmentManager(), condition));
pager.setOffscreenPageLimit(8);
tabs.setViewPager(pager);
tabs.notifyDataSetChanged();
editText.setText(condition);
editText.setSelection(condition.length());
updateSearchResult();
SearchProjectCache.getInstance(SearchProjectActivity.this).add(mSearchData);
}
private void updateSearchResult() {
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
search(mSearchHistoryList.get(position));
}
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.subject_search_hot_footer_clear:
SearchProjectCache.getInstance(SearchProjectActivity.this).clearCache();
loadSearchCache();
break;
}
}
};
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnCancel:
onBackPressed();
break;
}
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
String tmp = editText.getText().toString();
if (tmp == null || TextUtils.isEmpty(tmp)) {
emptyListView.setVisibility(View.VISIBLE);
pager.setVisibility(View.GONE);
tabs.setVisibility(View.GONE);
mSearchData = "";
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
} else {
search(tmp);
}
return true;
}
return false;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s == null || TextUtils.isEmpty(s)) {
emptyListView.setVisibility(View.VISIBLE);
pager.setVisibility(View.GONE);
tabs.setVisibility(View.GONE);
mSearchData = "";
loadSearchCache();
}
}
}