diff --git a/common/src/main/java/com/yunbao/common/Constants.java b/common/src/main/java/com/yunbao/common/Constants.java index fabbf6967..3063290c0 100644 --- a/common/src/main/java/com/yunbao/common/Constants.java +++ b/common/src/main/java/com/yunbao/common/Constants.java @@ -172,6 +172,7 @@ public class Constants { public static final String RECOMMEND_CARD_NOTIFY = "recommendCardNotify";//推荐卡通知消息 public static final String STAR_CHALLENGE_UPDATE = "starChallengeUpdate";//星级助力 public static final String AI_AUTOMATIC_SPEECH = "aiAutomaticSpeech";//机器人助手 + public static final String AI_AUTOMATIC_SPEECH_LIVE = "aiAutomaticSpeechNew";//机器人助手 public static final String STAR_CHALLENGE_UPGRADE_NOTIFY = "starChallengeUpgradeNotify";//星级挑战成功 public static final String SUPER_VISION = "supervision";//超级发言警告 public static final String PK_RANK_UPDATE = "RankingRankUpdate";//PK排位赛更新数据 diff --git a/common/src/main/java/com/yunbao/common/bean/LiveStetUpStatusModel.java b/common/src/main/java/com/yunbao/common/bean/LiveStetUpStatusModel.java new file mode 100644 index 000000000..a4a98aa0d --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/LiveStetUpStatusModel.java @@ -0,0 +1,49 @@ +package com.yunbao.common.bean; + +import android.text.TextUtils; + +import com.google.gson.annotations.SerializedName; + +public class LiveStetUpStatusModel extends BaseModel { + + @SerializedName("wishList") + private String wishList; + @SerializedName("ai_state") + private String aiState; + + /** + * wishList 1设置 0 未设置 + * + * @return + */ + public boolean getWishListState() { + return TextUtils.equals(wishList, "1"); + } + + /** + * aiState 1打开机器人 0 未设置 + * + * @return + */ + public boolean getAiStateState() { + return TextUtils.equals(aiState, "1"); + } + + public String getWishList() { + return wishList; + } + + public LiveStetUpStatusModel setWishList(String wishList) { + this.wishList = wishList; + return this; + } + + public String getAiState() { + return aiState; + } + + public LiveStetUpStatusModel setAiState(String aiState) { + this.aiState = aiState; + return this; + } +} diff --git a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 1edb1f6ca..50fd3d6a0 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -15,6 +15,7 @@ import com.yunbao.common.bean.LinkMicUserBeanV2; import com.yunbao.common.bean.LiveAiRobotBean; import com.yunbao.common.bean.LiveInfoModel; import com.yunbao.common.bean.LiveRoomActivityBanner; +import com.yunbao.common.bean.LiveStetUpStatusModel; import com.yunbao.common.bean.MsgSwitchDetailModel; import com.yunbao.common.bean.NewPeopleInfo; import com.yunbao.common.bean.NobleRankHideUserListModel; @@ -522,11 +523,18 @@ public interface PDLiveApi { /** * 机器人修改话术 */ - @GET("/api/public/?service=Live.updateAiAutomaticSpeech ") + @GET("/api/public/?service=Live.updateAiAutomaticSpeech") Observable>> updateAiAutomaticSpeech( @Query("type") String type, @Query("id") String id, @Query("content") String content ); + /** + * 开播获取机器人状态和心愿单状态 + */ + @GET("/api/public/?service=Live.getLiveStetUpStatus") + Observable> getLiveStetUpStatus( + @Query("liveuid") String liveUid + ); } diff --git a/common/src/main/java/com/yunbao/common/manager/IMLoginManager.java b/common/src/main/java/com/yunbao/common/manager/IMLoginManager.java index edd422440..cb0e8a0c6 100644 --- a/common/src/main/java/com/yunbao/common/manager/IMLoginManager.java +++ b/common/src/main/java/com/yunbao/common/manager/IMLoginManager.java @@ -7,7 +7,6 @@ import android.text.TextUtils; import androidx.annotation.NonNull; -import com.cosmos.baseutil.app.AppContext; import com.google.gson.Gson; import com.lzf.easyfloat.EasyFloat; import com.yunbao.common.CommonAppContext; @@ -39,7 +38,25 @@ public class IMLoginManager extends BaseCacheManager { private final String IS_FLOAT = "is_float"; private final String IS_HINT = "is_hint"; private final String IS_HINT2 = "is_hint2"; + private final String SELECT_CLARITY = "selectClarity"; + /** + * 设置清晰度 + * + * @param selectClarity + */ + public void setSelectClarity(int selectClarity) { + put(SELECT_CLARITY, selectClarity); + } + + /** + * 获取清晰度 + * + * @return + */ + public int getSelectClarity() { + return getInt(SELECT_CLARITY, 1); + } public boolean isHint() { return 1 == getInt(IS_HINT, 0); diff --git a/common/src/main/java/com/yunbao/common/views/InputCustomPopup.java b/common/src/main/java/com/yunbao/common/views/InputCustomPopup.java index 8ad8f995a..25a8e22da 100644 --- a/common/src/main/java/com/yunbao/common/views/InputCustomPopup.java +++ b/common/src/main/java/com/yunbao/common/views/InputCustomPopup.java @@ -4,6 +4,7 @@ import android.content.Context; import android.text.TextUtils; import android.view.View; import android.widget.EditText; +import android.widget.TextView; import androidx.annotation.NonNull; @@ -17,14 +18,17 @@ import com.yunbao.common.utils.ToastUtil; */ public class InputCustomPopup extends CenterPopupView { private String message = ""; + private int title = R.string.dialog_tip; - public InputCustomPopup(@NonNull Context context, String message) { + public InputCustomPopup(@NonNull Context context, String message, int title) { super(context); this.message = message; + this.title = title; } - public InputCustomPopup(@NonNull Context context) { + public InputCustomPopup(@NonNull Context context,int title) { super(context); + this.title = title; } // 返回自定义弹窗的布局 @@ -38,7 +42,9 @@ public class InputCustomPopup extends CenterPopupView { protected void onCreate() { super.onCreate(); EditText content = findViewById(R.id.content); + TextView titleText = findViewById(R.id.title); content.setText(message); + titleText.setText(title); findViewById(R.id.btn_cancel).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { diff --git a/common/src/main/java/com/yunbao/common/views/LiveClarityCustomPopup.java b/common/src/main/java/com/yunbao/common/views/LiveClarityCustomPopup.java new file mode 100644 index 000000000..13ec97ca9 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/views/LiveClarityCustomPopup.java @@ -0,0 +1,116 @@ +package com.yunbao.common.views; + +import android.content.Context; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import androidx.annotation.NonNull; + +import com.lxj.xpopup.core.BottomPopupView; +import com.yunbao.common.R; +import com.yunbao.common.views.weight.ViewClicksAntiShake; + +public class LiveClarityCustomPopup extends BottomPopupView implements View.OnClickListener { + private int selectClarity = 1; + private RelativeLayout lineSd, lineHd, lineFhd; + private ImageView iconSd, iconHd, iconFhd; + + public int getSelectClarity() { + return selectClarity; + } + + public LiveClarityCustomPopup(@NonNull Context context, int selectClarity) { + super(context); + this.selectClarity = selectClarity; + } + + public LiveClarityCustomPopup(@NonNull Context context) { + super(context); + } + + @Override + public void onClick(View v) { + + } + + // 返回自定义弹窗的布局 + @Override + protected int getImplLayoutId() { + return R.layout.dialog_live_clarity; + } + + // 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑 + @Override + protected void onCreate() { + super.onCreate(); + initView(); + initDate(); + } + + private void initView() { + lineSd = findViewById(R.id.line_sd); + lineHd = findViewById(R.id.line_hd); + lineFhd = findViewById(R.id.line_fhd); + iconSd = findViewById(R.id.icon_sd); + iconHd = findViewById(R.id.icon_hd); + iconFhd = findViewById(R.id.icon_fhd); + selectClarity(selectClarity); + //流畅 + ViewClicksAntiShake.clicksAntiShake(lineSd, () -> { + selectClarity = 0; + selectClarity(selectClarity); + dismiss(); + }); + //高清 + ViewClicksAntiShake.clicksAntiShake(lineHd, () -> { + selectClarity = 1; + selectClarity(selectClarity); + dismiss(); + + }); + //超高清 + ViewClicksAntiShake.clicksAntiShake(lineFhd, () -> { + selectClarity = 2; + selectClarity(selectClarity); + dismiss(); + }); + } + + /** + * 状态选择 + * + * @param selectClarity + */ + private void selectClarity(int selectClarity) { + switch (selectClarity) { + case 0: + lineSd.setSelected(true); + lineHd.setSelected(false); + lineFhd.setSelected(false); + iconSd.setVisibility(VISIBLE); + iconHd.setVisibility(GONE); + iconFhd.setVisibility(GONE); + break; + case 1: + lineSd.setSelected(false); + lineHd.setSelected(true); + lineFhd.setSelected(false); + iconSd.setVisibility(GONE); + iconHd.setVisibility(VISIBLE); + iconFhd.setVisibility(GONE); + break; + case 2: + lineSd.setSelected(false); + lineHd.setSelected(false); + lineFhd.setSelected(true); + iconSd.setVisibility(GONE); + iconHd.setVisibility(GONE); + iconFhd.setVisibility(VISIBLE); + break; + } + } + + private void initDate() { + } +} diff --git a/common/src/main/java/com/yunbao/common/views/LiveRobotMessageCustomPopup.java b/common/src/main/java/com/yunbao/common/views/LiveRobotMessageCustomPopup.java index 953e9c7fe..f4652a3d6 100644 --- a/common/src/main/java/com/yunbao/common/views/LiveRobotMessageCustomPopup.java +++ b/common/src/main/java/com/yunbao/common/views/LiveRobotMessageCustomPopup.java @@ -136,7 +136,7 @@ public class LiveRobotMessageCustomPopup extends BottomPopupView { @Override public void onClick(View v) { new XPopup.Builder(getContext()) - .asCustom(new InputCustomPopup(getContext()).setListener(new InputCustomPopup.InputCustomListener() { + .asCustom(new InputCustomPopup(getContext(),R.string.automatic_message_sending).setListener(new InputCustomPopup.InputCustomListener() { @Override public void onConfirm(String text) { //添加消息语 diff --git a/common/src/main/java/com/yunbao/common/views/LiveRobotSayHelloCustomPopup.java b/common/src/main/java/com/yunbao/common/views/LiveRobotSayHelloCustomPopup.java index 93e61f37c..a76fcadef 100644 --- a/common/src/main/java/com/yunbao/common/views/LiveRobotSayHelloCustomPopup.java +++ b/common/src/main/java/com/yunbao/common/views/LiveRobotSayHelloCustomPopup.java @@ -82,7 +82,7 @@ public class LiveRobotSayHelloCustomPopup extends BottomPopupView { @Override public void onClick(View v) { new XPopup.Builder(getContext()) - .asCustom(new InputCustomPopup(getContext()).setListener(new InputCustomPopup.InputCustomListener() { + .asCustom(new InputCustomPopup(getContext(), R.string.automatic_greeting_setting).setListener(new InputCustomPopup.InputCustomListener() { @Override public void onConfirm(String text) { //添加消息语 diff --git a/common/src/main/java/com/yunbao/common/views/RobotMessageViewHolder.java b/common/src/main/java/com/yunbao/common/views/RobotMessageViewHolder.java index f182a0c12..c14de79f2 100644 --- a/common/src/main/java/com/yunbao/common/views/RobotMessageViewHolder.java +++ b/common/src/main/java/com/yunbao/common/views/RobotMessageViewHolder.java @@ -53,7 +53,7 @@ public class RobotMessageViewHolder extends RecyclerView.ViewHolder { @Override public void onClick(View v) { new XPopup.Builder(itemView.getContext()) - .asCustom(new InputCustomPopup(itemView.getContext(), message.getContent()).setListener(new InputCustomPopup.InputCustomListener() { + .asCustom(new InputCustomPopup(itemView.getContext(), message.getContent(), R.string.automatic_message_sending).setListener(new InputCustomPopup.InputCustomListener() { @Override public void onConfirm(String text) { LiveNetManager.get(itemView.getContext()) diff --git a/common/src/main/java/com/yunbao/common/views/RobotSayHelloViewHoler.java b/common/src/main/java/com/yunbao/common/views/RobotSayHelloViewHoler.java index 359f7ba1a..75ee2e293 100644 --- a/common/src/main/java/com/yunbao/common/views/RobotSayHelloViewHoler.java +++ b/common/src/main/java/com/yunbao/common/views/RobotSayHelloViewHoler.java @@ -53,7 +53,7 @@ public class RobotSayHelloViewHoler extends RecyclerView.ViewHolder { @Override public void onClick(View v) { new XPopup.Builder(itemView.getContext()) - .asCustom(new InputCustomPopup(itemView.getContext(), message.getContent()).setListener(new InputCustomPopup.InputCustomListener() { + .asCustom(new InputCustomPopup(itemView.getContext(), message.getContent(), R.string.automatic_greeting_setting).setListener(new InputCustomPopup.InputCustomListener() { @Override public void onConfirm(String text) { LiveNetManager.get(itemView.getContext()) diff --git a/common/src/main/res/drawable/bg_btn_definition.xml b/common/src/main/res/drawable/bg_btn_definition.xml new file mode 100644 index 000000000..f4a1222ee --- /dev/null +++ b/common/src/main/res/drawable/bg_btn_definition.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/dialog_live_clarity.xml b/common/src/main/res/layout/dialog_live_clarity.xml new file mode 100644 index 000000000..35fd83425 --- /dev/null +++ b/common/src/main/res/layout/dialog_live_clarity.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/mipmap-xxhdpi/icon_fhd.png b/common/src/main/res/mipmap-xxhdpi/icon_fhd.png new file mode 100644 index 000000000..278b37842 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_fhd.png differ diff --git a/common/src/main/res/mipmap-xxhdpi/icon_hd.png b/common/src/main/res/mipmap-xxhdpi/icon_hd.png new file mode 100644 index 000000000..4bdd05b04 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_hd.png differ diff --git a/common/src/main/res/mipmap-xxhdpi/icon_sd.png b/common/src/main/res/mipmap-xxhdpi/icon_sd.png new file mode 100644 index 000000000..d92be9bb6 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_sd.png differ diff --git a/common/src/main/res/mipmap-xxhdpi/icon_selected.png b/common/src/main/res/mipmap-xxhdpi/icon_selected.png new file mode 100644 index 000000000..5aeea828a Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_selected.png differ diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index b0b723181..7371b9465 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -996,4 +996,8 @@ 當有用戶進入直播間時,機器人會@該用戶並自動 隨機以下一句話。最少設置1條,最多20條。 機器人設置 + 高清 + 流暢 + 超高清 + 確定清晰度開播後,需要重新開播才能更改 diff --git a/config.gradle b/config.gradle index 6f21be570..ac60b7e57 100644 --- a/config.gradle +++ b/config.gradle @@ -10,9 +10,9 @@ ext { manifestPlaceholders = [ //正式 - serverHost : "https://napi.yaoulive.com", +// serverHost : "https://napi.yaoulive.com", // 測試 -// serverHost : "https://ceshi.yaoulive.com", + serverHost : "https://ceshi.yaoulive.com", //腾讯地图 txMapAppKey : "EOZBZ-ASLCU-4XPV3-BDCHZ-4E3Q7-H4BWB", diff --git a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java index a7e4a792c..8a1dc02df 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java @@ -17,6 +17,7 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.os.Handler; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; @@ -31,17 +32,22 @@ import androidx.fragment.app.DialogFragment; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.blankj.utilcode.util.GsonUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.transition.Transition; import com.lxj.xpopup.XPopup; +import com.lxj.xpopup.core.BasePopupView; +import com.lxj.xpopup.interfaces.XPopupCallback; import com.opensource.svgaplayer.SVGAImageView; import com.tencent.trtc.TRTCCloudDef; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppContext; import com.yunbao.common.Constants; +import com.yunbao.common.bean.AiAutomaticSpeechModel; import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.bean.LinkMicUserBean; +import com.yunbao.common.bean.LiveAiRobotBean; import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.LiveUserGiftBean; import com.yunbao.common.bean.MicUserBean; @@ -52,6 +58,7 @@ import com.yunbao.common.http.CommonHttpConsts; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; +import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.IMRTCManager; import com.yunbao.common.manager.RandomPkManager; @@ -99,11 +106,13 @@ import com.yunbao.live.views.LivePushRyViewHolder; import com.yunbao.live.views.LiveRoomViewHolder; import com.yunbao.live.views.LiveRyAnchorViewHolder; +import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.File; import java.util.List; +import java.util.Random; import cn.rongcloud.rtc.api.RCRTCEngine; import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback; @@ -284,6 +293,52 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl switch (functionID) { case Constants.LIVE_ROBOT: new XPopup.Builder(mContext) + .setPopupCallback(new XPopupCallback() { + @Override + public void onCreated(BasePopupView popupView) { + + } + + @Override + public void beforeShow(BasePopupView popupView) { + + } + + @Override + public void onShow(BasePopupView popupView) { + + } + + @Override + public void onDismiss(BasePopupView popupView) { + EventBus.getDefault().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.UPDATA_ROBOT)); + } + + @Override + public void beforeDismiss(BasePopupView popupView) { + + } + + @Override + public boolean onBackPressed(BasePopupView popupView) { + return false; + } + + @Override + public void onKeyBoardStateChanged(BasePopupView popupView, int height) { + + } + + @Override + public void onDrag(BasePopupView popupView, int value, float percent, boolean upOrLeft) { + + } + + @Override + public void onClickOutside(BasePopupView popupView) { + + } + }) .asCustom(new LiveRobotSettingCustomPopup(mContext)) .show(); break; @@ -674,6 +729,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl * @param data createRoom返回的数据 */ public void startLiveSuccess(String data, int liveType, int liveTypeVal) { + Log.e("随机打招呼", "(((((((((((((((((((((((((((((((((((((((((((((((" + data); mLiveType = liveType; mLiveTypeVal = liveTypeVal; //处理createRoom返回的数据 @@ -774,6 +830,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl if (CommonAppConfig.GAME_ENABLE) { mGameList = JSON.parseArray(obj.getString("game_switch"), Integer.class); } + getAiRobotStatus(); } /** @@ -861,6 +918,10 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl LiveHttpUtil.stopLive(mStream, new HttpCallback() { @Override public void onSuccess(int code, String msg, String[] info) { + if (robotRunnable != null) { + robotHandler.removeCallbacks(robotRunnable); + robotRunnable = null; + } if (code == 0) { JSONObject obj = JSON.parseObject(info[0]); JSONObject datas = obj.getJSONObject("data"); @@ -1506,6 +1567,9 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl mLiveRoomViewHolder.aiAutomaticSpeech((event.getAiAutomaticSpeechModel())); } break; + case UPDATA_ROBOT: + getAiRobotStatus(); + break; } } @@ -1532,4 +1596,118 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } }); } + + /** + * 获取机器人配置;取得求关注时间间隔 + */ + private long robotTime = 0; + + private void getAiRobotStatus() { + Log.e("随机打招呼", "((((((((((((((((((((((((((((((((((((((((((((((("); + LiveNetManager.get(mContext) + .getAiRobotStatus(new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveAiRobotBean data) { + Log.e("随机打招呼", "(((((((((((((((((((((((((((((((((((((((((((((((" + data.toString()); + if (data.getStatus() == 1) { + if (robotRunnable != null) { + robotHandler.removeCallbacks(robotRunnable); + robotRunnable = null; + } + robotRunnable = new Runnable() { + @Override + public void run() { + Log.e("随机打招呼", "(((((((((((((((((((((((((((((((((((((((((((((((data.getName())" + data.getName()); + String robotName = data.getName(); + //发送消息 + LiveNetManager.get(mContext) + .getAiRobotBody(LiveAiRobotBean.Message.TYPE_FOLLOW, + new com.yunbao.common.http.base.HttpCallback>() { + @Override + public void onSuccess(List messageList) { + Random random = new Random(); + int randNumber = random.nextInt(messageList.size()) - 1; + if (randNumber < 0) { + randNumber = 0; + } + Log.e("随机打招呼", "(((((((((((((((((((((((((((((((((((((((((((((((data.randNumber())" + randNumber); + Log.e("随机打招呼", "(((((((((((((((((((((((((((((((((((((((((((((((data)" + messageList.toString()); + sendRobotMessage(robotName, messageList.get(randNumber).getContent()); + } + + @Override + public void onError(String error) { + Log.e("随机打招呼", "(((((((((((((((((((((((((((((((((((((((((((((((data.error())" + error); + } + }); + + } + }; + robotTime = data.getTime() * 60 * 1000; + Log.e("随机打招呼", "(((((((((((((((((((((((((((((((((((((((((((((((robotTime)" + robotTime); + robotHandler.postDelayed(robotRunnable, robotTime); + } + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + }); + } + + //机器人求关注轮询器 + private Handler robotHandler = new Handler(); + private Runnable robotRunnable = null; + + /** + * '{"msg": + * [{"_method_":"aiAutomaticSpeech", + * "ct":{"name_color":"#f19ec2","ai_name":"'+_this.robotInfo.ai_name+'", + * "content":"'+content+'","user_name":"", + * "icon":"https://downs.yaoulive.com/xzs_tab.png", + * "system_bubble":"https://downs.yaoulive.com/xzs_qipao.9.png"}, + * "msgtype":"10"}],"retcode":"000000","retmsg":"OK"}' + */ + private void sendRobotMessage(String name, String content) { + Log.e("随机打招呼", name + "==========00000000000000++++" + content); + AiAutomaticSpeechModel aiAutomaticSpeechModel = new AiAutomaticSpeechModel(); + aiAutomaticSpeechModel.setAiName(name) + .setIcon("https://downs.yaoulive.com/xzs_tab.png") + .setNameColor("#f19ec2") + .setSystemBubble("https://downs.yaoulive.com/xzs_qipao.9.png") + .setUserName("") + .setContent(content); + SocketSendBean msg = + new SocketSendBean() + .param("_method_", "aiAutomaticSpeechNew") + .param("msgtype", "10") + .param("ct", GsonUtils.toJson(aiAutomaticSpeechModel, AiAutomaticSpeechModel.class)); + msg.create(); + String targetId = "g" + mLiveUid; + Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; + TextMessage messageContent = TextMessage.obtain(msg.mResult.toString()); + Message message = Message.obtain(targetId, conversationType, messageContent); + + RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() { + @Override + public void onAttached(Message message) { + + } + + @Override + public void onSuccess(Message message) { + if (SocketRyClient.mSocketHandler != null) { + SocketRyClient.mSocketHandler.processBroadcast(msg.mResult.toString() + ""); + } + } + + @Override + public void onError(Message message, RongIMClient.ErrorCode errorCode) { + Log.e("tx", "aaa" + errorCode.toString()); + ToastUtil.show(errorCode.code + ":" + errorCode.msg); + } + }); + robotHandler.postDelayed(robotRunnable, robotTime); + } } diff --git a/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java b/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java index c690ed6f2..8e5daccd3 100644 --- a/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java +++ b/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java @@ -255,7 +255,8 @@ public class LiveAudienceEvent extends BaseModel { DISCONNEXT_PK_TIME(50, "单人Pk结束"), UP_PK_TWO(51, "PK头像信息"), CUSTOM_FULL_SERVICE_NOTIFY(51, "全服通知"), - CHANGE_VIEW(52, "更改连胜位置"); + CHANGE_VIEW(52, "更改连胜位置"), + UPDATA_ROBOT(53, "更新机器人消息"); private int type; private String name; diff --git a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java index ce6ea69f5..b2685d167 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java @@ -529,6 +529,7 @@ public class SocketRyClient { } break; case Constants.AI_AUTOMATIC_SPEECH: + case Constants.AI_AUTOMATIC_SPEECH_LIVE: //{"name_color":"#f19ec2","ai_name":"助手小小P","content":"@1 ","user_name":"1","icon":"https://downs.yaoulive.com/xzs_tab.png","system_bubble":"https://downs.yaoulive.com/xzs_qipao.9.png"} AiAutomaticSpeechModel aiAutomaticSpeechModel = GsonUtils.fromJson(map.getString("ct"), AiAutomaticSpeechModel.class); Bus.get().post(new LiveAudienceEvent() diff --git a/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java index 57be40428..019a85805 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java @@ -11,12 +11,15 @@ import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; +import android.widget.ImageView; import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import com.lxj.xpopup.XPopup; +import com.lxj.xpopup.core.BasePopupView; +import com.lxj.xpopup.interfaces.XPopupCallback; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.bean.LiveClassBean; @@ -25,6 +28,7 @@ import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.interfaces.ImageResultCallback; +import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.L; import com.yunbao.common.utils.ProcessImageUtil; @@ -32,7 +36,9 @@ import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.AbsViewHolder; +import com.yunbao.common.views.LiveClarityCustomPopup; import com.yunbao.common.views.LiveRobotSettingCustomPopup; +import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.faceunity.FaceManager; import com.yunbao.live.R; import com.yunbao.live.activity.LiveActivity; @@ -59,7 +65,7 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl private ProcessImageUtil mImageUtil; private File mAvatarFile; private TextView mLiveClass; - private TextView mLiveTypeTextView;//房间类型TextView + private TextView mLiveTypeTextView, liveClarity;//房间类型TextView private TextView mLiveWishListTextView;//心愿单TextView private int mLiveClassID;//直播频道id private int mLiveType;//房间类型 @@ -70,6 +76,8 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl private LiveClassBean classBean; private FaceManager manager; private TextView faceTextView;//提示人脸未检测到的TextView + private ImageView imgClarity; + private int selectClarity = 1; public LiveNewReadyRyViewHolder(Context context, ViewGroup parentView, int liveSdk) { super(context, parentView, liveSdk); @@ -90,6 +98,8 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl @Override public void init() { mRootView = (ConstraintLayout) findViewById(R.id.traceroute_rootview); + imgClarity = (ImageView) findViewById(R.id.img_clarity); + liveClarity = (TextView) findViewById(R.id.live_clarity); mRootView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -163,6 +173,7 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl findViewById(R.id.btn_start_live).setOnClickListener(this); findViewById(R.id.btn_wishlist).setOnClickListener(this); findViewById(R.id.btn_horizontally).setOnClickListener(this); + if (manager != null) { manager.setFaceStatusChanged(new FaceManager.FaceStatusChanged() { final Handler handler = new Handler(Looper.getMainLooper()); @@ -180,6 +191,83 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl }); //新美颜 setFaceUnity(true); + + } + //设置清晰度 + selectClarity = IMLoginManager.get(mContext).getSelectClarity(); + setSelectClarity(selectClarity); + ViewClicksAntiShake + .clicksAntiShake( + findViewById(R.id.btn_live_clarity), () -> { + LiveClarityCustomPopup liveClarityCustomPopup = new LiveClarityCustomPopup(mContext, selectClarity); + new XPopup.Builder(mContext) + .setPopupCallback(new XPopupCallback() { + @Override + public void onCreated(BasePopupView popupView) { + + } + + @Override + public void beforeShow(BasePopupView popupView) { + + } + + @Override + public void onShow(BasePopupView popupView) { + + } + + @Override + public void onDismiss(BasePopupView popupView) { + setSelectClarity(liveClarityCustomPopup.getSelectClarity()); + } + + @Override + public void beforeDismiss(BasePopupView popupView) { + + } + + @Override + public boolean onBackPressed(BasePopupView popupView) { + return false; + } + + @Override + public void onKeyBoardStateChanged(BasePopupView popupView, int height) { + + } + + @Override + public void onDrag(BasePopupView popupView, int value, float percent, boolean upOrLeft) { + + } + + @Override + public void onClickOutside(BasePopupView popupView) { + + } + }) + .asCustom(liveClarityCustomPopup) + .show(); + }); + } + + private void setSelectClarity(int selectClarity) { + this.selectClarity = selectClarity; + IMLoginManager.get(mContext).setSelectClarity(selectClarity); + switch (selectClarity) { + case 0: + imgClarity.setImageResource(R.mipmap.icon_sd); + liveClarity.setText(R.string.standard_clear); + break; + case 1: + imgClarity.setImageResource(R.mipmap.icon_hd); + liveClarity.setText(R.string.high_definition); + break; + case 2: + imgClarity.setImageResource(R.mipmap.icon_fhd); + liveClarity.setText(R.string.ultra_hd); + break; } } diff --git a/live/src/main/res/layout/view_new_live_ready.xml b/live/src/main/res/layout/view_new_live_ready.xml index 98af6cebf..eadb2a80c 100644 --- a/live/src/main/res/layout/view_new_live_ready.xml +++ b/live/src/main/res/layout/view_new_live_ready.xml @@ -54,6 +54,43 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> + + + + + + + + +