package net.dev123.yibo; import net.dev123.commons.Paging; import net.dev123.commons.util.StringUtil; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.theme.ThemeUtil; import net.dev123.yibo.service.adapter.StatusSearchResultAdapter; import net.dev123.yibo.service.adapter.UserSearchResultAdapter; import net.dev123.yibo.service.listener.GoBackClickListener; import net.dev123.yibo.service.listener.GoHomeClickListener; import net.dev123.yibo.service.listener.MicroBlogContextMenuListener; import net.dev123.yibo.service.listener.MicroBlogItemClickListener; import net.dev123.yibo.service.listener.SearchTextWatch; import net.dev123.yibo.service.listener.SocialGraphItemClickListener; import net.dev123.yibo.service.listener.StatusRecyclerListener; import net.dev123.yibo.service.listener.UserRecyclerListener; import net.dev123.yibo.service.task.SearchTask; import net.dev123.yibo.widget.TabButton; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.content.res.ColorStateList; import android.net.Uri; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class SearchActivity extends BaseActivity { public static final String SEARCH_SUGGEST_ACTION = "yibo.search.suggest.VIEW"; private ArrayAdapter<?> resultAdapter = null; private ListView lvSearchResult = null; private View listFooter = null; private YiBoApplication yibo; private TabButton tabButton; private Button btnSearchStatus; private Button btnSearchUser; private String keyword; private Paging<?> paging; private boolean isExecuteQuery; private int searchCatalog; private StatusRecyclerListener statusRecyclerListener; private UserRecyclerListener userRecyclerListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); yibo = (YiBoApplication) getApplication(); //对yibo://topic/#xxxx# 地址的解析 Intent intent = getIntent(); Uri uri = intent.getData(); if (uri != null && Constants.URI_TOPIC.getScheme().equals(uri.getScheme()) && Constants.URI_TOPIC.getAuthority().equals(uri.getAuthority())) { keyword = uri.toString().replace(Constants.URI_TOPIC.toString(), ""); searchCatalog = SearchCatalogProvider.SEARCH_CATALOG_STATUS; isExecuteQuery = true; } //来自Searchable对话框查询 if (Intent.ACTION_SEARCH.equals(intent.getAction())) { keyword = intent.getStringExtra(SearchManager.QUERY); searchCatalog = SearchCatalogProvider.SEARCH_CATALOG_STATUS; isExecuteQuery = true; } else if (SEARCH_SUGGEST_ACTION.equals(intent.getAction()) && uri != null) { String rowId = uri.getLastPathSegment(); keyword = intent.getStringExtra(SearchManager.EXTRA_DATA_KEY); searchCatalog = SearchCatalogProvider.SEARCH_CATALOG_STATUS; try { searchCatalog = Integer.parseInt(rowId); } catch(Exception e) {} isExecuteQuery = true; } initComponents(); bindEvent(); } private void initComponents() { LinearLayout llRoot = (LinearLayout)this.findViewById(R.id.llRoot); LinearLayout llHeaderBase = (LinearLayout)findViewById(R.id.llHeaderBase); LinearLayout llHeaderSearch = (LinearLayout)findViewById(R.id.llHeaderSearch); EditText etKeyWord = (EditText) findViewById(R.id.etKeyWord); Button btnSearch = (Button) findViewById(R.id.btnSearch); btnSearchStatus = (Button) findViewById(R.id.btnSearchStatus); btnSearchUser = (Button) findViewById(R.id.btnSearchUser); lvSearchResult = (ListView) findViewById(R.id.lvSearchResult); lvSearchResult.setFastScrollEnabled(yibo.isSliderEnabled()); ThemeUtil.setRootBackground(llRoot); ThemeUtil.setSecondaryHeader(llHeaderBase); llHeaderSearch.setBackgroundDrawable(theme.getDrawable("bg_header_corner_search")); int padding6 = theme.dip2px(6); int padding8 = theme.dip2px(8); llHeaderSearch.setPadding(padding6, padding8, padding6, padding8); ThemeUtil.setListViewStyle(lvSearchResult); etKeyWord.setBackgroundDrawable(theme.getDrawable("bg_input_frame_left_half")); btnSearch.setBackgroundDrawable(theme.getDrawable("selector_btn_search")); btnSearchStatus.setBackgroundDrawable(theme.getDrawable("selector_tab_toggle_left")); btnSearchStatus.setPadding(0, 0, 0, 0); ColorStateList selectorBtnTab = theme.getColorStateList("selector_btn_tab"); btnSearchStatus.setTextColor(selectorBtnTab); btnSearchStatus.setGravity(Gravity.CENTER); btnSearchUser.setBackgroundDrawable(theme.getDrawable("selector_tab_toggle_right")); btnSearchUser.setPadding(0, 0, 0, 0); btnSearchUser.setTextColor(selectorBtnTab); btnSearchUser.setGravity(Gravity.CENTER); } private void bindEvent() { Button btnBack = (Button) this.findViewById(R.id.btnBack); btnBack.setOnClickListener(new GoBackClickListener()); Button btnOperate = (Button) this.findViewById(R.id.btnOperate); btnOperate.setVisibility(View.VISIBLE); btnOperate.setText(R.string.btn_home); btnOperate.setOnClickListener(new GoHomeClickListener()); TextView tvTitle = (TextView) findViewById(R.id.tvTitle); tvTitle.setText(R.string.title_search); final Button btnSearch = (Button) findViewById(R.id.btnSearch); final EditText etKeyWord = (EditText) findViewById(R.id.etKeyWord); etKeyWord.addTextChangedListener(new SearchTextWatch(this)); tabButton = new TabButton(); tabButton.addButton(btnSearchStatus); tabButton.addButton(btnSearchUser); tabButton.toggleButton(btnSearchStatus); statusRecyclerListener = new StatusRecyclerListener(); userRecyclerListener = new UserRecyclerListener(); //默认搜索微博 lvSearchResult.setRecyclerListener(statusRecyclerListener); btnSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { keyword = etKeyWord.getText().toString().trim(); if (StringUtil.isBlank(keyword)) { Toast.makeText(v.getContext(), R.string.msg_search_no_keyword, Toast.LENGTH_LONG).show(); return; } if (!btnSearchStatus.isEnabled()) { resultAdapter = new StatusSearchResultAdapter(SearchActivity.this); lvSearchResult.setRecyclerListener(statusRecyclerListener); bindStatusItemEvent(); } else if (!btnSearchUser.isEnabled()) { resultAdapter = new UserSearchResultAdapter(SearchActivity.this); lvSearchResult.setRecyclerListener(userRecyclerListener); bindUserItemEvent(); } InputMethodManager inputMethodManager = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0); showMoreFooter(); lvSearchResult.setAdapter(resultAdapter); paging = new Paging(); executeTask(); } }); if (isExecuteQuery) { if (searchCatalog == SearchCatalogProvider.SEARCH_CATALOG_STATUS) { btnSearchStatus.performClick(); } else if (searchCatalog == SearchCatalogProvider.SEARCH_CATALOG_USER) { btnSearchUser.performClick(); } etKeyWord.setText(keyword); btnSearch.performClick(); //hide input method getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); } } private void bindStatusItemEvent() { MicroBlogItemClickListener itemClickListener = new MicroBlogItemClickListener(this); lvSearchResult.setOnItemClickListener(itemClickListener); MicroBlogContextMenuListener contextMenuListener = new MicroBlogContextMenuListener(lvSearchResult); lvSearchResult.setOnCreateContextMenuListener(contextMenuListener); lvSearchResult.setOnItemClickListener(itemClickListener); } private void bindUserItemEvent() { SocialGraphItemClickListener itemClickListener = new SocialGraphItemClickListener(this); lvSearchResult.setOnItemClickListener(itemClickListener); lvSearchResult.setOnCreateContextMenuListener(null); } private void executeTask() { new SearchTask(this, paging, keyword, resultAdapter).execute(); } public void showLoadingFooter() { if (listFooter != null) { lvSearchResult.removeFooterView(listFooter); } listFooter = getLayoutInflater().inflate(R.layout.list_item_loading, null); ThemeUtil.setListViewLoading(listFooter); lvSearchResult.addFooterView(listFooter); } public void showMoreFooter() { if (listFooter != null) { lvSearchResult.removeFooterView(listFooter); } listFooter = getLayoutInflater().inflate(R.layout.list_item_more, null); ThemeUtil.setListViewMore(listFooter); listFooter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { executeTask(); } }); lvSearchResult.addFooterView(listFooter); } public void showNoMoreFooter() { if (listFooter != null) { lvSearchResult.removeFooterView(listFooter); } listFooter = getLayoutInflater().inflate(R.layout.list_item_more, null); ThemeUtil.setListViewMore(listFooter); TextView tvFooter = (TextView) listFooter.findViewById(R.id.tvFooter); if (resultAdapter.getCount() == 0) { tvFooter.setText(R.string.label_search_no_result); } else { tvFooter.setText(R.string.label_no_more); } lvSearchResult.addFooterView(listFooter); } }