From 0ba0aed40f9637aecd33bf26773c5010b1472244 Mon Sep 17 00:00:00 2001 From: huangjian Date: Tue, 31 Jan 2023 15:37:20 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=81=E8=81=8A=E6=94=B9=E9=80=A0:UI?= =?UTF-8?q?=E5=AE=8C=E5=96=84,=E7=A7=81=E8=81=8A=E9=A1=B5=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=B2=BE=E7=AE=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moshen/audio/VoiceMatchActivity.java | 2 +- .../ui/im/avtivity/AddBlackListActivity.java | 123 ++++++-- .../im/avtivity/NewBaseMessageActivity.java | 107 +------ .../ui/im/avtivity/NimP2PMessageActivity.java | 291 ++++-------------- .../ui/im/chat/MsgViewHolderUserCard.java | 30 +- .../ui/im/recent/RecentContactsFragment.java | 42 +-- .../mango/moshen/ui/webview/JSInterface.java | 6 - .../main/res/drawable-xhdpi/ic_p2p_live.png | Bin 0 -> 190 bytes .../drawable-xhdpi/icon_add_black_list.png | Bin 0 -> 349 bytes .../drawable-xhdpi/icon_add_black_list.webp | Bin 636 -> 0 bytes .../layout/activity_nim_add_black_list.xml | 56 +++- .../main/res/layout/activity_p2p_message.xml | 251 ++++++++------- .../main/res/layout/layout_p2p_user_card.xml | 13 +- app/src/main/res/values/colors.xml | 2 +- .../activity/NimRoomP2PMessageActivity.java | 84 +---- .../java/com/mango/core/user/UserModel.java | 16 - .../widget/IOSSwitchView.java | 14 +- 17 files changed, 401 insertions(+), 636 deletions(-) create mode 100644 app/src/main/res/drawable-xhdpi/ic_p2p_live.png create mode 100644 app/src/main/res/drawable-xhdpi/icon_add_black_list.png delete mode 100644 app/src/main/res/drawable-xhdpi/icon_add_black_list.webp diff --git a/app/src/main/java/com/mango/moshen/audio/VoiceMatchActivity.java b/app/src/main/java/com/mango/moshen/audio/VoiceMatchActivity.java index ba21e49d5..eeec915ea 100644 --- a/app/src/main/java/com/mango/moshen/audio/VoiceMatchActivity.java +++ b/app/src/main/java/com/mango/moshen/audio/VoiceMatchActivity.java @@ -616,7 +616,7 @@ public class VoiceMatchActivity extends BaseActivity implements View.OnClickList } if (error == null) { if (isRight) { - NimP2PMessageActivity.start(context, String.valueOf(info.getUid()), true); + NimP2PMessageActivity.start(context, String.valueOf(info.getUid())); } } } diff --git a/app/src/main/java/com/mango/moshen/ui/im/avtivity/AddBlackListActivity.java b/app/src/main/java/com/mango/moshen/ui/im/avtivity/AddBlackListActivity.java index 6859bcd65..b490ed3fa 100644 --- a/app/src/main/java/com/mango/moshen/ui/im/avtivity/AddBlackListActivity.java +++ b/app/src/main/java/com/mango/moshen/ui/im/avtivity/AddBlackListActivity.java @@ -1,5 +1,7 @@ package com.mango.moshen.ui.im.avtivity; +import static com.mango.moshen.ui.im.recent.RecentContactsFragment.RECENT_TAG_STICKY; + import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; @@ -10,8 +12,9 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; -import com.netease.nim.uikit.StatusBarUtil; -import com.netease.nim.uikit.business.session.constant.Extras; +import com.mango.core.decoration.headwear.bean.HeadWearInfo; +import com.mango.core.noble.NobleUtil; +import com.mango.core.user.UserModel; import com.mango.moshen.R; import com.mango.moshen.UIHelper; import com.mango.moshen.base.BaseMvpActivity; @@ -20,11 +23,15 @@ import com.mango.moshen.ui.user.UserInfoActivity; import com.mango.moshen.ui.utils.ImageLoadUtils; import com.mango.moshen.utils.RegexUtil; import com.mango.xchat_android_constants.XChatConstants; -import com.mango.core.user.UserModel; import com.mango.xchat_android_library.base.factory.CreatePresenter; import com.mango.xchat_android_library.utils.JavaUtil; - -import java.util.List; +import com.mango.xchat_android_library.widget.IOSSwitchView; +import com.netease.nim.uikit.StatusBarUtil; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; /** * @author Administrator @@ -39,6 +46,9 @@ public class AddBlackListActivity extends BaseMvpActivity { + if (isOn) { + ensureAddToBlackList(); + } else { + ensureRemoveFromBlackList(); + } + }); + + RecentContact recentContact = NIMClient.getService(MsgService.class) + .queryRecentContact(account, SessionTypeEnum.P2P); + if (recentContact != null) { + switchTop.setOn(recentContact.getTag() == RECENT_TAG_STICKY, false); + switchTop.setOnSwitchStateChangeListener(isOn -> { + if (isOn) { + addTag(recentContact, RECENT_TAG_STICKY); + } else { + removeTag(recentContact, RECENT_TAG_STICKY); + } + NIMClient.getService(MsgService.class).updateRecentAndNotify(recentContact); + }); + } + + } + + private void addTag(RecentContact recent, long tag) { + tag = recent.getTag() | tag; + recent.setTag(tag); + } + + private void removeTag(RecentContact recent, long tag) { + tag = recent.getTag() & ~tag; + recent.setTag(tag); + } + + private void initView() { rlContent = findViewById(R.id.rl_content); tvName = findViewById(R.id.tv_name); tvAddBlackList = findViewById(R.id.tv_add_black_list); ivAvatar = findViewById(R.id.iv_avatar); - rlContent.setOnClickListener(this); - tvAddBlackList.setOnClickListener(this); - findViewById(R.id.tv_report).setOnClickListener(this); - List blackListAccount = NimFriendModel.get().getMyBlackListAccount(); - if (blackListAccount != null) changeText(blackListAccount.contains(account)); - initTarget(); - + switchTop = findViewById(R.id.switch_top); + switchAddBlack = findViewById(R.id.switch_add_black); + ivHeadWear = findViewById(R.id.iv_head_wear); } void changeText(boolean contains) { - tvAddBlackList.setText(contains ? "移除黑名单" : "加入黑名单"); + switchAddBlack.setOn(contains, false); } /** @@ -79,12 +124,23 @@ public class AddBlackListActivity extends BaseMvpActivity { - // 头像 - ImageLoadUtils.loadAvatar(AddBlackListActivity.this, userInfo.getAvatar(), ivAvatar, true); - // 名字 - tvName.setText(RegexUtil.getPrintableString(userInfo.getNick())); - }); + UserModel.get() + .getUserInfo(Long.parseLong(account)) + .subscribe(userInfo -> { + // 头像 + ImageLoadUtils.loadAvatar(AddBlackListActivity.this, userInfo.getAvatar(), ivAvatar, true); + // 名字 + tvName.setText(RegexUtil.getPrintableString(userInfo.getNick())); + HeadWearInfo headWearInfo = userInfo.getUserHeadwear(); + if (headWearInfo != null && !TextUtils.isEmpty(headWearInfo.getPic())) { + NobleUtil.loadHeadWear( + headWearInfo.getEffect() != null ? headWearInfo.getEffect() : headWearInfo.getPic(), + ivHeadWear + ); + } else { + ivHeadWear.setImageResource(0); + } + }); } @@ -93,18 +149,7 @@ public class AddBlackListActivity extends BaseMvpActivity buttons) { - if (buttons == null || buttons.size() == 0) { - return; - } - - Toolbar toolbar = getToolBar(); - if (toolbar == null) { - return; - } - - LinearLayout view = (LinearLayout) LayoutInflater.from(activity).inflate(R.layout.nim_action_bar_custom_view, null); - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); - for (final SessionCustomization.OptionsButton button : buttons) { - ImageView imageView = new ImageView(activity); - imageView.setImageResource(button.iconId); - imageView.setBackgroundResource(R.drawable.nim_nim_action_bar_button_selector); - imageView.setPadding(ScreenUtil.dip2px(10), 0, ScreenUtil.dip2px(10), 0); - imageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - button.onClick(NewBaseMessageActivity.this, v, sessionId); - } - }); - view.addView(imageView, params); - } - - toolbar.addView(view, new Toolbar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.RIGHT | Gravity.CENTER)); } /** @@ -156,46 +95,4 @@ public abstract class NewBaseMessageActivity extends BaseActivity { return fragment; } - public void setToolBar(int toolBarId, ToolBarOptions options) { - toolbar = (Toolbar) findViewById(toolBarId); - if (options.titleId != 0) { - toolbar.setTitle(options.titleId); - } - if (!TextUtils.isEmpty(options.titleString)) { - toolbar.setTitle(options.titleString); - } - if (options.logoId != 0) { - toolbar.setLogo(options.logoId); - } - setSupportActionBar(toolbar); - - if (options.isNeedNavigate) { - toolbar.setNavigationIcon(options.navigateId); - toolbar.setContentInsetStartWithNavigation(0); - toolbar.setNavigationOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - onBackPressed(); - } - }); - } - } - - public void setToolBar(int toolbarId, int titleId, int logoId) { - toolbar = (Toolbar) findViewById(toolbarId); - toolbar.setTitle(titleId); - toolbar.setLogo(logoId); - setSupportActionBar(toolbar); - } - - public Toolbar getToolBar() { - return toolbar; - } - - public void setSubTitle(String subTitle) { - if (toolbar != null) { - toolbar.setSubtitle(subTitle); - } - } - } diff --git a/app/src/main/java/com/mango/moshen/ui/im/avtivity/NimP2PMessageActivity.java b/app/src/main/java/com/mango/moshen/ui/im/avtivity/NimP2PMessageActivity.java index f9b2e1284..5a0859855 100644 --- a/app/src/main/java/com/mango/moshen/ui/im/avtivity/NimP2PMessageActivity.java +++ b/app/src/main/java/com/mango/moshen/ui/im/avtivity/NimP2PMessageActivity.java @@ -3,53 +3,35 @@ package com.mango.moshen.ui.im.avtivity; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.text.SpannableStringBuilder; -import android.text.Spanned; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.mango.core.audio.event.VoiceShakeHeartEvent; import com.mango.core.auth.AuthModel; import com.mango.core.im.friend.IMFriendModel; -import com.mango.core.mentoring_relationship.event.MentoringSuccessEvent; -import com.mango.core.noble.NobleUtil; import com.mango.core.praise.PraiseModel; import com.mango.core.praise.event.IsLikedEvent; import com.mango.core.praise.event.PraiseEvent; +import com.mango.core.room.model.AvRoomModel; import com.mango.core.user.UserModel; -import com.mango.core.user.bean.UserDetailInfo; import com.mango.core.user.bean.UserInfo; -import com.mango.core.utils.StringExtensionKt; import com.mango.core.utils.SystemUidUtil; -import com.mango.core.utils.net.BeanObserver; +import com.mango.core.utils.net.RxHelper; import com.mango.moshen.R; import com.mango.moshen.avroom.activity.AVRoomActivity; -import com.mango.moshen.common.widget.CustomImageSpan; -import com.mango.moshen.mentoring_relationship.dialog.BuildMentoringRelationshipSuccessDialog; -import com.mango.moshen.ui.im.audio.ShakeHeartDialogFragment; import com.mango.moshen.ui.im.fragment.MessageFragment; -import com.mango.moshen.ui.user.UserInfoActivity; -import com.mango.moshen.ui.utils.ImageLoadUtils; -import com.mango.xchat_android_library.utils.ListUtils; +import com.mango.xchat_android_library.utils.JavaUtil; import com.mango.xchat_android_library.utils.SingleToastUtil; import com.netease.nim.uikit.StatusBarUtil; import com.netease.nim.uikit.api.NimUIKit; import com.netease.nim.uikit.api.model.contact.ContactChangedObserver; -import com.netease.nim.uikit.api.model.main.OnlineStateChangeObserver; -import com.netease.nim.uikit.api.model.user.UserInfoObserver; -import com.netease.nim.uikit.api.wrapper.NimToolBarOptions; import com.netease.nim.uikit.business.session.constant.Extras; -import com.netease.nim.uikit.business.uinfo.UserInfoHelper; -import com.netease.nim.uikit.common.activity.ToolBarOptions; import com.netease.nim.uikit.impl.NimUIKitImpl; import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.Observer; @@ -63,9 +45,6 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.List; -import io.reactivex.functions.Consumer; - - /** * 点对点聊天界面 *

@@ -73,15 +52,9 @@ import io.reactivex.functions.Consumer; */ public class NimP2PMessageActivity extends NewBaseMessageActivity { - public static final String IS_BY_MATCH = "isByMatch"; private static final String TAG = "NimP2PMessageActivity"; - private final OnlineStateChangeObserver onlineStateChangeObserver = accounts -> { - // 更新 toolbar - if (accounts.contains(sessionId)) { - // 按照交互来展示 - displayOnlineState(); - } - }; + TextView tvToolbarTitle; + TextView tvAddBlackTip; private boolean isResume = false; /** * 命令消息接收观察者 @@ -92,10 +65,12 @@ public class NimP2PMessageActivity extends NewBaseMessageActivity { } showCommandMessage(message); }; - private TextView ivAddBlackList; + private View ivAddBlackList; private TextView tvTips; private View tipsLayout; private ImageView closeIcon; + private View ivAttention; + private View tvOnlineTip; @Nullable private UserInfo buddyUserInfo; private final ContactChangedObserver friendDataChangedObserver = new ContactChangedObserver() { @@ -119,74 +94,55 @@ public class NimP2PMessageActivity extends NewBaseMessageActivity { displayAntiFraudTips(); } }; - private ImageView ivAttention; - private UserInfoObserver uinfoObserver; public static void start(Context context, String contactId) { - startReal(context, contactId, new Intent()); - } - - public static void start(Context context, String contactId, boolean isFromVoiceMatch) { Intent intent = new Intent(); - intent.putExtra(Extras.EXTRA_ACCOUNT, contactId); - intent.putExtra(Extras.EXTRA_CUSTOMIZATION, NimUIKitImpl.commonP2PSessionCustomization); - intent.putExtra("isFromVoiceMatch", isFromVoiceMatch); - intent.setClass(context, NimP2PMessageActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); - - context.startActivity(intent); - } - - public static void start(Context context, String contactId, String gameId) { - Intent intent = new Intent(); - intent.putExtra("gameId", gameId); - startReal(context, contactId, intent); - } - - public static void startReal(Context context, String contactId, Intent intent) { - if (intent == null) - intent = new Intent(); - intent.putExtra(Extras.EXTRA_ACCOUNT, contactId); intent.putExtra(Extras.EXTRA_CUSTOMIZATION, NimUIKitImpl.commonP2PSessionCustomization); intent.setClass(context, NimP2PMessageActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(intent); + } + @Override + protected int getContentViewId() { + return R.layout.activity_p2p_message; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + tipsLayout = findViewById(R.id.rl_tips); closeIcon = findViewById(R.id.iv_close_tips); tvTips = findViewById(R.id.tv_tips); + ivAttention = findViewById(R.id.iv_attention); + tvToolbarTitle = findViewById(R.id.tv_toolbar_title); + ivAddBlackList = findViewById(R.id.iv_add_black_list); + tvAddBlackTip = findViewById(R.id.tv_add_black_tip); + tvOnlineTip = findViewById(R.id.tv_online_tip); closeIcon.setOnClickListener(view -> { IMFriendModel.get().addCloseTipsAccount(sessionId); tipsLayout.setVisibility(View.GONE); }); - // 单聊特例话数据,包括个人信息,黑名单 + findViewById(R.id.iv_back).setOnClickListener(v -> finish()); + addBlackList(); requestBuddyInfo(); - displayOnlineState(); registerObservers(true); - registerOnlineStateChangeListener(true); EventBus.getDefault().register(this); - displayAntiFraudTips(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - String sessionId = intent.getStringExtra(Extras.EXTRA_ACCOUNT); //如果sessionId与之前的sessionId不是同一个,刷新数据 if (!TextUtils.isEmpty(this.sessionId) && !this.sessionId.equals(sessionId)) { this.sessionId = sessionId; buddyUserInfo = null; + addBlackList(); requestBuddyInfo(); - displayOnlineState(); - displayAntiFraudTips(); messageFragment = (MessageFragment) switchContent(fragment(intent)); } } @@ -210,22 +166,18 @@ public class NimP2PMessageActivity extends NewBaseMessageActivity { } private void addBlackList() { - if (SystemUidUtil.isSystemUid(sessionId)) return; - ivAddBlackList = findViewById(R.id.iv_add_black_list); + if (SystemUidUtil.isSystemUid(sessionId)) { + ivAddBlackList.setVisibility(View.GONE); + return; + } ivAddBlackList.setVisibility(View.VISIBLE); - ivAddBlackList.setOnClickListener((view) -> { - // 跳转到加入黑名单 - String account = getIntent().getStringExtra(Extras.EXTRA_ACCOUNT); - AddBlackListActivity.start(NimP2PMessageActivity.this, account); - }); - + ivAddBlackList.setOnClickListener((view) -> AddBlackListActivity.start(this, sessionId)); } @Override protected void onDestroy() { super.onDestroy(); registerObservers(false); - registerOnlineStateChangeListener(false); EventBus.getDefault().unregister(this); } @@ -241,144 +193,48 @@ public class NimP2PMessageActivity extends NewBaseMessageActivity { isResume = false; } - private void getNickFromSession() { - String userTitleName = UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P); - TextView tvToolbarTitle = getToolBar().findViewById(R.id.tv_toolbar_title); - if (tvToolbarTitle != null) { - tvToolbarTitle.setText(userTitleName); - tvToolbarTitle.setVisibility(View.VISIBLE); - } - } - @SuppressLint("CheckResult") private void requestBuddyInfo() { - getNickFromSession(); + long uid = JavaUtil.str2long(sessionId); + PraiseModel.get().isPraised(AuthModel.get().getCurrentUid(), uid).subscribe(); // 如果有个人信息可以获取 - UserModel.get().getUserInfo(Long.valueOf(sessionId)).subscribe(new Consumer() { - @Override - public void accept(UserInfo userInfo) throws Exception { - String badge = ""; - if (userInfo.getNobleInfo() != null) { - badge = NobleUtil.getLocalResourcePath(userInfo.getNobleInfo().getBadge()); - } - Drawable drawable = Drawable.createFromPath(badge); - // 显示自己的textView并且居中 - TextView tvToolbarTitle = getToolBar().findViewById(R.id.tv_toolbar_title); - // 不知道为什么要从云信获取titleName; - String userTitleName = (drawable == null ? "" : " ") + userInfo.getNick(); - SpannableStringBuilder builder = new SpannableStringBuilder(userTitleName); - if (drawable != null) { - int dimension = (int) getResources().getDimension(R.dimen.badge_tab_category_height); - drawable.setBounds(0, 0, dimension, dimension); - CustomImageSpan imageSpan = new CustomImageSpan(drawable); - builder.setSpan(imageSpan, 0, 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); - } - tvToolbarTitle.setText(builder); - tvToolbarTitle.setVisibility(View.VISIBLE); + UserModel.get().getUserInfo(uid) + .subscribe(userInfo -> { + tvToolbarTitle.setText(userInfo.getNick()); + buddyUserInfo = userInfo; + displayAntiFraudTips(); + }); - ivAttention = (ImageView) findViewById(R.id.iv_attention); - if (AuthModel.get().getCurrentUid() != userInfo.getUid()) { - PraiseModel.get().isPraised(AuthModel.get().getCurrentUid(), userInfo.getUid()).subscribe(); - } - buddyUserInfo = userInfo; - displayAntiFraudTips(); - } - }); + AvRoomModel.get() + .getUserRoom(uid) + .compose(RxHelper.singleMainResult()) + .compose(RxHelper.handleSchAndExce()) + .subscribe((roomInfo, throwable) -> { + if (throwable == null) { + if (roomInfo != null && roomInfo.getUid() > 0) { + tvOnlineTip.setVisibility(View.VISIBLE); + tvOnlineTip.setOnClickListener(v -> AVRoomActivity.start(context, roomInfo.getUid())); + } else { + tvOnlineTip.setVisibility(View.GONE); + } + } else { + tvOnlineTip.setVisibility(View.GONE); + } + }); - setTitle(""); // 显示是否 已经加入黑名单 - TextView tvAddBlackTip = getToolBar().findViewById(com.mango.moshen.R.id.tv_add_black_tip); - List blackListAccount = NimFriendModel.get().getMyBlackListAccount(); - tvAddBlackTip.setVisibility(View.GONE); - if (!ListUtils.isListEmpty(blackListAccount)) { - boolean contains = blackListAccount.contains(sessionId); - tvAddBlackTip.setVisibility(contains ? View.VISIBLE : View.GONE); + if (NimFriendModel.get().isInMyBlackList(sessionId)) { + tvAddBlackTip.setVisibility(View.VISIBLE); + } else { + tvAddBlackTip.setVisibility(View.GONE); } - -/* - if (!SystemUidUtil.isSystemUid(sessionId)) { - View clUserDetails = findViewById(R.id.cl_user_details); - UserModel.get().getUserInfoDetail(Long.parseLong(sessionId)) - .compose(bindToLifecycle()) - .subscribe(new BeanObserver() { - @Override - public void onErrorMsg(String error) { - clUserDetails.setVisibility(View.GONE); - } - - @SuppressLint("SetTextI18n") - @Override - public void onSuccess(@NonNull UserDetailInfo info) { - UserDetailInfo.DataBean userInfo = info.getData(); - if (userInfo == null || userInfo.getRoomUid() <= 0) { - clUserDetails.setVisibility(View.GONE); - return; - } - clUserDetails.setVisibility(View.VISIBLE); - ImageView ivAvatar = findViewById(R.id.iv_avatar); - TextView tvNick = findViewById(R.id.tv_nick); - TextView tvContent = findViewById(R.id.tv_content); - tvNick.setText(userInfo.getNick()); - ImageLoadUtils.loadAvatar(userInfo.getAvatar(), ivAvatar); - tvContent.setText("正在\"" + StringExtensionKt.subAndReplaceDot(userInfo.getRoomTitle(), 5) + "\"热聊中"); - ivAvatar.setOnClickListener(v -> UserInfoActivity.Companion.start(context, userInfo.getUid())); - clUserDetails.setOnClickListener(v -> AVRoomActivity.startForFromType( - context, - userInfo.getRoomUid(), - AVRoomActivity.FROM_TYPE_USER, - userInfo.getNick(), - String.valueOf(userInfo.getUid()))); - } - }); - } -*/ } private void registerObservers(boolean register) { - if (register) { - registerUserInfoObserver(); - } else { - unregisterUserInfoObserver(); - } NIMClient.getService(MsgServiceObserve.class).observeCustomNotification(commandObserver, register); NimUIKit.getContactChangedObservable().registerObserver(friendDataChangedObserver, register); } - private void registerOnlineStateChangeListener(boolean register) { - if (!NimUIKitImpl.enableOnlineState()) { - return; - } - NimUIKitImpl.getOnlineStateChangeObservable().registerOnlineStateChangeListeners(onlineStateChangeObserver, register); - } - - private void displayOnlineState() { - if (!NimUIKitImpl.enableOnlineState()) { - return; - } - String detailContent = NimUIKitImpl.getOnlineStateContentProvider().getDetailDisplay(sessionId); - setSubTitle(detailContent); - } - - private void registerUserInfoObserver() { - if (uinfoObserver == null) { - uinfoObserver = new UserInfoObserver() { - @Override - public void onUserInfoChanged(List accounts) { - if (accounts.contains(sessionId)) { - requestBuddyInfo(); - } - } - }; - } - NimUIKit.getUserInfoObservable().registerObserver(uinfoObserver, true); - } - - private void unregisterUserInfoObserver() { - if (uinfoObserver != null) { - NimUIKit.getUserInfoObservable().registerObserver(uinfoObserver, false); - } - } - protected void showCommandMessage(CustomNotification message) { if (!isResume) { return; @@ -407,46 +263,19 @@ public class NimP2PMessageActivity extends NewBaseMessageActivity { arguments = new Bundle(); } arguments.putSerializable(Extras.EXTRA_TYPE, SessionTypeEnum.P2P); - String gameId = intent.getStringExtra("gameId"); - if (!TextUtils.isEmpty(gameId)) { - arguments.putString("gameId", gameId); - } MessageFragment fragment = new MessageFragment(); fragment.setArguments(arguments); fragment.setContainerId(R.id.message_fragment_container); return fragment; } - @Override - protected int getContentViewId() { - return R.layout.activity_p2p_message; - } - - @Override - protected void initToolBar() { - ToolBarOptions options = new NimToolBarOptions(); - setToolBar(R.id.toolbar, options); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onMentoringSuccessEvent(MentoringSuccessEvent event) { - BuildMentoringRelationshipSuccessDialog dialog = new BuildMentoringRelationshipSuccessDialog(); - dialog.show(getSupportFragmentManager()); - } - - @Subscribe(threadMode = ThreadMode.MAIN) public void onIsLiked(IsLikedEvent event) { if (event.isLiked) { ivAttention.setVisibility(View.GONE); } else { ivAttention.setVisibility(View.VISIBLE); - ivAttention.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PraiseModel.get().praise(Long.valueOf(sessionId), true).subscribe(); - } - }); + ivAttention.setOnClickListener(v -> PraiseModel.get().praise(Long.valueOf(sessionId), true).subscribe()); } } @@ -460,18 +289,10 @@ public class NimP2PMessageActivity extends NewBaseMessageActivity { toast(event.getError()); return; } - ivAttention.setVisibility(View.GONE); - ivAttention.setOnClickListener(null); + ivAttention.setVisibility(event.isPraise() ? View.GONE : View.VISIBLE); toast(event.isPraise() ? R.string.attention_success : R.string.cancel_fan_success); } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onVoiceShakeHeart(VoiceShakeHeartEvent event) { - // 显示动画 - ShakeHeartDialogFragment shakeHeartDialogFragment = ShakeHeartDialogFragment.newInstance(event.showTextHint); - shakeHeartDialogFragment.show(getSupportFragmentManager(), "shake_heart"); - } - @Override protected boolean needSteepStateBar() { return true; diff --git a/app/src/main/java/com/mango/moshen/ui/im/chat/MsgViewHolderUserCard.java b/app/src/main/java/com/mango/moshen/ui/im/chat/MsgViewHolderUserCard.java index 3821304de..7aa5dc38c 100644 --- a/app/src/main/java/com/mango/moshen/ui/im/chat/MsgViewHolderUserCard.java +++ b/app/src/main/java/com/mango/moshen/ui/im/chat/MsgViewHolderUserCard.java @@ -2,6 +2,7 @@ package com.mango.moshen.ui.im.chat; import android.annotation.SuppressLint; import android.content.Intent; +import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; @@ -13,6 +14,8 @@ import androidx.recyclerview.widget.RecyclerView; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; +import com.mango.core.decoration.headwear.bean.HeadWearInfo; +import com.mango.core.noble.NobleUtil; import com.mango.core.user.UserModel; import com.mango.core.user.bean.UserPhoto; import com.mango.core.utils.StarUtils; @@ -54,6 +57,7 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { private TextView tvConstellation; private TextView tvDesc; private RecyclerView rvPhotos; + private ImageView ivHeadWear; public MsgViewHolderUserCard(BaseMultiItemFetchLoadAdapter adapter) { super(adapter); @@ -78,6 +82,11 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { tvConstellation = findViewById(R.id.tv_constellation); tvDesc = findViewById(R.id.tv_desc); rvPhotos = findViewById(R.id.rv_photos); + ivHeadWear = findViewById(R.id.iv_head_wear); + } + + @Override + protected void bindContentView() { if (photoAdapter == null) { photoAdapter = new BaseQuickAdapter(R.layout.item_p2p_user_photo) { @Override @@ -98,7 +107,6 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { } } - private void showUserPhoto(int position) { //创建一个集合拿来做用户所有照片信息 ArrayList userPhotos = new ArrayList<>(); @@ -135,6 +143,16 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { tvConstellation.setVisibility(View.VISIBLE); } photoAdapter.setNewData(userInfo.getPrivatePhoto()); + + HeadWearInfo headWearInfo = userInfo.getUserHeadwear(); + if (headWearInfo != null && !TextUtils.isEmpty(headWearInfo.getPic())) { + NobleUtil.loadHeadWear( + headWearInfo.getEffect() != null ? headWearInfo.getEffect() : headWearInfo.getPic(), + ivHeadWear + ); + } else { + ivHeadWear.setImageResource(0); + } }); SkillModel.Companion @@ -169,16 +187,6 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { } - @Override - protected void bindContentView() { - - } - - // 内容区域点击事件响应处理。 - protected void onItemClick() { - - } - // 内容区域长按事件响应处理。该接口的优先级比adapter中有长按事件的处理监听高,当该接口返回为true时,adapter的长按事件监听不会被调用到。 protected boolean onItemLongClick() { return true; diff --git a/app/src/main/java/com/mango/moshen/ui/im/recent/RecentContactsFragment.java b/app/src/main/java/com/mango/moshen/ui/im/recent/RecentContactsFragment.java index 780e38dc9..808f887e0 100644 --- a/app/src/main/java/com/mango/moshen/ui/im/recent/RecentContactsFragment.java +++ b/app/src/main/java/com/mango/moshen/ui/im/recent/RecentContactsFragment.java @@ -450,28 +450,30 @@ public class RecentContactsFragment extends TFragment { @Override public void run() { // 查询最近联系人列表数据 - NIMClient.getService(MsgService.class).queryRecentContacts().setCallback(new RequestCallbackWrapper>() { + NIMClient.getService(MsgService.class) + .queryRecentContacts() + .setCallback(new RequestCallbackWrapper>() { - @Override - public void onResult(int code, List recents, Throwable exception) { - if (code != ResponseCode.RES_SUCCESS || recents == null) { - return; - } - loadedRecents = recents; - // 初次加载,更新离线的消息中是否有@我的消息 - for (RecentContact loadedRecent : loadedRecents) { - if (loadedRecent.getSessionType() == SessionTypeEnum.Team) { - updateOfflineContactAited(loadedRecent); + @Override + public void onResult(int code, List recents, Throwable exception) { + if (code != ResponseCode.RES_SUCCESS || recents == null) { + return; + } + loadedRecents = recents; + // 初次加载,更新离线的消息中是否有@我的消息 + for (RecentContact loadedRecent : loadedRecents) { + if (loadedRecent.getSessionType() == SessionTypeEnum.Team) { + updateOfflineContactAited(loadedRecent); + } + } + // 此处如果是界面刚初始化,为了防止界面卡顿,可先在后台把需要显示的用户资料和群组资料在后台加载好,然后再刷新界面 + // + msgLoaded = true; + if (isAdded()) { + onRecentContactsLoaded(); + } } - } - // 此处如果是界面刚初始化,为了防止界面卡顿,可先在后台把需要显示的用户资料和群组资料在后台加载好,然后再刷新界面 - // - msgLoaded = true; - if (isAdded()) { - onRecentContactsLoaded(); - } - } - }); + }); } }, delay ? 250 : 0); } diff --git a/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java b/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java index 021638fc4..cdb4f3f07 100644 --- a/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java +++ b/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java @@ -265,12 +265,6 @@ public class JSInterface { mPosition = position; } - @JavascriptInterface - public void challenge(long uid, String gameId) { - StatisticManager.Instance().onEvent(StatisticsProtocol.gamelist_challenge, "挑战按钮"); - NimP2PMessageActivity.start(context, uid + "", gameId); - } - @JavascriptInterface public void clipboardToPhone(String content) { ClipboardManager myClipboard; diff --git a/app/src/main/res/drawable-xhdpi/ic_p2p_live.png b/app/src/main/res/drawable-xhdpi/ic_p2p_live.png new file mode 100644 index 0000000000000000000000000000000000000000..68882209c128cbe45e6afd14d0a7f7dfa64154ad GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp@K+MCz1|)ZGH@^v_7>k44ofy`glX(f`RCu~LhG+yQ zrzi*=nOk}1;DG}HCr%u=aoS^vT-%Pz{{IY&j12z&KmTERhVRGpd4Jj?9pmn11pQ7;jtaY o{3uWB>pF literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/icon_add_black_list.png b/app/src/main/res/drawable-xhdpi/icon_add_black_list.png new file mode 100644 index 0000000000000000000000000000000000000000..95b9602c5da509a1fdde82bfad18bc7c6a6225d5 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{b+97>k44ofy`glX(ebi+j2_hD5l( zoodL}DuDP#CVC`3iSE*kF?y&JM*m`u5!}9G0Q*?S10~fKSUV9^^via+O zqxeX?w+mr38_1(~y0 z7{dD9j_+DmUO6w`vN!hE?u*-fJ6`ZGZ0-**U;DL2V@-CwxJlO{5y9)VPdZ*qNWJ+? zJoNg%>kCws{PwkIP7S);xWMo4VxCtyUl=B6E#3Bio!{&C9c_scKla`KZ5SH5Rio?C zr_~d)|KH}{pZlybuBqd+nTX)rE!Tc8oN%6d$CuNmk5nr7m^fW&5p&mev7CaJS_pkQiJw!wf{)1#uGKt$5p*I|5f#1A6mC@v9jTlP_sOq=qcpw$ny>VP=ME zEM{hgFjG~j&ip4*i6l4vM)ZFIYnFbeurAfo@56=eJ$q;7uRY)KPygVYG~Ke;%IF5O=Geh5=Xxe zng7vwT#bvPo-=^X{!%I+bIX@~)xRuT@!SEOA0AogJ!Sr>&%!Zq9~I4W7N47a0}kDy zSpu$${^B)IGKr1g$|brNa4Vm$;nHLWIuX$xLUB)__KGkt@Q>lA=mUNQy!t^Ie1*2# zUtK z6U*hxff`(vU=qTRaqzkY6?me<3dJeC!zvEw* W_=)wyxxSVbdIC~{#{?hGq5uG;SRgC_ diff --git a/app/src/main/res/layout/activity_nim_add_black_list.xml b/app/src/main/res/layout/activity_nim_add_black_list.xml index 0399d65d1..1e0a14fb8 100644 --- a/app/src/main/res/layout/activity_nim_add_black_list.xml +++ b/app/src/main/res/layout/activity_nim_add_black_list.xml @@ -41,6 +41,14 @@ android:layout_marginStart="10dp" tools:background="@drawable/default_avatar" /> + + - + android:paddingEnd="16dp"> + + + + + + - + android:paddingEnd="16dp"> + + + + + + + - + android:background="@color/white" + android:orientation="vertical" + android:paddingTop="44dp"> - + android:layout_height="44dp"> - + - + - - - - - - - - - - - - + + + + + + + + + - + - + - + + + + + + + + + + + android:layout_height="match_parent" + android:background="@color/color_FEE4E4" /> - + - + + - - + - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_p2p_user_card.xml b/app/src/main/res/layout/layout_p2p_user_card.xml index 28312fe7d..af0b98534 100644 --- a/app/src/main/res/layout/layout_p2p_user_card.xml +++ b/app/src/main/res/layout/layout_p2p_user_card.xml @@ -129,6 +129,17 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 48910949c..78bfd20e5 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -558,7 +558,7 @@ #5FCCE4 - #FFF3F5FA + #F4F4FA #FFFFFF diff --git a/app/src/module_room_chat/java/com/mango/moshen/room_chat/activity/NimRoomP2PMessageActivity.java b/app/src/module_room_chat/java/com/mango/moshen/room_chat/activity/NimRoomP2PMessageActivity.java index f18590500..22571e8fc 100644 --- a/app/src/module_room_chat/java/com/mango/moshen/room_chat/activity/NimRoomP2PMessageActivity.java +++ b/app/src/module_room_chat/java/com/mango/moshen/room_chat/activity/NimRoomP2PMessageActivity.java @@ -23,8 +23,6 @@ import com.mango.moshen.ui.im.avtivity.NewBaseMessageActivity; import com.mango.moshen.ui.im.fragment.MessageFragment; import com.mango.xchat_android_library.utils.SingleToastUtil; import com.netease.nim.uikit.api.NimUIKit; -import com.netease.nim.uikit.api.model.contact.ContactChangedObserver; -import com.netease.nim.uikit.api.model.main.OnlineStateChangeObserver; import com.netease.nim.uikit.api.model.user.UserInfoObserver; import com.netease.nim.uikit.business.session.constant.Extras; import com.netease.nim.uikit.business.uinfo.UserInfoHelper; @@ -37,9 +35,6 @@ import com.netease.nimlib.sdk.msg.model.CustomNotification; import org.greenrobot.eventbus.EventBus; -import java.util.List; -import java.util.Set; - /** * 点对点聊天界面 @@ -48,51 +43,16 @@ import java.util.Set; */ public class NimRoomP2PMessageActivity extends NewBaseMessageActivity { - ContactChangedObserver friendDataChangedObserver = new ContactChangedObserver() { - @Override - public void onAddedOrUpdatedFriends(List accounts) { - setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); - } - @Override - public void onDeletedFriends(List accounts) { - setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); - } - - @Override - public void onAddUserToBlackList(List account) { - // whetherBlack(); - // setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); - } - - @Override - public void onRemoveUserFromBlackList(List account) { - //whetherBlack(); - // setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); - } - }; - OnlineStateChangeObserver onlineStateChangeObserver = new OnlineStateChangeObserver() { - @Override - public void onlineStateChange(Set accounts) { - // 更新 toolbar - if (accounts.contains(sessionId)) { - // 按照交互来展示 - displayOnlineState(); - } - } - }; private boolean isResume = false; /** * 命令消息接收观察者 */ - Observer commandObserver = new Observer() { - @Override - public void onEvent(CustomNotification message) { - if (!sessionId.equals(message.getSessionId()) || message.getSessionType() != SessionTypeEnum.P2P) { - return; - } - showCommandMessage(message); + Observer commandObserver = message -> { + if (!sessionId.equals(message.getSessionId()) || message.getSessionType() != SessionTypeEnum.P2P) { + return; } + showCommandMessage(message); }; private View tipsLayout; private ImageView closeIcon; @@ -116,13 +76,8 @@ public class NimRoomP2PMessageActivity extends NewBaseMessageActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // 单聊特例话数据,包括个人信息,黑名单 - //addBlackList(); -// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); requestBuddyInfo(); - displayOnlineState(); registerObservers(true); - registerOnlineStateChangeListener(true); IMNetEaseManager.get().getChatRoomEventObservable() .compose(bindToLifecycle()) .filter(roomEvent -> roomEvent.getEvent() == RoomEvent.KICK_OUT_ROOM) @@ -139,7 +94,6 @@ public class NimRoomP2PMessageActivity extends NewBaseMessageActivity { if (!TextUtils.isEmpty(this.sessionId) && !this.sessionId.equals(sessionId)) { this.sessionId = sessionId; requestBuddyInfo(); - displayOnlineState(); displayAntiFraudTips(); messageFragment = (MessageFragment) switchContent(fragment(intent)); } @@ -173,7 +127,6 @@ public class NimRoomP2PMessageActivity extends NewBaseMessageActivity { protected void onDestroy() { super.onDestroy(); registerObservers(false); - registerOnlineStateChangeListener(false); } @Override @@ -205,32 +158,14 @@ public class NimRoomP2PMessageActivity extends NewBaseMessageActivity { unregisterUserInfoObserver(); } NIMClient.getService(MsgServiceObserve.class).observeCustomNotification(commandObserver, register); - NimUIKit.getContactChangedObservable().registerObserver(friendDataChangedObserver, register); } - private void registerOnlineStateChangeListener(boolean register) { - if (!NimUIKitImpl.enableOnlineState()) { - return; - } - NimUIKitImpl.getOnlineStateChangeObservable().registerOnlineStateChangeListeners(onlineStateChangeObserver, register); - } - - private void displayOnlineState() { - if (!NimUIKitImpl.enableOnlineState()) { - return; - } - String detailContent = NimUIKitImpl.getOnlineStateContentProvider().getDetailDisplay(sessionId); - setSubTitle(detailContent); - } private void registerUserInfoObserver() { if (uinfoObserver == null) { - uinfoObserver = new UserInfoObserver() { - @Override - public void onUserInfoChanged(List accounts) { - if (accounts.contains(sessionId)) { - requestBuddyInfo(); - } + uinfoObserver = accounts -> { + if (accounts.contains(sessionId)) { + requestBuddyInfo(); } }; } @@ -276,11 +211,6 @@ public class NimRoomP2PMessageActivity extends NewBaseMessageActivity { return fragment; } - @Override - protected void initToolBar() { - - } - @Override protected boolean needSteepStateBar() { return false; diff --git a/core/src/main/java/com/mango/core/user/UserModel.java b/core/src/main/java/com/mango/core/user/UserModel.java index b8793e6e3..581582120 100644 --- a/core/src/main/java/com/mango/core/user/UserModel.java +++ b/core/src/main/java/com/mango/core/user/UserModel.java @@ -885,22 +885,6 @@ public final class UserModel extends BaseModel implements IUserModel { @Field("shareCode") String shareCode, @Field("inviteCode") String inviteCode); - /** - * @param ticket - * @param uid - * @param nick - * @param avatar - * @param gender - * @return - */ - @FormUrlEncoded - @POST("user/v2/update") - Single> updateUserInfo(@Field("ticket") String ticket, - @Field("uid") long uid, - @Field("nick") String nick, - @Field("avatar") String avatar, - @Field("gender") int gender); - /** * @param ticket diff --git a/library/src/main/java/com/mango/xchat_android_library/widget/IOSSwitchView.java b/library/src/main/java/com/mango/xchat_android_library/widget/IOSSwitchView.java index 41c957bb7..1b7e3d82c 100644 --- a/library/src/main/java/com/mango/xchat_android_library/widget/IOSSwitchView.java +++ b/library/src/main/java/com/mango/xchat_android_library/widget/IOSSwitchView.java @@ -25,8 +25,8 @@ import com.mango.xchat_android_library.R; */ public class IOSSwitchView extends View { - private static final int foregroundColor = 0xFFEFEFEF; - private static final int backgroundColor = 0xFFCCCCCC; + private static final int foregroundColor = Color.parseColor("#C7DAEA"); + private static final int backgroundColor = Color.parseColor("#C7DAEA"); private int colorStep = backgroundColor; private int mTintColor; @@ -66,6 +66,8 @@ public class IOSSwitchView extends View { //手势检测器 private GestureDetector mGestureDetector; + private boolean mIsNoStrokeColor = false; + private boolean mIsKeepRate = true; public IOSSwitchView(Context context) { this(context, null); @@ -75,6 +77,7 @@ public class IOSSwitchView extends View { this(context, attrs, 0); } + public IOSSwitchView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); @@ -257,7 +260,6 @@ public class IOSSwitchView extends View { } - @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); @@ -469,9 +471,11 @@ public class IOSSwitchView extends View { public void setOn(boolean on) { setOn(on, false); } + public void setOn(boolean on, boolean isNeedListener) { setOn(on, false, isNeedListener); } + public void setOn(boolean on, boolean animate, boolean isNeedListener) { if (isOn == on) return; @@ -540,20 +544,18 @@ public class IOSSwitchView extends View { invalidate(); } - private boolean mIsNoStrokeColor = false; public void setNoStrokeColor(boolean isNoStrokeColor) { mIsNoStrokeColor = isNoStrokeColor; invalidate(); } - private boolean mIsKeepRate = true; public void setmIsKeepRate(boolean isKeepRate) { mIsKeepRate = isKeepRate; invalidate(); } public int getSelectedColor() { - return 0xFFFF894F; + return Color.parseColor("#5FCCE4"); } /**