diff --git a/FaceUnity/src/main/res/values/strings.xml b/FaceUnity/src/main/res/values/strings.xml
index 799a50e10..e0f66a9b3 100644
--- a/FaceUnity/src/main/res/values/strings.xml
+++ b/FaceUnity/src/main/res/values/strings.xml
@@ -299,7 +299,7 @@
Hip
Head shrink
Thin leg
- No body tracking
+ No message tracking
Body driver
Bust driver
diff --git a/app/src/main/java/com/shayu/phonelive/utils/CustomMessageReceiver.java b/app/src/main/java/com/shayu/phonelive/utils/CustomMessageReceiver.java
index 844c12b45..ad6efe52e 100644
--- a/app/src/main/java/com/shayu/phonelive/utils/CustomMessageReceiver.java
+++ b/app/src/main/java/com/shayu/phonelive/utils/CustomMessageReceiver.java
@@ -89,20 +89,23 @@ public class CustomMessageReceiver extends PushMessageReceiver {
public boolean onNotificationMessageArrived(Context context, PushType pushType, PushNotificationMessage notificationMessage) {
Log.i("gmc", notificationMessage.getPushContent() + "VVV" + notificationMessage.getPushTitle() + "gmc11112222" + notificationMessage.getExtra());
if (!SpUtil.getInstance().getBooleanValue("NOTIFICATION")) {
- Activity activity = AppContext.activityWeakReference.get();
- if (activity != null) {
- DialogUitl.showSimpleDialog(activity, "应用需要通知权限", new DialogUitl.SimpleCallback() {
- @Override
- public void onConfirmClick(Dialog dialog, String content) {
- Intent intent = new Intent();
- intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
- intent.putExtra("app_package", context.getPackageName());
- intent.putExtra("app_uid", context.getApplicationInfo().uid);
- // for Android 8 and above
- intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
- activity.startActivity(intent);
- }
- });
+ if (AppContext.activityWeakReference != null) {
+ Activity activity = AppContext.activityWeakReference.get();
+ if (activity != null) {
+ DialogUitl.showSimpleDialog(activity, "应用需要通知权限", new DialogUitl.SimpleCallback() {
+ @Override
+ public void onConfirmClick(Dialog dialog, String content) {
+ Intent intent = new Intent();
+ intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
+ intent.putExtra("app_package", context.getPackageName());
+ intent.putExtra("app_uid", context.getApplicationInfo().uid);
+ // for Android 8 and above
+ intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
+ activity.startActivity(intent);
+
+ }
+ });
+ }
}
}
if (notificationMessage.getExtra() == null) {
diff --git a/common/src/main/java/com/yunbao/common/Constants.java b/common/src/main/java/com/yunbao/common/Constants.java
index 02b0020ea..fabbf6967 100644
--- a/common/src/main/java/com/yunbao/common/Constants.java
+++ b/common/src/main/java/com/yunbao/common/Constants.java
@@ -133,6 +133,7 @@ public class Constants {
public static final int LIVE_FUNC_WKS = 2014;//語音
public static final int LIVE_FUNC_ZSLK = 2015;//語音
public static final int LIVE_FUNC_RANDOM_PK = 2016;//随机PK
+ public static final int LIVE_ROBOT= 2017;//机器人
//socket
public static final String SOCKET_CONN = "conn";
diff --git a/common/src/main/java/com/yunbao/common/adapter/RobotMessageAdapter.java b/common/src/main/java/com/yunbao/common/adapter/RobotMessageAdapter.java
new file mode 100644
index 000000000..a9745714a
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/adapter/RobotMessageAdapter.java
@@ -0,0 +1,51 @@
+package com.yunbao.common.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.yunbao.common.R;
+import com.yunbao.common.bean.LiveAiRobotBean;
+import com.yunbao.common.views.RobotMessageViewHolder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RobotMessageAdapter extends RecyclerView.Adapter {
+ private List messageList = new ArrayList<>();
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View robotMessageView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_robot_message, parent, false);
+ return new RobotMessageViewHolder(robotMessageView);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ RobotMessageViewHolder messageViewHolder = (RobotMessageViewHolder) holder;
+ messageViewHolder.setData(messageList.get(position), position + 1);
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return messageList.size();
+ }
+
+
+ public void setDataAll(List messages) {
+ messageList.clear();
+ messageList.addAll(messages);
+ notifyDataSetChanged();
+ }
+
+ // 删除数据
+ public void removeData(int position) {
+ messageList.remove(position);
+ //删除动画
+ notifyItemRemoved(position);
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/adapter/RobotSayHelloAdapter.java b/common/src/main/java/com/yunbao/common/adapter/RobotSayHelloAdapter.java
new file mode 100644
index 000000000..adeacfa4e
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/adapter/RobotSayHelloAdapter.java
@@ -0,0 +1,51 @@
+package com.yunbao.common.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.yunbao.common.R;
+import com.yunbao.common.bean.LiveAiRobotBean;
+import com.yunbao.common.views.RobotSayHelloViewHoler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RobotSayHelloAdapter extends RecyclerView.Adapter {
+ private List messageList = new ArrayList<>();
+
+ @NonNull
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View robotSayHelloView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_robot_message, parent, false);
+ return new RobotSayHelloViewHoler(robotSayHelloView);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ RobotSayHelloViewHoler robotSayHelloViewHoler = (RobotSayHelloViewHoler) holder;
+ robotSayHelloViewHoler.setData(messageList.get(position), position + 1);
+ }
+
+ @Override
+ public int getItemCount() {
+ return messageList.size();
+ }
+
+
+ public void setDataAll(List messages) {
+ messageList.clear();
+ messageList.addAll(messages);
+ notifyDataSetChanged();
+ }
+
+ // 删除数据
+ public void removeData(int position) {
+ messageList.remove(position);
+ //删除动画
+ notifyItemRemoved(position);
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/bean/HttpCallbackModel.java b/common/src/main/java/com/yunbao/common/bean/HttpCallbackModel.java
index c2369455f..da77d56e5 100644
--- a/common/src/main/java/com/yunbao/common/bean/HttpCallbackModel.java
+++ b/common/src/main/java/com/yunbao/common/bean/HttpCallbackModel.java
@@ -1,10 +1,18 @@
package com.yunbao.common.bean;
-public class HttpCallbackModel extends BaseModel{
+public class HttpCallbackModel extends BaseModel {
private int code;
private String msg;
+ public HttpCallbackModel() {
+ }
+
+ public HttpCallbackModel(int code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
public int getCode() {
return code;
}
diff --git a/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java
new file mode 100644
index 000000000..44e8b9f95
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java
@@ -0,0 +1,138 @@
+package com.yunbao.common.bean;
+
+import androidx.annotation.NonNull;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * 机器人bean
+ */
+public class LiveAiRobotBean extends BaseModel {
+ @SerializedName("ai_name")
+ private String name;
+ @SerializedName("ai_state")
+ private int status;//1=开 0=关
+ @SerializedName("ai_time")
+ private int time;
+ @SerializedName("ai_sayhi")
+ private int autoSeyHiNumber;// 自动打招呼已配置数量
+ @SerializedName("ai_gz")
+ private int autoRequestFollowNumber;//自动求关注已配置数量
+
+ public LiveAiRobotBean() {
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public int getTime() {
+ return time;
+ }
+
+ public void setTime(int time) {
+ this.time = time;
+ }
+
+ public int getAutoSeyHiNumber() {
+ return autoSeyHiNumber;
+ }
+
+ public void setAutoSeyHiNumber(int autoSeyHiNumber) {
+ this.autoSeyHiNumber = autoSeyHiNumber;
+ }
+
+ public int getAutoRequestFollowNumber() {
+ return autoRequestFollowNumber;
+ }
+
+ public void setAutoRequestFollowNumber(int autoRequestFollowNumber) {
+ this.autoRequestFollowNumber = autoRequestFollowNumber;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return "LiveAiRobotBean{" +
+ "name='" + name + '\'' +
+ ", status=" + status +
+ ", time=" + time +
+ ", autoSeyHiNumber=" + autoSeyHiNumber +
+ ", autoRequestFollowNumber=" + autoRequestFollowNumber +
+ '}';
+ }
+
+ /**
+ * 机器人消息
+ */
+ public static class Message {
+ public static final int TYPE_SAY_HI=1;//自动打招呼
+ public static final int TYPE_FOLLOW=3;//自动求关注
+ @SerializedName("id")
+ private int id;
+ @SerializedName("uid")
+ private int uid;
+ @SerializedName("type")
+ private int type;
+ @SerializedName("content")
+ private String content;
+
+ public Message() {
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public int getUid() {
+ return uid;
+ }
+
+ public void setUid(int uid) {
+ this.uid = uid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return "Message{" +
+ "id=" + id +
+ ", uid=" + uid +
+ ", type=" + type +
+ ", content='" + content + '\'' +
+ '}';
+ }
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/event/LiveRobotMessageEvent.java b/common/src/main/java/com/yunbao/common/event/LiveRobotMessageEvent.java
new file mode 100644
index 000000000..815b58813
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/event/LiveRobotMessageEvent.java
@@ -0,0 +1,16 @@
+package com.yunbao.common.event;
+
+import com.yunbao.common.bean.BaseModel;
+
+public class LiveRobotMessageEvent extends BaseModel {
+ private int index = -1;
+
+ public int getIndex() {
+ return index;
+ }
+
+ public LiveRobotMessageEvent setIndex(int index) {
+ this.index = index;
+ return this;
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/event/LiveRobotSayHelloEvent.java b/common/src/main/java/com/yunbao/common/event/LiveRobotSayHelloEvent.java
new file mode 100644
index 000000000..6e3e192a5
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/event/LiveRobotSayHelloEvent.java
@@ -0,0 +1,16 @@
+package com.yunbao.common.event;
+
+import com.yunbao.common.bean.BaseModel;
+
+public class LiveRobotSayHelloEvent extends BaseModel {
+ private int index = -1;
+
+ public int getIndex() {
+ return index;
+ }
+
+ public LiveRobotSayHelloEvent setIndex(int index) {
+ this.index = index;
+ 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 ba403f483..1edb1f6ca 100644
--- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java
+++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java
@@ -9,8 +9,10 @@ import com.yunbao.common.bean.CustomSidebarInfoModel;
import com.yunbao.common.bean.EnterRoomNewModel;
import com.yunbao.common.bean.FaceBookUpModel;
import com.yunbao.common.bean.HourRank;
+import com.yunbao.common.bean.HttpCallbackModel;
import com.yunbao.common.bean.IMLoginModel;
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.MsgSwitchDetailModel;
@@ -18,10 +20,10 @@ import com.yunbao.common.bean.NewPeopleInfo;
import com.yunbao.common.bean.NobleRankHideUserListModel;
import com.yunbao.common.bean.NobleTrumpetModel;
import com.yunbao.common.bean.PkRankBean;
-import com.yunbao.common.bean.RandomPkUserBean;
-import com.yunbao.common.bean.RankPkInfoBean;
import com.yunbao.common.bean.PrankGiftBean;
import com.yunbao.common.bean.PrankHttpTurntableBean;
+import com.yunbao.common.bean.RandomPkUserBean;
+import com.yunbao.common.bean.RankPkInfoBean;
import com.yunbao.common.bean.SearchModel;
import com.yunbao.common.bean.SetAttentsModel;
import com.yunbao.common.bean.SlideInBannerModel;
@@ -29,6 +31,7 @@ import com.yunbao.common.bean.StarChallengeStatusModel;
import com.yunbao.common.bean.VipModel;
import java.util.List;
+import java.util.Map;
import io.reactivex.Observable;
import retrofit2.http.Field;
@@ -36,6 +39,7 @@ import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
+import retrofit2.http.QueryMap;
/**
* PDLive网络接口访问
@@ -354,42 +358,51 @@ public interface PDLiveApi {
/**
* 设置随机PK开关
+ *
* @param pk 1=开,0=关
*/
@GET("/api/public/?service=Livepk.setRandomPKType")
Observable>> changeRandomPkSwitch(@Query("random_pk") int pk);
+
/**
* 获取自由PK次数
*/
@GET("/api/public/?service=Livepk.getActivePkNum")
Observable> getFreePkNumber();
+
/**
* 发起随机PK
*/
@GET("/api/public/?service=Livepk.setRandomPK")
Observable> randomPK();
+
/**
* 随机PK后调用接口给后台记录
*/
@GET("/api/public/?service=Livepk.startRandomPK")
- Observable> startRandomPK(@Query("pkuid")String pkuid);
+ Observable> startRandomPK(@Query("pkuid") String pkuid);
+
/**
* 自由PK开始后调用接口扣掉次数
*/
@GET("/api/public/?service=Livepk.setActivePkNum")
Observable> setFreePkNum();
+
/**
* 随机PK搜索用户
+ *
* @param cs 简体关键字/uid
* @param ct 繁体关键字/uid
*/
@GET("/api/public/?service=Livepk.searchUser")
- Observable>> randomPkSearchUser(@Query("jian_key")String cs,@Query("fan_key")String ct);
+ Observable>> randomPkSearchUser(@Query("jian_key") String cs, @Query("fan_key") String ct);
+
/**
* 拒绝随机PK
*/
@GET("/api/public/?service=Livepk.setBanRandomPK")
Observable> setBanRandomPK();
+
/**
* 拒绝随机PK
*/
@@ -403,6 +416,7 @@ public interface PDLiveApi {
Observable> getAnchorPrankTurntable(
@Query("anchor_id") String anchor_id
);
+
/**
* 提交整蛊
*/
@@ -418,6 +432,7 @@ public interface PDLiveApi {
@Query("turntable_six") String turntable_six,
@Query("status") String status
);
+
/**
* 转盘整蛊结束后调用的接口
*/
@@ -431,7 +446,7 @@ public interface PDLiveApi {
* 获取整蛊列表
*/
@GET("/api/public/?service=Prank.prankList")
- Observable>> prankList( @Query("anchor_id") String anchor_id);
+ Observable>> prankList(@Query("anchor_id") String anchor_id);
/**
* 设置礼物整蛊
@@ -443,6 +458,7 @@ public interface PDLiveApi {
@Query("gift_num") String gift_num,
@Query("prank_content") String prank_content
);
+
/**
* 删除礼物整蛊
*/
@@ -451,58 +467,66 @@ public interface PDLiveApi {
@Query("anchor_id") String anchor_id,
@Query("prank_index") String prank_index
);
+
/**
* 设置机器人开关
*/
@GET("/api/public/?service=Live.setAnchorAiState")
- Observable>> setAnchorAiState(
+ Observable> setAnchorAiState(
@Query("ai_state") String ai_state
);
+
/**
* 获取机器人信息
*/
@GET("/api/public/?service=Live.getAnchorAiState")
- Observable>> getAnchorAiState(
+ Observable> getAnchorAiState(
);
+
/**
* 修改机器人信息
*/
@GET("/api/public/?service=Live.setAnchorAiState")
- Observable>> getAnchorAiState(
- @Query("name") String name,
- @Query("value") String value
+ Observable> setAnchorAiState(
+ @QueryMap Map map
);
- /**
+
+ /**
* 获取机器人自定义话术
- * @param type 1(自定义打招呼) 3(自定义求关注)
+ *
+ * @param type 1(自定义打招呼) 3(自定义求关注)
*/
@GET("/api/public/?service=Live.getAiAutomaticSpeech")
- Observable>> getAiAutomaticSpeech(
+ Observable>> getAiAutomaticSpeech(
@Query("type") String type
);
+
/**
* 机器人添加话术
*/
@GET("/api/public/?service=Live.addAiAutomaticSpeech")
- Observable>> addAiAutomaticSpeech(
+ Observable>> addAiAutomaticSpeech(
@Query("type") String type,
@Query("content") String content
);
+
/**
* 机器人删除话术
*/
@GET("/api/public/?service=Live.delAiAutomaticSpeech ")
- Observable>> delAiAutomaticSpeech (
- @Query("type") String type,
- @Query("id") String id
- );
- /**
- * 机器人修改话术
- */
- @GET("/api/public/?service=Live.updateAiAutomaticSpeech ")
- Observable>> updateAiAutomaticSpeech (
+ Observable>> delAiAutomaticSpeech(
@Query("type") String type,
@Query("id") String id
);
+ /**
+ * 机器人修改话术
+ */
+ @GET("/api/public/?service=Live.updateAiAutomaticSpeech ")
+ Observable>> updateAiAutomaticSpeech(
+ @Query("type") String type,
+ @Query("id") String id,
+ @Query("content") String content
+ );
+
}
diff --git a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java
index b5ff172fb..d83668492 100644
--- a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java
+++ b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java
@@ -14,6 +14,7 @@ import com.yunbao.common.bean.EnterRoomNewModel;
import com.yunbao.common.bean.HttpCallbackModel;
import com.yunbao.common.bean.LinkMicUserBean;
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.NobleRankHideUserListModel;
@@ -21,7 +22,6 @@ import com.yunbao.common.bean.NobleTrumpetModel;
import com.yunbao.common.bean.PkRankBean;
import com.yunbao.common.bean.PrankGiftBean;
import com.yunbao.common.bean.PrankHttpTurntableBean;
-import com.yunbao.common.bean.PrankTurntableBean;
import com.yunbao.common.bean.RandomPkUserBean;
import com.yunbao.common.bean.RankPkInfoBean;
import com.yunbao.common.bean.SetAttentsModel;
@@ -33,13 +33,14 @@ import com.yunbao.common.http.base.CheckLiveCallBack;
import com.yunbao.common.http.base.HttpCallback;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
-import retrofit2.http.Query;
/**
@@ -879,7 +880,7 @@ public class LiveNetManager {
/**
* 整蛊结束
*/
- public void endPrankTurntable(String mLiveUid,HttpCallback callback){
+ public void endPrankTurntable(String mLiveUid, HttpCallback callback) {
API.get().pdLiveApi(mContext)
.endPrankTurntable(mLiveUid)
.subscribeOn(Schedulers.io())
@@ -898,6 +899,141 @@ public class LiveNetManager {
}
+ public void getAiRobotStatus(HttpCallback callback) {
+ API.get().pdLiveApi(mContext)
+ .getAnchorAiState()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(responseModel -> {
+ if (callback != null) {
+ callback.onSuccess(responseModel.getData().getInfo());
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(Throwable throwable) throws Exception {
+ if (callback != null) {
+ callback.onError(throwable.getMessage());
+ }
+ }
+ }).isDisposed();
+ }
+
+ public void setAiRobotStatus(String status, HttpCallback callback) {
+ API.get().pdLiveApi(mContext)
+ .setAnchorAiState(status)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(responseModel -> {
+ if (callback != null) {
+ callback.onSuccess(null);
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(Throwable throwable) throws Exception {
+ if (callback != null) {
+ callback.onError(throwable.getMessage());
+ }
+ }
+ }).isDisposed();
+ }
+
+ public void setAiRobotDate(String name, String value, HttpCallback callback) {
+ Map map = new HashMap<>();
+ map.put(name, value);
+ API.get().pdLiveApi(mContext)
+ .setAnchorAiState(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(responseModel -> {
+ if (callback != null) {
+ callback.onSuccess(null);
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(Throwable throwable) throws Exception {
+ if (callback != null) {
+ callback.onError(throwable.getMessage());
+ }
+ }
+ }).isDisposed();
+ }
+
+ public void getAiRobotBody(int type, HttpCallback> callback) {
+ API.get().pdLiveApi(mContext)
+ .getAiAutomaticSpeech(type + "")
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(responseModel -> {
+ if (callback != null) {
+ callback.onSuccess(responseModel.getData().getInfo());
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(Throwable throwable) throws Exception {
+ if (callback != null) {
+ callback.onError(throwable.getMessage());
+ }
+ }
+ }).isDisposed();
+ }
+
+ public void addAiRobotBody(int type, String content, HttpCallback callback) {
+ API.get().pdLiveApi(mContext)
+ .addAiAutomaticSpeech(type + "", content)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(responseModel -> {
+ if (callback != null) {
+ callback.onSuccess(new HttpCallbackModel(responseModel.getData().getCode(), responseModel.getData().getMsg()));
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(Throwable throwable) throws Exception {
+ if (callback != null) {
+ callback.onError(throwable.getMessage());
+ }
+ }
+ }).isDisposed();
+ }
+
+ public void updateAiRobotBody(int type, int id, String content, HttpCallback callback) {
+ API.get().pdLiveApi(mContext)
+ .updateAiAutomaticSpeech(type + "", id + "", content)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(responseModel -> {
+ if (callback != null) {
+ callback.onSuccess(new HttpCallbackModel(responseModel.getData().getCode(), responseModel.getData().getMsg()));
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(Throwable throwable) throws Exception {
+ if (callback != null) {
+ callback.onError(throwable.getMessage());
+ }
+ }
+ }).isDisposed();
+ }
+
+ public void delAiRobotBody(int type, int id, HttpCallback callback) {
+ API.get().pdLiveApi(mContext)
+ .delAiAutomaticSpeech(type + "", id + "")
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(responseModel -> {
+ if (callback != null) {
+ callback.onSuccess(new HttpCallbackModel(responseModel.getData().getCode(), responseModel.getData().getMsg()));
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(Throwable throwable) throws Exception {
+ if (callback != null) {
+ callback.onError(throwable.getMessage());
+ }
+ }
+ }).isDisposed();
+ }
+
/**
* 直播间取消网络请求
*/
diff --git a/common/src/main/java/com/yunbao/common/views/CustomDrawerPopupView.java b/common/src/main/java/com/yunbao/common/views/CustomDrawerPopupView.java
index e111905c0..ab2199dbd 100644
--- a/common/src/main/java/com/yunbao/common/views/CustomDrawerPopupView.java
+++ b/common/src/main/java/com/yunbao/common/views/CustomDrawerPopupView.java
@@ -127,7 +127,8 @@ public class CustomDrawerPopupView extends DrawerPopupView {
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.system_notice), new ViewClicksAntiShake.ViewClicksCallBack() {
@Override
public void onViewClicks() {
- dismiss();
+// dismiss();
+
}
diff --git a/common/src/main/java/com/yunbao/common/views/InputCustomPopup.java b/common/src/main/java/com/yunbao/common/views/InputCustomPopup.java
new file mode 100644
index 000000000..8ad8f995a
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/views/InputCustomPopup.java
@@ -0,0 +1,92 @@
+package com.yunbao.common.views;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+
+import androidx.annotation.NonNull;
+
+import com.lxj.xpopup.animator.PopupAnimator;
+import com.lxj.xpopup.core.CenterPopupView;
+import com.yunbao.common.R;
+import com.yunbao.common.utils.ToastUtil;
+
+/**
+ * 输入弹窗
+ */
+public class InputCustomPopup extends CenterPopupView {
+ private String message = "";
+
+ public InputCustomPopup(@NonNull Context context, String message) {
+ super(context);
+ this.message = message;
+ }
+
+ public InputCustomPopup(@NonNull Context context) {
+ super(context);
+ }
+
+ // 返回自定义弹窗的布局
+ @Override
+ protected int getImplLayoutId() {
+ return R.layout.input_custom_popup;
+ }
+
+ // 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑
+ @Override
+ protected void onCreate() {
+ super.onCreate();
+ EditText content = findViewById(R.id.content);
+ content.setText(message);
+ findViewById(R.id.btn_cancel).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dismiss(); // 关闭弹窗
+ }
+ });
+ findViewById(R.id.btn_confirm).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String textContent = content.getText().toString();
+ if (TextUtils.isEmpty(textContent)) {
+ ToastUtil.show("输入内容不可为空");
+ return;
+ }
+ if (listener != null) {
+ listener.onConfirm(textContent);
+ }
+ dismiss(); // 关闭弹窗
+ }
+ });
+ }
+
+ // 设置最大宽度,看需要而定,
+ @Override
+ protected int getMaxWidth() {
+ return super.getMaxWidth();
+ }
+
+ // 设置最大高度,看需要而定
+ @Override
+ protected int getMaxHeight() {
+ return super.getMaxHeight();
+ }
+
+ // 设置自定义动画器,看需要而定
+ @Override
+ protected PopupAnimator getPopupAnimator() {
+ return super.getPopupAnimator();
+ }
+
+ public interface InputCustomListener {
+ void onConfirm(String text);
+ }
+
+ private InputCustomListener listener;
+
+ public InputCustomPopup setListener(InputCustomListener listener) {
+ this.listener = listener;
+ return this;
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/views/LiveRobotMessageCustomPopup.java b/common/src/main/java/com/yunbao/common/views/LiveRobotMessageCustomPopup.java
new file mode 100644
index 000000000..953e9c7fe
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/views/LiveRobotMessageCustomPopup.java
@@ -0,0 +1,181 @@
+package com.yunbao.common.views;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.lxj.xpopup.XPopup;
+import com.lxj.xpopup.core.BottomPopupView;
+import com.yunbao.common.R;
+import com.yunbao.common.adapter.RobotMessageAdapter;
+import com.yunbao.common.bean.HttpCallbackModel;
+import com.yunbao.common.bean.LiveAiRobotBean;
+import com.yunbao.common.event.LiveRobotMessageEvent;
+import com.yunbao.common.http.base.HttpCallback;
+import com.yunbao.common.http.live.LiveNetManager;
+import com.yunbao.common.utils.Bus;
+import com.yunbao.common.utils.ToastUtil;
+
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.util.List;
+
+public class LiveRobotMessageCustomPopup extends BottomPopupView {
+ private static String TAG = "AI机器人";
+ private RecyclerView robotMessages;
+ private RobotMessageAdapter robotMessageAdapter;
+
+ private EditText robotNameSetting;
+ private TextView robotTime;
+ private String robotTimeString = "";
+
+ public LiveRobotMessageCustomPopup(@NonNull Context context, String robotTime) {
+ super(context);
+ this.robotTimeString = robotTime;
+ }
+
+ public LiveRobotMessageCustomPopup(@NonNull Context context) {
+ super(context);
+ }
+
+ // 返回自定义弹窗的布局
+ @Override
+ protected int getImplLayoutId() {
+ return R.layout.dialog_live_robot_message;
+ }
+
+ // 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑
+ @Override
+ protected void onCreate() {
+ super.onCreate();
+ Bus.getOn(this);
+ initView();
+ initDate();
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onLiveRobotMessageEvent(LiveRobotMessageEvent event) {
+ if (event.getIndex() > 0) {
+ robotMessageAdapter.removeData(event.getIndex());
+ } else {
+ initDate();
+ }
+
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ Bus.getOff(this);
+ }
+
+
+ private void initView() {
+ robotMessages = (RecyclerView) findViewById(R.id.robot_messages);
+ robotNameSetting = findViewById(R.id.robot_name_setting);
+ robotTime = findViewById(R.id.robot_time);
+ robotMessageAdapter = new RobotMessageAdapter();
+ robotMessages.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
+ robotMessages.setAdapter(robotMessageAdapter);
+ robotTime.setText(robotTimeString);
+ findViewById(R.id.bt_cancel).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dismiss();
+ }
+ });
+ robotTime.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ robotTime.setVisibility(GONE);
+ robotNameSetting.setVisibility(VISIBLE);
+ robotNameSetting.setText(robotTime.getText().toString());
+ //输入框,获取焦点 不然无法弹出键盘
+ robotNameSetting.requestFocus();
+ //键盘输入法管理器
+ InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(robotNameSetting, 0);
+ }
+ });
+ robotNameSetting.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_DONE) {
+ // 修改助手名字
+ LiveNetManager.get(getContext())
+ .setAiRobotDate("ai_time", robotNameSetting.getText().toString(), new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ robotNameSetting.setVisibility(GONE);
+ robotTime.setVisibility(VISIBLE);
+ robotTime.setText(robotNameSetting.getText().toString());
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+
+ }
+ return false;
+ }
+ });
+ //添加消息语
+ findViewById(R.id.robot_add_content).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new XPopup.Builder(getContext())
+ .asCustom(new InputCustomPopup(getContext()).setListener(new InputCustomPopup.InputCustomListener() {
+ @Override
+ public void onConfirm(String text) {
+ //添加消息语
+ LiveNetManager.get(getContext())
+ .addAiRobotBody(LiveAiRobotBean.Message.TYPE_FOLLOW, text, new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ initDate();
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+ }
+ }))
+ .show();
+ }
+ });
+ }
+
+ private void initDate() {
+
+ LiveNetManager.get(getContext())
+ .getAiRobotBody(LiveAiRobotBean.Message.TYPE_FOLLOW, new HttpCallback>() {
+ @Override
+ public void onSuccess(List data) {
+ Log.i(TAG, "onSuccess: " + data.size());
+ for (LiveAiRobotBean.Message message : data) {
+ Log.i(TAG, "onSuccess: message=" + message.toString());
+ }
+ robotMessageAdapter.setDataAll(data);
+ }
+
+ @Override
+ public void onError(String error) {
+
+ }
+ });
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/views/LiveRobotSayHelloCustomPopup.java b/common/src/main/java/com/yunbao/common/views/LiveRobotSayHelloCustomPopup.java
new file mode 100644
index 000000000..93e61f37c
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/views/LiveRobotSayHelloCustomPopup.java
@@ -0,0 +1,128 @@
+package com.yunbao.common.views;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.lxj.xpopup.XPopup;
+import com.lxj.xpopup.core.BottomPopupView;
+import com.yunbao.common.R;
+import com.yunbao.common.adapter.RobotSayHelloAdapter;
+import com.yunbao.common.bean.HttpCallbackModel;
+import com.yunbao.common.bean.LiveAiRobotBean;
+import com.yunbao.common.event.LiveRobotSayHelloEvent;
+import com.yunbao.common.http.base.HttpCallback;
+import com.yunbao.common.http.live.LiveNetManager;
+import com.yunbao.common.utils.Bus;
+import com.yunbao.common.utils.ToastUtil;
+
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.util.List;
+
+public class LiveRobotSayHelloCustomPopup extends BottomPopupView {
+ private RecyclerView robotMessages;
+ private RobotSayHelloAdapter robotMessageAdapter;
+ private static String TAG = "AI机器人";
+
+ public LiveRobotSayHelloCustomPopup(@NonNull Context context) {
+ super(context);
+ }
+
+
+ // 返回自定义弹窗的布局
+ @Override
+ protected int getImplLayoutId() {
+ return R.layout.dialog_live_robot_say_hello;
+ }
+
+ // 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑
+ @Override
+ protected void onCreate() {
+ super.onCreate();
+ Bus.getOn(this);
+ initView();
+ initDate();
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onLiveRobotSayHelloEvent(LiveRobotSayHelloEvent event) {
+ if (event.getIndex() > 0) {
+ robotMessageAdapter.removeData(event.getIndex());
+ } else {
+ initDate();
+ }
+
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ Bus.getOff(this);
+ }
+
+ private void initView() {
+ robotMessages = (RecyclerView) findViewById(R.id.robot_messages);
+ robotMessageAdapter = new RobotSayHelloAdapter();
+ robotMessages.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
+ robotMessages.setAdapter(robotMessageAdapter);
+ findViewById(R.id.bt_cancel).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dismiss();
+ }
+ });
+ //添加消息语
+ findViewById(R.id.robot_add_content).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new XPopup.Builder(getContext())
+ .asCustom(new InputCustomPopup(getContext()).setListener(new InputCustomPopup.InputCustomListener() {
+ @Override
+ public void onConfirm(String text) {
+ //添加消息语
+ LiveNetManager.get(getContext())
+ .addAiRobotBody(LiveAiRobotBean.Message.TYPE_SAY_HI, text, new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ initDate();
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+ }
+ }))
+ .show();
+ }
+ });
+ }
+
+
+ private void initDate() {
+ LiveNetManager.get(getContext())
+ .getAiRobotBody(LiveAiRobotBean.Message.TYPE_SAY_HI, new HttpCallback>() {
+ @Override
+ public void onSuccess(List data) {
+ Log.i(TAG, "onSuccess 自动打招呼 : " + data.size());
+ for (LiveAiRobotBean.Message message : data) {
+ Log.i(TAG, "onSuccess: message=" + message.toString());
+ }
+ robotMessageAdapter.setDataAll(data);
+
+ }
+
+ @Override
+ public void onError(String error) {
+
+ }
+ });
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java b/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java
new file mode 100644
index 000000000..f954a8ce7
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java
@@ -0,0 +1,269 @@
+package com.yunbao.common.views;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.widget.AppCompatTextView;
+
+import com.lxj.xpopup.XPopup;
+import com.lxj.xpopup.core.BasePopupView;
+import com.lxj.xpopup.core.BottomPopupView;
+import com.lxj.xpopup.interfaces.XPopupCallback;
+import com.yunbao.common.R;
+import com.yunbao.common.bean.HttpCallbackModel;
+import com.yunbao.common.bean.LiveAiRobotBean;
+import com.yunbao.common.http.base.HttpCallback;
+import com.yunbao.common.http.live.LiveNetManager;
+import com.yunbao.common.utils.ToastUtil;
+
+import java.util.List;
+
+public class LiveRobotSettingCustomPopup extends BottomPopupView implements View.OnClickListener {
+ private static String TAG = "AI机器人";
+ private EditText robotNameSetting;
+ private AppCompatTextView automaticGreetingNumber, automaticMessageNumber;
+ private TextView robotNameText;
+ private String time = "";
+ private ImageView robotState;
+
+ private int robotStateInt = 1;
+
+ public LiveRobotSettingCustomPopup(@NonNull Context context) {
+ super(context);
+ }
+
+ // 返回自定义弹窗的布局
+ @Override
+ protected int getImplLayoutId() {
+ return R.layout.dialog_live_robot_setting;
+ }
+
+ // 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑
+ @Override
+ protected void onCreate() {
+ super.onCreate();
+ intiView();
+ initDate();
+ }
+
+ private void intiView() {
+ robotNameSetting = findViewById(R.id.robot_name_setting);
+ robotNameText = findViewById(R.id.robot_name_text);
+ robotState = findViewById(R.id.robot_state);
+ automaticGreetingNumber = findViewById(R.id.automatic_greeting_number);
+ automaticMessageNumber = findViewById(R.id.automatic_message_number);
+ findViewById(R.id.automatic_message_sending).setOnClickListener(this);
+ findViewById(R.id.automatic_greeting_setting).setOnClickListener(this);
+ robotNameText.setOnClickListener(this);
+ robotState.setOnClickListener(this);
+
+ robotNameSetting.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_DONE) {
+ // 修改助手名字
+ LiveNetManager.get(getContext())
+ .setAiRobotDate("ai_name", robotNameSetting.getText().toString(), new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ robotNameSetting.setVisibility(GONE);
+ robotNameText.setVisibility(VISIBLE);
+ robotNameText.setText(robotNameSetting.getText().toString());
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+
+ }
+ return false;
+ }
+ });
+ }
+
+ @Override
+ public void onClick(View v) {
+ int viewID = v.getId();
+ if (viewID == R.id.automatic_message_sending) {
+ new XPopup.Builder(getContext())
+ .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) {
+ initDate();
+ }
+
+ @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 LiveRobotMessageCustomPopup(getContext(), time))
+ .show();
+ } else if (viewID == R.id.robot_name_text) {
+ robotNameText.setVisibility(GONE);
+ robotNameSetting.setVisibility(VISIBLE);
+ robotNameSetting.setText(robotNameText.getText().toString());
+ //输入框,获取焦点 不然无法弹出键盘
+ robotNameSetting.requestFocus();
+ //键盘输入法管理器
+ InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(robotNameSetting, 0);
+ } else if (viewID == R.id.robot_state) {
+ int state = 0;
+ if (robotStateInt == 1) {
+ state = 0;
+ } else {
+ state = 1;
+ }
+ // 修改助手名字
+ int finalState = state;
+ LiveNetManager.get(getContext())
+ .setAiRobotDate("ai_state", String.valueOf(state), new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ if (finalState == 1) {
+ robotState.setImageResource(R.mipmap.special_icon_on);
+ robotStateInt = 1;
+ } else {
+ robotState.setImageResource(R.mipmap.special_icon_off);
+ robotStateInt = 0;
+ }
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+ } else if (viewID == R.id.automatic_greeting_setting) {
+ new XPopup.Builder(getContext())
+ .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) {
+ initDate();
+ }
+
+ @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 LiveRobotSayHelloCustomPopup(getContext()))
+ .show();
+ }
+ }
+
+ private void initDate() {
+ LiveNetManager.get(getContext())
+ .getAiRobotStatus(new com.yunbao.common.http.base.HttpCallback() {
+ @Override
+ public void onSuccess(LiveAiRobotBean data) {
+ robotNameText.setText(data.getName());
+ automaticGreetingNumber.setText(String.valueOf(data.getAutoSeyHiNumber()));
+ automaticMessageNumber.setText(String.valueOf(data.getAutoRequestFollowNumber()));
+ time = String.valueOf(data.getTime());
+ robotStateInt = data.getStatus();
+ if (data.getStatus() == 1) {
+ robotState.setImageResource(R.mipmap.special_icon_on);
+ }
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+
+ initListType1();
+ initListType2();
+ }
+
+
+ private void initListType1() {
+
+ }
+
+ private void initListType2() {
+
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/views/RobotMessageViewHolder.java b/common/src/main/java/com/yunbao/common/views/RobotMessageViewHolder.java
new file mode 100644
index 000000000..f182a0c12
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/views/RobotMessageViewHolder.java
@@ -0,0 +1,77 @@
+package com.yunbao.common.views;
+
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.lxj.xpopup.XPopup;
+import com.yunbao.common.R;
+import com.yunbao.common.bean.HttpCallbackModel;
+import com.yunbao.common.bean.LiveAiRobotBean;
+import com.yunbao.common.event.LiveRobotMessageEvent;
+import com.yunbao.common.http.base.HttpCallback;
+import com.yunbao.common.http.live.LiveNetManager;
+import com.yunbao.common.utils.Bus;
+import com.yunbao.common.utils.ToastUtil;
+
+
+public class RobotMessageViewHolder extends RecyclerView.ViewHolder {
+ private TextView serialNumber, messageText;
+ private ImageView btnDelete;
+
+ public RobotMessageViewHolder(@NonNull View itemView) {
+ super(itemView);
+ serialNumber = itemView.findViewById(R.id.serial_number);
+ messageText = itemView.findViewById(R.id.message_text);
+ btnDelete = itemView.findViewById(R.id.btn_delete);
+ }
+
+ public void setData(LiveAiRobotBean.Message message, int index) {
+ serialNumber.setText(String.valueOf(index));
+ messageText.setText(message.getContent());
+ btnDelete.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ LiveNetManager.get(itemView.getContext())
+ .delAiRobotBody(LiveAiRobotBean.Message.TYPE_FOLLOW, message.getId(), new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ Bus.get().post(new LiveRobotMessageEvent().setIndex(index - 1));
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+ }
+ });
+ messageText.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new XPopup.Builder(itemView.getContext())
+ .asCustom(new InputCustomPopup(itemView.getContext(), message.getContent()).setListener(new InputCustomPopup.InputCustomListener() {
+ @Override
+ public void onConfirm(String text) {
+ LiveNetManager.get(itemView.getContext())
+ .updateAiRobotBody(LiveAiRobotBean.Message.TYPE_FOLLOW, message.getId(), text, new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ Bus.get().post(new LiveRobotMessageEvent());
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+ }
+ }))
+ .show();
+ }
+ });
+ }
+}
diff --git a/common/src/main/java/com/yunbao/common/views/RobotSayHelloViewHoler.java b/common/src/main/java/com/yunbao/common/views/RobotSayHelloViewHoler.java
new file mode 100644
index 000000000..359f7ba1a
--- /dev/null
+++ b/common/src/main/java/com/yunbao/common/views/RobotSayHelloViewHoler.java
@@ -0,0 +1,77 @@
+package com.yunbao.common.views;
+
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.lxj.xpopup.XPopup;
+import com.yunbao.common.R;
+import com.yunbao.common.bean.HttpCallbackModel;
+import com.yunbao.common.bean.LiveAiRobotBean;
+import com.yunbao.common.event.LiveRobotSayHelloEvent;
+import com.yunbao.common.http.base.HttpCallback;
+import com.yunbao.common.http.live.LiveNetManager;
+import com.yunbao.common.utils.Bus;
+import com.yunbao.common.utils.ToastUtil;
+
+public class RobotSayHelloViewHoler extends RecyclerView.ViewHolder {
+ private TextView serialNumber, messageText;
+ private ImageView btnDelete;
+
+ public RobotSayHelloViewHoler(@NonNull View itemView) {
+ super(itemView);
+ serialNumber = itemView.findViewById(R.id.serial_number);
+ messageText = itemView.findViewById(R.id.message_text);
+ btnDelete = itemView.findViewById(R.id.btn_delete);
+ }
+
+
+ public void setData(LiveAiRobotBean.Message message, int index) {
+ serialNumber.setText(String.valueOf(index));
+ messageText.setText(message.getContent());
+ btnDelete.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ LiveNetManager.get(itemView.getContext())
+ .delAiRobotBody(LiveAiRobotBean.Message.TYPE_SAY_HI, message.getId(), new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ Bus.get().post(new LiveRobotSayHelloEvent().setIndex(index - 1));
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+ }
+ });
+ messageText.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new XPopup.Builder(itemView.getContext())
+ .asCustom(new InputCustomPopup(itemView.getContext(), message.getContent()).setListener(new InputCustomPopup.InputCustomListener() {
+ @Override
+ public void onConfirm(String text) {
+ LiveNetManager.get(itemView.getContext())
+ .updateAiRobotBody(LiveAiRobotBean.Message.TYPE_SAY_HI, message.getId(), text, new HttpCallback() {
+ @Override
+ public void onSuccess(HttpCallbackModel data) {
+ Bus.get().post(new LiveRobotSayHelloEvent());
+ }
+
+ @Override
+ public void onError(String error) {
+ ToastUtil.show(error);
+ }
+ });
+ }
+ }))
+ .show();
+ }
+ });
+ }
+}
diff --git a/common/src/main/res/drawable/background_81c16d.xml b/common/src/main/res/drawable/background_81c16d.xml
new file mode 100644
index 000000000..c089906d7
--- /dev/null
+++ b/common/src/main/res/drawable/background_81c16d.xml
@@ -0,0 +1,9 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/live/src/main/res/drawable/bg_prank_coin.xml b/common/src/main/res/drawable/bg_prank_coin.xml
similarity index 100%
rename from live/src/main/res/drawable/bg_prank_coin.xml
rename to common/src/main/res/drawable/bg_prank_coin.xml
diff --git a/common/src/main/res/drawable/bg_robot_shape.xml b/common/src/main/res/drawable/bg_robot_shape.xml
new file mode 100644
index 000000000..24885134c
--- /dev/null
+++ b/common/src/main/res/drawable/bg_robot_shape.xml
@@ -0,0 +1,10 @@
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/src/main/res/drawable/icon_robot.png b/common/src/main/res/drawable/icon_robot.png
new file mode 100644
index 000000000..aa0d8b457
Binary files /dev/null and b/common/src/main/res/drawable/icon_robot.png differ
diff --git a/common/src/main/res/layout/custom_drawer_popup.xml b/common/src/main/res/layout/custom_drawer_popup.xml
index d80a71d15..bd90dcbb5 100644
--- a/common/src/main/res/layout/custom_drawer_popup.xml
+++ b/common/src/main/res/layout/custom_drawer_popup.xml
@@ -108,7 +108,7 @@
+
+
+
+
+
+
+
diff --git a/common/src/main/res/layout/dialog_live_robot_message.xml b/common/src/main/res/layout/dialog_live_robot_message.xml
new file mode 100644
index 000000000..ef60a75bc
--- /dev/null
+++ b/common/src/main/res/layout/dialog_live_robot_message.xml
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/src/main/res/layout/dialog_live_robot_say_hello.xml b/common/src/main/res/layout/dialog_live_robot_say_hello.xml
new file mode 100644
index 000000000..0dc1bda30
--- /dev/null
+++ b/common/src/main/res/layout/dialog_live_robot_say_hello.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/src/main/res/layout/dialog_live_robot_setting.xml b/common/src/main/res/layout/dialog_live_robot_setting.xml
new file mode 100644
index 000000000..0cedd53b9
--- /dev/null
+++ b/common/src/main/res/layout/dialog_live_robot_setting.xml
@@ -0,0 +1,266 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/src/main/res/layout/input_custom_popup.xml b/common/src/main/res/layout/input_custom_popup.xml
new file mode 100644
index 000000000..a7d7aeabb
--- /dev/null
+++ b/common/src/main/res/layout/input_custom_popup.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/src/main/res/layout/view_robot_message.xml b/common/src/main/res/layout/view_robot_message.xml
new file mode 100644
index 000000000..7a85c2a32
--- /dev/null
+++ b/common/src/main/res/layout/view_robot_message.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/src/main/res/mipmap-xxhdpi/icon_close.png b/common/src/main/res/mipmap-xxhdpi/icon_close.png
new file mode 100644
index 000000000..7842d906a
Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_close.png differ
diff --git a/common/src/main/res/mipmap-xxhdpi/icon_robot.png b/common/src/main/res/mipmap-xxhdpi/icon_robot.png
new file mode 100644
index 000000000..aa0d8b457
Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_robot.png differ
diff --git a/common/src/main/res/mipmap-xxhdpi/icon_tip.png b/common/src/main/res/mipmap-xxhdpi/icon_tip.png
new file mode 100644
index 000000000..d5b68983e
Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_tip.png differ
diff --git a/common/src/main/res/mipmap-xxhdpi/live_more_icon_robot.png b/common/src/main/res/mipmap-xxhdpi/live_more_icon_robot.png
new file mode 100644
index 000000000..bba2b0662
Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/live_more_icon_robot.png differ
diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml
index 2e408f8e0..b0b723181 100644
--- a/common/src/main/res/values/strings.xml
+++ b/common/src/main/res/values/strings.xml
@@ -978,4 +978,22 @@
拒绝
坚持拒绝
随机PK提示
+
+ 自動發言機器人設置
+ 機器人開關
+ 機器人名字設置
+ 字數限制2-8個字
+ 自動打招呼設置
+ 已配置條數
+ 自動發消息設置
+ 前往設置
+ 感謝送禮、PK開始、PK結束的自動機器人消息,\n暫不支持自定義。
+ 添加內容
+ 每隔一段時間,機器人自動隨機以下一句話發出。
+ 填寫內容推薦,如:求送心願單、加粉絲團等
+ 自動發言間隔時間(分鐘)
+ 最少間隔5分鐘1次
+ 當有用戶進入直播間時,機器人會@該用戶並自動
+ 隨機以下一句話。最少設置1條,最多20條。
+ 機器人設置
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 ae79b5bb8..8a46d8030 100644
--- a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java
+++ b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java
@@ -34,6 +34,7 @@ import com.alibaba.fastjson.JSONObject;
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.opensource.svgaplayer.SVGAImageView;
import com.tencent.trtc.TRTCCloudDef;
import com.yunbao.common.CommonAppConfig;
@@ -66,13 +67,13 @@ import com.yunbao.common.utils.ScreenDimenUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
+import com.yunbao.common.views.LiveRobotSettingCustomPopup;
import com.yunbao.faceunity.FaceManager;
import com.yunbao.live.R;
import com.yunbao.live.bean.LiveGuardInfo;
import com.yunbao.live.bean.LiveKsyConfigBean;
import com.yunbao.live.bean.LiveReceiveGiftBean;
import com.yunbao.live.dialog.FreePkDialogFragment;
-import com.yunbao.live.dialog.LiveLinkMicListDialogFragment;
import com.yunbao.live.dialog.LiveNewFunctionDialogFragment;
import com.yunbao.live.dialog.LiveNewWishListDialogFragment;
import com.yunbao.live.dialog.LivePrankDialogFragment;
@@ -281,6 +282,11 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl
@Override
public void onClick(int functionID) {
switch (functionID) {
+ case Constants.LIVE_ROBOT:
+ new XPopup.Builder(mContext)
+ .asCustom(new LiveRobotSettingCustomPopup(mContext))
+ .show();
+ break;
case Constants.LIVE_FUNC_ZG://zg
// ToastUtil.show("開發中,敬請期待");
LivePrankDialogFragment fragment = new LivePrankDialogFragment();
diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java b/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java
index d0020fde6..27341f9d0 100644
--- a/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java
+++ b/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java
@@ -47,6 +47,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
/**
* Created by cxf on 2018/10/10.
@@ -127,7 +128,7 @@ public class LiveChatAdapter extends RecyclerView.Adapter {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
- if (isSlideToBottom(recyclerView)) return;
+ if (isSlideToBottom(recyclerView) || dy == 0) return;
mRecyclerViewScrolledDy = dy;
}
});
@@ -379,16 +380,23 @@ public class LiveChatAdapter extends RecyclerView.Adapter {
@SuppressLint("NotifyDataSetChanged")
public void insertItem(LiveChatBean bean) {
-
if (bean == null) {
return;
}
+ // Log.i(TAG, "insertItem: " + bean.getContent());
int size = mList.size();
//设置最大展示99条消息
if (size == 100) {
- mList.remove(0);
+ mList.subList(0, 50).clear();
+ notifyItemRangeRemoved(0, 50);
}
mList.add(bean);
+ if (getItemCount() == 1) {
+ notifyDataSetChanged();
+ } else {
+ notifyItemInserted(getItemCount());
+ }
+ size = mList.size();
if (isSlideToBottom(mRecyclerView) || mRecyclerViewScrolledDy == 0) {
scrollToBottom();
} else {
@@ -401,11 +409,7 @@ public class LiveChatAdapter extends RecyclerView.Adapter {
mPosition = size;
}
}
- if (getItemCount() == 1) {
- notifyDataSetChanged();
- } else {
- notifyItemInserted(getItemCount());
- }
+
}
@@ -447,6 +451,7 @@ public class LiveChatAdapter extends RecyclerView.Adapter {
}
public void scrollToBottom() {
+ mRecyclerViewScrolledDy = 0;
if (mList.size() > 0) {
mRecyclerView.smoothScrollToPosition(getItemCount() - 1);
}
diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveChatRecyclerViewLayoutManager.java b/live/src/main/java/com/yunbao/live/adapter/LiveChatRecyclerViewLayoutManager.java
new file mode 100644
index 000000000..fdd546e65
--- /dev/null
+++ b/live/src/main/java/com/yunbao/live/adapter/LiveChatRecyclerViewLayoutManager.java
@@ -0,0 +1,40 @@
+package com.yunbao.live.adapter;
+
+import android.content.Context;
+import android.graphics.PointF;
+import android.util.DisplayMetrics;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.LinearSmoothScroller;
+import androidx.recyclerview.widget.RecyclerView;
+
+public class LiveChatRecyclerViewLayoutManager extends LinearLayoutManager {
+ private static final float MILLISECONDS_PER_INCH = 200f;
+ public LiveChatRecyclerViewLayoutManager(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
+ // super.smoothScrollToPosition(recyclerView, state, position);
+ LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext())
+ {
+
+ @Nullable
+ @Override
+ public PointF computeScrollVectorForPosition(int targetPosition) {
+ return LiveChatRecyclerViewLayoutManager.this.computeScrollVectorForPosition(targetPosition);
+ }
+
+ @Override
+ protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
+ // System.out.println("----->自定义滑动 = "+MILLISECONDS_PER_INCH+" > "+( MILLISECONDS_PER_INCH / displayMetrics.densityDpi));
+ return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
+ }
+
+ };
+ linearSmoothScroller.setTargetPosition(position);
+ startSmoothScroll(linearSmoothScroller);
+ }
+}
diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveNewFunctionDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/LiveNewFunctionDialogFragment.java
index 364ea23fd..48e7168ef 100644
--- a/live/src/main/java/com/yunbao/live/dialog/LiveNewFunctionDialogFragment.java
+++ b/live/src/main/java/com/yunbao/live/dialog/LiveNewFunctionDialogFragment.java
@@ -92,6 +92,7 @@ public class LiveNewFunctionDialogFragment extends AbsDialogFragment implements
mMultiPkView.setOnClickListener(this);
mMicView.setOnClickListener(this);
mRandomPk.setOnClickListener(this);
+ findViewById(R.id.live_tool_robot).setOnClickListener(this);
if (leave == 0) {
((ImageView) mLeaveView.findViewById(R.id.live_tool_leave_img)).setImageResource(R.mipmap.icon_leave);
@@ -145,6 +146,9 @@ public class LiveNewFunctionDialogFragment extends AbsDialogFragment implements
mFunctionClickListener.onClick(LIVE_FUNC_MIC);
} else if (id == R.id.live_tool_random_pk) {
mFunctionClickListener.onClick(LIVE_FUNC_RANDOM_PK);
+ }else if (id==R.id.live_tool_robot){
+ mFunctionClickListener.onClick(LIVE_ROBOT);
+ dismiss();
}
}
}
diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java
index 13eeae167..05c020c6a 100644
--- a/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java
+++ b/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java
@@ -3,21 +3,18 @@ package com.yunbao.live.dialog;
import android.app.ActionBar;
import android.os.Bundle;
import android.view.Gravity;
-import android.view.View;
import android.view.Window;
import android.view.WindowManager;
-import com.yunbao.common.dialog.AbsDialogFragment;
-import com.yunbao.common.utils.DpUtil;
-import com.yunbao.live.R;
-
import androidx.annotation.Nullable;
+import com.yunbao.common.dialog.AbsDialogFragment;
+import com.yunbao.live.R;
+
/**
* 机器人设置
*/
-public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements View.OnClickListener {
-
+public class LiveRobotSettingDialogFragment extends AbsDialogFragment {
@Override
@@ -39,24 +36,15 @@ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements
protected void setWindowAttributes(Window window) {
WindowManager.LayoutParams params = window.getAttributes();
params.width = ActionBar.LayoutParams.MATCH_PARENT;
- params.height = DpUtil.dp2px(460);
+ params.height = ActionBar.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.BOTTOM;
window.setAttributes(params);
}
+
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- Bundle bundle = getArguments();
- if (bundle == null) {
- return;
- }
-
- }
-
- @Override
- public void onClick(View v) {
- dismiss();
}
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 ecdbdcd42..57be40428 100644
--- a/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java
+++ b/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java
@@ -2,7 +2,6 @@ package com.yunbao.live.views;
import android.app.Dialog;
import android.content.Context;
-import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
@@ -17,13 +16,13 @@ import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
+import com.lxj.xpopup.XPopup;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
import com.yunbao.common.bean.LiveClassBean;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.HttpCallback;
-import com.yunbao.common.interfaces.ActivityResultCallback;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.interfaces.ImageResultCallback;
import com.yunbao.common.utils.DialogUitl;
@@ -33,9 +32,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.LiveRobotSettingCustomPopup;
import com.yunbao.faceunity.FaceManager;
import com.yunbao.live.R;
-import com.yunbao.live.activity.Beauty360Activity3;
import com.yunbao.live.activity.LiveActivity;
import com.yunbao.live.activity.LiveRyAnchorActivity;
import com.yunbao.live.bean.LiveRoomTypeBean;
@@ -160,6 +159,7 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl
findViewById(R.id.btn_live_class).setOnClickListener(this);
findViewById(R.id.btn_close).setOnClickListener(this);
findViewById(R.id.btn_beauty).setOnClickListener(this);
+ findViewById(R.id.btn_robot).setOnClickListener(this);
findViewById(R.id.btn_start_live).setOnClickListener(this);
findViewById(R.id.btn_wishlist).setOnClickListener(this);
findViewById(R.id.btn_horizontally).setOnClickListener(this);
@@ -218,6 +218,10 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl
} else if (i == R.id.btn_horizontally) {
RCRTCCameraOutputStream cameraStream = RCRTCEngine.getInstance().getDefaultVideoStream();
cameraStream.setPreviewMirror(!cameraStream.isPreviewMirror());
+ } else if (i == R.id.btn_robot) {
+ new XPopup.Builder(mContext)
+ .asCustom(new LiveRobotSettingCustomPopup(mContext))
+ .show();
}
}
diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java
index 4bb78c38c..8ec1f59c2 100644
--- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java
+++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java
@@ -36,6 +36,7 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.SimpleItemAnimator;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
@@ -115,6 +116,7 @@ import com.yunbao.live.activity.LiveAudienceActivity;
import com.yunbao.live.activity.LiveRyAnchorActivity;
import com.yunbao.live.activity.ZhuangBanActivity;
import com.yunbao.live.adapter.LiveChatAdapter;
+import com.yunbao.live.adapter.LiveChatRecyclerViewLayoutManager;
import com.yunbao.live.adapter.LiveRoomFastMessageRecyclerViewAdapter;
import com.yunbao.live.adapter.LiveUserAdapter;
import com.yunbao.live.bean.DrPkbean;
@@ -867,11 +869,54 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
mChatRecyclerView.setLayoutParams(params1);
mChatRecyclerView.setHasFixedSize(true);
- LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
+ LinearLayoutManager layoutManager = new LiveChatRecyclerViewLayoutManager(mContext);
layoutManager.setStackFromEnd(true);
mChatRecyclerView.setLayoutManager(layoutManager);
mChatRecyclerView.addItemDecoration(new TopGradual());
mChatRecyclerView.setItemViewCacheSize(10);
+ mChatRecyclerView.setItemAnimator(new SimpleItemAnimator() {
+ @Override
+ public boolean animateRemove(RecyclerView.ViewHolder holder) {
+ return false;
+ }
+
+ @Override
+ public boolean animateAdd(RecyclerView.ViewHolder holder) {
+ Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.live_chat_msg_in);
+ holder.itemView.startAnimation(animation);
+ return false;
+ }
+
+ @Override
+ public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) {
+ return false;
+ }
+
+ @Override
+ public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) {
+ return false;
+ }
+
+ @Override
+ public void runPendingAnimations() {
+
+ }
+
+ @Override
+ public void endAnimation(@NonNull RecyclerView.ViewHolder item) {
+
+ }
+
+ @Override
+ public void endAnimations() {
+
+ }
+
+ @Override
+ public boolean isRunning() {
+ return false;
+ }
+ });
mLiveChatAdapter = new LiveChatAdapter(mContext);
mChatRecyclerView.setAdapter(mLiveChatAdapter);
mLiveChatAdapter.setOnItemClickListener(new OnItemClickListener() {
@@ -927,6 +972,39 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
mViewMedal.setOnClickListener(this);
findViewById(R.id.btn_close).setOnClickListener(this);
mAvatar.setOnClickListener(this);
+ /*//点击侧边消息按钮,自动发消息,测试用的
+ msg.setOnClickListener(new View.OnClickListener() {
+ long index = 0;
+
+ public TimerTask createTask() {
+ return new TimerTask() {
+ @Override
+ public void run() {
+ LiveChatBean bean = new LiveChatBean();
+ bean.setContent("test msg = " + index++);
+ bean.setUserNiceName("auto");
+ handler.post(() -> mLiveChatAdapter.insertItem(bean));
+ }
+ };
+ }
+
+ Handler handler = new Handler(Looper.getMainLooper());
+ private TimerTask task;
+
+ @Override
+ public void onClick(View v) {
+ if (task == null) {
+ task = createTask();
+ new Timer().schedule(task, 0, 1000);
+ } else {
+ task.cancel();
+ task = null;
+ }
+ }
+ });
+ userMore.setOnClickListener(v -> {
+ mLiveChatAdapter.scrollToBottom();
+ });*/
findViewById(R.id.btn_votes).setOnClickListener(this);
findViewById(R.id.btn_medal_rank).setOnClickListener(this);
findViewById(R.id.btn_noble).setOnClickListener(this);
@@ -3721,6 +3799,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
* 展示新消息提示
*/
public void showNewMessage() {
+ if (newMessage.getVisibility() == View.VISIBLE) return;
Locale locale = mContext.getResources().getConfiguration().locale;
String language = locale.getLanguage();
ImgLoader.display(mContext, TextUtils.equals(language, "zh") ? R.mipmap.new_message_cn : R.mipmap.new_message_en, newMessage);
diff --git a/live/src/main/res/anim/live_chat_msg_in.xml b/live/src/main/res/anim/live_chat_msg_in.xml
new file mode 100644
index 000000000..8042381e2
--- /dev/null
+++ b/live/src/main/res/anim/live_chat_msg_in.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/live/src/main/res/layout/dialog_live_robot_setting.xml b/live/src/main/res/layout/dialog_live_robot_setting.xml
deleted file mode 100644
index d7ba7721e..000000000
--- a/live/src/main/res/layout/dialog_live_robot_setting.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
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 9d2a0de5d..98af6cebf 100644
--- a/live/src/main/res/layout/view_new_live_ready.xml
+++ b/live/src/main/res/layout/view_new_live_ready.xml
@@ -1,8 +1,6 @@
-
@@ -254,13 +252,23 @@
android:id="@+id/faceTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="#FFFFFF"
- android:visibility="gone"
- android:textSize="16sp"
android:text=""
+ android:textColor="#FFFFFF"
+ android:textSize="16sp"
+ android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
\ No newline at end of file
diff --git a/live/src/main/res/mipmap-xxxhdpi/icon_back.png b/live/src/main/res/mipmap-xxxhdpi/icon_back.png
new file mode 100644
index 000000000..a55b3ebf7
Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/icon_back.png differ