管理添加

显示管理尾巴
多选转发
This commit is contained in:
guozhen
2025-02-06 17:36:44 +08:00
committed by xuhuixiang
parent 9d1e398c58
commit 425bc1475e
39 changed files with 594 additions and 186 deletions

View File

@@ -4,16 +4,29 @@
package com.netease.yunxin.kit.contactkit.ui.fun.team;
import static com.netease.yunxin.kit.corekit.im.utils.RouterConstant.KEY_REQUEST_SELECTOR_NAME;
import static com.netease.yunxin.kit.corekit.im.utils.RouterConstant.REQUEST_CONTACT_SELECTOR_KEY;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import com.netease.nimlib.sdk.team.model.DismissAttachment;
import com.netease.nimlib.sdk.team.model.Team;
import com.netease.yunxin.kit.common.ui.utils.ToastX;
import com.netease.yunxin.kit.contactkit.ui.R;
import com.netease.yunxin.kit.contactkit.ui.databinding.BaseListActivityLayoutBinding;
import com.netease.yunxin.kit.contactkit.ui.fun.view.FunContactViewHolderFactory;
import com.netease.yunxin.kit.contactkit.ui.fun.view.viewholder.FunTeamListViewHolder;
import com.netease.yunxin.kit.contactkit.ui.model.BaseContactBean;
import com.netease.yunxin.kit.contactkit.ui.model.ContactFriendBean;
import com.netease.yunxin.kit.contactkit.ui.model.ContactTeamBean;
import com.netease.yunxin.kit.contactkit.ui.model.IViewTypeConstant;
import com.netease.yunxin.kit.contactkit.ui.team.BaseTeamListActivity;
import com.netease.yunxin.kit.contactkit.ui.team.TeamListViewModel;
@@ -21,51 +34,146 @@ import com.netease.yunxin.kit.contactkit.ui.view.viewholder.BaseContactViewHolde
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
import com.netease.yunxin.kit.corekit.route.XKitRouter;
import java.util.ArrayList;
import java.util.List;
public class FunTeamListActivity extends BaseTeamListActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
changeStatusBarColor(R.color.color_white);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
changeStatusBarColor(R.color.color_white);
}
protected void configTitle(BaseListActivityLayoutBinding binding) {
super.configTitle(binding);
binding.title.getTitleTextView().setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
protected void configTitle(BaseListActivityLayoutBinding binding) {
super.configTitle(binding);
binding.title.getTitleTextView().setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
// binding.title.getTitleTextView().setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
binding.title.setBackgroundResource(R.color.color_white);
}
binding.title.setBackgroundResource(R.color.color_white);
protected void configRoutePath(TeamListViewModel viewModel) {
viewModel.configRoutePath(RouterConstant.PATH_FUN_CHAT_TEAM_PAGE);
}
@Override
protected void configViewHolderFactory() {
binding.contactListView.setViewHolderFactory(
new FunContactViewHolderFactory() {
@Override
protected BaseContactViewHolder getCustomViewHolder(ViewGroup view, int viewType) {
if (viewType == IViewTypeConstant.CONTACT_TEAM_LIST) {
FunTeamListViewHolder viewHolder = new FunTeamListViewHolder(view);
viewHolder.setItemClickListener(
data -> {
if (isSelector) {
Intent result = new Intent();
result.putExtra(RouterConstant.KEY_TEAM_ID, data.data.getId());
setResult(RESULT_OK, result);
finish();
}
@Override
protected void initData() {
super.initData();
if (isZhuanFa) {
// ToastX.showShortToast("111111111111111");
binding.title.setActionText(getString(R.string.chat_message_action_multi_select));
binding.title.setActionTextColor(getResources().getColor(R.color.color_6877fe));
binding.title.getRightTextView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isSignOne) {
isSignOne = false;
binding.title.setActionText(getString(R.string.selector_sure));
binding.contactListView.showSelector(true);
} else {
XKitRouter.withKey(data.router)
.withParam(RouterConstant.CHAT_KRY, data.data)
.withContext(FunTeamListActivity.this)
.navigate();
ArrayList<String> select = getSelectedAccount();
ArrayList<String> selectName = getSelectedName();
if (select.size() < 1) {
Toast.makeText(FunTeamListActivity.this, getString(R.string.select_empty_tips), Toast.LENGTH_LONG)
.show();
return;
}
//转发选取一个结束
Intent result = new Intent();
result.putExtra(REQUEST_CONTACT_SELECTOR_KEY, select);
result.putExtra(KEY_REQUEST_SELECTOR_NAME, selectName);
setResult(RESULT_OK, result);
finish();
}
});
return viewHolder;
}
});
} else {
// ToastX.showShortToast("2222222222222");
}
}
protected ArrayList<String> getSelectedAccount() {
ArrayList<String> result = new ArrayList<>();
List<BaseContactBean> contactTeamBeans = binding.contactListView.getAdapter().getDataList();
for (int i = 0; i < contactTeamBeans.size(); i++) {
ContactTeamBean contactTeamBean = (ContactTeamBean) contactTeamBeans.get(i);
if (contactTeamBean.isCheck()) {
result.add(contactTeamBean.data.getId());
}
return null;
}
});
}
}
return result;
}
protected ArrayList<String> getSelectedName() {
ArrayList<String> result = new ArrayList<>();
List<BaseContactBean> contactTeamBeans = binding.contactListView.getAdapter().getDataList();
for (int i = 0; i < contactTeamBeans.size(); i++) {
ContactTeamBean contactTeamBean = (ContactTeamBean) contactTeamBeans.get(i);
if (contactTeamBean.isCheck()) {
result.add(contactTeamBean.data.getName());
}
}
return result;
}
protected void configRoutePath(TeamListViewModel viewModel) {
viewModel.configRoutePath(RouterConstant.PATH_FUN_CHAT_TEAM_PAGE);
}
@Override
protected void configViewHolderFactory() {
// ToastX.showShortToast("点我干嘛!!!!");
binding.contactListView.setViewHolderFactory(
new FunContactViewHolderFactory() {
@Override
protected BaseContactViewHolder getCustomViewHolder(ViewGroup view, int viewType) {
if (viewType == IViewTypeConstant.CONTACT_TEAM_LIST) {
FunTeamListViewHolder viewHolder = new FunTeamListViewHolder(view);
viewHolder.setItemClickListener(
data -> {
if (isSelector) {
if (isZhuanFa) {
if (isSignOne) {
ArrayList<String> select = new ArrayList<>();
ArrayList<String> selectName = new ArrayList<>();
select.add(data.data.getId());
selectName.add(data.data.getName());
//转发选取一个结束
Intent result = new Intent();
result.putExtra(REQUEST_CONTACT_SELECTOR_KEY, select);
result.putExtra(KEY_REQUEST_SELECTOR_NAME, selectName);
setResult(RESULT_OK, result);
finish();
} else {
data.setCheck(!data.isCheck());
binding.contactListView.updateContactData(data);
}
} else {
Intent result = new Intent();
result.putExtra(RouterConstant.KEY_TEAM_ID, data.data.getId());
setResult(RESULT_OK, result);
finish();
}
} else {
XKitRouter.withKey(data.router)
.withParam(RouterConstant.CHAT_KRY, data.data)
.withContext(FunTeamListActivity.this)
.navigate();
}
});
return viewHolder;
}
return null;
}
});
}
}

