/* * Copyright (c) 2020 WildFireChat. All rights reserved. */ package cn.wildfire.chat.kit.contact.newfriend; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; import cn.wildfire.chat.kit.R; import cn.wildfire.chat.kit.R2; import cn.wildfire.chat.kit.contact.ContactViewModel; import cn.wildfire.chat.kit.third.utils.UIUtils; import cn.wildfire.chat.kit.user.UserViewModel; import cn.wildfire.chat.kit.utils.ThreadPool; import cn.wildfirechat.model.FriendRequest; import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.List; public class FriendRequestListFragment extends Fragment { @BindView(R2.id.noNewFriendLinearLayout) LinearLayout noNewFriendLinearLayout; @BindView(R2.id.newFriendListLinearLayout) LinearLayout newFriendLinearLayout; @BindView(R2.id.friendRequestListRecyclerView) RecyclerView recyclerView; private ContactViewModel contactViewModel; private FriendRequestListAdapter adapter; private boolean first = true; private List rawList = new ArrayList<>(); @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.contact_new_friend_fragment, container, false); ButterKnife.bind(this, view); init(); return view; } private void init() { Bundle arguments = getArguments(); if (arguments == null) { setRawFriendRequest(); return; } boolean isContact = arguments.getBoolean("isContact"); if (isContact) { setContactRequest(arguments); } else { setRawFriendRequest(); } } public void refreshSearchData(String searchKey) { if (first) { first = false; rawList.addAll(adapter.getData()); } if (TextUtils.isEmpty(searchKey)) { adapter.refreshData(rawList); } ThreadPool.getInstance().getCachedPools().execute(new Runnable() { @Override public void run() { List result = new ArrayList<>(); for (FriendRequest request : rawList) { boolean phoneContain = false; boolean nameContain = false; if (!TextUtils.isEmpty(request.phone)) { phoneContain = request.phone.contains(searchKey); } if (!TextUtils.isEmpty(request.showName)) { nameContain = request.showName.contains(searchKey); } if (phoneContain || nameContain) { result.add(request); } } UIUtils.postTaskSafely(new Runnable() { @Override public void run() { adapter.refreshData(result); } }); } }); } private void setContactRequest(Bundle arguments) { String data = arguments.getString("data"); List requests = JSON.parseArray(data, FriendRequest.class); if (requests != null && requests.size() > 0) { noNewFriendLinearLayout.setVisibility(View.GONE); newFriendLinearLayout.setVisibility(View.VISIBLE); adapter = new FriendRequestListAdapter(FriendRequestListFragment.this); adapter.setFriendRequests(requests); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setAdapter(adapter); } else { noNewFriendLinearLayout.setVisibility(View.VISIBLE); newFriendLinearLayout.setVisibility(View.GONE); } } private void setRawFriendRequest() { contactViewModel = ViewModelProviders.of(this).get(ContactViewModel.class); UserViewModel userViewModel = ViewModelProviders.of(this).get(UserViewModel.class); userViewModel.userInfoLiveData().observe(getViewLifecycleOwner(), userInfos -> { if (adapter != null) { adapter.onUserInfosUpdate(userInfos); } }); List requests = contactViewModel.getFriendRequest(); if (requests != null && requests.size() > 0) { noNewFriendLinearLayout.setVisibility(View.GONE); newFriendLinearLayout.setVisibility(View.VISIBLE); adapter = new FriendRequestListAdapter(FriendRequestListFragment.this); adapter.setFriendRequests(requests); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setAdapter(adapter); } else { noNewFriendLinearLayout.setVisibility(View.VISIBLE); newFriendLinearLayout.setVisibility(View.GONE); } contactViewModel.clearUnreadFriendRequestStatus(); } }