/*
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
*/
|
|
package cn.wildfire.chat.kit.contact;
|
|
import android.app.Activity;
|
import android.content.Intent;
|
import android.os.Bundle;
|
import android.view.View;
|
|
import androidx.annotation.Nullable;
|
|
import java.util.List;
|
|
import cn.wildfire.chat.kit.R;
|
import cn.wildfire.chat.kit.channel.ChannelListActivity;
|
import cn.wildfire.chat.kit.contact.model.ContactCountFooterValue;
|
import cn.wildfire.chat.kit.contact.model.FriendRequestValue;
|
import cn.wildfire.chat.kit.contact.model.GroupValue;
|
import cn.wildfire.chat.kit.contact.model.HeaderValue;
|
import cn.wildfire.chat.kit.contact.model.UIUserInfo;
|
import cn.wildfire.chat.kit.contact.newfriend.FriendRequestListActivity;
|
import cn.wildfire.chat.kit.contact.viewholder.footer.ContactCountViewHolder;
|
import cn.wildfire.chat.kit.contact.viewholder.header.ChannelViewHolder;
|
import cn.wildfire.chat.kit.contact.viewholder.header.FriendRequestViewHolder;
|
import cn.wildfire.chat.kit.contact.viewholder.header.GroupViewHolder;
|
import cn.wildfire.chat.kit.group.GroupListActivity;
|
import cn.wildfire.chat.kit.user.UserInfoActivity;
|
import cn.wildfire.chat.kit.widget.QuickIndexBar;
|
import cn.wildfirechat.model.ChannelInfo;
|
|
public class ContactListFragment extends BaseUserListFragment implements QuickIndexBar.OnLetterUpdateListener {
|
private boolean pick = false;
|
private List<String> filterUserList;
|
private static final int REQUEST_CODE_PICK_CHANNEL = 100;
|
|
@Override
|
public void setUserVisibleHint(boolean isVisibleToUser) {
|
super.setUserVisibleHint(isVisibleToUser);
|
if (userListAdapter != null && isVisibleToUser) {
|
contactViewModel.reloadContact();
|
contactViewModel.reloadFriendRequestStatus();
|
}
|
}
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
Bundle bundle = getArguments();
|
if (bundle != null) {
|
pick = bundle.getBoolean("pick", false);
|
filterUserList = bundle.getStringArrayList("filterUserList");
|
}
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
contactViewModel.reloadContact();
|
contactViewModel.reloadFriendRequestStatus();
|
contactViewModel.reloadFavContact();
|
}
|
|
|
@Override
|
protected void afterViews(View view) {
|
super.afterViews(view);
|
contactViewModel.contactListLiveData().observe(this, userInfos -> {
|
showContent();
|
if (filterUserList != null) {
|
userInfos.removeIf(uiUserInfo -> filterUserList.indexOf(uiUserInfo.getUserInfo().uid) > -1);
|
}
|
userListAdapter.setUsers(userInfos);
|
});
|
contactViewModel.friendRequestUpdatedLiveData().observe(getActivity(), integer -> userListAdapter.updateHeader(0, new FriendRequestValue(integer)));
|
contactViewModel.favContactListLiveData().observe(getActivity(), uiUserInfos -> {
|
if (filterUserList != null) {
|
uiUserInfos.removeIf(uiUserInfo -> filterUserList.indexOf(uiUserInfo.getUserInfo().uid) > -1);
|
}
|
userListAdapter.setFavUsers(uiUserInfos);
|
});
|
}
|
|
@Override
|
public void onDestroyView() {
|
super.onDestroyView();
|
}
|
|
@Override
|
public void initHeaderViewHolders() {
|
if (!pick) {
|
addHeaderViewHolder(FriendRequestViewHolder.class, R.layout.contact_header_friend, new FriendRequestValue(contactViewModel.getUnreadFriendRequestCount()));
|
addHeaderViewHolder(GroupViewHolder.class, R.layout.contact_header_group, new GroupValue());
|
}
|
addHeaderViewHolder(ChannelViewHolder.class, R.layout.contact_header_channel, new HeaderValue());
|
}
|
|
@Override
|
public void initFooterViewHolders() {
|
addFooterViewHolder(ContactCountViewHolder.class, R.layout.contact_item_footer, new ContactCountFooterValue());
|
}
|
|
@Override
|
public void onUserClick(UIUserInfo userInfo) {
|
if (pick) {
|
Intent intent = new Intent();
|
intent.putExtra("userInfo", userInfo.getUserInfo());
|
getActivity().setResult(Activity.RESULT_OK, intent);
|
getActivity().finish();
|
} else {
|
Intent intent = new Intent(getActivity(), UserInfoActivity.class);
|
intent.putExtra("userInfo", userInfo.getUserInfo());
|
startActivity(intent);
|
}
|
}
|
|
@Override
|
public void onHeaderClick(int index) {
|
if (pick) {
|
showChannelList();
|
return;
|
}
|
switch (index) {
|
case 0:
|
showFriendRequest();
|
break;
|
case 1:
|
showGroupList();
|
break;
|
case 2:
|
showChannelList();
|
break;
|
default:
|
break;
|
}
|
}
|
|
private void showFriendRequest() {
|
FriendRequestValue value = new FriendRequestValue(0);
|
userListAdapter.updateHeader(0, value);
|
|
Intent intent = new Intent(getActivity(), FriendRequestListActivity.class);
|
startActivity(intent);
|
}
|
|
private void showGroupList() {
|
Intent intent = new Intent(getActivity(), GroupListActivity.class);
|
startActivity(intent);
|
}
|
|
private void showChannelList() {
|
Intent intent = new Intent(getActivity(), ChannelListActivity.class);
|
if (pick) {
|
intent.putExtra("pick", true);
|
startActivityForResult(intent, REQUEST_CODE_PICK_CHANNEL);
|
} else {
|
startActivity(intent);
|
}
|
}
|
|
@Override
|
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
if (requestCode == REQUEST_CODE_PICK_CHANNEL && resultCode == Activity.RESULT_OK) {
|
Intent intent = new Intent();
|
ChannelInfo channelInfo = data.getParcelableExtra("channelInfo");
|
intent.putExtra("channelInfo", channelInfo);
|
getActivity().setResult(Activity.RESULT_OK, intent);
|
getActivity().finish();
|
} else {
|
super.onActivityResult(requestCode, resultCode, data);
|
}
|
}
|
}
|