View File

@@ -56,6 +56,16 @@ public class FunTeamListViewHolder extends BaseContactViewHolder {
@Override
public void onBind(BaseContactBean bean, int position, ContactListViewAttrs attrs) {
Team teamInfo = ((ContactTeamBean) bean).data;
if(binding.rbSelector!=null){
binding.rbSelector.setVisibility(View.GONE);
if(attrs.getShowSelector()){
binding.rbSelector.setVisibility(View.VISIBLE);
binding.rbSelector.setChecked(((ContactTeamBean) bean).isCheck());
}
}
if (teamInfo != null) {
binding.tvName.setText(teamInfo.getName());
String value = ((ContactTeamBean) bean).getContent();

View File

@@ -23,6 +23,15 @@ public class ContactTeamBean extends BaseContactBean {
public MsgAttachment msgAttachment;
public String fromNick;
public String fromAccount;
public boolean isCheck;
public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean check) {
isCheck = check;
}
public String getFromNick() {
return fromNick;

View File

@@ -6,6 +6,8 @@ package com.netease.yunxin.kit.contactkit.ui.normal.team;
import android.content.Intent;
import android.view.ViewGroup;
import com.netease.yunxin.kit.common.ui.utils.ToastX;
import com.netease.yunxin.kit.contactkit.ui.model.IViewTypeConstant;
import com.netease.yunxin.kit.contactkit.ui.normal.view.ContactViewHolderFactory;
import com.netease.yunxin.kit.contactkit.ui.normal.view.viewholder.TeamListViewHolder;
@@ -18,6 +20,9 @@ public class TeamListActivity extends BaseTeamListActivity {
@Override
protected void configViewHolderFactory() {
// ToastX.showShortToast("点我干嘛!");
binding.contactListView.setViewHolderFactory(
new ContactViewHolderFactory() {
@Override

View File

@@ -108,6 +108,7 @@ public abstract class BaseContactSelectorActivity extends BaseActivity {
protected int type;// 0 创建群 选好友, 1 转发消息 选好友
protected boolean isSignOne = true;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -152,69 +153,56 @@ public abstract class BaseContactSelectorActivity extends BaseActivity {
actions.addContactListener(
IViewTypeConstant.CONTACT_FRIEND,
(position, data) -> {
FriendInfo friendInfo = ((ContactFriendBean) data).data;
//转发选取一个结束
Intent result = new Intent();
// if (!selectedListAdapter.getSelectedFriends().isEmpty()) {
// result.putExtra(REQUEST_CONTACT_SELECTOR_KEY, getSelectedAccount());
// result.putExtra(KEY_REQUEST_SELECTOR_NAME, getSelectedName());
//// if (enableReturnName) {
//// result.putExtra(KEY_REQUEST_SELECTOR_NAME, getSelectedName());
//// }
// }
listAccount.clear();
listname.clear();
listAccount.add(friendInfo.getAccount());
listname.add(friendInfo.getName());
result.putExtra(REQUEST_CONTACT_SELECTOR_KEY, listAccount);
result.putExtra(KEY_REQUEST_SELECTOR_NAME, listname);
setResult(RESULT_OK, result);
finish();
// XKitRouter.withKey(RouterConstant.PATH_FUN_CHAT_P2P_PAGE)
// .withParam(RouterConstant.CHAT_ID_KRY, friendInfo.getAccount())
// .withContext(requireActivity())
// .navigate();
// XKitRouter.withKey(RouterConstant.PATH_FUN_USER_INFO_PAGE)
// .withContext(requireContext())
// .withParam(RouterConstant.KEY_ACCOUNT_ID_KEY, friendInfo.getAccount())
// .navigate();
if (isSignOne) {
FriendInfo friendInfo = ((ContactFriendBean) data).data;
//转发选取一个结束
Intent result = new Intent();
listAccount.clear();
listname.clear();
listAccount.add(friendInfo.getAccount());
listname.add(friendInfo.getName());
result.putExtra(REQUEST_CONTACT_SELECTOR_KEY, listAccount);
result.putExtra(KEY_REQUEST_SELECTOR_NAME, listname);
setResult(RESULT_OK, result);
finish();
}
});
} else {
actions.addSelectorListener(
IViewTypeConstant.CONTACT_FRIEND,
(selector, data) -> {
if (selector) {
if (selectedListAdapter.getItemCount() >= maxSelectCount
&& !selectFinalCheckCountEnable) {
Toast.makeText(
this,
getString(
R.string.contact_selector_max_count, String.valueOf(maxSelectCount)),
Toast.LENGTH_LONG)
.show();
((ContactFriendBean) data).setSelected(false);
contactListView.updateContactData(data);
lastContactView.updateContactData(data);
searchContactView.updateContactData(data);
loveContactView.updateContactData(data);
} else {
((ContactFriendBean) data).setSelected(true);
contactListView.updateContactData(data);
lastContactView.updateContactData(data);
searchContactView.updateContactData(data);
loveContactView.updateContactData(data);
selectedListAdapter.addFriend((ContactFriendBean) data);
}
} else {
}
actions.addSelectorListener(
IViewTypeConstant.CONTACT_FRIEND,
(selector, data) -> {
if (selector) {
if (selectedListAdapter.getItemCount() >= maxSelectCount
&& !selectFinalCheckCountEnable) {
Toast.makeText(
this,
getString(
R.string.contact_selector_max_count, String.valueOf(maxSelectCount)),
Toast.LENGTH_LONG)
.show();
((ContactFriendBean) data).setSelected(false);
selectedListAdapter.removeFriend((ContactFriendBean) data);
contactListView.updateContactData(data);
lastContactView.updateContactData(data);
loveContactView.updateContactData(data);
searchContactView.updateContactData(data);
loveContactView.updateContactData(data);
} else {
((ContactFriendBean) data).setSelected(true);
contactListView.updateContactData(data);
lastContactView.updateContactData(data);
searchContactView.updateContactData(data);
loveContactView.updateContactData(data);
selectedListAdapter.addFriend((ContactFriendBean) data);
}
// titleBar.setActionText(getString(R.string.selector_sure_without_num));
} else {
((ContactFriendBean) data).setSelected(false);
selectedListAdapter.removeFriend((ContactFriendBean) data);
contactListView.updateContactData(data);
lastContactView.updateContactData(data);
loveContactView.updateContactData(data);
searchContactView.updateContactData(data);
}
// titleBar.setActionText(getString(R.string.selector_sure_without_num));
// int count = selectedListAdapter.getItemCount();
// if (count <= 0) {
// titleBar.setActionText(getString(R.string.selector_sure_without_num));
@@ -223,28 +211,32 @@ public abstract class BaseContactSelectorActivity extends BaseActivity {
// String.format(
// getString(R.string.selector_sure), selectedListAdapter.getItemCount()));
// }
});
});
}
// }
contactListView.setContactAction(actions);
lastContactView.setContactAction(actions);
searchContactView.setContactAction(actions);
loveContactView.setContactAction(actions);
//top selected list
LinearLayoutManager layoutManager =
new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false);
//top selected list
LinearLayoutManager layoutManager =
new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false);
rvSelected.setLayoutManager(layoutManager);
selectedListAdapter = getSelectedListAdapter();
selectedListAdapter =
getSelectedListAdapter();
selectedListAdapter.setItemClickListener(
item -> {
item.setSelected(false);
contactListView.updateContactData(item);
lastContactView.updateContactData(item);
loveContactView.updateContactData(item);
searchContactView.updateContactData(item);
//int count = selectedListAdapter.getItemCount();
// titleBar.setActionText(getString(R.string.selector_sure_without_num));
item ->
{
item.setSelected(false);
contactListView.updateContactData(item);
lastContactView.updateContactData(item);
loveContactView.updateContactData(item);
searchContactView.updateContactData(item);
//int count = selectedListAdapter.getItemCount();
// titleBar.setActionText(getString(R.string.selector_sure_without_num));
// if (count <= 0) {
// titleBar.setActionText(getString(R.string.selector_sure_without_num));
// } else {
@@ -252,42 +244,45 @@ public abstract class BaseContactSelectorActivity extends BaseActivity {
// String.format(
// getString(R.string.selector_sure), selectedListAdapter.getItemCount()));
// }
});
});
rvSelected.setAdapter(selectedListAdapter);
editSearch.setOnEditorActionListener((textView, actionId, keyEvent) ->
{
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
String search = textView.getEditableText().toString();
//搜索好友
searchViewModel.queryFriend(search);
}
return false;
});
editSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
editSearch.setOnEditorActionListener((textView,actionId,keyEvent)->
}
{
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
String search = textView.getEditableText().toString();
//搜索好友
searchViewModel.queryFriend(search);
}
return false;
});
editSearch.addTextChangedListener(new
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
TextWatcher() {
@Override
public void beforeTextChanged (CharSequence charSequence,int i, int i1, int i2){
}
}
@Override
public void afterTextChanged(Editable editable) {
if (TextUtils.isEmpty(editSearch.getText().toString())) {
ivClean.setVisibility(View.GONE);
layoutContactList.setVisibility(View.VISIBLE);
layoutSearchList.setVisibility(View.GONE);
hideSoftInput(BaseContactSelectorActivity.this);
} else {
ivClean.setVisibility(View.VISIBLE);
}
@Override
public void onTextChanged (CharSequence charSequence,int i, int i1, int i2){
}
@Override
public void afterTextChanged (Editable editable){
if (TextUtils.isEmpty(editSearch.getText().toString())) {
ivClean.setVisibility(View.GONE);
layoutContactList.setVisibility(View.VISIBLE);
layoutSearchList.setVisibility(View.GONE);
hideSoftInput(BaseContactSelectorActivity.this);
} else {
ivClean.setVisibility(View.VISIBLE);
}
});
ivClean.setOnClickListener(view -> editSearch.setText(""));
}
}
});
ivClean.setOnClickListener(view ->editSearch.setText(""));
}
public void hideSoftInput(Activity activity) {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

View File

@@ -6,6 +6,7 @@ package com.netease.yunxin.kit.contactkit.ui.team;
import androidx.lifecycle.ViewModelProvider;
import com.netease.yunxin.kit.common.ui.utils.ToastX;
import com.netease.yunxin.kit.common.ui.viewmodel.FetchResult;
import com.netease.yunxin.kit.common.ui.viewmodel.LoadStatus;
import com.netease.yunxin.kit.contactkit.ui.R;
@@ -24,12 +25,16 @@ public abstract class BaseTeamListActivity extends BaseListActivity {
protected TeamListViewModel viewModel;
protected boolean isSelector;
protected boolean isZhuanFa = false;
protected boolean isSignOne = true;
protected abstract void configViewHolderFactory();
@Override
protected void initView() {
configTitle(binding);
isZhuanFa = getIntent().getBooleanExtra("zhuanfa",false);
configViewHolderFactory();
}
@@ -60,6 +65,7 @@ public abstract class BaseTeamListActivity extends BaseListActivity {
}
// Collections.sort(binding.contactListView.getAdapter().getDataList(), teambeanComparator);
});
}
@Override

