/* * 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 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); } } }