package com.gh.gamecenter; import android.app.ActionBar.LayoutParams; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import com.gh.base.BaseFragmentActivity; import com.gh.common.constant.Config; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; import com.gh.gamecenter.db.SearchHistoryDao; import com.gh.gamecenter.eventbus.EBSearch; import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.manager.SystemBarTintManager; import com.gh.gamecenter.manager.SystemBarTintManager.SystemBarConfig; import com.gh.gamecenter.search.Search1DetailFragment; import com.gh.gamecenter.search.Search2GameListFragment; import com.gh.gamecenter.search.Search3HistoryFragment; import java.util.HashMap; import java.util.List; import java.util.Map; public class SearchActivity extends BaseFragmentActivity { private Search1DetailFragment game_detail_fragment; private Search2GameListFragment game_list_fragment; private Search3HistoryFragment search_history_fragment; private RelativeLayout searchBack; private EditText searchInput; private ImageView searchCancel; private TextView searchButton; private SearchHistoryDao dao; private TextWatcher mTextWatcher; private String searchKey; private int currentTab; private boolean isHistorySearch; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1){ setResultPresentModel(1); } } }; @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("currentTab", currentTab); outState.putString("searchKey", searchKey); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View contentView = View.inflate(this, R.layout.activity_search, null); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { setTheme(R.style.AppTheme); setTranslucentStatus(true); SystemBarTintManager tintManager = new SystemBarTintManager(this); tintManager.setStatusBarTintEnabled(true); tintManager.setStatusBarTintResource(R.color.search_theme_colors); SystemBarConfig config = tintManager.getConfig(); contentView.setPadding(0, config.getPixelInsetTop(false), 0, config.getPixelInsetBottom()); } setContentView(contentView); dao = new SearchHistoryDao(this); boolean isFromHome = getIntent().getBooleanExtra("clicked", false); String hint = getIntent().getStringExtra("hint"); setActionBarLayout(hint, isFromHome); if (savedInstanceState != null) { currentTab = savedInstanceState.getInt("currentTab", 0); searchKey = savedInstanceState.getString("searchKey", null); if (TextUtils.isEmpty(searchKey)) { currentTab = 0; } else { searchInput.setText(searchKey); searchInput.setSelection(searchInput.getText().length()); } } else { currentTab = 0; if (isFromHome && !TextUtils.isEmpty(hint)) { searchKey = hint; currentTab = 2; } } setResultPresentModel(currentTab); searchInput.addTextChangedListener(mTextWatcher); } public void setActionBarLayout(final String hint, final boolean isFromHome) { int actionbar_height = getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE).getInt("actionbar_height", DisplayUtils.dip2px(getApplicationContext(), 48)); LinearLayout reuse_actionbar = (LinearLayout) findViewById(R.id.search_actionbar); LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, actionbar_height); reuse_actionbar.setLayoutParams(lparams); searchInput = (EditText) findViewById(R.id.etSearch); searchInput.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); String newSearchKey = searchInput.getText().toString().trim(); if (newSearchKey.length() < 1) { if (!TextUtils.isEmpty(hint)) { newSearchKey = searchInput.getHint().toString(); searchInput.setText(hint); searchInput.setSelection(searchInput.getText().length()); } } if (!newSearchKey.equals(searchKey) || currentTab != 2) { searchKey = newSearchKey; if (!TextUtils.isEmpty(searchKey)) { setResultPresentModel(2); dao.add(searchKey); } else { toast("请输入搜索内容"); } } } return false; } }); searchButton = (TextView) findViewById(R.id.btnSearch); searchCancel = (ImageView) findViewById(R.id.ivDeleteText); searchBack = (RelativeLayout) findViewById(R.id.btnGoBack); if (isFromHome && !TextUtils.isEmpty(hint)) { searchInput.setText(hint); searchInput.setSelection(searchInput.getText().length()); } else if (!TextUtils.isEmpty(hint)) { searchInput.setHint(hint); } else { searchInput.setHint("搜索游戏..."); } searchButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); String newSearchKey = searchInput.getText().toString().trim(); if (newSearchKey.length() < 1) { if (!TextUtils.isEmpty(hint)) { newSearchKey = searchInput.getHint().toString(); searchInput.setText(hint); searchInput.setSelection(searchInput.getText().length()); } } if (!newSearchKey.equals(searchKey) || currentTab != 2) { searchKey = newSearchKey; if (!TextUtils.isEmpty(searchKey)) { setResultPresentModel(2); dao.add(searchKey); isHistorySearch = false; } else { toast("请输入搜索内容"); } } } }); searchCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { searchCancel.setVisibility(View.GONE); searchInput.setText(""); } }); mTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() > 0) { searchCancel.setVisibility(View.VISIBLE); } else { searchCancel.setVisibility(View.GONE); } } @Override public void afterTextChanged(Editable s) { String newSearchKey = s.toString().trim(); if (!newSearchKey.equals(searchKey)) { handler.removeMessages(1); searchKey = newSearchKey; if (searchKey.length() < 1) { setResultPresentModel(0); } else if (!isHistorySearch){ handler.sendEmptyMessageDelayed(1,300); } } } }; searchBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); } private void setResultPresentModel(int model) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); hideFragments(transaction); switch (model) { case 0: if (search_history_fragment == null) { List list = getSupportFragmentManager().getFragments(); if (list != null) { for (Fragment fragment : list) { if (fragment.getClass().equals(Search3HistoryFragment.class)) { transaction.remove(fragment); break; } } } } else { transaction.remove(search_history_fragment); } search_history_fragment = new Search3HistoryFragment(); transaction.add(R.id.search_result, search_history_fragment); currentTab = 0; break; case 1: if (game_list_fragment == null) { List list = getSupportFragmentManager().getFragments(); if (list != null) { for (Fragment fragment : list) { if (fragment.getClass().equals(Search2GameListFragment.class)) { transaction.remove(fragment); break; } } } } else { transaction.remove(game_list_fragment); } game_list_fragment = new Search2GameListFragment(); game_list_fragment.setKey(searchKey); transaction.add(R.id.search_result, game_list_fragment); currentTab = 1; break; case 2: DataUtils.onEvent(SearchActivity.this, "搜索页面", searchKey); Map map = new HashMap(); map.put("key", searchKey); map.put("from", "搜索页面"); map.put("createdOn", System.currentTimeMillis() / 1000); DataCollectionManager.onEvent(this, "search", map); if (game_detail_fragment == null) { List list = getSupportFragmentManager().getFragments(); if (list != null) { for (Fragment fragment : list) { if (fragment.getClass().equals(Search1DetailFragment.class)) { transaction.remove(fragment); break; } } } } else { transaction.remove(game_detail_fragment); } game_detail_fragment = new Search1DetailFragment(); game_detail_fragment.setKey(searchKey); transaction.add(R.id.search_result, game_detail_fragment); currentTab = 2; break; default: break; } transaction.commit(); } private void hideFragments(FragmentTransaction transaction) { if (game_detail_fragment != null) { transaction.hide(game_detail_fragment); } if (game_list_fragment != null) { transaction.hide(game_list_fragment); } if (search_history_fragment != null) { transaction.hide(search_history_fragment); } List list = getSupportFragmentManager().getFragments(); if (list != null) { for (Fragment fragment : list) { transaction.hide(fragment); } } } public void onEvent(EBSearch search) { isHistorySearch = true; String str = search.getKey(); searchInput.setText(str); searchInput.setFocusable(true); searchInput.requestFocus(); searchInput.setSelection(str.length()); if (search.isSearch()) { searchButton.performClick(); } } @Override protected void onDestroy() { super.onDestroy(); game_detail_fragment = null; game_list_fragment = null; search_history_fragment = null; searchBack = null; searchInput = null; searchCancel = null; searchButton = null; dao = null; searchKey = null; } }