View File

@@ -173,6 +173,7 @@ public class ContactListView extends FrameLayout
public void showSelector(boolean show) {
if (contactAdapter != null) {
contactAdapter.getContactListViewAttrs().setShowSelector(show);
contactAdapter.notifyDataSetChanged();
}
}

View File

@@ -5,11 +5,23 @@
-->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/view_normal_selector">
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_selector"
style="@style/FunSelectorRadioBtn"
android:layout_width="@dimen/dimen_18_dp"
android:layout_height="@dimen/dimen_18_dp"
android:clickable="false"
android:visibility="gone"
android:layout_marginStart="@dimen/dimen_12_dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints" />
<com.netease.yunxin.kit.common.ui.widgets.ContactAvatarView
android:id="@+id/avatar_view"
@@ -17,9 +29,10 @@
android:layout_height="@dimen/dimen_45_dp"
android:layout_marginTop="@dimen/dimen_10_dp"
android:layout_marginBottom="@dimen/dimen_10_dp"
android:layout_marginStart="@dimen/dimen_12_dp"
app:avatarCorner="@dimen/dimen_45_dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintLeft_toRightOf="@id/rb_selector"
app:layout_constraintTop_toTopOf="parent" />
<TextView

View File

@@ -156,4 +156,7 @@
<string name="teamjoined_txt">You are already in this group</string>
<string name="know_txt">I see</string>
<string name="nodate_txt">No data</string>
<string name="chat_message_action_multi_select">Multi-select</string>
</resources>

View File

@@ -157,5 +157,6 @@
<string name="teamjoined_txt">あなたはすでにこのグループに属しています</string>
<string name="know_txt">なるほど</string>
<string name="nodate_txt">まだ情報がありません</string>
<string name="chat_message_action_multi_select">複数選択</string>
</resources>

View File

@@ -157,4 +157,6 @@
<string name="teamjoined_txt">您已经在该群组中</string>
<string name="know_txt">我知道了</string>
<string name="nodate_txt">暂无数据</string>
<string name="chat_message_action_multi_select">多选</string>
</resources>

View File

@@ -158,6 +158,7 @@
<string name="know_txt">我知道了</string>
<string name="nodate_txt">暫無數據</string>
<string name="chat_message_action_multi_select">多選</string>
</resources>