package com.netease.nim.demo.main.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.support.v7.widget.SearchView.OnQueryTextListener; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import com.netease.nim.demo.R; import com.netease.nim.demo.session.SessionHelper; import com.netease.nim.demo.session.search.DisplayMessageActivity; import com.netease.nim.uikit.common.activity.UI; import com.netease.nim.uikit.common.util.string.StringUtil; import com.netease.nim.uikit.contact.core.item.AbsContactItem; import com.netease.nim.uikit.contact.core.item.ContactItem; import com.netease.nim.uikit.contact.core.item.ItemTypes; import com.netease.nim.uikit.contact.core.item.MsgItem; import com.netease.nim.uikit.contact.core.model.ContactDataAdapter; import com.netease.nim.uikit.contact.core.model.ContactGroupStrategy; import com.netease.nim.uikit.contact.core.provider.ContactDataProvider; import com.netease.nim.uikit.contact.core.query.IContactDataProvider; import com.netease.nim.uikit.contact.core.viewholder.ContactHolder; import com.netease.nim.uikit.contact.core.viewholder.LabelHolder; import com.netease.nim.uikit.contact.core.viewholder.MsgHolder; import com.netease.nim.uikit.model.ToolBarOptions; import com.netease.nimlib.sdk.search.model.MsgIndexRecord; /** * 全局搜索页面 * 支持通讯录搜索、消息全文检索 * <p/> * Created by huangjun on 2015/4/13. */ public class GlobalSearchActivity extends UI implements OnItemClickListener { private ContactDataAdapter adapter; private ListView lvContacts; private SearchView searchView; public static final void start(Context context) { Intent intent = new Intent(); intent.setClass(context, GlobalSearchActivity.class); context.startActivity(intent); } public boolean onCreateOptionsMenu(android.view.Menu menu) { getMenuInflater().inflate(R.menu.global_search_menu, menu); final MenuItem item = menu.findItem(R.id.action_search); getHandler().post(new Runnable() { @Override public void run() { MenuItemCompat.expandActionView(item); } }); MenuItemCompat.setOnActionExpandListener(item, new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem menuItem) { return true; } @Override public boolean onMenuItemActionCollapse(MenuItem menuItem) { finish(); return false; } }); searchView = (SearchView) MenuItemCompat.getActionView(item); searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { showKeyboard(false); return false; } @Override public boolean onQueryTextChange(String query) { if (StringUtil.isEmpty(query)) { lvContacts.setVisibility(View.GONE); } else { lvContacts.setVisibility(View.VISIBLE); } adapter.query(query); return true; } }); return true; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.global_search_result); ToolBarOptions options = new ToolBarOptions(); setToolBar(R.id.toolbar, options); lvContacts = (ListView) findViewById(R.id.searchResultList); lvContacts.setVisibility(View.GONE); SearchGroupStrategy searchGroupStrategy = new SearchGroupStrategy(); IContactDataProvider dataProvider = new ContactDataProvider(ItemTypes.FRIEND, ItemTypes.TEAM, ItemTypes.MSG); adapter = new ContactDataAdapter(this, searchGroupStrategy, dataProvider); adapter.addViewHolder(ItemTypes.LABEL, LabelHolder.class); adapter.addViewHolder(ItemTypes.FRIEND, ContactHolder.class); adapter.addViewHolder(ItemTypes.TEAM, ContactHolder.class); adapter.addViewHolder(ItemTypes.MSG, MsgHolder.class); lvContacts.setAdapter(adapter); lvContacts.setOnItemClickListener(this); lvContacts.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { showKeyboard(false); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); findViewById(R.id.global_search_root).setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { finish(); return true; } return false; } }); } @Override protected void onResume() { super.onResume(); if (searchView != null) { searchView.clearFocus(); } } private static class SearchGroupStrategy extends ContactGroupStrategy { public static final String GROUP_FRIEND = "FRIEND"; public static final String GROUP_TEAM = "TEAM"; public static final String GROUP_MSG = "MSG"; SearchGroupStrategy() { add(ContactGroupStrategy.GROUP_NULL, 0, ""); add(GROUP_TEAM, 1, "群组"); add(GROUP_FRIEND, 2, "好友"); add(GROUP_MSG, 3, "聊天记录"); } @Override public String belongs(AbsContactItem item) { switch (item.getItemType()) { case ItemTypes.FRIEND: return GROUP_FRIEND; case ItemTypes.TEAM: return GROUP_TEAM; case ItemTypes.MSG: return GROUP_MSG; default: return null; } } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { AbsContactItem item = (AbsContactItem) adapter.getItem(position); switch (item.getItemType()) { case ItemTypes.TEAM: { SessionHelper.startTeamSession(this, ((ContactItem) item).getContact().getContactId()); break; } case ItemTypes.FRIEND: { SessionHelper.startP2PSession(this, ((ContactItem) item).getContact().getContactId()); break; } case ItemTypes.MSG: { MsgIndexRecord msgIndexRecord = ((MsgItem) item).getRecord(); if (msgIndexRecord.getCount() > 1) { GlobalSearchDetailActivity2.start(this, msgIndexRecord); } else { DisplayMessageActivity.start(this, msgIndexRecord.getMessage()); } break; } default: break; } } }