package cn.rongcloud.im.ui.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.ForegroundColorSpan;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import cn.rongcloud.im.App;
import cn.rongcloud.im.R;
import cn.rongcloud.im.SealConst;
import cn.rongcloud.im.SealUserInfoManager;
import cn.rongcloud.im.db.DBManager;
import cn.rongcloud.im.db.Friend;
import cn.rongcloud.im.db.FriendDao;
import cn.rongcloud.im.db.GroupMember;
import cn.rongcloud.im.db.GroupMemberDao;
import cn.rongcloud.im.db.Groups;
import cn.rongcloud.im.db.GroupsDao;
import cn.rongcloud.im.model.SealSearchConversationResult;
import cn.rongcloud.im.model.SearchResult;
import cn.rongcloud.im.server.pinyin.CharacterParser;
import cn.rongcloud.im.server.widget.SelectableRoundedImageView;
import cn.rongcloud.im.utils.CommonUtils;
import de.greenrobot.dao.query.QueryBuilder;
import io.rong.imageloader.core.ImageLoader;
import io.rong.imkit.RongIM;
import io.rong.imkit.userInfoCache.RongUserInfoManager;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.SearchConversationResult;
import io.rong.imlib.model.UserInfo;
/**
* Created by tiankui on 16/8/31.
*/
public class SealSearchActivity extends Activity {
private static final int SEARCH_TYPE_FLAG = 1;
private EditText mSearchEditText;
private LinearLayout mFriendListLinearLayout;
private ListView mFriendListView;
private LinearLayout mMoreFriendLinearLayout;
private LinearLayout mGroupListLinearLayout;
private ListView mGroupsListView;
private LinearLayout mMoreGroupsLinearLayout;
private TextView mSearchNoResultsTextView;
private ImageView mPressBackImageView;
private LinearLayout mChattingRecordsLinearLayout;
private LinearLayout mMoreChattingRecordsLinearLayout;
private ListView mChattingRecordsListView;
private CharacterParser mCharacterParser;
private String mFilterString;
private AsyncTask mAsyncTask;
private ThreadPoolExecutor mExecutor;
private ArrayList<Friend> mFilterFriendList;
private ArrayList<String> mFilterGroupId;
private List<SearchConversationResult> mSearchConversationResultsList;
private ArrayList<SearchConversationResult> mSearchConversationResultsArrayList;
private static final String SQL_DISTINCT_GROUP_ID = "SELECT DISTINCT " + GroupMemberDao.Properties.GroupId.columnName + " FROM " + GroupMemberDao.TABLENAME;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seal_search);
initView();
initData();
}
private void initView() {
mSearchEditText = (EditText) findViewById(R.id.ac_et_search);
mFriendListLinearLayout = (LinearLayout) findViewById(R.id.ac_ll_filtered_friend_list);
mFriendListView = (ListView) findViewById(R.id.ac_lv_filtered_friends_list);
mMoreFriendLinearLayout = (LinearLayout) findViewById(R.id.ac_ll_more_friends);
mGroupListLinearLayout = (LinearLayout) findViewById(R.id.ac_ll_filtered_group_list);
mGroupsListView = (ListView) findViewById(R.id.ac_lv_filtered_groups_list);
mMoreGroupsLinearLayout = (LinearLayout) findViewById(R.id.ac_ll_more_groups);
mSearchNoResultsTextView = (TextView) findViewById(R.id.ac_tv_search_no_results);
mPressBackImageView = (ImageView) findViewById(R.id.ac_iv_press_back);
mChattingRecordsLinearLayout = (LinearLayout) findViewById(R.id.ac_ll_filtered_chatting_records_list);
mMoreChattingRecordsLinearLayout = (LinearLayout) findViewById(R.id.ac_ll_more_chatting_records);
mChattingRecordsListView = (ListView) findViewById(R.id.ac_lv_filtered_chatting_records_list);
mFriendListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Object selectObject = parent.getItemAtPosition(position);
if (selectObject instanceof Friend) {
Friend friend = (Friend) selectObject;
if (!TextUtils.isEmpty(friend.getDisplayName())) {
RongIM.getInstance().startPrivateChat(SealSearchActivity.this, friend.getUserId(), friend.getDisplayName());
} else {
RongIM.getInstance().startPrivateChat(SealSearchActivity.this, friend.getUserId(), friend.getName());
}
}
}
});
mGroupsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Object selectObject = parent.getItemAtPosition(position);
if (selectObject instanceof String) {
String groupId = (String) selectObject;
Groups groupInfo = DBManager.getInstance().getDaoSession().getGroupsDao().queryBuilder().where(GroupsDao.Properties.GroupsId.eq(groupId)).unique();
if (groupInfo != null) {
RongIM.getInstance().startGroupChat(SealSearchActivity.this, groupInfo.getGroupsId(), groupInfo.getName());
}
}
}
});
mChattingRecordsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Object selectObj = parent.getItemAtPosition(position);
if (selectObj instanceof SealSearchConversationResult) {
SealSearchConversationResult result = (SealSearchConversationResult) selectObj;
int count = result.getMatchCount();
Conversation conversation = result.getConversation();
if (count == 1) {
RongIM.getInstance().startConversation(SealSearchActivity.this, conversation.getConversationType(), conversation.getTargetId(), result.getTitle());
} else {
Intent intent = new Intent(SealSearchActivity.this, SealSearchChattingDetailActivity.class);
intent.putExtra("filterString", mFilterString);
intent.putExtra("searchConversationResult", result);
intent.putExtra("flag", SEARCH_TYPE_FLAG);
startActivity(intent);
}
}
}
});
mMoreFriendLinearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SealSearchActivity.this, SealSearchMoreFriendsActivity.class);
intent.putExtra("filterString", mFilterString);
intent.putParcelableArrayListExtra("filterFriendList", mFilterFriendList);
startActivity(intent);
}
});
mMoreGroupsLinearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SealSearchActivity.this, SealSearchMoreGroupActivity.class);
intent.putExtra("filterString", mFilterString);
intent.putStringArrayListExtra("filterGroupId", mFilterGroupId);
startActivity(intent);
}
});
mMoreChattingRecordsLinearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SealSearchActivity.this, SealSearchMoreChattingRecordsActivity.class);
intent.putExtra("filterString", mFilterString);
intent.putParcelableArrayListExtra("conversationRecords", mSearchConversationResultsArrayList);
startActivity(intent);
}
});
mSearchEditText.addTextChangedListener(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) {
mFilterFriendList = new ArrayList<>();
mFilterGroupId = new ArrayList<>();
mSearchConversationResultsList = new ArrayList<>();
mFilterString = s.toString();
mAsyncTask = new AsyncTask<String, Void, SearchResult>() {
@Override
protected void onPreExecute() {
}
@Override
protected SearchResult doInBackground(String... params) {
return filterInfo(mFilterString);
}
@Override
protected void onPostExecute(SearchResult searchResult) {
if (searchResult.getFilterStr().equals(mFilterString)) {
List<Friend> filterFriendList = searchResult.getFilterFriendList();
for (Friend friend : filterFriendList) {
mFilterFriendList.add(friend);
}
Map<String, List<GroupMember>> filterGroupNameListMap = searchResult.getFilterGroupNameListMap();
Map<String, List<GroupMember>> filterGroupMemberNameListMap = searchResult.getFilterGroupMemberNameListMap();
List<String> filterGroupId = searchResult.getFilterGroupId();
for (String groupId : filterGroupId) {
mFilterGroupId.add(groupId);
}
if (mFilterFriendList.size() == 0 && mFilterGroupId.size() == 0 && mSearchConversationResultsList.size() == 0) {
if (mFilterString.equals("")) {
mSearchNoResultsTextView.setVisibility(View.GONE);
} else {
mSearchNoResultsTextView.setVisibility(View.VISIBLE);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
spannableStringBuilder.append(getResources().getString(R.string.ac_search_no_result_pre));
SpannableStringBuilder colorFilterStr = new SpannableStringBuilder(mFilterString);
colorFilterStr.setSpan(new ForegroundColorSpan(Color.parseColor("#0099ff")), 0, mFilterString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableStringBuilder.append(colorFilterStr);
spannableStringBuilder.append(getResources().getString(R.string.ac_search_no_result_suffix));
mSearchNoResultsTextView.setText(spannableStringBuilder);
}
} else {
mSearchNoResultsTextView.setVisibility(View.GONE);
}
if (mFilterFriendList.size() > 0) {
mFriendListLinearLayout.setVisibility(View.VISIBLE);
FriendListAdapter friendListAdapter = new FriendListAdapter(mFilterFriendList);
mFriendListView.setAdapter(friendListAdapter);
if (mFilterFriendList.size() > 3) {
mMoreFriendLinearLayout.setVisibility(View.VISIBLE);
} else {
mMoreFriendLinearLayout.setVisibility(View.GONE);
}
} else {
mFriendListLinearLayout.setVisibility(View.GONE);
}
if (mFilterGroupId.size() > 0) {
mGroupListLinearLayout.setVisibility(View.VISIBLE);
GroupListAdapter groupListAdapter = new GroupListAdapter(mFilterGroupId, filterGroupNameListMap, filterGroupMemberNameListMap);
mGroupsListView.setAdapter(groupListAdapter);
if (mFilterGroupId.size() > 3) {
mMoreGroupsLinearLayout.setVisibility(View.VISIBLE);
} else {
mMoreGroupsLinearLayout.setVisibility(View.GONE);
}
} else {
mGroupListLinearLayout.setVisibility(View.GONE);
}
}
}
} .executeOnExecutor(mExecutor, s.toString());
RongIMClient.getInstance().searchConversations(mFilterString,
new Conversation.ConversationType[] {Conversation.ConversationType.PRIVATE, Conversation.ConversationType.GROUP},
new String[] {"RC:TxtMsg", "RC:ImgTextMsg", "RC:FileMsg"}, new RongIMClient.ResultCallback<List<SearchConversationResult>>() {
@Override
public void onSuccess(List<SearchConversationResult> searchConversationResults) {
mSearchConversationResultsList = searchConversationResults;
mSearchConversationResultsArrayList = new ArrayList<>();
for (SearchConversationResult result : searchConversationResults) {
mSearchConversationResultsArrayList.add(result);
}
if (searchConversationResults.size() > 0) {
mChattingRecordsLinearLayout.setVisibility(View.VISIBLE);
if (searchConversationResults.size() > 3) {
mMoreChattingRecordsLinearLayout.setVisibility(View.VISIBLE);
} else {
mMoreChattingRecordsLinearLayout.setVisibility(View.GONE);
}
} else {
mChattingRecordsLinearLayout.setVisibility(View.GONE);
}
if (mFilterString.equals("")) {
mChattingRecordsLinearLayout.setVisibility(View.GONE);
mMoreChattingRecordsLinearLayout.setVisibility(View.GONE);
}
if (mFilterFriendList.size() == 0 && mFilterGroupId.size() == 0 && mSearchConversationResultsList.size() == 0) {
if (mFilterString.equals("")) {
mSearchNoResultsTextView.setVisibility(View.GONE);
} else {
mSearchNoResultsTextView.setVisibility(View.VISIBLE);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
spannableStringBuilder.append(getResources().getString(R.string.ac_search_no_result_pre));
SpannableStringBuilder colorFilterStr = new SpannableStringBuilder(mFilterString);
colorFilterStr.setSpan(new ForegroundColorSpan(Color.parseColor("#0099ff")), 0, mFilterString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableStringBuilder.append(colorFilterStr);
spannableStringBuilder.append(getResources().getString(R.string.ac_search_no_result_suffix));
mSearchNoResultsTextView.setText(spannableStringBuilder);
}
} else {
mSearchNoResultsTextView.setVisibility(View.GONE);
}
ChattingRecordsAdapter chattingRecordsAdapter = new ChattingRecordsAdapter(mSearchConversationResultsList);
mChattingRecordsListView.setAdapter(chattingRecordsAdapter);
}
@Override
public void onError(RongIMClient.ErrorCode e) {
if (mFilterString.equals("")) {
mChattingRecordsLinearLayout.setVisibility(View.GONE);
mMoreChattingRecordsLinearLayout.setVisibility(View.GONE);
}
if (mFilterFriendList.size() == 0 && mFilterGroupId.size() == 0 && mSearchConversationResultsList.size() == 0) {
if (mFilterString.equals("")) {
mSearchNoResultsTextView.setVisibility(View.GONE);
} else {
mSearchNoResultsTextView.setVisibility(View.VISIBLE);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
spannableStringBuilder.append(getResources().getString(R.string.ac_search_no_result_pre));
SpannableStringBuilder colorFilterStr = new SpannableStringBuilder(mFilterString);
colorFilterStr.setSpan(new ForegroundColorSpan(Color.parseColor("#0099ff")), 0, mFilterString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableStringBuilder.append(colorFilterStr);
spannableStringBuilder.append(getResources().getString(R.string.ac_search_no_result_suffix));
mSearchNoResultsTextView.setText(spannableStringBuilder);
}
} else {
mSearchNoResultsTextView.setVisibility(View.GONE);
}
}
});
}
@Override
public void afterTextChanged(Editable s) {
}
});
mSearchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(mSearchEditText.getWindowToken(), 0);
filterInfo(String.valueOf(mSearchEditText.getText()));
return true;
}
return false;
}
});
mSearchEditText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int DRAWABLE_RIGHT = 2;
if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getRawX() >= (mSearchEditText.getRight() - 2 * mSearchEditText.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
filterInfo("");
mSearchEditText.setText("");
mSearchEditText.clearFocus();
return true;
}
}
return false;
}
});
mPressBackImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SealSearchActivity.this.finish();
}
});
}
private void initData() {
mExecutor = new ThreadPoolExecutor(3, 5, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
mCharacterParser = CharacterParser.getInstance();
}
private synchronized SearchResult filterInfo(String filterStr) {
List<Friend> filterFriendList = new ArrayList<>();
List<String> filterGroupId = new ArrayList<>();
Map<String, List<GroupMember>> filterGroupNameListMap = new HashMap<>();
Map<String, List<GroupMember>> filterGroupMemberNameListMap = new HashMap<>();
SearchResult searchResult = new SearchResult();
if (filterStr.equals("")) {
SearchResult result = new SearchResult();
result.setFilterStr("");
result.setFilterFriendList(filterFriendList);
result.setFilterGroupId(filterGroupId);
result.setFilterGroupNameListMap(filterGroupNameListMap);
result.setFilterGroupNameListMap(filterGroupMemberNameListMap);
return result;
}
if (filterStr.contains("'")) {
SearchResult result = new SearchResult();
result.setFilterStr(filterStr);
result.setFilterFriendList(filterFriendList);
result.setFilterGroupId(filterGroupId);
result.setFilterGroupNameListMap(filterGroupNameListMap);
result.setFilterGroupNameListMap(filterGroupMemberNameListMap);
return result;
}
/**
* 从数据库里边查询符合条件的数据
*/
QueryBuilder queryBuilder = DBManager.getInstance().getDaoSession().getFriendDao().queryBuilder();
filterFriendList = queryBuilder.where(queryBuilder.or(FriendDao.Properties.Name.like("%" + filterStr + "%"),
FriendDao.Properties.DisplayName.like("%" + filterStr + "%"),
FriendDao.Properties.NameSpelling.like(filterStr + "%"),
FriendDao.Properties.DisplayNameSpelling.like(filterStr + "%"))).orderAsc(FriendDao.Properties.DisplayNameSpelling, FriendDao.Properties.NameSpelling).build().list();
Cursor cursor = DBManager.getInstance().getDaoSession().getDatabase().rawQuery(SQL_DISTINCT_GROUP_ID
+ " WHERE " + GroupMemberDao.Properties.GroupName.columnName + " LIKE " + "'" + "%" + filterStr + "%" + "'" + " or "
+ GroupMemberDao.Properties.GroupNameSpelling.columnName + " like " + "'" + filterStr + "%" + "'" + " or "
+ GroupMemberDao.Properties.Name.columnName + " like " + "'" + "%" + filterStr + "%" + "'" + " or "
+ GroupMemberDao.Properties.NameSpelling.columnName + " like " + "'" + filterStr + "%" + "'" + " or "
+ GroupMemberDao.Properties.DisplayName.columnName + " like " + "'" + "%" + filterStr + "%" + "'" + " or "
+ GroupMemberDao.Properties.DisplayNameSpelling.columnName + " like " + "'" + filterStr + "%" + "'", null);
try {
if (cursor.moveToFirst()) {
do {
filterGroupId.add(cursor.getString(0));
} while (cursor.moveToNext());
}
} finally {
cursor.close();
}
for (String groupId : filterGroupId) {
QueryBuilder groupNameQueryBuilder = DBManager.getInstance().getDaoSession().getGroupMemberDao().queryBuilder();
List<GroupMember> filterGroupNameList = groupNameQueryBuilder.where(GroupMemberDao.Properties.GroupId.eq(groupId),
groupNameQueryBuilder.or(GroupMemberDao.Properties.GroupName.like("%" + filterStr + "%"),
GroupMemberDao.Properties.GroupNameSpelling.like(filterStr + "%"))).orderAsc(GroupMemberDao.Properties.GroupNameSpelling).build().list();
QueryBuilder groupMemberNameQueryBuilder = DBManager.getInstance().getDaoSession().getGroupMemberDao().queryBuilder();
List<GroupMember> filterGroupMemberNameList = groupMemberNameQueryBuilder.where(GroupMemberDao.Properties.GroupId.eq(groupId),
groupMemberNameQueryBuilder.or(GroupMemberDao.Properties.Name.like("%" + filterStr + "%"),
GroupMemberDao.Properties.NameSpelling.like(filterStr + "%"),
GroupMemberDao.Properties.DisplayName.like("%" + filterStr + "%"),
GroupMemberDao.Properties.DisplayNameSpelling.like(filterStr + "%"))
).orderAsc(GroupMemberDao.Properties.NameSpelling, GroupMemberDao.Properties.DisplayNameSpelling).build().list();
if (filterGroupNameList.size() != 0) {
filterGroupNameListMap.put(groupId, filterGroupNameList);
} else {
filterGroupNameListMap.put(groupId, null);
}
if (filterGroupMemberNameList.size() != 0) {
filterGroupMemberNameListMap.put(groupId, filterGroupMemberNameList);
} else {
filterGroupMemberNameListMap.put(groupId, null);
}
}
searchResult.setFilterStr(filterStr);
searchResult.setFilterFriendList(filterFriendList);
searchResult.setFilterGroupId(filterGroupId);
searchResult.setFilterGroupNameListMap(filterGroupNameListMap);
searchResult.setFilterGroupMemberNameListMap(filterGroupMemberNameListMap);
return searchResult;
}
private class FriendListAdapter extends BaseAdapter {
private List<Friend> filterFriendList;
public FriendListAdapter(List<Friend> filterFriendList) {
this.filterFriendList = filterFriendList;
}
@Override
public int getCount() {
if (filterFriendList != null) {
return filterFriendList.size() > 3 ? 3 : filterFriendList.size();
}
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
Friend friendInfo = (Friend) getItem(position);
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = View.inflate(SealSearchActivity.this, R.layout.item_filter_friend_list, null);
viewHolder.portraitImageView = (SelectableRoundedImageView) convertView.findViewById(R.id.item_aiv_friend_image);
viewHolder.nameDisplayNameLinearLayout = (LinearLayout) convertView.findViewById(R.id.item_ll_friend_name);
viewHolder.displayNameTextView = (TextView) convertView.findViewById(R.id.item_tv_friend_display_name);
viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.item_tv_friend_name);
viewHolder.nameSingleTextView = (TextView) convertView.findViewById(R.id.item_tv_friend_name_single);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(friendInfo);
ImageLoader.getInstance().displayImage(portraitUri, viewHolder.portraitImageView, App.getOptions());
if (!TextUtils.isEmpty(friendInfo.getDisplayName())) {
viewHolder.nameSingleTextView.setVisibility(View.GONE);
viewHolder.nameDisplayNameLinearLayout.setVisibility(View.VISIBLE);
viewHolder.displayNameTextView.setText(mCharacterParser.getColoredDisplayName(mFilterString, friendInfo.getDisplayName()));
viewHolder.nameTextView.setText(mCharacterParser.getColoredName(mFilterString, friendInfo.getName()));
} else if (!TextUtils.isEmpty(friendInfo.getName())) {
viewHolder.nameDisplayNameLinearLayout.setVisibility(View.GONE);
viewHolder.nameSingleTextView.setVisibility(View.VISIBLE);
viewHolder.nameSingleTextView.setText(mCharacterParser.getColoredName(mFilterString, friendInfo.getName()));
}
return convertView;
}
@Override
public Object getItem(int position) {
if (filterFriendList == null)
return null;
if (position >= filterFriendList.size())
return null;
return filterFriendList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
class ViewHolder {
SelectableRoundedImageView portraitImageView;
LinearLayout nameDisplayNameLinearLayout;
TextView nameTextView;
TextView displayNameTextView;
TextView nameSingleTextView;
}
public class GroupListAdapter extends BaseAdapter {
private Map<String, List<GroupMember>> filterGroupNameListMap;
private Map<String, List<GroupMember>> filterGroupMemberNameListMap;
private List<String> filterGroupId;
public GroupListAdapter(List<String> filterGroupId, Map<String, List<GroupMember>> filterGroupNameListMap, Map<String, List<GroupMember>> filterGroupMemberNameListMap) {
this.filterGroupId = filterGroupId;
this.filterGroupNameListMap = filterGroupNameListMap;
this.filterGroupMemberNameListMap = filterGroupMemberNameListMap;
}
@Override
public int getCount() {
if (filterGroupId != null) {
return filterGroupId.size() > 3 ? 3 : filterGroupId.size();
}
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
GroupViewHolder viewHolder;
String groupId = (String) getItem(position);
Groups groupInfo = DBManager.getInstance().getDaoSession().getGroupsDao().queryBuilder().where(GroupsDao.Properties.GroupsId.eq(groupId)).unique();
if (convertView == null) {
viewHolder = new GroupViewHolder();
convertView = View.inflate(SealSearchActivity.this, R.layout.item_filter_group_list, null);
viewHolder.portraitImageView = (SelectableRoundedImageView) convertView.findViewById(R.id.item_iv_group_image);
viewHolder.nameDisplayNameLinearLayout = (LinearLayout) convertView.findViewById(R.id.item_ll_group_contains_member);
viewHolder.displayNameTextView = (TextView) convertView.findViewById(R.id.item_tv_group_name);
viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.item_tv_friend_display_name);
viewHolder.nameSingleTextView = (TextView) convertView.findViewById(R.id.item_tv_group_name_single);
convertView.setTag(viewHolder);
} else {
viewHolder = (GroupViewHolder) convertView.getTag();
}
if (groupInfo != null) {
String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(groupInfo);
ImageLoader.getInstance().displayImage(portraitUri, viewHolder.portraitImageView, App.getOptions());
List<GroupMember> filterGroupMemberNameList = filterGroupMemberNameListMap.get(groupId);
if (filterGroupNameListMap.get(groupId) != null) {
viewHolder.nameSingleTextView.setVisibility(View.VISIBLE);
viewHolder.nameDisplayNameLinearLayout.setVisibility(View.GONE);
viewHolder.nameSingleTextView.setText(mCharacterParser.getColoredGroupName(mFilterString, groupInfo.getName()));
} else if (filterGroupMemberNameList != null) {
viewHolder.nameDisplayNameLinearLayout.setVisibility(View.VISIBLE);
viewHolder.nameSingleTextView.setVisibility(View.GONE);
viewHolder.displayNameTextView.setText(groupInfo.getName());
viewHolder.nameTextView.setText(mCharacterParser.getColoredNameList(mFilterString, filterGroupMemberNameList));
}
}
return convertView;
}
@Override
public Object getItem(int position) {
if (filterGroupId == null)
return null;
if (position >= filterGroupId.size())
return null;
return filterGroupId.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
class GroupViewHolder {
SelectableRoundedImageView portraitImageView;
LinearLayout nameDisplayNameLinearLayout;
TextView nameTextView;
TextView displayNameTextView;
TextView nameSingleTextView;
}
private class ChattingRecordsAdapter extends BaseAdapter {
private List<SealSearchConversationResult> searchConversationResults;
public ChattingRecordsAdapter(List<SearchConversationResult> searchConversationResults) {
this.searchConversationResults= CommonUtils.convertSearchResult(searchConversationResults);
}
@Override
public int getCount() {
if (searchConversationResults != null) {
return searchConversationResults.size() > 3 ? 3 : searchConversationResults.size();
}
return 0;
}
@Override
public Object getItem(int position) {
if (searchConversationResults == null)
return null;
if (position >= searchConversationResults.size())
return null;
return searchConversationResults.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ChattingRecordsViewHolder viewHolder;
final SealSearchConversationResult searchResult = (SealSearchConversationResult) getItem(position);
final Conversation conversation = searchResult.getConversation();
int searchResultCount = searchResult.getMatchCount();
if (convertView == null) {
viewHolder = new ChattingRecordsViewHolder();
convertView = View.inflate(SealSearchActivity.this, R.layout.item_filter_chatting_records_list, null);
viewHolder.portraitImageView = (SelectableRoundedImageView) convertView.findViewById(R.id.item_iv_record_image);
viewHolder.chatDetailLinearLayout = (LinearLayout) convertView.findViewById(R.id.item_ll_chatting_records_detail);
viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.item_tv_chat_name);
viewHolder.chatRecordsDetailTextView = (TextView) convertView.findViewById(R.id.item_tv_chatting_records_detail);
convertView.setTag(viewHolder);
} else {
viewHolder = (ChattingRecordsViewHolder) convertView.getTag();
}
if (conversation.getConversationType() == Conversation.ConversationType.PRIVATE) {
Friend friend = DBManager.getInstance().getDaoSession().getFriendDao().queryBuilder().where(FriendDao.Properties.UserId.eq(conversation.getTargetId())).unique();
SharedPreferences sp = getSharedPreferences("config", Context.MODE_PRIVATE);
String currentUserId = sp.getString(SealConst.SEALTALK_LOGIN_ID, "");
String currentUserName = sp.getString(SealConst.SEALTALK_LOGIN_NAME, "");
String currentUserPortrait = sp.getString(SealConst.SEALTALK_LOGING_PORTRAIT, "");
if (friend != null) {
searchResult.setId(friend.getUserId());
String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(friend);
searchResult.setPortraitUri(portraitUri);
ImageLoader.getInstance().displayImage(portraitUri, viewHolder.portraitImageView, App.getOptions());
if (!TextUtils.isEmpty(friend.getDisplayName())) {
searchResult.setTitle(friend.getDisplayName());
viewHolder.nameTextView.setText(friend.getDisplayName());
} else {
searchResult.setTitle(friend.getName());
viewHolder.nameTextView.setText(friend.getName());
}
} else if (conversation.getTargetId().equals(currentUserId)) {
searchResult.setId(currentUserId);
UserInfo currentUserInfo = new UserInfo(currentUserId, currentUserName, Uri.parse(currentUserPortrait));
String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(currentUserInfo);
searchResult.setPortraitUri(portraitUri);
ImageLoader.getInstance().displayImage(portraitUri, viewHolder.portraitImageView, App.getOptions());
if (!TextUtils.isEmpty(currentUserName)) {
searchResult.setTitle(currentUserName);
viewHolder.nameTextView.setText(currentUserName);
} else {
searchResult.setTitle(currentUserId);
viewHolder.nameTextView.setText(currentUserId);
}
} else {
UserInfo userInfo = RongUserInfoManager.getInstance().getUserInfo(conversation.getTargetId());
String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(userInfo);
searchResult.setPortraitUri(portraitUri);
ImageLoader.getInstance().displayImage(portraitUri, viewHolder.portraitImageView, App.getOptions());
searchResult.setId(conversation.getTargetId());
if (userInfo != null) {
if (!TextUtils.isEmpty(userInfo.getName())) {
searchResult.setTitle(userInfo.getName());
viewHolder.nameTextView.setText(userInfo.getName());
} else {
searchResult.setTitle(userInfo.getUserId());
viewHolder.nameTextView.setText(userInfo.getUserId());
}
} else {
searchResult.setId(conversation.getTargetId());
searchResult.setTitle(conversation.getTargetId());
viewHolder.nameTextView.setText(conversation.getTargetId());
}
}
}
if (conversation.getConversationType() == Conversation.ConversationType.GROUP) {
Groups groupInfo = DBManager.getInstance().getDaoSession().getGroupsDao().queryBuilder().where(GroupsDao.Properties.GroupsId.eq(conversation.getTargetId())).unique();
if (groupInfo != null) {
searchResult.setId(groupInfo.getGroupsId());
String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(groupInfo);
if (!TextUtils.isEmpty(portraitUri)) {
searchResult.setPortraitUri(portraitUri);
}
ImageLoader.getInstance().displayImage(portraitUri, viewHolder.portraitImageView, App.getOptions());
if (!TextUtils.isEmpty(groupInfo.getName())) {
searchResult.setTitle(groupInfo.getName());
viewHolder.nameTextView.setText(groupInfo.getName());
} else {
searchResult.setTitle(groupInfo.getGroupsId());
viewHolder.nameTextView.setText(groupInfo.getGroupsId());
}
}
}
if (searchResultCount == 1) {
viewHolder.chatRecordsDetailTextView.setText(mCharacterParser.getColoredChattingRecord(mFilterString, searchResult.getConversation().getLatestMessage()));
} else {
viewHolder.chatRecordsDetailTextView.setText(getResources().getString(R.string.search_item_chat_records, searchResultCount));
}
return convertView;
}
}
class ChattingRecordsViewHolder {
SelectableRoundedImageView portraitImageView;
LinearLayout chatDetailLinearLayout;
TextView nameTextView;
TextView chatRecordsDetailTextView;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (null != this.getCurrentFocus()) {
/**
* 点击空白位置 隐藏软键盘
*/
InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
return mInputMethodManager.hideSoftInputFromWindow(mSearchEditText.getWindowToken(), 0);
}
return super.onTouchEvent(event);
}
@Override
protected void onResume() {
mSearchEditText.requestFocus();
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(mSearchEditText, 0);
super.onResume();
}
@Override
protected void onPause() {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(mSearchEditText.getWindowToken(), 0);
super.onPause();
}
@Override
protected void onDestroy() {
if (mAsyncTask != null) {
mAsyncTask.cancel(true);
mAsyncTask = null;
}
super.onDestroy();
}
}